From 7f3b633aa0332b8a1ddc61b6d4e2e34fc6dd5522 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sat, 5 May 2018 18:00:51 +0200 Subject: [PATCH] Convert site to Hugo (#8316) This commit converts content and layout to use Hugo. --- .gitignore | 6 +- .travis.yml | 6 +- 404.md | 11 - Gemfile | 53 - Gemfile.lock | 183 - Makefile | 16 +- _config.yml | 99 - _data/glossary/kk.yaml | 8 - _includes/CommunityHangout/Apr3.html | 227 - _includes/CommunityHangout/Mar27.html | 176 - _includes/code.html | 26 - _includes/deprecation-warning.html | 12 - _includes/feature-state-deprecated.md | 6 - _includes/feature-state-stable.md | 10 - _includes/head.html | 38 - _includes/header.html | 54 - _includes/tabs.md | 15 - _includes/tag-map.md | 15 - _includes/templates/_errorthrower.md | 16 - _includes/templates/concept-overview.md | 88 - _includes/templates/concept.md | 32 - _includes/templates/glossary/README.md | 66 - _includes/templates/glossary/_error.md | 10 - _includes/templates/glossary/snippet.md | 29 - _includes/templates/kubectl.md | 37 - _includes/templates/task.md | 55 - _includes/templates/tutorial.md | 68 - _includes/templates/user-journey-content.md | 26 - _includes/tocsearch.html | 20 - _includes/tree.html | 25 - _includes/youtubePlayer.html | 1 - _layouts/basic.html | 15 - _layouts/blog.html | 192 - _layouts/docsportal.html | 66 - _layouts/docwithnav.html | 83 - _layouts/none.html | 1 - _plugins/README.md | 78 - _plugins/glossary_tags.rb | 129 - _plugins/liquify_filter.rb | 10 - _sass/_code-styles.sass | 199 - archetypes/default.md | 6 + ...0-Kubernetes-Community-Meeting-Notes_28.md | 67 - blog/index.html | 28 - cn/README.md | 18 - cn/_includes/code.html | 26 - cn/_includes/task-tutorial-prereqs.md | 4 - cn/_includes/templates/concept.md | 32 - cn/_includes/templates/task.md | 55 - cn/_includes/templates/tutorial.md | 68 - cn/_includes/user-guide-content-moved.md | 2 - .../inject-data-application/podpreset.md | 124 - config.toml | 111 + {cn/docs => content}/.gitkeep | 0 cn/index.html => content/cn/_index.html | 167 +- .../FETCH_HEAD => content/cn/docs/.gitkeep | 0 content/cn/docs/_index.md | 4 + .../cn}/docs/admin/accessing-the-api.md | 0 .../cn/docs/admin/authorization/_index.md | 15 +- .../cn}/docs/admin/authorization/abac.md | 13 +- .../cn}/docs/admin/authorization/webhook.md | 11 +- .../cn}/docs/admin/bootstrap-tokens.md | 3 +- .../cn}/docs/admin/cluster-large.md | 20 +- {cn => content/cn}/docs/admin/daemon.yaml | 0 .../cn/docs/admin/high-availability/_index.md | 5 +- .../cn}/docs/admin/kube-apiserver.md | 0 .../kubelet-authentication-authorization.md | 3 +- .../docs/admin/kubelet-tls-bootstrapping.md | 3 +- .../cn}/docs/admin/multiple-zones.md | 5 +- .../cn}/docs/admin/node-conformance.md | 4 +- .../cn}/docs/admin/ovs-networking.md | 0 .../cn}/docs/admin/service-accounts-admin.md | 0 .../concepts/architecture/cloud-controller.md | 0 .../architecture/master-node-communication.md | 3 +- .../cn}/docs/concepts/architecture/nodes.md | 5 +- .../concepts/cluster-administration/addons.md | 0 .../cluster-administration/certificates.md | 3 +- .../cluster-administration/cloud-providers.md | 11 +- .../cluster-administration-overview.md | 11 +- .../cluster-administration/device-plugins.md | 17 +- .../cluster-administration/federation.md | 17 +- .../cluster-administration/proxies.md | 11 +- .../cluster-administration/sysctl-cluster.md | 5 +- .../docs/concepts/configuration/commands.yaml | 0 .../manage-compute-resources-container.md | 29 +- .../configuration/pod-with-node-affinity.yaml | 0 .../configuration/pod-with-pod-affinity.yaml | 0 .../cn}/docs/concepts/configuration/pod.yaml | 0 .../cn}/docs/concepts/configuration/secret.md | 3 +- .../container-environment-variables.md | 19 +- .../cn}/docs/concepts/containers/images.md | 13 +- .../docs/concepts/example-concept-template.md | 15 +- .../cn}/docs/concepts/overview/components.md | 11 +- .../docs/concepts/overview/kubernetes-api.md | 0 .../concepts/overview/what-is-kubernetes.md | 2 +- .../kubernetes-objects.md | 17 +- .../nginx-deployment.yaml | 0 .../concepts/policy/pod-security-policy.md | 5 +- .../cn}/docs/concepts/policy/psp.yaml | 0 .../docs/concepts/policy/resource-quotas.md | 0 ...ries-to-pod-etc-hosts-with-host-aliases.md | 5 +- .../connect-applications-service.md | 21 +- .../concepts/services-networking/curlpod.yaml | 0 .../services-networking/dns-pod-service.md | 4 +- .../services-networking/hostaliases-pod.yaml | 0 .../concepts/services-networking/ingress.yaml | 0 .../services-networking/network-policies.md | 5 +- .../services-networking/nginx-secure-app.yaml | 0 .../services-networking/nginx-svc.yaml | 0 .../services-networking/run-my-nginx.yaml | 0 .../concepts/services-networking/service.md | 9 +- .../workloads/controllers/cron-jobs.md | 3 +- .../workloads/controllers/daemonset.md | 3 +- .../workloads/controllers/daemonset.yaml | 0 .../workloads/controllers/deployment.md | 50 +- .../workloads/controllers/frontend.yaml | 0 .../controllers/garbage-collection.md | 17 +- .../workloads/controllers/hpa-rs.yaml | 0 .../concepts/workloads/controllers/job.yaml | 0 .../workloads/controllers/my-repset.yaml | 0 .../controllers/nginx-deployment.yaml | 0 .../workloads/controllers/replication.yaml | 0 .../workloads/pods/init-containers.md | 17 +- .../concepts/workloads/pods/pod-lifecycle.md | 15 +- .../docs/concepts/workloads/pods/podpreset.md | 24 +- .../reference/labels-annotations-taints.md | 0 ...icate-containers-same-pod-shared-volume.md | 31 +- .../configure-access-multiple-clusters.md | 24 +- .../configure-cloud-provider-firewall.md | 0 .../connecting-frontend-backend.md | 33 +- .../access-application-cluster/frontend.yaml | 0 .../frontend/frontend.conf | 0 .../hello-service.yaml | 0 .../access-application-cluster/hello.yaml | 0 .../redis-master.yaml | 0 .../two-container-pod.yaml | 0 .../access-cluster-services.md | 17 +- .../apply-resource-quota-limit.md | 21 +- .../calico-network-policy.md | 23 +- .../change-default-storage-class.md | 21 +- .../change-pv-reclaim-policy.md | 27 +- .../administer-cluster/cluster-management.md | 3 +- .../cpu-constraints-pod-2.yaml | 0 .../cpu-constraints-pod-3.yaml | 0 .../cpu-constraints-pod-4.yaml | 0 .../cpu-constraints-pod.yaml | 0 .../administer-cluster/cpu-constraints.yaml | 0 .../cpu-defaults-pod-2.yaml | 0 .../cpu-defaults-pod-3.yaml | 0 .../administer-cluster/cpu-defaults-pod.yaml | 0 .../administer-cluster/cpu-defaults.yaml | 0 .../cpu-management-policies.md | 12 +- .../administer-cluster/cpu-memory-limit.md | 25 +- .../declare-network-policy.md | 15 +- .../dns-custom-nameservers.md | 21 +- .../dns-horizontal-autoscaler.yaml | 0 ...aranteed-scheduling-critical-addon-pods.md | 3 +- .../administer-cluster/kubelet-config-file.md | 21 +- .../memory-constraints-pod-2.yaml | 0 .../memory-constraints-pod-3.yaml | 0 .../memory-constraints-pod-4.yaml | 0 .../memory-constraints-pod.yaml | 0 .../memory-constraints.yaml | 0 .../memory-defaults-pod-2.yaml | 0 .../memory-defaults-pod-3.yaml | 0 .../memory-defaults-pod.yaml | 0 .../administer-cluster/memory-defaults.yaml | 0 .../administer-cluster/my-scheduler.yaml | 0 .../docs/tasks/administer-cluster/pod1.yaml | 0 .../docs/tasks/administer-cluster/pod2.yaml | 0 .../docs/tasks/administer-cluster/pod3.yaml | 0 .../quota-mem-cpu-pod-2.yaml | 0 .../administer-cluster/quota-mem-cpu-pod.yaml | 0 .../administer-cluster/quota-mem-cpu.yaml | 0 .../quota-objects-pvc-2.yaml | 0 .../administer-cluster/quota-objects-pvc.yaml | 0 .../administer-cluster/quota-objects.yaml | 0 .../quota-pod-deployment.yaml | 0 .../administer-cluster/quota-pod-namespace.md | 24 +- .../tasks/administer-cluster/quota-pod.yaml | 0 .../tasks/administer-cluster/quota-pvc-2.yaml | 0 .../romana-network-policy.md | 19 +- .../tasks/administer-cluster/static-pod.md | 0 .../weave-network-policy.md | 19 +- .../cpu-request-limit-2.yaml | 0 .../cpu-request-limit.yaml | 0 .../exec-liveness.yaml | 0 .../http-liveness.yaml | 0 .../init-containers.yaml | 0 .../lifecycle-events.yaml | 0 .../mem-limit-range.yaml | 0 .../memory-request-limit-2.yaml | 0 .../memory-request-limit-3.yaml | 0 .../memory-request-limit.yaml | 0 .../configure-pod-container/oir-pod-2.yaml | 0 .../configure-pod-container/oir-pod.yaml | 0 .../opaque-integer-resource.md | 27 +- .../configure-pod-container/pod-redis.yaml | 0 .../tasks/configure-pod-container/pod.yaml | 0 .../private-reg-pod.yaml | 0 .../projected-volume.yaml | 0 .../configure-pod-container/qos-pod-2.yaml | 0 .../configure-pod-container/qos-pod-3.yaml | 0 .../configure-pod-container/qos-pod-4.yaml | 0 .../configure-pod-container/qos-pod.yaml | 0 .../rq-compute-resources.yaml | 0 .../security-context-2.yaml | 0 .../security-context-3.yaml | 0 .../security-context-4.yaml | 0 .../security-context.yaml | 0 .../task-pv-claim.yaml | 0 .../configure-pod-container/task-pv-pod.yaml | 0 .../task-pv-volume.yaml | 0 .../tcp-liveness-readiness.yaml | 0 .../debug-application.md | 3 +- .../debug-cluster.md | 0 .../debug-pod-replication-controller.md | 3 +- .../debug-stateful-set.md | 19 +- .../inject-data-application/commands.yaml | 0 .../dapi-envars-container.yaml | 0 .../dapi-envars-pod.yaml | 0 .../dapi-volume-resources.yaml | 0 .../inject-data-application/dapi-volume.yaml | 0 .../define-command-argument-container.md | 28 +- .../define-environment-variable-container.md | 25 +- .../distribute-credentials-secure.md | 38 +- ...nward-api-volume-expose-pod-information.md | 47 +- .../tasks/inject-data-application/envars.yaml | 0 ...ronment-variable-expose-pod-information.md | 48 +- .../podpreset-allow-db-merged.yaml | 0 .../podpreset-allow-db.yaml | 0 .../podpreset-configmap.yaml | 0 .../podpreset-conflict-pod.yaml | 0 .../podpreset-conflict-preset.yaml | 0 .../podpreset-merged.yaml | 0 .../podpreset-multi-merged.yaml | 0 .../podpreset-pod.yaml | 0 .../podpreset-preset.yaml | 0 .../podpreset-proxy.yaml | 0 .../podpreset-replicaset-merged.yaml | 0 .../podpreset-replicaset.yaml | 0 .../inject-data-application/podpreset.md | 123 + .../secret-envars-pod.yaml | 0 .../inject-data-application/secret-pod.yaml | 0 .../tasks/inject-data-application/secret.yaml | 0 .../manage-daemon/rollback-daemon-set.md | 19 +- .../docs/tasks/manage-gpus/scheduling-gpus.md | 15 +- .../manage-hugepages/scheduling-hugepages.md | 17 +- .../deployment-patch-demo.yaml | 0 .../run-application/deployment-scale.yaml | 0 .../run-application/deployment-update.yaml | 0 .../tasks/run-application/deployment.yaml | 0 .../tasks/run-application/gce-volume.yaml | 0 .../run-application/mysql-configmap.yaml | 0 .../run-application/mysql-deployment.yaml | 0 .../tasks/run-application/mysql-services.yaml | 0 .../run-application/mysql-statefulset.yaml | 0 .../rolling-update-replication-controller.md | 5 +- ...un-single-instance-stateful-application.md | 29 +- .../run-stateless-application-deployment.md | 31 +- .../run-application/scale-stateful-set.md | 19 +- .../docs/tasks/tls/certificate-rotation.md | 15 +- content/cn/docs/templates/index.md | 3 + .../configure-redis-using-configmap.md | 25 +- .../tutorials/kubernetes-basics/_index.html | 1 + .../cluster-interactive.html | 0 .../kubernetes-basics/cluster-intro.html | 0 .../kubernetes-basics/deploy-interactive.html | 0 .../kubernetes-basics/deploy-intro.html | 0 .../explore-interactive.html | 0 .../kubernetes-basics/explore-intro.html | 0 .../kubernetes-basics/expose-interactive.html | 0 .../kubernetes-basics/expose-intro.html | 0 .../kubernetes-basics/scale-interactive.html | 0 .../kubernetes-basics/scale-intro.html | 0 .../kubernetes-basics/update-interactive.html | 0 .../kubernetes-basics/update-intro.html | 0 .../imperative-object-management-command.md | 19 +- .../object-management.md | 19 +- .../cn}/docs/tutorials/services/source-ip.md | 29 +- .../tutorials/stateful-application/Dockerfile | 0 .../tutorials/stateful-application/FETCH_HEAD | 0 .../basic-stateful-set.md | 71 +- .../cassandra-service.yaml | 0 .../cassandra-statefulset.yaml | 0 .../stateful-application/cassandra.md | 0 .../docs/tutorials/stateful-application/dev | 0 .../mysql-wordpress-persistent-volume.md | 0 .../local-volumes.yaml | 0 .../mysql-deployment.yaml | 0 .../wordpress-deployment.yaml | 0 .../tutorials/stateful-application/web.yaml | 0 .../tutorials/stateful-application/webp.yaml | 0 .../stateful-application/zookeeper.md | 71 +- .../stateful-application/zookeeper.yaml | 0 .../docs/user-guide/bad-nginx-deployment.yaml | 0 .../cn}/docs/user-guide/curlpod.yaml | 0 .../cn}/docs/user-guide/deployment.yaml | 0 .../docs/user-guide/docker-cli-to-kubectl.md | 21 +- .../cn}/docs/user-guide/ingress.yaml | 0 {cn => content/cn}/docs/user-guide/job.yaml | 0 .../cn}/docs/user-guide/jsonpath.md | 0 .../cn}/docs/user-guide/kubectl-overview.md | 0 .../cn}/docs/user-guide/multi-pod.yaml | 0 .../docs/user-guide/new-nginx-deployment.yaml | 0 .../cn}/docs/user-guide/nginx-app.yaml | 0 .../cn}/docs/user-guide/nginx-deployment.yaml | 0 .../user-guide/nginx-init-containers.yaml | 0 .../nginx-lifecycle-deployment.yaml | 0 .../user-guide/nginx-probe-deployment.yaml | 0 .../cn}/docs/user-guide/nginx-secure-app.yaml | 0 .../cn}/docs/user-guide/nginx-svc.yaml | 0 .../cn}/docs/user-guide/pod-w-message.yaml | 0 {cn => content/cn}/docs/user-guide/pod.yaml | 0 .../cn}/docs/user-guide/redis-deployment.yaml | 0 .../user-guide/redis-resource-deployment.yaml | 0 .../user-guide/redis-secret-deployment.yaml | 0 .../cn}/docs/user-guide/run-my-nginx.yaml | 0 {cn => content/cn}/docs/whatisk8s.md | 2 +- .../default-storage-class-prereqs.md | 0 .../federated-task-tutorial-prereqs.md | 0 .../cn/includes}/federation-content-moved.md | 0 .../cn/includes}/federation-current-state.md | 0 content/cn/includes/index.md | 3 + .../cn/includes}/task-tutorial-prereqs.md | 6 - .../cn/includes}/user-guide-content-moved.md | 0 .../includes}/user-guide-migration-notice.md | 0 index.html => content/en/_index.html | 23 +- {blog => content/en/blog}/OWNERS | 0 content/en/blog/_index.md | 3 + .../2015-03-00-Kubernetes-Gathering-Videos.md | 8 +- ...015-03-00-Paricipate-In-Kubernetes-User.md | 8 +- ...-00-Weekly-Kubernetes-Community-Hangout.md | 8 +- .../2015-03-00-Welcome-To-Kubernetes-Blog.md | 6 +- ...15-04-00-Borg-Predecessor-To-Kubernetes.md | 8 +- .../2015-04-00-Faster-Than-Speeding-Latte.md | 8 +- ...15-04-00-Introducing-Kubernetes-V1Beta3.md | 8 +- ...15-04-00-Kubernetes-And-Mesosphere-Dcos.md | 8 +- .../2015-04-00-Kubernetes-Release-0150.md | 8 +- ...-00-Weekly-Kubernetes-Community-Hangout.md | 8 +- ...-Weekly-Kubernetes-Community-Hangout_11.md | 8 +- ...-Weekly-Kubernetes-Community-Hangout_17.md | 8 +- ...-Weekly-Kubernetes-Community-Hangout_29.md | 8 +- ...Appc-Support-For-Kubernetes-Through-Rkt.md | 8 +- ...15-05-00-Docker-And-Kubernetes-And-Appc.md | 8 +- .../2015-05-00-Kubernetes-On-Openstack.md | 8 +- .../2015-05-00-Kubernetes-Release-0160.md | 8 +- .../2015-05-00-Kubernetes-Release-0170.md | 8 +- ...00-Resource-Usage-Monitoring-Kubernetes.md | 8 +- ...-00-Weekly-Kubernetes-Community-Hangout.md | 8 +- ...-Weekly-Kubernetes-Community-Hangout_18.md | 11 +- ...0-Cluster-Level-Logging-With-Kubernetes.md | 8 +- ...15-06-00-Slides-Cluster-Management-With.md | 8 +- ...The-Distributed-System-Toolkit-Patterns.md | 8 +- ...-00-Weekly-Kubernetes-Community-Hangout.md | 8 +- ...-Announcing-First-Kubernetes-Enterprise.md | 8 +- ...-How-Did-Quake-Demo-From-Dockercon-Work.md | 8 +- ...-00-Kubernetes-10-Launch-Party-At-Oscon.md | 8 +- ...-07-00-Strong-Simple-Ssl-For-Kubernetes.md | 8 +- ...-07-00-The-Growing-Kubernetes-Ecosystem.md | 8 +- ...-00-Weekly-Kubernetes-Community-Hangout.md | 8 +- ...-Weekly-Kubernetes-Community-Hangout_23.md | 8 +- ...0-Using-Kubernetes-Namespaces-To-Manage.md | 8 +- ...-00-Weekly-Kubernetes-Community-Hangout.md | 8 +- ...Kubernetes-Performance-Measurements-And.md | 10 +- ...-Things-You-Didnt-Know-About-Kubectl_28.md | 8 +- ...ing-Kubernetes-The-Shopping-List-Part-1.md | 10 +- ...mproved-Tooling-And-A-Growing-Community.md | 8 +- ...tes-As-Foundation-For-Cloud-Native-Paas.md | 8 +- ...11-00-Monitoring-Kubernetes-With-Sysdig.md | 8 +- ...nd-Dynamic-Distributed-Systems-At-Scale.md | 8 +- ...0-Creating-Raspberry-Pi-Cluster-Running.md | 20 +- ...ent-Solution-For-Scope-Using-Kubernetes.md | 8 +- ...And-Replication-Controllers-With-Puppet.md | 8 +- ...1-00-Kubernetes-Community-Meeting-Notes.md | 8 +- ...0-Kubernetes-Community-Meeting-Notes_28.md | 65 + ...-Simple-Leader-Election-With-Kubernetes.md | 8 +- ...00-Why-Kubernetes-Doesnt-Use-Libnetwork.md | 8 +- ...Kubecon-Eu-2016-Kubernetes-Community-In.md | 8 +- ...2-00-Kubernetes-Community-Meeting-Notes.md | 8 +- ...rnetes-community-meeting-notes-20160128.md | 8 +- ...rnetes-community-meeting-notes-20160211.md | 11 +- ...2-00-Sharethis-Kubernetes-In-Production.md | 8 +- ...0-State-Of-Container-World-January-2016.md | 12 +- ...0-kubernetes-community-meeting-notes_23.md | 8 +- ...netes-Performance-And-Scalability-In-12.md | 10 +- ...016-03-00-Appformix-Helping-Enterprises.md | 8 +- ...ulti-Zone-Clusters-A.K.A-Ubernetes-Lite.md | 8 +- ...00-Elasticbox-Introduces-Elastickube-To.md | 8 +- .../2016-03-00-Five-Days-Of-Kubernetes-12.md | 8 +- ...ner-Metadata-Changes-Your-Point-Of-View.md | 8 +- ...ifying-Advanced-Networking-With-Ingress.md | 8 +- ...-Application-Deployment-And-Management-.md | 8 +- ...3-00-Kubernetes-Community-Meeting-Notes.md | 8 +- ...-Kubernetes-In-Enterprise-With-Fujitsus.md | 8 +- ...sing-Kubernetes-With-Tensorflow-Serving.md | 8 +- ...-State-Of-Container-World-February-2016.md | 8 +- ...pelin-To-Process-Big-Data-On-Kubernetes.md | 8 +- ...dding-Support-For-Kubernetes-In-Rancher.md | 10 +- ...-Awesome-User-Interfaces-For-Kubernetes.md | 8 +- ...onfiguration-Management-With-Containers.md | 8 +- ...-00-Container-Survey-Results-March-2016.md | 8 +- ...00-Introducing-Kubernetes-Openstack-Sig.md | 8 +- ...16-04-00-Kubernetes-Network-Policy-APIs.md | 10 +- .../_posts/2016-04-00-Kubernetes-On-Aws_15.md | 8 +- ...ty-And-Interoperability-Of-K8S-Clusters.md | 8 +- ...016-04-00-Using-Deployment-Objects-With.md | 8 +- ...-00-Coreosfest2016-Kubernetes-Community.md | 8 +- ...ecurity-And-Multi-Tenancy-In-Kubernetes.md | 10 +- ...00-Bringing-End-To-End-Testing-To-Azure.md | 8 +- .../2016-06-00-Container-Design-Patterns.md | 8 +- ...lustrated-Childrens-Guide-To-Kubernetes.md | 8 +- ...ion-Platform-At-Wercker-With-Kubernetes.md | 10 +- .../2016-07-00-Autoscaling-In-Kubernetes.md | 8 +- ...nd-To-End-Kubernetes-Testing-To-Azure-2.md | 10 +- ...6-07-00-Citrix-Netscaler-And-Kubernetes.md | 8 +- .../2016-07-00-Cross-Cluster-Services.md | 8 +- ...-Dashboard-Web-Interface-For-Kubernetes.md | 14 +- .../2016-07-00-Five-Days-Of-Kubernetes-1.3.md | 8 +- ...g-Cloud-Native-And-Enterprise-Workloads.md | 8 +- ...Kubernetes-In-Rancher-Further-Evolution.md | 8 +- ...-Minikube-Easily-Run-Kubernetes-Locally.md | 10 +- .../2016-07-00-Oh-The-Places-You-Will-Go.md | 8 +- ...ings-Rkt-Container-Engine-To-Kubernetes.md | 8 +- .../2016-07-00-The-Bet-On-Kubernetes.md | 8 +- ...s-Of-Cassandra-Using-Kubernetes-Pet-Set.md | 8 +- ...ubernetes-For-Windows-Server-Containers.md | 8 +- .../_posts/2016-07-00-happy-k8sbday-1.md | 8 +- ...-07-00-openstack-kubernetes-communities.md | 8 +- ...l-applications-in-containers-kubernetes.md | 8 +- ...ly-Managed-Onpremise-Kubernetes-Cluster.md | 12 +- ...eate-Couchbase-Cluster-Using-Kubernetes.md | 26 +- ...ubernetes-Namespaces-Use-Cases-Insights.md | 8 +- ...ty-Best-Practices-Kubernetes-Deployment.md | 10 +- ...-00-Sig-Apps-Running-Apps-In-Kubernetes.md | 8 +- ...ul-Applications-Using-Kubernetes-Datera.md | 10 +- ...-00-Cloud-Native-Application-Interfaces.md | 8 +- ...-Creating-Postgresql-Cluster-Using-Helm.md | 8 +- ...ploying-To-Multiple-Kubernetes-With-Kit.md | 8 +- ...Performance-Network-Policies-Kubernetes.md | 16 +- ...-How-Qbox-Saved-50-Percent-On-Aws-Bills.md | 10 +- ...-How-We-Made-Kubernetes-Easy-To-Install.md | 8 +- ...g-It-Easy-To-Run-On-Kuberentes-Anywhere.md | 7 +- ...-Provisioning-And-Storage-In-Kubernetes.md | 8 +- ...-Services-Kubernetes-Cluster-Federation.md | 12 +- ...o-Package-And-Deploy-Apps-On-Kubernetes.md | 12 +- ...Kubernetes-And-Openstack-At-Yahoo-Japan.md | 18 +- ...tes-Service-Technology-Partners-Program.md | 8 +- ...ernetes-Dashboard-UI-1.4-improvements_3.md | 20 +- .../2016-10-00-Tail-Kubernetes-With-Stern.md | 8 +- ...00-Bringing-Kubernetes-Support-To-Azure.md | 7 +- ...ol-Go-From-Docker-Compose-To-Kubernetes.md | 7 +- ...ng-And-Managed-Service-Provider-Program.md | 7 +- ...ainers-Logging-Monitoring-With-Sematext.md | 16 +- ...croservice-Architecture-With-Kubernetes.md | 12 +- ...Kubelet-Performance-With-Node-Dashboard.md | 8 +- ...00-Cluster-Federation-In-Kubernetes-1.5.md | 8 +- ...ner-Runtime-Interface-Cri-In-Kubernetes.md | 8 +- .../2016-12-00-Five-Days-Of-Kubernetes-1.5.md | 12 +- ...m-Network-Policies-To-Security-Policies.md | 8 +- ...tes-1.5-Supporting-Production-Workloads.md | 8 +- .../2016-12-00-Kubernetes-Supports-Openapi.md | 8 +- ...ale-Stateful-Applications-In-Kubernetes.md | 8 +- ...12-00-Windows-Server-Support-Kubernetes.md | 8 +- ...ess-Functions-As-Service-For-Kubernetes.md | 8 +- ...un-Kubernetes-In-Kubernetes-Kubeception.md | 12 +- ...-01-00-Kubernetes-Ux-Survey-Infographic.md | 8 +- ...Mongodb-On-Kubernetes-With-Statefulsets.md | 10 +- ...Deployments-With-Policy-Base-Networking.md | 8 +- ...eating-And-Managing-Kubernetes-Clusters.md | 8 +- ...0-Caas-The-Foundation-For-Next-Gen-Paas.md | 8 +- ...00-Highly-Available-Kubernetes-Clusters.md | 8 +- ...-Com-Shift-To-Kubernetes-From-Openstack.md | 16 +- ...gresql-Clusters-Kubernetes-Statefulsets.md | 8 +- ...earning-With-Paddlepaddle-On-Kubernetes.md | 12 +- ...03-00-Advanced-Scheduling-In-Kubernetes.md | 8 +- ...isioning-And-Storage-Classes-Kubernetes.md | 12 +- .../2017-03-00-Five-Days-Of-Kubernetes-1.6.md | 10 +- ...Sport-Engaging-The-Kubernetes-Community.md | 10 +- ...1.6-Multi-User-Multi-Workloads-At-Scale.md | 8 +- ...0-Scalability-Updates-In-Kubernetes-1.6.md | 8 +- ...s-Zones-Upstream-Nameservers-Kubernetes.md | 12 +- ...nts-With-Kubernetes-In-The-Cloud-Onprem.md | 12 +- .../2017-04-00-Rbac-Support-In-Kubernetes.md | 8 +- ...-Draft-Kubernetes-Container-Development.md | 8 +- .../2017-05-00-Kubernetes-Monitoring-Guide.md | 8 +- ...0-Kubernetes-Security-Process-Explained.md | 8 +- ...ay-Ansible-Collaborative-Kubernetes-Ops.md | 8 +- ...g-Microservices-With-Istio-Service-Mesh.md | 12 +- ...teful-Application-Extensibility-Updates.md | 8 +- ...-07-00-Happy-Second-Birthday-Kubernetes.md | 24 +- ...7-07-00-How-Watson-Health-Cloud-Deploys.md | 20 +- ...00-High-Performance-Networking-With-Ec2.md | 8 +- ...00-Kompose-Helps-Developers-Move-Docker.md | 8 +- ...08-00-Kubernetes-Meets-High-Performance.md | 10 +- ...Introducing-Resource-Management-Working.md | 10 +- ...00-Kubernetes-18-Security-Workloads-And.md | 8 +- ...9-00-Kubernetes-Statefulsets-Daemonsets.md | 12 +- ...Windows-Networking-At-Parity-With-Linux.md | 9 +- ...nforcing-Network-Policies-In-Kubernetes.md | 10 +- .../2017-10-00-Five-Days-Of-Kubernetes-18.md | 8 +- ...00-It-Takes-Village-To-Raise-Kubernetes.md | 8 +- .../_posts/2017-10-00-Kubeadm-V18-Released.md | 8 +- ...ity-Steering-Committee-Election-Results.md | 8 +- ...0-Request-Routing-And-Policy-Management.md | 8 +- ...0-00-Software-Conformance-Certification.md | 8 +- ...10-00-Using-Rbac-Generally-Available-18.md | 8 +- .../2017-11-00-Autoscaling-In-Kubernetes.md | 8 +- ...-11-00-Certified-Kubernetes-Conformance.md | 10 +- ...rd-Container-Runtime-Options-Kubernetes.md | 14 +- .../_posts/2017-11-00-Kubernetes-Easy-Way.md | 10 +- ...Kubernetes-Is-Still-Hard-For-Developers.md | 12 +- ...-Securing-Software-Supply-Chain-Grafeas.md | 8 +- ...7-12-00-Introducing-Kubeflow-Composable.md | 8 +- ...ernetes-19-Workloads-Expanded-Ecosystem.md | 8 +- ...00-Paddle-Paddle-Fluid-Elastic-Learning.md | 8 +- .../2017-12-00-Using-Ebpf-In-Kubernetes.md | 10 +- .../2018-01-00-Core-Workloads-Api-Ga.md | 8 +- ...2018-01-00-Extensible-Admission-Is-Beta.md | 10 +- .../2018-01-00-Five-Days-Of-Kubernetes-19.md | 8 +- ...8-01-00-Introducing-Client-Go-Version-6.md | 8 +- ...Introducing-Container-Storage-Interface.md | 8 +- ...-00-Kubernetes-V19-Beta-Windows-Support.md | 8 +- ...eporting-Errors-Using-Kubernetes-Events.md | 10 +- ...-Apache-Spark-23-With-Native-Kubernetes.md | 6 +- ...xpanding-User-Support-With-Office-Hours.md | 8 +- ...0-First-Beta-Version-Of-Kubernetes-1-10.md | 6 +- ...How-To-Integrate-Rollingupdate-Strategy.md | 32 +- ...3-00-Principles-Of-Container-App-Design.md | 8 +- ...stabilizing-storage-security-networking.md | 3 +- ...-04-fixing-subpath-volume-vulnerability.md | 4 +- ...-04-10-container-storage-interface-beta.md | 4 +- ...018-04-11-migrating-the-kubernetes-blog.md | 6 +- ...018-04-13-local-persistent-volumes-beta.md | 4 +- ...ernetes-application-survey-results-2018.md | 3 +- .../2018-04-25-open-source-charts-2017.md | 4 +- ...-downtime-deployment-kubernetes-jenkins.md | 12 +- .../2018-05-01-developing-on-kubernetes.md | 4 +- .../_posts/2018-05-02-policy-in-kubernetes.md | 4 +- .../2018-05-04-Announcing-Kubeflow-0.1.md | 4 +- .../en/case-studies}/OWNERS | 0 .../en/case-studies/_index.html | 7 +- .../en/case-studies}/amadeus.html | 2 +- .../en/case-studies}/ancestry.html | 2 +- .../en/case-studies}/blablacar.html | 2 +- .../en/case-studies}/blackrock.html | 2 +- .../en/case-studies}/box.html | 2 +- .../en/case-studies}/buffer.html | 2 +- .../en/case-studies}/crowdfire.html | 2 +- .../en/case-studies}/golfnow.html | 2 +- .../en/case-studies}/haufegroup.html | 2 +- .../en/case-studies}/huawei.html | 2 +- .../en/case-studies}/peardeck.html | 2 +- .../en/case-studies}/pearson.html | 2 +- .../en/case-studies}/squarespace.html | 2 +- .../en/case-studies}/wikimedia.html | 2 +- .../en/case-studies}/wink.html | 2 +- .../en/case-studies}/zalando.html | 2 +- .../en/code-of-conduct.md | 0 .../en/community/_index.html | 4 - content/en/docs/_index.md | 3 + {docs => content/en/docs}/admin/OWNERS | 0 content/en/docs/admin/_index.md | 5 + .../en/docs}/admin/accessing-the-api.md | 0 .../en/docs}/admin/admission-controllers.md | 67 +- .../en/docs}/admin/authentication.md | 5 +- .../en/docs/admin/authorization/_index.md | 18 +- .../en/docs}/admin/authorization/abac.md | 13 +- .../en/docs}/admin/authorization/node.md | 3 +- .../en/docs}/admin/authorization/rbac.md | 6 +- .../en/docs}/admin/authorization/webhook.md | 13 +- .../en/docs}/admin/bootstrap-tokens.md | 7 +- .../en/docs}/admin/cluster-large.md | 21 +- .../admin/extensible-admission-controllers.md | 12 +- .../en/docs}/admin/federation/OWNERS | 0 .../en/docs/admin/federation/_index.md | 4 +- .../en/docs}/admin/high-availability/OWNERS | 0 .../docs}/admin/high-availability/building.md | 4 +- .../admin/high-availability/default-kubelet | 0 .../docs}/admin/high-availability/etcd.yaml | 0 .../high-availability/kube-apiserver.yaml | 0 .../kube-controller-manager.yaml | 0 .../high-availability/kube-scheduler.yaml | 0 .../admin/high-availability/monit-docker | 0 .../admin/high-availability/monit-kubelet | 0 .../admin/high-availability/podmaster.yaml | 0 .../kubelet-authentication-authorization.md | 3 +- .../docs}/admin/kubelet-tls-bootstrapping.md | 3 +- .../en/docs}/admin/limitrange/OWNERS | 0 .../docs}/admin/limitrange/invalid-pod.yaml | 0 .../en/docs}/admin/limitrange/limits.yaml | 0 .../en/docs}/admin/limitrange/namespace.yaml | 0 .../en/docs}/admin/limitrange/valid-pod.yaml | 0 .../en/docs}/admin/multiple-schedulers/OWNERS | 0 .../docs}/admin/multiple-schedulers/pod1.yaml | 0 .../docs}/admin/multiple-schedulers/pod2.yaml | 0 .../docs}/admin/multiple-schedulers/pod3.yaml | 0 .../en/docs}/admin/multiple-zones.md | 5 +- .../en/docs}/admin/node-conformance.md | 5 +- .../en/docs}/admin/resourcequota/OWNERS | 0 .../admin/resourcequota/best-effort.yaml | 0 .../resourcequota/compute-resources.yaml | 0 .../en/docs}/admin/resourcequota/limits.yaml | 0 .../docs}/admin/resourcequota/namespace.yaml | 0 .../admin/resourcequota/not-best-effort.yaml | 0 .../admin/resourcequota/object-counts.yaml | 0 {docs => content/en/docs}/admin/salt.md | 4 +- .../en/docs}/admin/service-accounts-admin.md | 0 .../en/docs/concepts/_index.md | 2 + .../en/docs/concepts/api-extension/_index.md | 5 + .../api-extension/apiserver-aggregation.md | 15 +- .../api-extension/custom-resources.md | 21 +- .../en/docs/concepts/architecture/_index.md | 5 + .../concepts/architecture/cloud-controller.md | 5 +- .../architecture/master-node-communication.md | 3 +- .../en/docs}/concepts/architecture/nodes.md | 5 +- .../concepts/cluster-administration/_index.md | 5 + .../concepts/cluster-administration/addons.md | 0 .../cluster-administration/certificates.md | 3 +- .../cluster-administration/cloud-providers.md | 11 +- .../cluster-administration-overview.md | 11 +- .../controller-metrics.md | 11 +- .../cluster-administration/counter-pod.yaml | 0 .../cluster-administration/device-plugins.md | 19 +- .../cluster-administration/federation.md | 17 +- .../fluentd-sidecar-config.yaml | 0 .../kubelet-garbage-collection.md | 3 +- .../cluster-administration/logging.md | 15 +- .../manage-deployment.md | 10 +- .../cluster-administration/network-plugins.md | 5 +- .../cluster-administration/networking.md | 3 +- .../cluster-administration/nginx-app.yaml | 0 .../nginx-deployment.yaml | 0 .../nginx/nginx-deployment.yaml | 0 .../nginx/nginx-svc.yaml | 0 .../cluster-administration/proxies.md | 11 +- .../two-files-counter-pod-agent-sidecar.yaml | 0 ...o-files-counter-pod-streaming-sidecar.yaml | 0 .../two-files-counter-pod.yaml | 0 .../en/docs/concepts/configuration/_index.md | 5 + .../concepts/configuration/assign-pod-node.md | 14 +- .../concepts/configuration/commands.yaml | 0 .../manage-compute-resources-container.md | 46 +- .../organize-cluster-access-kubeconfig.md | 18 +- .../docs}/concepts/configuration/overview.md | 18 +- .../configuration/pod-priority-preemption.md | 25 +- .../configuration/pod-with-node-affinity.yaml | 0 .../configuration/pod-with-pod-affinity.yaml | 0 .../en/docs}/concepts/configuration/pod.yaml | 0 .../en/docs}/concepts/configuration/secret.md | 21 +- .../configuration/taint-and-toleration.md | 3 +- content/en/docs/concepts/containers/_index.md | 5 + .../container-environment-variables.md | 19 +- .../containers/container-lifecycle-hooks.md | 17 +- .../en/docs}/concepts/containers/images.md | 13 +- .../concepts/example-concept-template.md | 15 +- content/en/docs/concepts/overview/_index.md | 5 + .../en/docs}/concepts/overview/components.md | 21 +- .../en/docs}/concepts/overview/extending.md | 20 +- .../docs}/concepts/overview/kubernetes-api.md | 0 .../object-management-kubectl/_index.md | 5 + .../declarative-config.md | 51 +- .../imperative-command.md | 27 +- .../imperative-config.md | 19 +- .../object-management-kubectl/overview.md | 32 +- .../simple_deployment.yaml | 0 .../update_deployment.yaml | 0 .../concepts/overview/what-is-kubernetes.md | 17 +- .../overview/working-with-objects/_index.md | 5 + .../working-with-objects/annotations.md | 15 +- .../kubernetes-objects.md | 23 +- .../overview/working-with-objects/labels.md | 6 +- .../overview/working-with-objects/names.md | 4 +- .../working-with-objects/namespaces.md | 0 .../nginx-deployment.yaml | 0 content/en/docs/concepts/policy/_index.md | 5 + .../en/docs}/concepts/policy/example-psp.yaml | 0 .../concepts/policy/pod-security-policy.md | 11 +- .../docs}/concepts/policy/privileged-psp.yaml | 0 .../docs}/concepts/policy/resource-quotas.md | 0 .../docs}/concepts/policy/restricted-psp.yaml | 0 .../docs/concepts/service-catalog/_index.md | 24 +- .../concepts/services-networking/_index.md | 5 + ...ries-to-pod-etc-hosts-with-host-aliases.md | 5 +- .../connect-applications-service.md | 21 +- .../concepts/services-networking/curlpod.yaml | 0 .../services-networking/custom-dns.yaml | 0 .../services-networking/dns-pod-service.md | 20 +- .../services-networking/hostaliases-pod.yaml | 0 .../concepts/services-networking/ingress.md | 17 +- .../concepts/services-networking/ingress.yaml | 0 .../services-networking/network-policies.md | 5 +- .../services-networking/nginx-secure-app.yaml | 0 .../services-networking/nginx-svc.yaml | 0 .../services-networking/run-my-nginx.yaml | 0 .../concepts/services-networking/service.md | 41 +- content/en/docs/concepts/storage/_index.md | 5 + .../concepts/storage/dynamic-provisioning.md | 13 +- .../concepts/storage/persistent-volumes.md | 29 +- .../docs}/concepts/storage/storage-classes.md | 5 +- .../en/docs}/concepts/storage/volumes.md | 141 +- .../concepts/workloads/controllers/_index.md | 5 + .../workloads/controllers/cron-jobs.md | 5 +- .../workloads/controllers/cronjob.yaml | 0 .../workloads/controllers/daemonset.md | 5 +- .../workloads/controllers/daemonset.yaml | 0 .../workloads/controllers/deployment.md | 55 +- .../workloads/controllers/frontend.yaml | 0 .../controllers/garbage-collection.md | 17 +- .../workloads/controllers/hpa-rs.yaml | 0 .../concepts/workloads/controllers/job.yaml | 0 .../controllers/jobs-run-to-completion.md | 10 +- .../workloads/controllers/my-repset.yaml | 0 .../controllers/nginx-deployment.yaml | 0 .../workloads/controllers/replicaset.md | 15 +- .../workloads/controllers/replication.yaml | 0 .../controllers/replicationcontroller.md | 18 +- .../workloads/controllers/statefulset.md | 22 +- .../en/docs/concepts/workloads/pods/_index.md | 5 + .../concepts/workloads/pods/disruptions.md | 19 +- .../workloads/pods/init-containers.md | 19 +- .../concepts/workloads/pods/pod-lifecycle.md | 37 +- .../concepts/workloads/pods/pod-overview.md | 20 +- .../en/docs}/concepts/workloads/pods/pod.md | 5 +- .../concepts/workloads/pods/podpreset.md | 20 +- editdocs.md => content/en/docs/editdocs.md | 2 +- .../en/docs}/getting-started-guides/OWNERS | 0 .../en/docs/getting-started-guides/_index.md | 5 + .../getting-started-guides/alibaba-cloud.md | 0 .../getting-started-guides/alternatives.md | 0 .../en/docs}/getting-started-guides/aws.md | 7 +- .../en/docs}/getting-started-guides/azure.md | 0 .../en/docs}/getting-started-guides/clc.md | 1 - .../getting-started-guides/cloudstack.md | 5 +- .../getting-started-guides/coreos/OWNERS | 0 .../getting-started-guides/coreos/_index.md | 4 +- .../coreos/cloud-configs/master.yaml | 0 .../coreos/cloud-configs/node.yaml | 0 .../en/docs}/getting-started-guides/dcos.md | 0 .../getting-started-guides/fedora/OWNERS | 0 .../getting-started-guides/fedora/_index.md | 5 + .../fedora/fedora_manual_config.md | 3 +- .../fedora/flannel_multi_node_cluster.md | 3 +- .../en/docs}/getting-started-guides/gce.md | 5 +- .../en/docs}/getting-started-guides/kops.md | 0 .../docs}/getting-started-guides/kubespray.md | 3 +- .../docs}/getting-started-guides/minikube.md | 3 +- .../en/docs}/getting-started-guides/ovirt.md | 3 +- .../docs}/getting-started-guides/scratch.md | 21 +- .../getting-started-guides/stackpoint.md | 3 +- .../getting-started-guides/ubuntu/_index.md | 11 +- .../getting-started-guides/ubuntu/backups.md | 22 +- .../ubuntu/decommissioning.md | 18 +- .../getting-started-guides/ubuntu/glossary.md | 11 +- .../ubuntu/installation.md | 19 +- .../getting-started-guides/ubuntu/local.md | 15 +- .../getting-started-guides/ubuntu/logging.md | 15 +- .../ubuntu/monitoring.md | 15 +- .../ubuntu/networking.md | 18 +- .../ubuntu/operational-considerations.md | 15 +- .../getting-started-guides/ubuntu/rancher.md | 15 +- .../getting-started-guides/ubuntu/scaling.md | 14 +- .../getting-started-guides/ubuntu/security.md | 15 +- .../getting-started-guides/ubuntu/storage.md | 15 +- .../ubuntu/troubleshooting.md | 15 +- .../getting-started-guides/ubuntu/upgrades.md | 21 +- .../ubuntu/validation.md | 21 +- .../windows/OVN_OVS_Windows_Installer.png | Bin .../windows/UpstreamRouting.png | Bin .../getting-started-guides/windows/_index.md | 7 +- .../windows/configmap-pod.yaml | 0 .../windows/emptydir-pod.yaml | 0 .../windows/hostpath-volume-pod.yaml | 0 .../windows/ovn_kubernetes.png | Bin .../sample-l2bridge-wincni-config.json | 0 .../windows/secret-pod.yaml | 0 .../windows/windows-setup.png | Bin content/en/docs/home/_index.md | 16 + content/en/docs/home/contribute/_index.md | 5 + .../en/docs}/home/contribute/blog-post.md | 18 +- .../home/contribute/content-organization.md | 130 + .../home/contribute/create-pull-request.md | 19 +- .../generated-reference/federation-api.md | 19 +- .../contribute/generated-reference/kubectl.md | 25 +- .../generated-reference/kubernetes-api.md | 31 +- .../kubernetes-components.md | 25 +- .../docs/home/contribute/includes/example1.md | 9 + .../docs/home/contribute/includes/example2.md | 7 + .../en/docs/home/contribute/includes/index.md | 211 + .../home/contribute/includes/podtemplate.json | 22 + .../en/docs}/home/contribute/localization.md | 9 +- .../docs}/home/contribute/page-templates.md | 0 .../en/docs}/home/contribute/participating.md | 21 +- .../en/docs}/home/contribute/review-issues.md | 15 +- .../contribute/stage-documentation-changes.md | 22 +- .../en/docs}/home/contribute/style-guide.md | 130 +- .../docs}/home/contribute/write-new-topic.md | 19 +- .../en/docs}/home/supported-doc-versions.md | 19 +- .../en/docs/imported/_index.md | 0 content/en/docs/imported/community/_index.md | 5 + .../en/docs}/imported/community/devel.md | 0 .../en/docs}/imported/community/guide.md | 0 .../en/docs}/imported/community/keps.md | 0 .../en/docs}/imported/community/mentoring.md | 0 content/en/docs/imported/release/_index.md | 5 + .../en/docs}/imported/release/notes.md | 0 .../en/docs/reference/_index.md | 3 + .../en/docs}/reference/api-concepts.md | 11 +- .../en/docs}/reference/api-overview.md | 22 +- .../en/docs}/reference/client-libraries.md | 11 +- .../en/docs}/reference/deprecation-policy.md | 0 .../en/docs}/reference/feature-gates.md | 14 +- .../en/docs/reference/glossary/annotation.md | 18 + .../glossary/application-architect.md | 18 + .../glossary/application-developer.md | 18 + .../en/docs/reference/glossary/approver.md | 18 + .../en/docs/reference/glossary/certificate.md | 18 + content/en/docs/reference/glossary/cla.md | 18 + .../glossary/cloud-controller-manager.md | 20 + .../docs/reference/glossary/cloud-provider.md | 18 + .../reference/glossary/cluster-architect.md | 18 + .../reference/glossary/cluster-operator.md | 20 + content/en/docs/reference/glossary/cluster.md | 19 + .../reference/glossary/code-contributor.md | 19 + .../en/docs/reference/glossary/configmap.md | 18 + .../glossary/container-env-variables.md | 18 + .../en/docs/reference/glossary/container.md | 19 + .../en/docs/reference/glossary/contributor.md | 18 + .../en/docs/reference/glossary/controller.md | 19 + content/en/docs/reference/glossary/cronjob.md | 19 + .../glossary/customresourcedefinition.md | 20 + .../en/docs/reference/glossary/daemonset.md | 20 + .../en/docs/reference/glossary/deployment.md | 20 + .../en/docs/reference/glossary/developer.md | 19 + content/en/docs/reference/glossary/docker.md | 18 + .../en/docs/reference/glossary/downstream.md | 19 + .../glossary/dynamic-volume-provisioning.md | 19 + content/en/docs/reference/glossary/etcd.md | 19 + .../en/docs/reference/glossary/helm-chart.md | 19 + .../glossary/horizontal-pod-autoscaler.md | 18 + content/en/docs/reference/glossary/image.md | 18 + content/en/docs/reference/glossary/index.md | 11 + content/en/docs/reference/glossary/ingress.md | 20 + .../docs/reference/glossary/init-container.md | 18 + content/en/docs/reference/glossary/istio.md | 20 + content/en/docs/reference/glossary/job.md | 20 + content/en/docs/reference/glossary/kops.md | 28 + .../docs/reference/glossary/kube-apiserver.md | 19 + .../glossary/kube-controller-manager.md | 19 + .../en/docs/reference/glossary/kube-proxy.md | 19 + .../docs/reference/glossary/kube-scheduler.md | 18 + content/en/docs/reference/glossary/kubeadm.md | 19 + content/en/docs/reference/glossary/kubectl.md | 19 + content/en/docs/reference/glossary/kubelet.md | 19 + .../docs/reference/glossary/kubernetes-api.md | 19 + content/en/docs/reference/glossary/label.md | 18 + .../en/docs/reference/glossary/maintainer.md | 18 + .../reference/glossary/managed-service.md | 17 + content/en/docs/reference/glossary/member.md | 18 + .../en/docs/reference/glossary/minikube.md | 19 + content/en/docs/reference/glossary/name.md | 18 + .../en/docs/reference/glossary/namespace.md | 18 + .../docs/reference/glossary/network-policy.md | 20 + content/en/docs/reference/glossary/node.md | 18 + .../glossary/persistent-volume-claim.md | 19 + .../reference/glossary/persistent-volume.md | 21 + .../reference/glossary/platform-developer.md | 18 + .../reference/glossary/pod-security-policy.md | 19 + content/en/docs/reference/glossary/pod.md | 19 + .../en/docs/reference/glossary/podpreset.md | 18 + content/en/docs/reference/glossary/rbac.md | 19 + .../en/docs/reference/glossary/replica-set.md | 20 + .../glossary/replication-controller.md | 19 + .../docs/reference/glossary/resource-quota.md | 20 + .../en/docs/reference/glossary/reviewer.md | 18 + content/en/docs/reference/glossary/secret.md | 19 + .../reference/glossary/security-context.md | 18 + .../en/docs/reference/glossary/selector.md | 18 + .../reference/glossary/service-account.md | 19 + .../docs/reference/glossary/service-broker.md | 17 + .../reference/glossary/service-catalog.md | 18 + content/en/docs/reference/glossary/service.md | 19 + content/en/docs/reference/glossary/sig.md | 21 + .../en/docs/reference/glossary/statefulset.md | 23 + .../docs/reference/glossary/storage-class.md | 19 + content/en/docs/reference/glossary/uid.md | 18 + .../en/docs/reference/glossary/upstream.md | 19 + .../docs/reference/glossary/volume-plugin.md | 19 + content/en/docs/reference/glossary/volume.md | 19 + content/en/docs/reference/glossary/wg.md | 20 + content/en/docs/reference/kubectl/_index.md | 5 + .../en/docs}/reference/kubectl/cheatsheet.md | 0 .../en/docs}/reference/kubectl/conventions.md | 3 +- .../kubectl/docker-cli-to-kubectl.md | 9 +- .../en/docs}/reference/kubectl/jsonpath.md | 0 .../en/docs}/reference/kubectl/overview.md | 3 +- .../reference/labels-annotations-taints.md | 0 .../en/docs}/reference/security.md | 4 +- .../reference/setup-tools/kubeadm/_index.md | 5 + .../setup-tools/kubeadm}/generated/README.md | 0 .../setup-tools/kubeadm/generated/_index.md | 6 + .../setup-tools/kubeadm/generated/kubeadm.md | 0 .../kubeadm/generated/kubeadm_alpha.md | 0 .../kubeadm/generated/kubeadm_alpha_phase.md | 0 .../generated/kubeadm_alpha_phase_addon.md | 0 .../kubeadm_alpha_phase_addon_all.md | 0 .../kubeadm_alpha_phase_addon_kube-dns.md | 0 .../kubeadm_alpha_phase_addon_kube-proxy.md | 0 .../kubeadm_alpha_phase_bootstrap-token.md | 0 ...kubeadm_alpha_phase_bootstrap-token_all.md | 0 ...lpha_phase_bootstrap-token_cluster-info.md | 0 ...eadm_alpha_phase_bootstrap-token_create.md | 0 ...ubeadm_alpha_phase_bootstrap-token_node.md | 0 ...bootstrap-token_node_allow-auto-approve.md | 0 ...se_bootstrap-token_node_allow-post-csrs.md | 0 .../generated/kubeadm_alpha_phase_certs.md | 0 .../kubeadm_alpha_phase_certs_all.md | 0 ...alpha_phase_certs_apiserver-etcd-client.md | 0 ...ha_phase_certs_apiserver-kubelet-client.md | 0 .../kubeadm_alpha_phase_certs_apiserver.md | 0 .../generated/kubeadm_alpha_phase_certs_ca.md | 0 .../kubeadm_alpha_phase_certs_etcd-ca.md | 0 ...pha_phase_certs_etcd-healthcheck-client.md | 0 .../kubeadm_alpha_phase_certs_etcd-peer.md | 0 .../kubeadm_alpha_phase_certs_etcd-server.md | 0 ...ubeadm_alpha_phase_certs_front-proxy-ca.md | 0 ...dm_alpha_phase_certs_front-proxy-client.md | 0 .../generated/kubeadm_alpha_phase_certs_sa.md | 0 .../kubeadm_alpha_phase_controlplane.md | 0 .../kubeadm_alpha_phase_controlplane_all.md | 0 ...eadm_alpha_phase_controlplane_apiserver.md | 0 ...a_phase_controlplane_controller-manager.md | 0 ...eadm_alpha_phase_controlplane_scheduler.md | 0 .../generated/kubeadm_alpha_phase_etcd.md | 0 .../kubeadm_alpha_phase_etcd_local.md | 0 .../kubeadm_alpha_phase_kubeconfig.md | 0 .../kubeadm_alpha_phase_kubeconfig_admin.md | 0 .../kubeadm_alpha_phase_kubeconfig_all.md | 0 ...pha_phase_kubeconfig_controller-manager.md | 0 .../kubeadm_alpha_phase_kubeconfig_kubelet.md | 0 ...ubeadm_alpha_phase_kubeconfig_scheduler.md | 0 .../kubeadm_alpha_phase_kubeconfig_user.md | 0 .../kubeadm_alpha_phase_mark-master.md | 0 .../kubeadm_alpha_phase_preflight.md | 0 .../kubeadm_alpha_phase_preflight_master.md | 0 .../kubeadm_alpha_phase_preflight_node.md | 0 .../kubeadm_alpha_phase_selfhosting.md | 0 ...ase_selfhosting_convert-from-staticpods.md | 0 .../kubeadm_alpha_phase_upload-config.md | 0 .../kubeadm/generated/kubeadm_completion.md | 0 .../kubeadm/generated/kubeadm_config.md | 0 .../generated/kubeadm_config_upload.md | 0 .../kubeadm_config_upload_from-file.md | 0 .../kubeadm_config_upload_from-flags.md | 0 .../kubeadm/generated/kubeadm_config_view.md | 0 .../kubeadm/generated/kubeadm_init.md | 0 .../kubeadm/generated/kubeadm_join.md | 0 .../kubeadm/generated/kubeadm_reset.md | 0 .../kubeadm/generated/kubeadm_token.md | 0 .../kubeadm/generated/kubeadm_token_create.md | 0 .../kubeadm/generated/kubeadm_token_delete.md | 0 .../generated/kubeadm_token_generate.md | 0 .../kubeadm/generated/kubeadm_token_list.md | 0 .../kubeadm/generated/kubeadm_upgrade.md | 0 .../generated/kubeadm_upgrade_apply.md | 0 .../kubeadm/generated/kubeadm_upgrade_plan.md | 0 .../kubeadm/generated/kubeadm_version.md | 0 .../kubeadm/implementation-details.md | 11 +- .../setup-tools/kubeadm/kubeadm-alpha.md | 154 + .../setup-tools/kubeadm/kubeadm-config.md | 20 +- .../setup-tools/kubeadm/kubeadm-init.md | 26 +- .../setup-tools/kubeadm/kubeadm-join.md | 20 +- .../setup-tools/kubeadm/kubeadm-reset.md | 18 +- .../setup-tools/kubeadm/kubeadm-token.md | 23 +- .../setup-tools/kubeadm/kubeadm-upgrade.md | 19 +- .../setup-tools/kubeadm/kubeadm-version.md | 16 + .../reference/setup-tools/kubeadm/kubeadm.md | 0 .../en/docs}/reference/workloads-18-19.md | 0 content/en/docs/search.md | 5 + .../en/docs/setup/_index.md | 2 + .../en/docs}/setup/building-from-source.md | 2 +- content/en/docs/setup/independent/_index.md | 5 + .../independent/create-cluster-kubeadm.md | 75 +- .../setup/independent/high-availability.md | 125 +- .../setup/independent/install-kubeadm.md | 100 +- .../independent/troubleshooting-kubeadm.md | 4 +- .../en/docs}/setup/pick-right-solution.md | 3 +- {docs => content/en/docs}/sitemap.md | 0 .../en/docs/tasks/_index.md | 2 + .../access-application-cluster/_index.md | 5 + .../access-cluster.md | 3 +- ...icate-containers-same-pod-shared-volume.md | 31 +- .../configure-access-multiple-clusters.md | 22 +- .../configure-cloud-provider-firewall.md | 0 .../connecting-frontend-backend.md | 33 +- .../create-external-load-balancer.md | 24 +- .../access-application-cluster/frontend.yaml | 0 .../frontend/Dockerfile | 0 .../frontend/frontend.conf | 0 .../hello-service.yaml | 0 .../access-application-cluster/hello.yaml | 0 .../hello/Dockerfile | 0 .../access-application-cluster/hello/README | 0 .../access-application-cluster/hello/main.go | 0 .../list-all-running-container-images.md | 29 +- ...load-balance-access-application-cluster.md | 25 +- ...port-forward-access-application-cluster.md | 32 +- .../redis-master.yaml | 0 .../service-access-application-cluster.md | 29 +- .../two-container-pod.yaml | 0 .../web-ui-dashboard.md | 3 +- .../tasks/access-kubernetes-api/_index.md | 5 + .../configure-aggregation-layer.md | 21 +- .../extend-api-custom-resource-definitions.md | 29 +- .../extend-api-third-party-resource.md | 5 +- .../http-proxy-access-api.md | 21 +- .../migrate-third-party-resource.md | 25 +- .../setup-extension-api-server.md | 19 +- .../docs/tasks/administer-cluster/_index.md | 5 + .../administer-cluster/access-cluster-api.md | 19 +- .../access-cluster-services.md | 17 +- .../tasks/administer-cluster/busybox.yaml | 0 .../calico-network-policy.md | 18 +- .../change-default-storage-class.md | 21 +- .../change-pv-reclaim-policy.md | 27 +- .../cilium-network-policy.md | 25 +- ...-controller-manager-daemonset-example.yaml | 0 .../administer-cluster/cluster-management.md | 3 +- .../configure-multiple-schedulers.md | 10 +- .../configure-upgrade-etcd.md | 16 +- .../docs}/tasks/administer-cluster/coredns.md | 23 +- .../cpu-constraint-namespace.md | 36 +- .../cpu-constraints-pod-2.yaml | 0 .../cpu-constraints-pod-3.yaml | 0 .../cpu-constraints-pod-4.yaml | 0 .../cpu-constraints-pod.yaml | 0 .../administer-cluster/cpu-constraints.yaml | 0 .../cpu-default-namespace.md | 29 +- .../cpu-defaults-pod-2.yaml | 0 .../cpu-defaults-pod-3.yaml | 0 .../administer-cluster/cpu-defaults-pod.yaml | 0 .../administer-cluster/cpu-defaults.yaml | 0 .../cpu-management-policies.md | 14 +- .../declare-network-policy.md | 15 +- .../developing-cloud-controller-manager.md | 3 +- .../dns-custom-nameservers.md | 23 +- .../dns-custom-nameservers/dns.png | Bin .../dns-debugging-resolution.md | 20 +- .../dns-horizontal-autoscaler.yaml | 0 .../dns-horizontal-autoscaling.md | 27 +- .../tasks/administer-cluster/encrypt-data.md | 17 +- .../extended-resource-node.md | 23 +- ...aranteed-scheduling-critical-addon-pods.md | 3 +- .../highly-available-master.md | 3 +- .../tasks/administer-cluster/ip-masq-agent.md | 21 +- .../tasks/administer-cluster/kms-provider.md | 19 +- .../kube-router-network-policy.md | 19 +- .../administer-cluster/kubelet-config-file.md | 21 +- .../limit-storage-consumption.md | 21 +- .../administer-cluster/memory-available.sh | 0 .../memory-constraint-namespace.md | 33 +- .../memory-constraints-pod-2.yaml | 0 .../memory-constraints-pod-3.yaml | 0 .../memory-constraints-pod-4.yaml | 0 .../memory-constraints-pod.yaml | 0 .../memory-constraints.yaml | 0 .../memory-default-namespace.md | 29 +- .../memory-defaults-pod-2.yaml | 0 .../memory-defaults-pod-3.yaml | 0 .../memory-defaults-pod.yaml | 0 .../administer-cluster/memory-defaults.yaml | 0 .../administer-cluster/my-scheduler.yaml | 0 .../administer-cluster/namespace-dev.json | 0 .../administer-cluster/namespace-prod.json | 0 .../namespaces-walkthrough.md | 4 +- .../tasks/administer-cluster/namespaces.md | 27 +- .../administer-cluster/out-of-resource.md | 3 +- ...stent-volume-label-initializer-config.yaml | 0 .../docs}/tasks/administer-cluster/pod1.yaml | 0 .../docs}/tasks/administer-cluster/pod2.yaml | 0 .../docs}/tasks/administer-cluster/pod3.yaml | 0 .../administer-cluster/pvc-protection.md | 21 +- .../administer-cluster/quota-api-object.md | 29 +- .../quota-mem-cpu-pod-2.yaml | 0 .../administer-cluster/quota-mem-cpu-pod.yaml | 0 .../administer-cluster/quota-mem-cpu.yaml | 0 .../quota-memory-cpu-namespace.md | 29 +- .../quota-objects-pvc-2.yaml | 0 .../administer-cluster/quota-objects-pvc.yaml | 0 .../administer-cluster/quota-objects.yaml | 0 .../quota-pod-deployment.yaml | 0 .../administer-cluster/quota-pod-namespace.md | 27 +- .../tasks/administer-cluster/quota-pod.yaml | 0 .../tasks/administer-cluster/quota-pvc-2.yaml | 0 .../administer-cluster/reconfigure-kubelet.md | 21 +- .../reserve-compute-resources.md | 3 +- .../romana-network-policy.md | 19 +- .../running-cloud-controller.md | 9 +- .../administer-cluster/safely-drain-node.md | 19 +- .../administer-cluster/securing-a-cluster.md | 17 +- .../tasks/administer-cluster/static-pod.md | 0 .../storage-object-in-use-protection.md | 21 +- .../administer-cluster/sysctl-cluster.md | 27 +- .../upgrade-downgrade/_index.md | 5 + .../upgrade-downgrade/kubeadm-upgrade-1-7.md | 15 +- .../upgrade-downgrade/kubeadm-upgrade-1-8.md | 18 +- .../upgrade-downgrade/kubeadm-upgrade-1-9.md | 21 +- .../upgrade-downgrade/kubeadm-upgrade-ha.md | 21 +- .../upgrade-downgrade/upgrade-1-6.md | 3 +- .../weave-network-policy.md | 19 +- .../tasks/administer-federation/_index.md | 5 + .../tasks/administer-federation/cluster.md | 19 +- .../tasks/administer-federation/configmap.md | 19 +- .../tasks/administer-federation/daemonset.md | 19 +- .../tasks/administer-federation/deployment.md | 21 +- .../tasks/administer-federation/events.md | 5 +- .../docs}/tasks/administer-federation/hpa.md | 24 +- .../tasks/administer-federation/ingress.md | 21 +- .../docs}/tasks/administer-federation/job.md | 24 +- .../tasks/administer-federation/namespaces.md | 19 +- .../tasks/administer-federation/replicaset.md | 19 +- .../tasks/administer-federation/secret.md | 5 +- .../tasks/configure-pod-container/_index.md | 5 + .../assign-cpu-resource.md | 30 +- .../assign-memory-resource.md | 29 +- .../assign-pods-nodes.md | 23 +- .../attach-handler-lifecycle-event.md | 36 +- .../configmap/kubectl/game.properties | 0 .../configmap/kubectl/ui.properties | 0 .../configure-liveness-readiness-probes.md | 43 +- .../configure-persistent-volume-storage.md | 42 +- .../configure-pod-configmap.md | 40 +- .../configure-pod-initialization.md | 23 +- .../configure-projected-volume-storage.md | 25 +- .../configure-service-account.md | 6 +- .../configure-volume-storage.md | 29 +- .../cpu-request-limit-2.yaml | 0 .../cpu-request-limit.yaml | 0 .../exec-liveness.yaml | 0 .../extended-resource-pod-2.yaml | 0 .../extended-resource-pod.yaml | 0 .../extended-resource.md | 27 +- .../game-env-file.properties | 0 .../http-liveness.yaml | 0 .../init-containers.yaml | 0 .../lifecycle-events.yaml | 0 .../mem-limit-range.yaml | 0 .../memory-request-limit-2.yaml | 0 .../memory-request-limit-3.yaml | 0 .../memory-request-limit.yaml | 0 .../configure-pod-container/pod-redis.yaml | 0 .../tasks/configure-pod-container/pod.yaml | 0 .../private-reg-pod.yaml | 0 .../projected-volume.yaml | 0 .../pull-image-private-registry.md | 30 +- .../configure-pod-container/qos-pod-2.yaml | 0 .../configure-pod-container/qos-pod-3.yaml | 0 .../configure-pod-container/qos-pod-4.yaml | 0 .../configure-pod-container/qos-pod.yaml | 0 .../quality-service-pod.md | 32 +- .../rq-compute-resources.yaml | 0 .../security-context-2.yaml | 0 .../security-context-3.yaml | 0 .../security-context-4.yaml | 0 .../security-context.md | 48 +- .../security-context.yaml | 0 .../share-process-namespace.md | 25 +- .../share-process-namespace.yaml | 0 .../task-pv-claim.yaml | 0 .../configure-pod-container/task-pv-pod.yaml | 0 .../task-pv-volume.yaml | 0 .../tcp-liveness-readiness.yaml | 0 .../ui-env-file.properties | 0 .../tasks/debug-application-cluster/_index.md | 5 + .../audit-policy.yaml | 0 .../tasks/debug-application-cluster/audit.md | 14 +- .../core-metrics-pipeline.md | 0 .../counter-pod.yaml | 0 .../debug-application-introspection.md | 5 +- .../debug-application.md | 3 +- .../debug-cluster.md | 0 .../debug-init-containers.md | 25 +- .../debug-pod-replication-controller.md | 3 +- .../debug-service.md | 3 +- .../debug-stateful-set.md | 19 +- .../determine-reason-pod-failure.md | 27 +- .../event-exporter-deploy.yaml | 0 .../events-stackdriver.md | 5 +- .../fluentd-gcp-configmap.yaml | 0 .../fluentd-gcp-ds.yaml | 0 .../get-shell-running-container.md | 27 +- .../local-debugging.md | 19 +- .../logging-elasticsearch-kibana.md | 0 .../logging-stackdriver.md | 5 +- .../monitor-node-health.md | 9 +- .../debug-application-cluster/nginx-dep.yaml | 0 .../node-problem-detector-configmap.yaml | 0 .../node-problem-detector.yaml | 0 .../resource-usage-monitoring.md | 0 .../debug-application-cluster/shell-demo.yaml | 0 .../termination.yaml | 0 .../troubleshooting.md | 2 +- .../en/docs}/tasks/example-task-template.md | 25 +- .../tasks/extend-kubectl/kubectl-plugins.md | 21 +- .../en/docs}/tasks/federation/Values.yaml | 0 content/en/docs/tasks/federation/_index.md | 5 + .../federation-service-discovery.md | 5 +- .../federation/policy-engine-deployment.yaml | 0 .../federation/policy-engine-service.yaml | 0 .../en/docs}/tasks/federation/policy.rego | 0 .../federation/replicaset-example-policy.yaml | 0 .../scheduling-policy-admission.yaml | 0 .../set-up-cluster-federation-kubefed.md | 5 +- .../set-up-coredns-provider-federation.md | 23 +- .../set-up-placement-policies-federation.md | 27 +- .../tasks/inject-data-application/_index.md | 5 + .../inject-data-application/commands.yaml | 0 .../dapi-envars-container.yaml | 0 .../dapi-envars-pod.yaml | 0 .../dapi-volume-resources.yaml | 0 .../inject-data-application/dapi-volume.yaml | 0 .../define-command-argument-container.md | 30 +- .../define-environment-variable-container.md | 28 +- .../distribute-credentials-secure.md | 36 +- ...nward-api-volume-expose-pod-information.md | 50 +- .../tasks/inject-data-application/envars.yaml | 0 ...ronment-variable-expose-pod-information.md | 46 +- .../podpreset-allow-db-merged.yaml | 0 .../podpreset-allow-db.yaml | 0 .../podpreset-configmap.yaml | 0 .../podpreset-conflict-pod.yaml | 0 .../podpreset-conflict-preset.yaml | 0 .../podpreset-merged.yaml | 0 .../podpreset-multi-merged.yaml | 0 .../podpreset-pod.yaml | 0 .../podpreset-preset.yaml | 0 .../podpreset-proxy.yaml | 0 .../podpreset-replicaset-merged.yaml | 0 .../podpreset-replicaset.yaml | 0 .../inject-data-application/podpreset.md | 37 +- .../secret-envars-pod.yaml | 0 .../inject-data-application/secret-pod.yaml | 0 .../tasks/inject-data-application/secret.yaml | 0 content/en/docs/tasks/job/_index.md | 5 + .../Dockerfile | 0 .../_index.md | 8 +- .../job.yaml | 0 .../worker.py | 0 .../Dockerfile | 0 .../_index.md | 8 +- .../job.yaml | 0 .../redis-pod.yaml | 0 .../redis-service.yaml | 0 .../rediswq.py | 0 .../worker.py | 0 {docs => content/en/docs}/tasks/job/job.yaml | 0 .../job/parallel-processing-expansion.md | 9 +- content/en/docs/tasks/manage-daemon/_index.md | 5 + .../manage-daemon/rollback-daemon-set.md | 19 +- .../tasks/manage-daemon/update-daemon-set.md | 27 +- .../tasks/manage-gpus/scheduling-gpus.md | 0 .../manage-hugepages/scheduling-hugepages.md | 17 +- .../en/docs/tasks/run-application/_index.md | 5 + .../tasks/run-application/configure-pdb.md | 22 +- .../run-application/delete-stateful-set.md | 23 +- .../deployment-patch-demo.yaml | 0 .../run-application/deployment-scale.yaml | 0 .../run-application/deployment-update.yaml | 0 .../tasks/run-application/deployment.yaml | 0 .../force-delete-stateful-set-pod.md | 19 +- .../horizontal-pod-autoscale-walkthrough.md | 9 +- .../horizontal-pod-autoscale.md | 6 +- .../tasks/run-application/hpa-php-apache.yaml | 0 .../run-application/mysql-configmap.yaml | 0 .../run-application/mysql-deployment.yaml | 0 .../tasks/run-application/mysql-services.yaml | 0 .../run-application/mysql-statefulset.yaml | 0 .../rolling-update-replication-controller.md | 10 +- .../run-replicated-stateful-application.md | 37 +- ...un-single-instance-stateful-application.md | 29 +- .../run-stateless-application-deployment.md | 31 +- .../run-application/scale-stateful-set.md | 19 +- .../update-api-object-kubectl-patch.md | 25 +- .../en/docs/tasks/service-catalog/_index.md | 5 + .../install-service-catalog-using-helm.md | 26 +- .../install-service-catalog-using-sc.md | 21 +- content/en/docs/tasks/tls/_index.md | 5 + .../docs}/tasks/tls/certificate-rotation.md | 15 +- .../tasks/tls/managing-tls-in-a-cluster.md | 6 +- content/en/docs/tasks/tools/_index.md | 5 + .../en/docs}/tasks/tools/install-kubectl.md | 94 +- .../en/docs}/tasks/tools/install-minikube.md | 22 +- .../en/docs/templates/feature-state-alpha.txt | 5 - .../en/docs/templates/feature-state-beta.txt | 6 - .../templates/feature-state-deprecated.txt | 2 + .../docs/templates/feature-state-stable.txt | 5 + content/en/docs/templates/index.md | 13 + .../en/docs/tools/_index.md | 0 .../en/docs/tools/kompose/_index.md | 0 .../en/docs}/tools/kompose/user-guide.md | 3 +- .../en/docs/tutorials/_index.md | 2 + content/en/docs/tutorials/clusters/_index.md | 5 + .../en/docs}/tutorials/clusters/apparmor.md | 29 +- .../tutorials/clusters/deny-write.profile | 0 .../clusters/hello-apparmor-pod.yaml | 0 .../en/docs/tutorials/configuration/_index.md | 5 + .../configmap/redis/redis-config | 0 .../configmap/redis/redis-pod.yaml | 0 .../configure-redis-using-configmap.md | 25 +- .../tutorials/example-tutorial-template.md | 29 +- .../tutorials/kubernetes-basics/_index.html | 1 + .../cluster-interactive.html | 0 .../kubernetes-basics/cluster-intro.html | 0 .../kubernetes-basics/deploy-interactive.html | 0 .../kubernetes-basics/deploy-intro.html | 0 .../explore-interactive.html | 0 .../kubernetes-basics/explore-intro.html | 0 .../kubernetes-basics/expose-interactive.html | 0 .../kubernetes-basics/expose-intro.html | 0 .../public/css/overrides.css | 0 .../kubernetes-basics/public/css/styles.css | 0 .../public/images/badge-01.svg | 0 .../public/images/badge-02.svg | 0 .../public/images/badge-03.svg | 0 .../public/images/badge-04.svg | 0 .../public/images/badge-05.svg | 0 .../public/images/badge-06.svg | 0 .../public/images/badge-07.svg | 0 .../public/images/badge-08.svg | 0 .../public/images/badge-09.svg | 0 .../public/images/badge-1.png | Bin .../public/images/dislike.svg | 0 .../kubernetes-basics/public/images/like.svg | 0 .../kubernetes-basics/public/images/logo.png | Bin .../kubernetes-basics/public/images/logo.svg | 0 .../public/images/logo_2.svg | 0 .../public/images/logo_mobile.png | Bin .../public/images/module_01.svg | 0 .../public/images/module_01_cluster.svg | 0 .../public/images/module_02.svg | 0 .../public/images/module_02_first_app.svg | 0 .../public/images/module_03.svg | 0 .../public/images/module_03_nodes.svg | 0 .../public/images/module_03_pods.svg | 0 .../public/images/module_04.svg | 0 .../public/images/module_04_labels.svg | 0 .../public/images/module_04_services.svg | 0 .../public/images/module_05.svg | 0 .../public/images/module_05_scaling1.svg | 0 .../public/images/module_05_scaling2.svg | 0 .../public/images/module_06.svg | 0 .../images/module_06_rollingupdates1.svg | 0 .../images/module_06_rollingupdates2.svg | 0 .../images/module_06_rollingupdates3.svg | 0 .../images/module_06_rollingupdates4.svg | 0 .../public/images/nav_point.png | Bin .../public/images/nav_point.svg | 0 .../public/images/nav_point_active.png | Bin .../public/images/nav_point_active.svg | 0 .../public/images/nav_point_sub.svg | 0 .../public/images/quiz_false.png | Bin .../public/images/quiz_true.png | Bin .../public/images/twitter.png | Bin .../kubernetes-basics/scale-interactive.html | 0 .../kubernetes-basics/scale-intro.html | 0 .../kubernetes-basics/update-interactive.html | 0 .../kubernetes-basics/update-intro.html | 0 .../docs/tutorials/online-training/_index.md | 5 + .../tutorials/online-training/overview.md | 11 +- content/en/docs/tutorials/services/_index.md | 5 + .../en/docs}/tutorials/services/source-ip.md | 29 +- .../tutorials/stateful-application/Dockerfile | 0 .../tutorials/stateful-application/_index.md | 5 + .../basic-stateful-set.md | 49 +- .../stateful-application/cassandra.md | 49 +- .../cassandra/cassandra-service.yaml | 0 .../cassandra/cassandra-statefulset.yaml | 0 .../mysql-wordpress-persistent-volume.md | 69 +- .../mysql-deployment.yaml | 0 .../wordpress-deployment.yaml | 0 .../tutorials/stateful-application/web.yaml | 0 .../tutorials/stateful-application/webp.yaml | 0 .../stateful-application/zookeeper.md | 27 +- .../stateful-application/zookeeper.yaml | 0 .../stateless-application/Dockerfile | 0 .../tutorials/stateless-application/_index.md | 5 + .../stateless-application/deployment.yaml | 0 .../expose-external-ip-address.md | 27 +- .../stateless-application/guestbook.md | 50 +- .../guestbook/frontend-deployment.yaml | 0 .../guestbook/frontend-service.yaml | 0 .../guestbook/redis-master-deployment.yaml | 0 .../guestbook/redis-master-service.yaml | 0 .../guestbook/redis-slave-deployment.yaml | 0 .../guestbook/redis-slave-service.yaml | 0 .../stateless-application/hello-minikube.md | 27 +- .../tutorials/stateless-application/server.js | 0 .../en/docs}/update-user-guide-links.py | 0 {docs => content/en/docs}/user-guide/OWNERS | 0 content/en/docs/user-guide/_index.md | 3 + .../en/docs}/user-guide/walkthrough/OWNERS | 0 .../en/docs/user-guide/walkthrough/_index.md | 15 +- .../walkthrough/deployment-update.yaml | 0 .../user-guide/walkthrough/deployment.yaml | 0 .../en/docs}/user-guide/walkthrough/k8s201.md | 22 +- .../walkthrough/pod-nginx-with-label.yaml | 0 .../user-guide/walkthrough/pod-nginx.yaml | 0 .../user-guide/walkthrough/pod-redis.yaml | 0 .../pod-with-http-healthcheck.yaml | 0 .../pod-with-tcp-socket-healthcheck.yaml | 0 .../docs}/user-guide/walkthrough/service.yaml | 0 content/en/docs/user-journeys/_index.md | 3 + .../users/application-developer/_index.md | 5 + .../users/application-developer/advanced.md | 118 + .../application-developer/foundational.md | 233 + .../application-developer/intermediate.md | 158 + .../users/cluster-operator/_advanced.md | 11 +- .../users/cluster-operator/_index.md | 5 + .../users/cluster-operator/foundational.md | 11 +- .../users/cluster-operator/intermediate.md | 11 +- .../includes/default-storage-class-prereqs.md | 6 + .../federated-task-tutorial-prereqs.md | 8 + .../en/includes/federation-content-moved.md | 2 + .../en/includes/federation-current-state.md | 7 + content/en/includes/index.md | 3 + .../en/includes}/partner-script.js | 11 +- .../en/includes}/partner-style.css | 0 content/en/includes/task-tutorial-prereqs.md | 8 + .../en/includes/user-guide-content-moved.md | 3 + .../includes/user-guide-migration-notice.md | 12 + .../en/partners/_index.html | 13 +- .../canonical-tags/architecture.yaml | 0 {_data => data}/canonical-tags/community.yaml | 0 .../canonical-tags/core-object.yaml | 0 {_data => data}/canonical-tags/extension.yaml | 0 .../canonical-tags/fundamental.yaml | 0 .../canonical-tags/networking.yaml | 0 {_data => data}/canonical-tags/operation.yaml | 0 {_data => data}/canonical-tags/security.yaml | 0 {_data => data}/canonical-tags/storage.yaml | 0 {_data => data}/canonical-tags/tool.yaml | 0 {_data => data}/canonical-tags/user-type.yaml | 0 {_data => data}/canonical-tags/workload.yaml | 0 {_data => data}/concepts.yml | 0 {_data => data}/docs-home.yml | 0 {_data => data}/globals.yml | 0 {_data => data}/glossary/_example.yml | 0 {_data => data}/glossary/annotation.yaml | 0 .../glossary/application-architect.yaml | 0 .../glossary/application-developer.yaml | 0 {_data => data}/glossary/approver.yaml | 0 {_data => data}/glossary/certificate.yaml | 0 {_data => data}/glossary/cla.yaml | 0 .../glossary/cloud-controller-manager.yml | 0 {_data => data}/glossary/cloud-provider.yaml | 0 .../glossary/cluster-architect.yaml | 0 .../glossary/cluster-operator.yaml | 0 {_data => data}/glossary/cluster.yaml | 0 .../glossary/code-contributor.yaml | 0 {_data => data}/glossary/configmap.yaml | 0 .../glossary/container-env-variables.yaml | 0 {_data => data}/glossary/container.yaml | 0 {_data => data}/glossary/contributor.yaml | 0 {_data => data}/glossary/controller.yaml | 0 {_data => data}/glossary/cronjob.yaml | 0 .../glossary/customresourcedefinition.yaml | 0 {_data => data}/glossary/daemonset.yaml | 0 {_data => data}/glossary/deployment.yaml | 0 {_data => data}/glossary/developer.yaml | 0 {_data => data}/glossary/docker.yaml | 0 {_data => data}/glossary/downstream.yaml | 0 .../glossary/dynamic-volume-provisioning.yaml | 0 {_data => data}/glossary/etcd.yaml | 0 {_data => data}/glossary/helm-chart.yaml | 0 .../glossary/horizontal-pod-autoscaler.yaml | 0 {_data => data}/glossary/image.yaml | 0 {_data => data}/glossary/ingress.yaml | 0 {_data => data}/glossary/init-container.yaml | 0 {_data => data}/glossary/istio.yaml | 0 {_data => data}/glossary/job.yaml | 0 {_data => data}/glossary/kops.yaml | 0 {_data => data}/glossary/kube-apiserver.yaml | 0 .../glossary/kube-controller-manager.yaml | 0 {_data => data}/glossary/kube-proxy.yaml | 0 {_data => data}/glossary/kube-scheduler.yaml | 0 {_data => data}/glossary/kubeadm.yaml | 0 {_data => data}/glossary/kubectl.yaml | 0 {_data => data}/glossary/kubelet.yaml | 0 {_data => data}/glossary/kubernetes-api.yaml | 0 {_data => data}/glossary/label.yaml | 0 {_data => data}/glossary/maintainer.yaml | 0 {_data => data}/glossary/managed-service.yaml | 0 {_data => data}/glossary/member.yaml | 0 {_data => data}/glossary/minikube.yaml | 0 {_data => data}/glossary/name.yaml | 0 {_data => data}/glossary/namespace.yaml | 0 {_data => data}/glossary/network-policy.yaml | 0 {_data => data}/glossary/node.yaml | 0 .../glossary/persistent-volume-claim.yaml | 0 .../glossary/persistent-volume.yaml | 0 .../glossary/platform-developer.yaml | 0 .../glossary/pod-security-policy.yaml | 0 {_data => data}/glossary/pod.yaml | 0 {_data => data}/glossary/podpreset.yaml | 0 {_data => data}/glossary/rbac.yaml | 0 {_data => data}/glossary/replica-set.yml | 0 .../glossary/replication-controller.yaml | 0 {_data => data}/glossary/resource-quota.yaml | 0 {_data => data}/glossary/reviewer.yaml | 0 {_data => data}/glossary/secret.yml | 0 .../glossary/security-context.yaml | 0 {_data => data}/glossary/selector.yaml | 0 {_data => data}/glossary/service-account.yaml | 0 {_data => data}/glossary/service-broker.yaml | 0 {_data => data}/glossary/service-catalog.yaml | 0 {_data => data}/glossary/service.yaml | 0 {_data => data}/glossary/sig.yaml | 0 {_data => data}/glossary/statefulset.yml | 0 {_data => data}/glossary/storage-class.yaml | 0 {_data => data}/glossary/uid.yaml | 0 {_data => data}/glossary/upstream.yaml | 0 {_data => data}/glossary/volume-plugin.yaml | 0 {_data => data}/glossary/volume.yaml | 0 {_data => data}/glossary/wg.yaml | 0 {_data => data}/imported.yml | 0 {_data => data}/overrides.yml | 0 {_data => data}/reference.yml | 0 {_data => data}/search.yml | 0 {_data => data}/setup.yml | 5 + {_data => data}/tasks.yml | 0 {_data => data}/tools.yml | 0 {_data => data}/tutorials.yml | 0 .../contributors/code-contributor.yaml | 0 .../contributors/community-contributor.yaml | 0 .../contributors/docs-contributor.yaml | 0 .../migrators/docker-compose-swarm.yaml | 0 .../user-personas/migrators/heroku.yaml | 0 .../user-personas/migrators/mesos.yaml | 0 .../migrators/vmware-openstack.yaml | 0 .../user-personas/users/app-developer.yaml | 0 .../user-personas/users/cluster-operator.yaml | 0 docs/home/contribute/includes.md | 205 - docs/home/index.md | 161 - .../generated/cloud-controller-manager.md | 326 - .../generated/federation-apiserver.md | 152 - .../federation-controller-manager.md | 58 - .../extensions/v1beta1/definitions.html | 7379 - .../extensions/v1beta1/operations.html | 9932 -- .../federation/v1beta1/definitions.html | 1606 - .../federation/v1beta1/operations.html | 1921 - docs/reference/generated/federation/index.md | 16 - .../generated/federation/v1/definitions.html | 2453 - .../generated/federation/v1/operations.html | 9529 -- docs/reference/generated/kube-apiserver.md | 888 - .../generated/kube-controller-manager.md | 661 - docs/reference/generated/kube-proxy.md | 303 - docs/reference/generated/kube-scheduler.md | 233 - .../generated/kubectl/kubectl-commands.html | 8388 -- docs/reference/generated/kubectl/kubectl.md | 93 - docs/reference/generated/kubectl/navData.js | 1 - .../bootstrap/dist/css/bootstrap.min.css | 6 - .../font-awesome/css/font-awesome.min.css | 4 - .../highlight.js/styles/default.css | 99 - .../jquery.scrollto/jquery.scrollTo.min.js | 7 - .../node_modules/jquery/dist/jquery.min.js | 4 - docs/reference/generated/kubectl/scroll.js | 196 - .../generated/kubectl/stylesheet.css | 269 - .../generated/kubectl/tabvisibility.js | 27 - docs/reference/generated/kubefed.md | 70 - docs/reference/generated/kubefed_init.md | 104 - docs/reference/generated/kubefed_join.md | 98 - docs/reference/generated/kubefed_options.md | 76 - docs/reference/generated/kubefed_unjoin.md | 85 - docs/reference/generated/kubefed_version.md | 79 - docs/reference/generated/kubelet.md | 77 - .../generated/kubernetes-api/v1.10/index.html | 111340 --------------- .../generated/kubernetes-api/v1.10/navData.js | 1 - .../bootstrap/dist/css/bootstrap.min.css | 6 - .../font-awesome/css/font-awesome.css | 2337 - .../font-awesome/css/font-awesome.css.map | 7 - .../font-awesome/css/font-awesome.min.css | 4 - .../font-awesome/fonts/FontAwesome.otf | Bin 134808 -> 0 bytes .../fonts/fontawesome-webfont.eot | Bin 165742 -> 0 bytes .../fonts/fontawesome-webfont.svg | 2671 - .../fonts/fontawesome-webfont.ttf | Bin 165548 -> 0 bytes .../fonts/fontawesome-webfont.woff | Bin 98024 -> 0 bytes .../fonts/fontawesome-webfont.woff2 | Bin 77160 -> 0 bytes .../highlight.js/styles/default.css | 99 - .../jquery.scrollto/jquery.scrollTo.min.js | 7 - .../node_modules/jquery/dist/jquery.min.js | 4 - .../generated/kubernetes-api/v1.10/scroll.js | 196 - .../kubernetes-api/v1.10/stylesheet.css | 269 - .../kubernetes-api/v1.10/tabvisibility.js | 27 - docs/reference/glossary.md | 67 - .../setup-tools/kubeadm/generated/README.md | 1 - .../setup-tools/kubeadm/kubeadm-alpha.md | 265 - .../setup-tools/kubeadm/kubeadm-version.md | 15 - .../users/application-developer/advanced.md | 117 - .../application-developer/foundational.md | 232 - .../application-developer/intermediate.md | 157 - .../deployment-process.png | Bin 129090 -> 0 bytes .../jenkins-pipeline.png | Bin 18643 -> 0 bytes .../resources.png | Bin 140669 -> 0 bytes .../dok-architecture_preview.png | Bin 174196 -> 0 bytes .../dok-devmodes_preview.png | Bin 35040 -> 0 bytes .../dok-ksync_preview.png | Bin 121780 -> 0 bytes .../dok-minikube-localdev_preview.png | Bin 127200 -> 0 bytes .../dok-skaffold_preview.png | Bin 174354 -> 0 bytes jquery-ui.html | 513 - layouts/404.html | 5 + layouts/_default/baseof.html | 25 + layouts/_default/list.html | 3 + layouts/_default/single.html | 3 + layouts/blog/baseof.html | 38 + layouts/blog/list.html | 8 + layouts/blog/pager.html | 12 + layouts/blog/post.html | 3 + layouts/blog/single.html | 4 + layouts/case-studies/baseof.html | 12 + layouts/case-studies/single.html | 3 + layouts/community/list.html | 7 + layouts/docs/baseof.html | 45 + layouts/docs/docsportal.html | 12 + layouts/docs/docsportal_home.html | 96 + layouts/docs/glossary.html | 56 + layouts/docs/list.html | 13 + docs/search.md => layouts/docs/search.html | 11 +- layouts/docs/single.html | 8 + layouts/index.html | 10 + layouts/index.rss.xml | 38 + layouts/partials/blog/archive.html | 21 + layouts/partials/deprecation-warning.html | 12 + layouts/partials/docs/browse.html | 39 + layouts/partials/docs/content_page.html | 12 + layouts/partials/docs/side-menu.html | 24 + layouts/partials/docs/top-menu.html | 21 + layouts/partials/docs/user-journey.html | 22 + .../partials}/footer-scripts.html | 12 - {_includes => layouts/partials}/footer.html | 17 +- layouts/partials/head.html | 35 + layouts/partials/header.html | 79 + layouts/partials/insert-capture.html | 4 + layouts/partials/templates/block.html | 14 + layouts/partials/templates/blocks.html | 20 + layouts/partials/templates/concept.html | 8 + layouts/partials/templates/errorthrower.html | 14 + .../partials/templates/feature-dialog.html | 13 +- layouts/partials/templates/feature-state.html | 21 + layouts/partials/templates/task.html | 11 + layouts/partials/templates/tutorial.html | 12 + .../templates/user-journey-content.html | 23 + layouts/partials/tree.html | 25 + layouts/robots.txt | 9 + layouts/shortcodes/capture.html | 6 + layouts/shortcodes/caution.html | 3 + layouts/shortcodes/code.html | 38 + layouts/shortcodes/comment.html | 1 + layouts/shortcodes/deprecationwarning.html | 12 + layouts/shortcodes/feature-state.html | 10 + layouts/shortcodes/glossary_definition.html | 29 + layouts/shortcodes/glossary_tooltip.html | 22 + layouts/shortcodes/include.html | 27 + layouts/shortcodes/link.html | 5 + layouts/shortcodes/note.html | 3 + layouts/shortcodes/param.html | 1 + layouts/shortcodes/reference_docs.html | 1 + layouts/shortcodes/tab.html | 19 + layouts/shortcodes/tabs.html | 43 + layouts/shortcodes/toc.html | 1 + layouts/shortcodes/version-check.html | 6 + layouts/shortcodes/versions-other.html | 9 + layouts/shortcodes/warning.html | 3 + netlify.toml | 22 +- robots.txt | 11 - {_sass => src/sass}/_base.sass | 35 +- {_sass => src/sass}/_case-studies.sass | 0 {_sass => src/sass}/_desktop.sass | 0 {_sass => src/sass}/_reset.sass | 0 {_sass => src/sass}/_size.sass | 0 {_sass => src/sass}/_skin.sass | 0 {_sass => src/sass}/_tablet.sass | 0 src/sass/case_study_styles.sass | 9 + src/sass/styles.sass | 10 + _redirects => static/_redirects | 0 {css => static/css}/base_fonts.css | 0 {css => static/css}/blog.css | 0 {css => static/css}/callouts.css | 0 static/css/case_study_styles.css | 943 + {css => static/css}/case_study_styles.sass | 0 {css => static/css}/custom-jekyll/tags.css | 0 {css => static/css}/deprecation-warning.css | 0 {css => static/css}/glossary.css | 0 {css => static/css}/gridpage.css | 0 {css => static/css}/jquery-ui.min.css | 0 .../css}/jquery-ui.structure.min.css | 0 {css => static/css}/jquery-ui.theme.min.css | 0 {css => static/css}/style_amadeus.css | 0 {css => static/css}/style_ancestry.css | 0 {css => static/css}/style_blablacar.css | 0 {css => static/css}/style_blackrock.css | 0 {css => static/css}/style_box.css | 0 {css => static/css}/style_buffer.css | 0 {css => static/css}/style_case_studies.css | 0 {css => static/css}/style_crowdfire.css | 0 {css => static/css}/style_golfnow.css | 0 {css => static/css}/style_haufegroup.css | 0 {css => static/css}/style_huawei.css | 0 {css => static/css}/style_peardeck.css | 0 {css => static/css}/style_user_journeys.css | 0 {css => static/css}/style_wink.css | 0 {css => static/css}/style_zalando.css | 0 static/css/styles.css | 898 + {css => static/css}/styles.sass | 0 {css => static/css}/sweetalert.css | 0 .../fonts}/MaterialIcons-Regular.eot | Bin .../fonts}/MaterialIcons-Regular.svg | 0 .../fonts}/MaterialIcons-Regular.ttf | Bin .../fonts}/MaterialIcons-Regular.woff | Bin .../fonts}/MaterialIcons-Regular.woff2 | Bin .../fonts}/roboto-mono-v5-latin-regular.eot | Bin .../fonts}/roboto-mono-v5-latin-regular.svg | 0 .../fonts}/roboto-mono-v5-latin-regular.ttf | Bin .../fonts}/roboto-mono-v5-latin-regular.woff | Bin .../fonts}/roboto-mono-v5-latin-regular.woff2 | Bin .../fonts}/roboto-v18-latin-100.eot | Bin .../fonts}/roboto-v18-latin-100.svg | 0 .../fonts}/roboto-v18-latin-100.ttf | Bin .../fonts}/roboto-v18-latin-100.woff | Bin .../fonts}/roboto-v18-latin-100.woff2 | Bin .../fonts}/roboto-v18-latin-100italic.eot | Bin .../fonts}/roboto-v18-latin-100italic.svg | 0 .../fonts}/roboto-v18-latin-100italic.ttf | Bin .../fonts}/roboto-v18-latin-100italic.woff | Bin .../fonts}/roboto-v18-latin-100italic.woff2 | Bin .../fonts}/roboto-v18-latin-300.eot | Bin .../fonts}/roboto-v18-latin-300.svg | 0 .../fonts}/roboto-v18-latin-300.ttf | Bin .../fonts}/roboto-v18-latin-300.woff | Bin .../fonts}/roboto-v18-latin-300.woff2 | Bin .../fonts}/roboto-v18-latin-300italic.eot | Bin .../fonts}/roboto-v18-latin-300italic.svg | 0 .../fonts}/roboto-v18-latin-300italic.ttf | Bin .../fonts}/roboto-v18-latin-300italic.woff | Bin .../fonts}/roboto-v18-latin-300italic.woff2 | Bin .../fonts}/roboto-v18-latin-500.eot | Bin .../fonts}/roboto-v18-latin-500.svg | 0 .../fonts}/roboto-v18-latin-500.ttf | Bin .../fonts}/roboto-v18-latin-500.woff | Bin .../fonts}/roboto-v18-latin-500.woff2 | Bin .../fonts}/roboto-v18-latin-500italic.eot | Bin .../fonts}/roboto-v18-latin-500italic.svg | 0 .../fonts}/roboto-v18-latin-500italic.ttf | Bin .../fonts}/roboto-v18-latin-500italic.woff | Bin .../fonts}/roboto-v18-latin-500italic.woff2 | Bin .../fonts}/roboto-v18-latin-700.eot | Bin .../fonts}/roboto-v18-latin-700.svg | 0 .../fonts}/roboto-v18-latin-700.ttf | Bin .../fonts}/roboto-v18-latin-700.woff | Bin .../fonts}/roboto-v18-latin-700.woff2 | Bin .../fonts}/roboto-v18-latin-700italic.eot | Bin .../fonts}/roboto-v18-latin-700italic.svg | 0 .../fonts}/roboto-v18-latin-700italic.ttf | Bin .../fonts}/roboto-v18-latin-700italic.woff | Bin .../fonts}/roboto-v18-latin-700italic.woff2 | Bin .../fonts}/roboto-v18-latin-900.eot | Bin .../fonts}/roboto-v18-latin-900.svg | 0 .../fonts}/roboto-v18-latin-900.ttf | Bin .../fonts}/roboto-v18-latin-900.woff | Bin .../fonts}/roboto-v18-latin-900.woff2 | Bin .../fonts}/roboto-v18-latin-900italic.eot | Bin .../fonts}/roboto-v18-latin-900italic.svg | 0 .../fonts}/roboto-v18-latin-900italic.ttf | Bin .../fonts}/roboto-v18-latin-900italic.woff | Bin .../fonts}/roboto-v18-latin-900italic.woff2 | Bin .../fonts}/roboto-v18-latin-italic.eot | Bin .../fonts}/roboto-v18-latin-italic.svg | 0 .../fonts}/roboto-v18-latin-italic.ttf | Bin .../fonts}/roboto-v18-latin-italic.woff | Bin .../fonts}/roboto-v18-latin-italic.woff2 | Bin .../fonts}/roboto-v18-latin-regular.eot | Bin .../fonts}/roboto-v18-latin-regular.svg | 0 .../fonts}/roboto-v18-latin-regular.ttf | Bin .../fonts}/roboto-v18-latin-regular.woff | Bin .../fonts}/roboto-v18-latin-regular.woff2 | Bin .../images}/CaseStudy_amadeus_banner1.jpg | Bin .../images}/CaseStudy_amadeus_banner3.jpg | Bin .../images}/CaseStudy_amadeus_banner4.jpg | Bin .../CaseStudy_amadeus_banner_mobile.jpg | Bin .../images}/CaseStudy_ancestry_banner1.jpg | Bin .../images}/CaseStudy_ancestry_banner3.jpg | Bin .../images}/CaseStudy_ancestry_banner4.jpg | Bin .../images}/CaseStudy_blablacar_banner1.jpg | Bin .../CaseStudy_blablacar_banner1_mobile.jpg | Bin .../images}/CaseStudy_blablacar_banner3.jpg | Bin .../images}/CaseStudy_blablacar_banner4.jpg | Bin .../images}/CaseStudy_blackrock_banner1.jpg | Bin .../images}/CaseStudy_blackrock_banner3.jpg | Bin .../images}/CaseStudy_blackrock_banner4.jpg | Bin .../images}/CaseStudy_box_banner1.jpg | Bin .../images}/CaseStudy_box_banner3.jpg | Bin .../images}/CaseStudy_box_banner4.jpg | Bin .../images}/CaseStudy_buffer_banner1.jpg | Bin .../images}/CaseStudy_buffer_banner3.jpg | Bin .../images}/CaseStudy_buffer_banner4.jpg | Bin .../images}/CaseStudy_crowdfire_banner1.jpg | Bin .../images}/CaseStudy_crowdfire_banner3.jpg | Bin .../images}/CaseStudy_crowdfire_banner4.jpg | Bin .../images}/CaseStudy_golfnow_banner1.jpg | Bin .../images}/CaseStudy_golfnow_banner3.jpg | Bin .../images}/CaseStudy_golfnow_banner4.jpg | Bin .../images}/CaseStudy_haufegroup_banner1.jpg | Bin .../images}/CaseStudy_haufegroup_banner3.jpg | Bin .../images}/CaseStudy_haufegroup_banner4.jpg | Bin .../images}/CaseStudy_huawei_banner1.jpg | Bin .../images}/CaseStudy_huawei_banner3.jpg | Bin .../images}/CaseStudy_huawei_banner4.jpg | Bin .../images}/CaseStudy_peardeck_banner1.jpg | Bin .../images}/CaseStudy_peardeck_banner2.jpg | Bin .../images}/CaseStudy_peardeck_banner3.jpg | Bin .../images}/CaseStudy_squarespace_banner1.jpg | Bin .../images}/CaseStudy_squarespace_banner3.jpg | Bin .../images}/CaseStudy_squarespace_banner4.jpg | Bin .../images}/CaseStudy_wink_banner1.jpg | Bin .../images}/CaseStudy_wink_banner3.jpg | Bin .../images}/CaseStudy_wink_banner4.jpg | Bin .../images}/CaseStudy_zalando_banner1.jpg | Bin .../images}/CaseStudy_zalando_banner3.jpg | Bin .../images}/CaseStudy_zalando_banner4.jpg | Bin .../images}/KubeCon_EU_Community.jpg | Bin .../images}/KubeCon_NA_Community.jpg | Bin .../images}/KubeCon_NA_Community.png | Bin {images => static/images}/amadeus.png | Bin {images => static/images}/amadeus_logo.png | Bin {images => static/images}/blablacar_logo.png | Bin {images => static/images}/blackrock_logo.png | Bin {images => static/images}/blocks.png | Bin .../csi-kubernetes.png | Bin .../csi-logo.png | Bin .../most-discussed.png | Bin .../most-reviews.png | Bin .../blog-logging/diagrams/27gf-counter.png | Bin .../blog-logging/diagrams/cloud-logging.png | Bin .../images}/blog/2018-03-01-cncf-color.svg | 0 {images => static/images}/blog/OWNERS | 0 .../custom-tooling.png | Bin .../minikube-os-usage.png | Bin .../tool-manage-apps.png | Bin {images => static/images}/box_logo.png | Bin {images => static/images}/buffer.png | Bin .../images}/case_studies/Video-Clip-Box.png | Bin .../images}/case_studies/amadeus.png | Bin .../images}/case_studies/amadeus_feature.png | Bin .../images}/case_studies/ancestry-logo.png | Bin .../images}/case_studies/ancestry.png | Bin .../images}/case_studies/blablacar-logo.png | Bin .../images}/case_studies/blablacar.png | Bin .../images}/case_studies/blackrock.png | Bin .../images}/case_studies/blackrock2.png | Bin .../images}/case_studies/box-small.png | Bin .../images}/case_studies/box.png | Bin .../images}/case_studies/box_logo.png | Bin .../images}/case_studies/buffer.png | Bin .../images}/case_studies/buffer_logo.png | Bin .../images}/case_studies/ccp.png | Bin .../images}/case_studies/comcast_logo.png | Bin .../images}/case_studies/concur.png | Bin .../case_studies/crowdfire_feature.png | Bin .../images}/case_studies/ebay.png | Bin .../images}/case_studies/ebay_logo.png | Bin .../images}/case_studies/golfnow.png | Bin .../images}/case_studies/golfnow_logo.png | Bin {images => static/images}/case_studies/gs.png | Bin .../images}/case_studies/haufegroup_logo.png | Bin .../case_studies/haufegroup_logo_feature.png | Bin .../images}/case_studies/homeoffice.png | Bin .../images}/case_studies/huawei.png | Bin .../images}/case_studies/huawei_feature.png | Bin {images => static/images}/case_studies/jd.png | Bin .../images}/case_studies/liveperson.png | Bin .../images}/case_studies/monzo_logo.png | Bin .../images}/case_studies/nyt.png | Bin .../images}/case_studies/openai.png | Bin .../images}/case_studies/peardeck.png | Bin .../images}/case_studies/peardeck_logo.png | Bin .../images}/case_studies/pearson.png | Bin .../images}/case_studies/pearson_logo.png | Bin .../images}/case_studies/philips_logo.png | Bin .../images}/case_studies/pokemon_go_logo.png | Bin .../images}/case_studies/sap.png | Bin .../images}/case_studies/sap_small.png | Bin .../images}/case_studies/sds.png | Bin .../images}/case_studies/soundcloud.png | Bin .../case_studies/squarespace_feature.png | Bin .../images}/case_studies/story.png | Bin .../images}/case_studies/video_thumb.jpg | Bin .../images}/case_studies/video_thumb1.png | Bin .../images}/case_studies/wepay.png | Bin .../images}/case_studies/wikimedia.png | Bin .../images}/case_studies/wikimedia_logo.png | Bin .../images}/case_studies/wink.png | Bin .../images}/case_studies/wink_logo.png | Bin .../images}/case_studies/wmc.png | Bin .../images}/case_studies/yahooJapan_logo.png | Bin .../images}/case_studies/yahoojapan.png | Bin .../images}/case_studies/zalando_feature.png | Bin .../images}/case_studies/zulily.png | Bin .../images}/case_studies/zulily_logo.png | Bin .../community_logos/appformix_logo.png | Bin .../images}/community_logos/apprenda_logo.png | Bin .../images}/community_logos/aqua_logo.png | Bin .../images}/community_logos/box_logo.png | Bin .../images}/community_logos/citrix_logo.png | Bin .../images}/community_logos/core_os_logo.png | Bin .../community_logos/crunchy_data_logo.png | Bin .../images}/community_logos/datadog_logo.png | Bin .../images}/community_logos/deis_logo.png | Bin .../images}/community_logos/distelli_logo.png | Bin .../images}/community_logos/ebay_logo.png | Bin .../community_logos/elastickube_logo.png | Bin .../community_logos/goldman_sachs_logo.png | Bin .../images}/community_logos/ibm_logo.png | Bin .../images}/community_logos/intel_logo.png | Bin .../images}/community_logos/kabam_logo.png | Bin .../community_logos/mesosphere_logo.png | Bin .../images}/community_logos/mirantis_logo.png | Bin .../community_logos/new_york_times_logo.png | Bin .../community_logos/nuage_network_logo.png | Bin .../images}/community_logos/pearson_logo.png | Bin .../community_logos/platform9_logo.png | Bin .../images}/community_logos/puppet_logo.png | Bin .../images}/community_logos/rancher_logo.png | Bin .../images}/community_logos/red_hat_logo.png | Bin .../community_logos/soundcloud_logo.png | Bin .../community_logos/sysdig_cloud_logo.png | Bin .../images}/community_logos/sysdig_logo.png | Bin .../ubuntu_cannonical_logo.png | Bin .../images}/community_logos/viacom_logo.png | Bin .../images}/community_logos/we_pay_logo.png | Bin .../images}/community_logos/wercker_logo.png | Bin .../wikimedia_foundation_logo.png | Bin .../community_logos/wikimedia_logo.png | Bin .../images}/community_logos/zulily_logo.png | Bin {images => static/images}/copycode.svg | 0 {images => static/images}/crowdfire_logo.png | Bin {images => static/images}/diamanti.png | Bin .../images}/docs/Kubemark_architecture.png | Bin {images => static/images}/docs/Makefile | 0 .../docs/admin/access-control-overview.svg | 0 .../images}/docs/admin/k8s_oidc_login.svg | 0 {images => static/images}/docs/all-lines.png | Bin .../images}/docs/architecture.png | Bin .../images}/docs/architecture.svg | 0 .../images}/docs/bigquery-logging.png | Bin {images => static/images}/docs/cadvisor.png | Bin {images => static/images}/docs/cassandra.svg | 0 .../images}/docs/cloud-logging-console.png | Bin {images => static/images}/docs/diagram.png | Bin {images => static/images}/docs/dynamic.png | Bin {images => static/images}/docs/es-browser.png | Bin .../images}/docs/external_access.png | Bin .../docs/federation-high-level-arch.png | Bin {images => static/images}/docs/gcm.png | Bin .../images}/docs/git_workflow.png | Bin .../images}/docs/ha-master-gce.png | Bin {images => static/images}/docs/ha.png | Bin {images => static/images}/docs/ha.svg | 0 .../docs/horizontal-pod-autoscaler.png | Bin .../docs/horizontal-pod-autoscaler.svg | 0 {images => static/images}/docs/influx.png | Bin {images => static/images}/docs/ip-masq.png | Bin {images => static/images}/docs/k8s-docker.png | Bin .../images}/docs/k8s-firewall.png | Bin .../images}/docs/k8s-guestbook.png | Bin .../images}/docs/k8s-singlenode-docker.png | Bin .../images}/docs/kibana-logs.png | Bin {images => static/images}/docs/kibana.png | Bin {images => static/images}/docs/kitten.jpg | Bin .../images}/docs/kubectl_drain.svg | 0 .../images}/docs/kubectl_rollingupdate.svg | 0 .../images}/docs/monitoring-architecture.png | Bin {images => static/images}/docs/nautilus.jpg | Bin .../images}/docs/node-allocatable.png | Bin .../images}/docs/ovs-networking.png | Bin {images => static/images}/docs/pleg.png | Bin {images => static/images}/docs/pod-cache.png | Bin .../images}/docs/pod-overview.svg | 0 {images => static/images}/docs/pod.svg | 0 .../images}/docs/pods/single-container_1.ai | 0 .../images}/docs/pods/single-container_1.svg | 0 .../images}/docs/post-ccm-arch.png | Bin .../images}/docs/pr_workflow.png | Bin .../images}/docs/pre-ccm-arch.png | Bin {images => static/images}/docs/redis.svg | 0 {images => static/images}/docs/releasing.png | Bin {images => static/images}/docs/releasing.svg | 0 .../docs/service-catalog-architecture.svg | 0 .../images}/docs/service-catalog-bind.svg | 0 .../images}/docs/service-catalog-list.svg | 0 .../images}/docs/service-catalog-map.svg | 0 .../docs/service-catalog-provision.svg | 0 .../images}/docs/services-detail.png | Bin .../images}/docs/services-detail.svg | 0 .../docs/services-iptables-overview.png | Bin .../docs/services-iptables-overview.svg | 0 .../images}/docs/services-ipvs-overview.svg | 0 .../images}/docs/services-overview.png | Bin .../images}/docs/services-overview.svg | 0 .../docs/services-userspace-overview.png | Bin .../docs/services-userspace-overview.svg | 0 .../stackdriver-event-exporter-filter.png | Bin .../stackdriver-event-exporter-resource.png | Bin {images => static/images}/docs/static.png | Bin .../images}/docs/synth-logger.png | Bin .../images}/docs/ubuntu/00-select-cloud.png | Bin .../images}/docs/ubuntu/01-deploy.png | Bin .../images}/docs/ubuntu/02-bootstrap.png | Bin .../images}/docs/ubuntu/03-waiting.png | Bin .../images}/docs/ubuntu/04-postprocessing.png | Bin .../images}/docs/ubuntu/05-final-summary.png | Bin .../images}/docs/ui-dashboard-deploy-file.png | Bin .../docs/ui-dashboard-deploy-simple.png | Bin .../docs/ui-dashboard-deployment-detail.png | Bin .../images}/docs/ui-dashboard-detailsview.png | Bin .../images}/docs/ui-dashboard-logs-view.png | Bin .../images}/docs/ui-dashboard-node.png | Bin .../docs/ui-dashboard-secret-detail.png | Bin .../docs/ui-dashboard-service-list.png | Bin .../docs/ui-dashboard-workloadview.png | Bin .../images}/docs/ui-dashboard-zerostate.png | Bin .../images}/docs/ui-dashboard.png | Bin .../logging/logging-from-application.png | Bin .../user-guide/logging/logging-node-level.png | Bin .../logging/logging-with-node-agent.png | Bin .../logging/logging-with-sidecar-agent.png | Bin .../logging-with-streaming-sidecar.png | Bin {images => static/images}/docs/warning.png | Bin .../images}/docs/why_containers.svg | 0 {images => static/images}/docs/wordpress.svg | 0 {images => static/images}/favicon.png | Bin {images => static/images}/flower.png | Bin {images => static/images}/github_icon.png | Bin {images => static/images}/golfnow.png | Bin {images => static/images}/golfnow_logo.png | Bin {images => static/images}/haufegroup_logo.png | Bin .../images}/hellonode/image_0.png | Bin .../images}/hellonode/image_1.png | Bin .../images}/hellonode/image_10.png | Bin .../images}/hellonode/image_11.png | Bin .../images}/hellonode/image_12.png | Bin .../images}/hellonode/image_13.png | Bin .../images}/hellonode/image_14.png | Bin .../images}/hellonode/image_2.png | Bin .../images}/hellonode/image_3.png | Bin .../images}/hellonode/image_4.png | Bin .../images}/hellonode/image_5.png | Bin .../images}/hellonode/image_6.png | Bin .../images}/hellonode/image_7.png | Bin .../images}/hellonode/image_8.png | Bin .../images}/hellonode/image_9.png | Bin {images => static/images}/hpc-ec2-vpc-2.png | Bin {images => static/images}/hpn-ec2-vpc.png | Bin {images => static/images}/huawei_logo.png | Bin {images => static/images}/icon-pencil.svg | 0 .../images}/journeys/placeholder.png | Bin .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin .../jquery-ui/ui-bg_flat_10_000000_40x100.png | Bin .../ui-bg_glass_100_f6f6f6_1x400.png | Bin .../ui-bg_glass_100_fdf5ce_1x400.png | Bin .../jquery-ui/ui-bg_glass_65_ffffff_1x400.png | Bin .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin .../jquery-ui/ui-icons_222222_256x240.png | Bin .../jquery-ui/ui-icons_228ef1_256x240.png | Bin .../jquery-ui/ui-icons_444444_256x240.png | Bin .../jquery-ui/ui-icons_555555_256x240.png | Bin .../jquery-ui/ui-icons_777620_256x240.png | Bin .../jquery-ui/ui-icons_777777_256x240.png | Bin .../jquery-ui/ui-icons_cc0000_256x240.png | Bin .../jquery-ui/ui-icons_ef8c08_256x240.png | Bin .../jquery-ui/ui-icons_ffd27a_256x240.png | Bin .../jquery-ui/ui-icons_ffffff_256x240.png | Bin .../images}/kub_video_banner.jpg | Bin .../images}/kub_video_banner_box.jpg | Bin {images => static/images}/kub_video_thm.jpg | Bin {images => static/images}/link.png | Bin .../images}/logos/redhat_logo.png | Bin .../images}/logos/soundcloud_logo.png | Bin .../images}/logos/verizon_logo.png | Bin .../images}/logos/viacom_logo.png | Bin .../images}/logos/wepay_logo.png | Bin .../jekyll-tags-glossary-injector.gif | Bin .../metadocs/jekyll-tags-glossary-tooltip.png | Bin {images => static/images}/nav_logo.svg | 0 {images => static/images}/nav_logo2.svg | 0 {images => static/images}/overview_uml.svg | 0 {images => static/images}/peardeck_logo.png | Bin {images => static/images}/pencil.png | Bin {images => static/images}/scalable.png | Bin {images => static/images}/search-icon.svg | 0 {images => static/images}/self-heal.png | Bin {images => static/images}/slack_icon.png | Bin {images => static/images}/social_sprite.png | Bin .../images}/square-logos/accenture.png | Bin .../images}/square-logos/alauda.png | Bin .../images}/square-logos/alibaba.png | Bin .../images}/square-logos/altoros.png | Bin .../images}/square-logos/aporeto.png | Bin .../images}/square-logos/appformix.png | Bin .../images}/square-logos/applatix.png | Bin .../images}/square-logos/apprenda.png | Bin .../images}/square-logos/appscode.png | Bin .../images}/square-logos/aqua.png | Bin .../images}/square-logos/asag.png | Bin .../images}/square-logos/asm.png | Bin .../images}/square-logos/avinetworks.png | Bin .../images}/square-logos/aws.png | Bin .../images}/square-logos/azure.png | Bin .../images}/square-logos/baidu.png | Bin .../images}/square-logos/biarca.png | Bin .../images}/square-logos/bigbinary.png | Bin .../images}/square-logos/bitnami.png | Bin .../images}/square-logos/bloombase.png | Bin .../images}/square-logos/bluefyre.png | Bin .../images}/square-logos/bocloud.png | Bin .../images}/square-logos/bootkube.png | Bin .../square-logos/boozallenhamilton.png | Bin {images => static/images}/square-logos/ca.png | Bin .../images}/square-logos/caicloud.png | Bin .../images}/square-logos/canonical.png | Bin .../images}/square-logos/cascadeo.png | Bin .../images}/square-logos/cff.png | Bin .../images}/square-logos/circulo.png | Bin .../images}/square-logos/cisco.png | Bin .../images}/square-logos/citrix.png | Bin .../images}/square-logos/claranet.png | Bin .../images}/square-logos/cloudbase.png | Bin .../images}/square-logos/cloudbourne.png | Bin .../images}/square-logos/cloudkite.png | Bin .../images}/square-logos/cloudops.png | Bin .../images}/square-logos/cloudperceptions.png | Bin .../images}/square-logos/cloudplex.png | Bin .../images}/square-logos/cobe.png | Bin .../images}/square-logos/cockroach_labs.png | Bin .../images}/square-logos/codecrux.png | Bin .../images}/square-logos/codedellemc.png | Bin .../images}/square-logos/codefresh.png | Bin .../images}/square-logos/componentsoft.png | Bin .../square-logos/container_solutions.png | Bin .../images}/square-logos/containership.png | Bin .../images}/square-logos/contino.png | Bin .../images}/square-logos/controlplane.png | Bin .../images}/square-logos/core_os.png | Bin .../images}/square-logos/coreos.png | Bin .../images}/square-logos/coscale.png | Bin .../images}/square-logos/creationline.png | Bin .../images}/square-logos/crunchy.png | Bin .../images}/square-logos/daocloud.png | Bin .../images}/square-logos/datacore.png | Bin .../images}/square-logos/datadog.png | Bin .../images}/square-logos/dataspine.png | Bin .../images}/square-logos/datawire.png | Bin .../images}/square-logos/datera.png | Bin .../images}/square-logos/deis.png | Bin .../images}/square-logos/devopsguru.png | Bin .../images}/square-logos/diamanti.png | Bin .../images}/square-logos/distelli.png | Bin .../images}/square-logos/docker.png | Bin .../images}/square-logos/easynube.png | Bin .../images}/square-logos/easystack.png | Bin .../images}/square-logos/ein.png | Bin .../images}/square-logos/eking.png | Bin .../images}/square-logos/elastickube.png | Bin .../images}/square-logos/elastifile.png | Bin .../images}/square-logos/elastisys.png | Bin .../images}/square-logos/endocode.png | Bin .../images}/square-logos/eta.png | Bin .../images}/square-logos/f5networks.png | Bin .../images}/square-logos/fluentd.png | Bin .../images}/square-logos/gce.png | Bin .../images}/square-logos/gcp.png | Bin .../images}/square-logos/ghostcloud.png | Bin .../images}/square-logos/giant_swarm.png | Bin .../images}/square-logos/gitlab.png | Bin .../images}/square-logos/google.png | Bin .../images}/square-logos/gopaddle.png | Bin .../images}/square-logos/gravitational.png | Bin .../images}/square-logos/greenfield.png | Bin .../images}/square-logos/guardicore.png | Bin .../images}/square-logos/harbur.png | Bin .../images}/square-logos/harmony.png | Bin .../images}/square-logos/harness.png | Bin .../images}/square-logos/hasura.png | Bin .../images}/square-logos/hedvig.png | Bin .../images}/square-logos/heptio.png | Bin .../images}/square-logos/hitachi.png | Bin .../images}/square-logos/hpe.png | Bin .../images}/square-logos/huawei.png | Bin .../images}/square-logos/humio.png | Bin .../images}/square-logos/ibm.png | Bin .../images}/square-logos/ibmcloud.png | Bin .../images}/square-logos/ibmprivate.png | Bin .../images}/square-logos/inexcco.png | Bin .../images}/square-logos/infosys.png | Bin .../images}/square-logos/infracloud.png | Bin .../images}/square-logos/instana.png | Bin .../images}/square-logos/intel.png | Bin .../images}/square-logos/inwinstack.png | Bin .../images}/square-logos/isotoma.png | Bin .../images}/square-logos/jetbrains.png | Bin .../images}/square-logos/jetstack.png | Bin .../images}/square-logos/jfrog.png | Bin .../images}/square-logos/joyent.png | Bin .../images}/square-logos/kasten.png | Bin .../images}/square-logos/kenzan.png | Bin .../images}/square-logos/kinvolk.png | Bin .../images}/square-logos/kismatic.png | Bin .../images}/square-logos/kloia.png | Bin .../images}/square-logos/kong.png | Bin .../images}/square-logos/kraken.png | Bin .../images}/square-logos/kubeadm.png | Bin .../images}/square-logos/kubermatic.png | Bin .../images}/square-logos/kubernetic.png | Bin .../images}/square-logos/kublr.png | Bin .../images}/square-logos/kumina.png | Bin .../images}/square-logos/landoop.png | Bin .../images}/square-logos/livewyer.png | Bin .../images}/square-logos/logdna.png | Bin .../images}/square-logos/loodse.png | Bin .../images}/square-logos/lovable.png | Bin .../images}/square-logos/lti.png | Bin .../images}/square-logos/mashape.png | Bin .../images}/square-logos/mesosphere.png | Bin .../images}/square-logos/microsoft.png | Bin .../images}/square-logos/mirantis.png | Bin .../images}/square-logos/mobilise.png | Bin .../images}/square-logos/naitways.png | Bin .../images}/square-logos/nats.png | Bin .../images}/square-logos/navops.png | Bin .../images}/square-logos/nebulaworks.png | Bin .../images}/square-logos/netapp.png | Bin .../images}/square-logos/netease.png | Bin .../images}/square-logos/netsil.png | Bin .../images}/square-logos/neuvector.png | Bin .../images}/square-logos/nirmata.png | Bin .../images}/square-logos/nuagenetworks.png | Bin .../images}/square-logos/objectcomputing.png | Bin .../images}/square-logos/opcito.png | Bin .../images}/square-logos/openebs.png | Bin .../images}/square-logos/opensense.png | Bin .../images}/square-logos/openshift.png | Bin .../images}/square-logos/opszero.png | Bin .../images}/square-logos/oracle.png | Bin .../images}/square-logos/oraclelinux.png | Bin .../images}/square-logos/outcold.png | Bin .../images}/square-logos/pivotal.png | Bin .../images}/square-logos/platform9.png | Bin .../images}/square-logos/polarseven.png | Bin .../images}/square-logos/portworx.png | Bin .../images}/square-logos/poseidon.png | Bin .../images}/square-logos/puppet.png | Bin .../images}/square-logos/pure_storage.png | Bin .../images}/square-logos/qstack.png | Bin .../images}/square-logos/rackn.png | Bin .../images}/square-logos/rancher-labs.png | Bin .../images}/square-logos/rancher.png | Bin .../images}/square-logos/reactive_ops.png | Bin .../images}/square-logos/redhat.png | Bin .../images}/square-logos/redis.png | Bin .../images}/square-logos/redzara.png | Bin .../images}/square-logos/rxm.png | Bin .../images}/square-logos/samsung_sds.png | Bin .../images}/square-logos/sap.png | Bin .../images}/square-logos/semantix.png | Bin .../images}/square-logos/sematext.png | Bin .../images}/square-logos/servian.png | Bin .../images}/square-logos/shiwaforce.png | Bin .../images}/square-logos/signalfx.png | Bin .../images}/square-logos/skippbox.png | Bin .../images}/square-logos/softserve.png | Bin .../images}/square-logos/solinea.png | Bin .../images}/square-logos/spheresoftware.png | Bin .../images}/square-logos/spotinst.png | Bin .../images}/square-logos/stackiq.png | Bin .../images}/square-logos/stackoverdrive.png | Bin .../images}/square-logos/stackpoint.png | Bin .../images}/square-logos/stackstate.png | Bin .../images}/square-logos/supergiant.png | Bin .../images}/square-logos/superorbital.png | Bin .../images}/square-logos/suse.png | Bin .../images}/square-logos/sys_dig.png | Bin .../images}/square-logos/syseleven.png | Bin .../images}/square-logos/tectonic.png | Bin .../images}/square-logos/tencent.png | Bin .../images}/square-logos/tenxcloud.png | Bin .../images}/square-logos/tigera.png | Bin .../images}/square-logos/treasuredata.png | Bin .../images}/square-logos/twistlock.png | Bin .../images}/square-logos/vexxhost.png | Bin .../images}/square-logos/vmware.png | Bin .../images}/square-logos/wavefront.png | Bin .../images}/square-logos/weave_works.png | Bin .../images}/square-logos/wercker.png | Bin .../images}/square-logos/wise2c.png | Bin .../images}/square-logos/wisecloud.png | Bin .../images}/square-logos/woqutech.png | Bin .../images}/square-logos/zte.png | Bin .../images}/squarespace_logo.png | Bin .../images}/stackoverflow_icon.png | Bin {images => static/images}/suitcase.png | Bin {images => static/images}/texture.png | Bin {images => static/images}/toc_icon.png | Bin {images => static/images}/toc_icon_grey.png | Bin {images => static/images}/twitter_icon.png | Bin {images => static/images}/wheel.png | Bin {images => static/images}/wink_logo.png | Bin {images => static/images}/zalando_logo.png | Bin {js => static/js}/bootstrap.min.js | 0 {js => static/js}/custom-jekyll/tags.js | 0 {js => static/js}/glossary.js | 0 {js => static/js}/jquery-2.2.0.min.js | 0 {js => static/js}/jquery-ui.min.js | 0 {js => static/js}/redirects.js | 0 {js => static/js}/script.js | 0 {js => static/js}/sweetalert.min.js | 0 {js => static/js}/user-journeys/home.js | 0 {js => static/js}/user-journeys/toc.js | 0 2327 files changed, 10922 insertions(+), 171497 deletions(-) delete mode 100644 404.md delete mode 100644 Gemfile delete mode 100644 Gemfile.lock delete mode 100644 _config.yml delete mode 100644 _data/glossary/kk.yaml delete mode 100644 _includes/CommunityHangout/Apr3.html delete mode 100644 _includes/CommunityHangout/Mar27.html delete mode 100644 _includes/code.html delete mode 100644 _includes/deprecation-warning.html delete mode 100644 _includes/feature-state-deprecated.md delete mode 100644 _includes/feature-state-stable.md delete mode 100644 _includes/head.html delete mode 100644 _includes/header.html delete mode 100644 _includes/tabs.md delete mode 100644 _includes/tag-map.md delete mode 100644 _includes/templates/_errorthrower.md delete mode 100644 _includes/templates/concept-overview.md delete mode 100644 _includes/templates/concept.md delete mode 100644 _includes/templates/glossary/README.md delete mode 100644 _includes/templates/glossary/_error.md delete mode 100644 _includes/templates/glossary/snippet.md delete mode 100644 _includes/templates/kubectl.md delete mode 100644 _includes/templates/task.md delete mode 100644 _includes/templates/tutorial.md delete mode 100644 _includes/templates/user-journey-content.md delete mode 100644 _includes/tocsearch.html delete mode 100644 _includes/tree.html delete mode 100644 _includes/youtubePlayer.html delete mode 100644 _layouts/basic.html delete mode 100644 _layouts/blog.html delete mode 100644 _layouts/docsportal.html delete mode 100755 _layouts/docwithnav.html delete mode 100644 _layouts/none.html delete mode 100644 _plugins/README.md delete mode 100644 _plugins/glossary_tags.rb delete mode 100644 _plugins/liquify_filter.rb delete mode 100644 _sass/_code-styles.sass create mode 100644 archetypes/default.md delete mode 100644 blog/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes_28.md delete mode 100644 blog/index.html delete mode 100644 cn/README.md delete mode 100644 cn/_includes/code.html delete mode 100644 cn/_includes/task-tutorial-prereqs.md delete mode 100644 cn/_includes/templates/concept.md delete mode 100644 cn/_includes/templates/task.md delete mode 100644 cn/_includes/templates/tutorial.md delete mode 100644 cn/_includes/user-guide-content-moved.md delete mode 100644 cn/docs/tasks/inject-data-application/podpreset.md create mode 100644 config.toml rename {cn/docs => content}/.gitkeep (100%) rename cn/index.html => content/cn/_index.html (65%) rename cn/docs/tutorials/stateful-application/FETCH_HEAD => content/cn/docs/.gitkeep (100%) create mode 100644 content/cn/docs/_index.md rename {cn => content/cn}/docs/admin/accessing-the-api.md (100%) rename cn/docs/admin/authorization/index.md => content/cn/docs/admin/authorization/_index.md (98%) rename {cn => content/cn}/docs/admin/authorization/abac.md (96%) rename {cn => content/cn}/docs/admin/authorization/webhook.md (97%) rename {cn => content/cn}/docs/admin/bootstrap-tokens.md (99%) rename {cn => content/cn}/docs/admin/cluster-large.md (77%) rename {cn => content/cn}/docs/admin/daemon.yaml (100%) rename cn/docs/admin/high-availability/index.md => content/cn/docs/admin/high-availability/_index.md (98%) rename {cn => content/cn}/docs/admin/kube-apiserver.md (100%) rename {cn => content/cn}/docs/admin/kubelet-authentication-authorization.md (99%) rename {cn => content/cn}/docs/admin/kubelet-tls-bootstrapping.md (99%) rename {cn => content/cn}/docs/admin/multiple-zones.md (99%) rename {cn => content/cn}/docs/admin/node-conformance.md (93%) rename {cn => content/cn}/docs/admin/ovs-networking.md (100%) rename {cn => content/cn}/docs/admin/service-accounts-admin.md (100%) rename {cn => content/cn}/docs/concepts/architecture/cloud-controller.md (100%) rename {cn => content/cn}/docs/concepts/architecture/master-node-communication.md (99%) rename {cn => content/cn}/docs/concepts/architecture/nodes.md (99%) rename {cn => content/cn}/docs/concepts/cluster-administration/addons.md (100%) rename {cn => content/cn}/docs/concepts/cluster-administration/certificates.md (99%) rename {cn => content/cn}/docs/concepts/cluster-administration/cloud-providers.md (98%) rename {cn => content/cn}/docs/concepts/cluster-administration/cluster-administration-overview.md (96%) rename {cn => content/cn}/docs/concepts/cluster-administration/device-plugins.md (91%) rename {cn => content/cn}/docs/concepts/cluster-administration/federation.md (96%) rename {cn => content/cn}/docs/concepts/cluster-administration/proxies.md (94%) rename {cn => content/cn}/docs/concepts/cluster-administration/sysctl-cluster.md (97%) rename {cn => content/cn}/docs/concepts/configuration/commands.yaml (100%) rename {cn => content/cn}/docs/concepts/configuration/manage-compute-resources-container.md (94%) rename {cn => content/cn}/docs/concepts/configuration/pod-with-node-affinity.yaml (100%) rename {cn => content/cn}/docs/concepts/configuration/pod-with-pod-affinity.yaml (100%) rename {cn => content/cn}/docs/concepts/configuration/pod.yaml (100%) rename {cn => content/cn}/docs/concepts/configuration/secret.md (99%) rename {cn => content/cn}/docs/concepts/containers/container-environment-variables.md (84%) rename {cn => content/cn}/docs/concepts/containers/images.md (99%) rename {cn => content/cn}/docs/concepts/example-concept-template.md (77%) rename {cn => content/cn}/docs/concepts/overview/components.md (98%) rename {cn => content/cn}/docs/concepts/overview/kubernetes-api.md (100%) rename {cn => content/cn}/docs/concepts/overview/what-is-kubernetes.md (97%) rename {cn => content/cn}/docs/concepts/overview/working-with-objects/kubernetes-objects.md (93%) rename {cn => content/cn}/docs/concepts/overview/working-with-objects/nginx-deployment.yaml (100%) rename {cn => content/cn}/docs/concepts/policy/pod-security-policy.md (98%) rename {cn => content/cn}/docs/concepts/policy/psp.yaml (100%) rename {cn => content/cn}/docs/concepts/policy/resource-quotas.md (100%) rename {cn => content/cn}/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md (94%) rename {cn => content/cn}/docs/concepts/services-networking/connect-applications-service.md (92%) rename {cn => content/cn}/docs/concepts/services-networking/curlpod.yaml (100%) rename {cn => content/cn}/docs/concepts/services-networking/dns-pod-service.md (98%) rename {cn => content/cn}/docs/concepts/services-networking/hostaliases-pod.yaml (100%) rename {cn => content/cn}/docs/concepts/services-networking/ingress.yaml (100%) rename {cn => content/cn}/docs/concepts/services-networking/network-policies.md (96%) rename {cn => content/cn}/docs/concepts/services-networking/nginx-secure-app.yaml (100%) rename {cn => content/cn}/docs/concepts/services-networking/nginx-svc.yaml (100%) rename {cn => content/cn}/docs/concepts/services-networking/run-my-nginx.yaml (100%) rename {cn => content/cn}/docs/concepts/services-networking/service.md (98%) rename {cn => content/cn}/docs/concepts/workloads/controllers/cron-jobs.md (99%) rename {cn => content/cn}/docs/concepts/workloads/controllers/daemonset.md (99%) rename {cn => content/cn}/docs/concepts/workloads/controllers/daemonset.yaml (100%) rename {cn => content/cn}/docs/concepts/workloads/controllers/deployment.md (98%) rename {cn => content/cn}/docs/concepts/workloads/controllers/frontend.yaml (100%) rename {cn => content/cn}/docs/concepts/workloads/controllers/garbage-collection.md (95%) rename {cn => content/cn}/docs/concepts/workloads/controllers/hpa-rs.yaml (100%) rename {cn => content/cn}/docs/concepts/workloads/controllers/job.yaml (100%) rename {cn => content/cn}/docs/concepts/workloads/controllers/my-repset.yaml (100%) rename {cn => content/cn}/docs/concepts/workloads/controllers/nginx-deployment.yaml (100%) rename {cn => content/cn}/docs/concepts/workloads/controllers/replication.yaml (100%) rename {cn => content/cn}/docs/concepts/workloads/pods/init-containers.md (98%) rename {cn => content/cn}/docs/concepts/workloads/pods/pod-lifecycle.md (97%) rename {cn => content/cn}/docs/concepts/workloads/pods/podpreset.md (93%) rename {cn => content/cn}/docs/reference/labels-annotations-taints.md (100%) rename {cn => content/cn}/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md (87%) rename {cn => content/cn}/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md (96%) rename {cn => content/cn}/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md (100%) rename {cn => content/cn}/docs/tasks/access-application-cluster/connecting-frontend-backend.md (85%) rename {cn => content/cn}/docs/tasks/access-application-cluster/frontend.yaml (100%) rename {cn => content/cn}/docs/tasks/access-application-cluster/frontend/frontend.conf (100%) rename {cn => content/cn}/docs/tasks/access-application-cluster/hello-service.yaml (100%) rename {cn => content/cn}/docs/tasks/access-application-cluster/hello.yaml (100%) rename {cn => content/cn}/docs/tasks/access-application-cluster/redis-master.yaml (100%) rename {cn => content/cn}/docs/tasks/access-application-cluster/two-container-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/access-cluster-services.md (96%) rename {cn => content/cn}/docs/tasks/administer-cluster/apply-resource-quota-limit.md (98%) rename {cn => content/cn}/docs/tasks/administer-cluster/calico-network-policy.md (88%) rename {cn => content/cn}/docs/tasks/administer-cluster/change-default-storage-class.md (91%) rename {cn => content/cn}/docs/tasks/administer-cluster/change-pv-reclaim-policy.md (82%) rename {cn => content/cn}/docs/tasks/administer-cluster/cluster-management.md (99%) rename {cn => content/cn}/docs/tasks/administer-cluster/cpu-constraints-pod-2.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/cpu-constraints-pod-3.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/cpu-constraints-pod-4.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/cpu-constraints-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/cpu-constraints.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/cpu-defaults-pod-2.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/cpu-defaults-pod-3.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/cpu-defaults-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/cpu-defaults.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/cpu-management-policies.md (98%) rename {cn => content/cn}/docs/tasks/administer-cluster/cpu-memory-limit.md (96%) rename {cn => content/cn}/docs/tasks/administer-cluster/declare-network-policy.md (96%) rename {cn => content/cn}/docs/tasks/administer-cluster/dns-custom-nameservers.md (94%) rename {cn => content/cn}/docs/tasks/administer-cluster/dns-horizontal-autoscaler.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md (99%) rename {cn => content/cn}/docs/tasks/administer-cluster/kubelet-config-file.md (91%) rename {cn => content/cn}/docs/tasks/administer-cluster/memory-constraints-pod-2.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/memory-constraints-pod-3.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/memory-constraints-pod-4.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/memory-constraints-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/memory-constraints.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/memory-defaults-pod-2.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/memory-defaults-pod-3.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/memory-defaults-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/memory-defaults.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/my-scheduler.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/pod1.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/pod2.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/pod3.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/quota-mem-cpu-pod-2.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/quota-mem-cpu-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/quota-mem-cpu.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/quota-objects-pvc-2.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/quota-objects-pvc.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/quota-objects.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/quota-pod-deployment.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/quota-pod-namespace.md (85%) rename {cn => content/cn}/docs/tasks/administer-cluster/quota-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/quota-pvc-2.yaml (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/romana-network-policy.md (80%) rename {cn => content/cn}/docs/tasks/administer-cluster/static-pod.md (100%) rename {cn => content/cn}/docs/tasks/administer-cluster/weave-network-policy.md (91%) rename {cn => content/cn}/docs/tasks/configure-pod-container/cpu-request-limit-2.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/cpu-request-limit.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/exec-liveness.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/http-liveness.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/init-containers.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/lifecycle-events.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/mem-limit-range.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/memory-request-limit-2.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/memory-request-limit-3.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/memory-request-limit.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/oir-pod-2.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/oir-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/opaque-integer-resource.md (82%) rename {cn => content/cn}/docs/tasks/configure-pod-container/pod-redis.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/pod.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/private-reg-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/projected-volume.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/qos-pod-2.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/qos-pod-3.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/qos-pod-4.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/qos-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/rq-compute-resources.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/security-context-2.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/security-context-3.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/security-context-4.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/security-context.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/task-pv-claim.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/task-pv-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/task-pv-volume.yaml (100%) rename {cn => content/cn}/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml (100%) rename {cn => content/cn}/docs/tasks/debug-application-cluster/debug-application.md (99%) rename {cn => content/cn}/docs/tasks/debug-application-cluster/debug-cluster.md (100%) rename {cn => content/cn}/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md (99%) rename {cn => content/cn}/docs/tasks/debug-application-cluster/debug-stateful-set.md (92%) rename {cn => content/cn}/docs/tasks/inject-data-application/commands.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/dapi-envars-container.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/dapi-envars-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/dapi-volume-resources.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/dapi-volume.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/define-command-argument-container.md (91%) rename {cn => content/cn}/docs/tasks/inject-data-application/define-environment-variable-container.md (78%) rename {cn => content/cn}/docs/tasks/inject-data-application/distribute-credentials-secure.md (81%) rename {cn => content/cn}/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md (82%) rename {cn => content/cn}/docs/tasks/inject-data-application/envars.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md (68%) rename {cn => content/cn}/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/podpreset-allow-db.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/podpreset-configmap.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/podpreset-merged.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/podpreset-multi-merged.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/podpreset-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/podpreset-preset.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/podpreset-proxy.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/podpreset-replicaset.yaml (100%) create mode 100644 content/cn/docs/tasks/inject-data-application/podpreset.md rename {cn => content/cn}/docs/tasks/inject-data-application/secret-envars-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/secret-pod.yaml (100%) rename {cn => content/cn}/docs/tasks/inject-data-application/secret.yaml (100%) rename {cn => content/cn}/docs/tasks/manage-daemon/rollback-daemon-set.md (94%) rename {cn => content/cn}/docs/tasks/manage-gpus/scheduling-gpus.md (96%) rename {cn => content/cn}/docs/tasks/manage-hugepages/scheduling-hugepages.md (91%) rename {cn => content/cn}/docs/tasks/run-application/deployment-patch-demo.yaml (100%) rename {cn => content/cn}/docs/tasks/run-application/deployment-scale.yaml (100%) rename {cn => content/cn}/docs/tasks/run-application/deployment-update.yaml (100%) rename {cn => content/cn}/docs/tasks/run-application/deployment.yaml (100%) rename {cn => content/cn}/docs/tasks/run-application/gce-volume.yaml (100%) rename {cn => content/cn}/docs/tasks/run-application/mysql-configmap.yaml (100%) rename {cn => content/cn}/docs/tasks/run-application/mysql-deployment.yaml (100%) rename {cn => content/cn}/docs/tasks/run-application/mysql-services.yaml (100%) rename {cn => content/cn}/docs/tasks/run-application/mysql-statefulset.yaml (100%) rename {cn => content/cn}/docs/tasks/run-application/rolling-update-replication-controller.md (97%) rename {cn => content/cn}/docs/tasks/run-application/run-single-instance-stateful-application.md (93%) rename {cn => content/cn}/docs/tasks/run-application/run-stateless-application-deployment.md (85%) rename {cn => content/cn}/docs/tasks/run-application/scale-stateful-set.md (93%) rename {cn => content/cn}/docs/tasks/tls/certificate-rotation.md (94%) create mode 100644 content/cn/docs/templates/index.md rename {cn => content/cn}/docs/tutorials/configuration/configure-redis-using-configmap.md (89%) rename cn/docs/tutorials/kubernetes-basics/index.html => content/cn/docs/tutorials/kubernetes-basics/_index.html (99%) rename {cn => content/cn}/docs/tutorials/kubernetes-basics/cluster-interactive.html (100%) rename {cn => content/cn}/docs/tutorials/kubernetes-basics/cluster-intro.html (100%) rename {cn => content/cn}/docs/tutorials/kubernetes-basics/deploy-interactive.html (100%) rename {cn => content/cn}/docs/tutorials/kubernetes-basics/deploy-intro.html (100%) rename {cn => content/cn}/docs/tutorials/kubernetes-basics/explore-interactive.html (100%) rename {cn => content/cn}/docs/tutorials/kubernetes-basics/explore-intro.html (100%) rename {cn => content/cn}/docs/tutorials/kubernetes-basics/expose-interactive.html (100%) rename {cn => content/cn}/docs/tutorials/kubernetes-basics/expose-intro.html (100%) rename {cn => content/cn}/docs/tutorials/kubernetes-basics/scale-interactive.html (100%) rename {cn => content/cn}/docs/tutorials/kubernetes-basics/scale-intro.html (100%) rename {cn => content/cn}/docs/tutorials/kubernetes-basics/update-interactive.html (100%) rename {cn => content/cn}/docs/tutorials/kubernetes-basics/update-intro.html (100%) rename {cn => content/cn}/docs/tutorials/object-management-kubectl/imperative-object-management-command.md (96%) rename {cn => content/cn}/docs/tutorials/object-management-kubectl/object-management.md (96%) rename {cn => content/cn}/docs/tutorials/services/source-ip.md (96%) rename {cn => content/cn}/docs/tutorials/stateful-application/Dockerfile (100%) rename cn/docs/tutorials/stateful-application/dev => content/cn/docs/tutorials/stateful-application/FETCH_HEAD (100%) rename {cn => content/cn}/docs/tutorials/stateful-application/basic-stateful-set.md (94%) rename {cn => content/cn}/docs/tutorials/stateful-application/cassandra-service.yaml (100%) rename {cn => content/cn}/docs/tutorials/stateful-application/cassandra-statefulset.yaml (100%) rename {cn => content/cn}/docs/tutorials/stateful-application/cassandra.md (100%) create mode 100644 content/cn/docs/tutorials/stateful-application/dev rename {cn => content/cn}/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md (100%) rename {cn => content/cn}/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml (100%) rename {cn => content/cn}/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml (100%) rename {cn => content/cn}/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml (100%) rename {cn => content/cn}/docs/tutorials/stateful-application/web.yaml (100%) rename {cn => content/cn}/docs/tutorials/stateful-application/webp.yaml (100%) rename {cn => content/cn}/docs/tutorials/stateful-application/zookeeper.md (96%) rename {cn => content/cn}/docs/tutorials/stateful-application/zookeeper.yaml (100%) rename {cn => content/cn}/docs/user-guide/bad-nginx-deployment.yaml (100%) rename {cn => content/cn}/docs/user-guide/curlpod.yaml (100%) rename {cn => content/cn}/docs/user-guide/deployment.yaml (100%) rename {cn => content/cn}/docs/user-guide/docker-cli-to-kubectl.md (94%) rename {cn => content/cn}/docs/user-guide/ingress.yaml (100%) rename {cn => content/cn}/docs/user-guide/job.yaml (100%) rename {cn => content/cn}/docs/user-guide/jsonpath.md (100%) rename {cn => content/cn}/docs/user-guide/kubectl-overview.md (100%) rename {cn => content/cn}/docs/user-guide/multi-pod.yaml (100%) rename {cn => content/cn}/docs/user-guide/new-nginx-deployment.yaml (100%) rename {cn => content/cn}/docs/user-guide/nginx-app.yaml (100%) rename {cn => content/cn}/docs/user-guide/nginx-deployment.yaml (100%) rename {cn => content/cn}/docs/user-guide/nginx-init-containers.yaml (100%) rename {cn => content/cn}/docs/user-guide/nginx-lifecycle-deployment.yaml (100%) rename {cn => content/cn}/docs/user-guide/nginx-probe-deployment.yaml (100%) rename {cn => content/cn}/docs/user-guide/nginx-secure-app.yaml (100%) rename {cn => content/cn}/docs/user-guide/nginx-svc.yaml (100%) rename {cn => content/cn}/docs/user-guide/pod-w-message.yaml (100%) rename {cn => content/cn}/docs/user-guide/pod.yaml (100%) rename {cn => content/cn}/docs/user-guide/redis-deployment.yaml (100%) rename {cn => content/cn}/docs/user-guide/redis-resource-deployment.yaml (100%) rename {cn => content/cn}/docs/user-guide/redis-secret-deployment.yaml (100%) rename {cn => content/cn}/docs/user-guide/run-my-nginx.yaml (100%) rename {cn => content/cn}/docs/whatisk8s.md (74%) rename {_includes => content/cn/includes}/default-storage-class-prereqs.md (100%) rename {_includes => content/cn/includes}/federated-task-tutorial-prereqs.md (100%) rename {_includes => content/cn/includes}/federation-content-moved.md (100%) rename {_includes => content/cn/includes}/federation-current-state.md (100%) create mode 100644 content/cn/includes/index.md rename {_includes => content/cn/includes}/task-tutorial-prereqs.md (55%) rename {_includes => content/cn/includes}/user-guide-content-moved.md (100%) rename {_includes => content/cn/includes}/user-guide-migration-notice.md (100%) rename index.html => content/en/_index.html (91%) rename {blog => content/en/blog}/OWNERS (100%) create mode 100644 content/en/blog/_index.md rename {blog => content/en/blog}/_posts/2015-03-00-Kubernetes-Gathering-Videos.md (76%) rename {blog => content/en/blog}/_posts/2015-03-00-Paricipate-In-Kubernetes-User.md (90%) rename {blog => content/en/blog}/_posts/2015-03-00-Weekly-Kubernetes-Community-Hangout.md (94%) rename {blog => content/en/blog}/_posts/2015-03-00-Welcome-To-Kubernetes-Blog.md (95%) rename {blog => content/en/blog}/_posts/2015-04-00-Borg-Predecessor-To-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2015-04-00-Faster-Than-Speeding-Latte.md (67%) rename {blog => content/en/blog}/_posts/2015-04-00-Introducing-Kubernetes-V1Beta3.md (97%) rename {blog => content/en/blog}/_posts/2015-04-00-Kubernetes-And-Mesosphere-Dcos.md (96%) rename {blog => content/en/blog}/_posts/2015-04-00-Kubernetes-Release-0150.md (98%) rename {blog => content/en/blog}/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout.md (96%) rename {blog => content/en/blog}/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_11.md (98%) rename {blog => content/en/blog}/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_17.md (98%) rename {blog => content/en/blog}/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_29.md (95%) rename {blog => content/en/blog}/_posts/2015-05-00-Appc-Support-For-Kubernetes-Through-Rkt.md (95%) rename {blog => content/en/blog}/_posts/2015-05-00-Docker-And-Kubernetes-And-Appc.md (96%) rename {blog => content/en/blog}/_posts/2015-05-00-Kubernetes-On-Openstack.md (96%) rename {blog => content/en/blog}/_posts/2015-05-00-Kubernetes-Release-0160.md (98%) rename {blog => content/en/blog}/_posts/2015-05-00-Kubernetes-Release-0170.md (99%) rename {blog => content/en/blog}/_posts/2015-05-00-Resource-Usage-Monitoring-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md (93%) rename {blog => content/en/blog}/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout_18.md (95%) rename {blog => content/en/blog}/_posts/2015-06-00-Cluster-Level-Logging-With-Kubernetes.md (99%) rename {blog => content/en/blog}/_posts/2015-06-00-Slides-Cluster-Management-With.md (87%) rename {blog => content/en/blog}/_posts/2015-06-00-The-Distributed-System-Toolkit-Patterns.md (98%) rename {blog => content/en/blog}/_posts/2015-06-00-Weekly-Kubernetes-Community-Hangout.md (95%) rename {blog => content/en/blog}/_posts/2015-07-00-Announcing-First-Kubernetes-Enterprise.md (93%) rename {blog => content/en/blog}/_posts/2015-07-00-How-Did-Quake-Demo-From-Dockercon-Work.md (99%) rename {blog => content/en/blog}/_posts/2015-07-00-Kubernetes-10-Launch-Party-At-Oscon.md (90%) rename {blog => content/en/blog}/_posts/2015-07-00-Strong-Simple-Ssl-For-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2015-07-00-The-Growing-Kubernetes-Ecosystem.md (99%) rename {blog => content/en/blog}/_posts/2015-07-00-Weekly-Kubernetes-Community-Hangout.md (97%) rename {blog => content/en/blog}/_posts/2015-07-00-Weekly-Kubernetes-Community-Hangout_23.md (97%) rename {blog => content/en/blog}/_posts/2015-08-00-Using-Kubernetes-Namespaces-To-Manage.md (97%) rename {blog => content/en/blog}/_posts/2015-08-00-Weekly-Kubernetes-Community-Hangout.md (94%) rename {blog => content/en/blog}/_posts/2015-09-00-Kubernetes-Performance-Measurements-And.md (98%) rename {blog => content/en/blog}/_posts/2015-10-00-Some-Things-You-Didnt-Know-About-Kubectl_28.md (98%) rename {blog => content/en/blog}/_posts/2015-11-00-Creating-A-Raspberry-Pi-Cluster-Running-Kubernetes-The-Shopping-List-Part-1.md (96%) rename {blog => content/en/blog}/_posts/2015-11-00-Kubernetes-1-1-Performance-Upgrades-Improved-Tooling-And-A-Growing-Community.md (96%) rename {blog => content/en/blog}/_posts/2015-11-00-Kubernetes-As-Foundation-For-Cloud-Native-Paas.md (98%) rename {blog => content/en/blog}/_posts/2015-11-00-Monitoring-Kubernetes-With-Sysdig.md (99%) rename {blog => content/en/blog}/_posts/2015-11-00-One-Million-Requests-Per-Second-Dependable-And-Dynamic-Distributed-Systems-At-Scale.md (94%) rename {blog => content/en/blog}/_posts/2015-12-00-Creating-Raspberry-Pi-Cluster-Running.md (98%) rename {blog => content/en/blog}/_posts/2015-12-00-How-Weave-Built-A-Multi-Deployment-Solution-For-Scope-Using-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2015-12-00-Managing-Kubernetes-Pods-Services-And-Replication-Controllers-With-Puppet.md (96%) rename {blog => content/en/blog}/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes.md (97%) create mode 100644 content/en/blog/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes_28.md rename {blog => content/en/blog}/_posts/2016-01-00-Simple-Leader-Election-With-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2016-01-00-Why-Kubernetes-Doesnt-Use-Libnetwork.md (98%) rename {blog => content/en/blog}/_posts/2016-02-00-Kubecon-Eu-2016-Kubernetes-Community-In.md (96%) rename {blog => content/en/blog}/_posts/2016-02-00-Kubernetes-Community-Meeting-Notes.md (96%) rename {blog => content/en/blog}/_posts/2016-02-00-Kubernetes-community-meeting-notes-20160128.md (97%) rename {blog => content/en/blog}/_posts/2016-02-00-Kubernetes-community-meeting-notes-20160211.md (94%) rename {blog => content/en/blog}/_posts/2016-02-00-Sharethis-Kubernetes-In-Production.md (98%) rename {blog => content/en/blog}/_posts/2016-02-00-State-Of-Container-World-January-2016.md (95%) rename {blog => content/en/blog}/_posts/2016-02-00-kubernetes-community-meeting-notes_23.md (95%) rename {blog => content/en/blog}/_posts/2016-03-00-1000-Nodes-And-Beyond-Updates-To-Kubernetes-Performance-And-Scalability-In-12.md (98%) rename {blog => content/en/blog}/_posts/2016-03-00-Appformix-Helping-Enterprises.md (98%) rename {blog => content/en/blog}/_posts/2016-03-00-Building-Highly-Available-Applications-Using-Kubernetes-New-Multi-Zone-Clusters-A.K.A-Ubernetes-Lite.md (98%) rename {blog => content/en/blog}/_posts/2016-03-00-Elasticbox-Introduces-Elastickube-To.md (97%) rename {blog => content/en/blog}/_posts/2016-03-00-Five-Days-Of-Kubernetes-12.md (96%) rename {blog => content/en/blog}/_posts/2016-03-00-How-Container-Metadata-Changes-Your-Point-Of-View.md (98%) rename {blog => content/en/blog}/_posts/2016-03-00-Kubernetes-1.2-And-Simplifying-Advanced-Networking-With-Ingress.md (97%) rename {blog => content/en/blog}/_posts/2016-03-00-Kubernetes-1.2-Even-More-Performance-Upgrades-Plus-Easier-Application-Deployment-And-Management-.md (96%) rename {blog => content/en/blog}/_posts/2016-03-00-Kubernetes-Community-Meeting-Notes.md (96%) rename {blog => content/en/blog}/_posts/2016-03-00-Kubernetes-In-Enterprise-With-Fujitsus.md (98%) rename {blog => content/en/blog}/_posts/2016-03-00-Scaling-Neural-Network-Image-Classification-Using-Kubernetes-With-Tensorflow-Serving.md (96%) rename {blog => content/en/blog}/_posts/2016-03-00-State-Of-Container-World-February-2016.md (97%) rename {blog => content/en/blog}/_posts/2016-03-00-Using-Spark-And-Zeppelin-To-Process-Big-Data-On-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2016-04-00-Adding-Support-For-Kubernetes-In-Rancher.md (96%) rename {blog => content/en/blog}/_posts/2016-04-00-Building-Awesome-User-Interfaces-For-Kubernetes.md (96%) rename {blog => content/en/blog}/_posts/2016-04-00-Configuration-Management-With-Containers.md (98%) rename {blog => content/en/blog}/_posts/2016-04-00-Container-Survey-Results-March-2016.md (96%) rename {blog => content/en/blog}/_posts/2016-04-00-Introducing-Kubernetes-Openstack-Sig.md (97%) rename {blog => content/en/blog}/_posts/2016-04-00-Kubernetes-Network-Policy-APIs.md (97%) rename {blog => content/en/blog}/_posts/2016-04-00-Kubernetes-On-Aws_15.md (97%) rename {blog => content/en/blog}/_posts/2016-04-00-Sig-Clusterops-Promote-Operability-And-Interoperability-Of-K8S-Clusters.md (94%) rename {blog => content/en/blog}/_posts/2016-04-00-Using-Deployment-Objects-With.md (98%) rename {blog => content/en/blog}/_posts/2016-05-00-Coreosfest2016-Kubernetes-Community.md (97%) rename {blog => content/en/blog}/_posts/2016-05-00-Hypernetes-Security-And-Multi-Tenancy-In-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2016-06-00-Bringing-End-To-End-Testing-To-Azure.md (98%) rename {blog => content/en/blog}/_posts/2016-06-00-Container-Design-Patterns.md (97%) rename {blog => content/en/blog}/_posts/2016-06-00-Illustrated-Childrens-Guide-To-Kubernetes.md (95%) rename {blog => content/en/blog}/_posts/2016-07-00-Automation-Platform-At-Wercker-With-Kubernetes.md (97%) rename {blog => content/en/blog}/_posts/2016-07-00-Autoscaling-In-Kubernetes.md (99%) rename {blog => content/en/blog}/_posts/2016-07-00-Bringing-End-To-End-Kubernetes-Testing-To-Azure-2.md (97%) rename {blog => content/en/blog}/_posts/2016-07-00-Citrix-Netscaler-And-Kubernetes.md (96%) rename {blog => content/en/blog}/_posts/2016-07-00-Cross-Cluster-Services.md (99%) rename {blog => content/en/blog}/_posts/2016-07-00-Dashboard-Web-Interface-For-Kubernetes.md (91%) rename {blog => content/en/blog}/_posts/2016-07-00-Five-Days-Of-Kubernetes-1.3.md (96%) rename {blog => content/en/blog}/_posts/2016-07-00-Kubernetes-1.3-Bridging-Cloud-Native-And-Enterprise-Workloads.md (97%) rename {blog => content/en/blog}/_posts/2016-07-00-Kubernetes-In-Rancher-Further-Evolution.md (98%) rename {blog => content/en/blog}/_posts/2016-07-00-Minikube-Easily-Run-Kubernetes-Locally.md (97%) rename {blog => content/en/blog}/_posts/2016-07-00-Oh-The-Places-You-Will-Go.md (98%) rename {blog => content/en/blog}/_posts/2016-07-00-Rktnetes-Brings-Rkt-Container-Engine-To-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2016-07-00-The-Bet-On-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2016-07-00-Thousand-Instances-Of-Cassandra-Using-Kubernetes-Pet-Set.md (98%) rename {blog => content/en/blog}/_posts/2016-07-00-Update-On-Kubernetes-For-Windows-Server-Containers.md (98%) rename {blog => content/en/blog}/_posts/2016-07-00-happy-k8sbday-1.md (97%) rename {blog => content/en/blog}/_posts/2016-07-00-openstack-kubernetes-communities.md (97%) rename {blog => content/en/blog}/_posts/2016-07-00-stateful-applications-in-containers-kubernetes.md (97%) rename {blog => content/en/blog}/_posts/2016-08-00-Challenges-Remotely-Managed-Onpremise-Kubernetes-Cluster.md (98%) rename {blog => content/en/blog}/_posts/2016-08-00-Create-Couchbase-Cluster-Using-Kubernetes.md (95%) rename {blog => content/en/blog}/_posts/2016-08-00-Kubernetes-Namespaces-Use-Cases-Insights.md (99%) rename {blog => content/en/blog}/_posts/2016-08-00-Security-Best-Practices-Kubernetes-Deployment.md (98%) rename {blog => content/en/blog}/_posts/2016-08-00-Sig-Apps-Running-Apps-In-Kubernetes.md (96%) rename {blog => content/en/blog}/_posts/2016-08-00-Stateful-Applications-Using-Kubernetes-Datera.md (98%) rename {blog => content/en/blog}/_posts/2016-09-00-Cloud-Native-Application-Interfaces.md (98%) rename {blog => content/en/blog}/_posts/2016-09-00-Creating-Postgresql-Cluster-Using-Helm.md (97%) rename {blog => content/en/blog}/_posts/2016-09-00-Deploying-To-Multiple-Kubernetes-With-Kit.md (98%) rename {blog => content/en/blog}/_posts/2016-09-00-High-Performance-Network-Policies-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2016-09-00-How-Qbox-Saved-50-Percent-On-Aws-Bills.md (97%) rename {blog => content/en/blog}/_posts/2016-09-00-How-We-Made-Kubernetes-Easy-To-Install.md (97%) rename {blog => content/en/blog}/_posts/2016-09-00-Kubernetes-1.4-Making-It-Easy-To-Run-On-Kuberentes-Anywhere.md (98%) rename {blog => content/en/blog}/_posts/2016-10-00-Dynamic-Provisioning-And-Storage-In-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2016-10-00-Globally-Distributed-Services-Kubernetes-Cluster-Federation.md (99%) rename {blog => content/en/blog}/_posts/2016-10-00-Helm-Charts-Making-It-Simple-To-Package-And-Deploy-Apps-On-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2016-10-00-Kubernetes-And-Openstack-At-Yahoo-Japan.md (98%) rename {blog => content/en/blog}/_posts/2016-10-00-Kubernetes-Service-Technology-Partners-Program.md (94%) rename {blog => content/en/blog}/_posts/2016-10-00-Production-Kubernetes-Dashboard-UI-1.4-improvements_3.md (93%) rename {blog => content/en/blog}/_posts/2016-10-00-Tail-Kubernetes-With-Stern.md (98%) rename {blog => content/en/blog}/_posts/2016-11-00-Bringing-Kubernetes-Support-To-Azure.md (97%) rename {blog => content/en/blog}/_posts/2016-11-00-Kompose-Tool-Go-From-Docker-Compose-To-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2016-11-00-Kubernetes-Certification-Training-And-Managed-Service-Provider-Program.md (93%) rename {blog => content/en/blog}/_posts/2016-11-00-Kubernetes-Containers-Logging-Monitoring-With-Sematext.md (97%) rename {blog => content/en/blog}/_posts/2016-11-00-Skytap-Modernizing-Microservice-Architecture-With-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2016-11-00-Visualize-Kubelet-Performance-With-Node-Dashboard.md (98%) rename {blog => content/en/blog}/_posts/2016-12-00-Cluster-Federation-In-Kubernetes-1.5.md (99%) rename {blog => content/en/blog}/_posts/2016-12-00-Container-Runtime-Interface-Cri-In-Kubernetes.md (99%) rename {blog => content/en/blog}/_posts/2016-12-00-Five-Days-Of-Kubernetes-1.5.md (92%) rename {blog => content/en/blog}/_posts/2016-12-00-From-Network-Policies-To-Security-Policies.md (97%) rename {blog => content/en/blog}/_posts/2016-12-00-Kubernetes-1.5-Supporting-Production-Workloads.md (98%) rename {blog => content/en/blog}/_posts/2016-12-00-Kubernetes-Supports-Openapi.md (98%) rename {blog => content/en/blog}/_posts/2016-12-00-Statefulset-Run-Scale-Stateful-Applications-In-Kubernetes.md (99%) rename {blog => content/en/blog}/_posts/2016-12-00-Windows-Server-Support-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2017-01-00-Fission-Serverless-Functions-As-Service-For-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2017-01-00-How-We-Run-Kubernetes-In-Kubernetes-Kubeception.md (97%) rename {blog => content/en/blog}/_posts/2017-01-00-Kubernetes-Ux-Survey-Infographic.md (97%) rename {blog => content/en/blog}/_posts/2017-01-00-Running-Mongodb-On-Kubernetes-With-Statefulsets.md (98%) rename {blog => content/en/blog}/_posts/2017-01-00-Scaling-Kubernetes-Deployments-With-Policy-Base-Networking.md (97%) rename {blog => content/en/blog}/_posts/2017-01-00-Stronger-Foundation-For-Creating-And-Managing-Kubernetes-Clusters.md (98%) rename {blog => content/en/blog}/_posts/2017-02-00-Caas-The-Foundation-For-Next-Gen-Paas.md (98%) rename {blog => content/en/blog}/_posts/2017-02-00-Highly-Available-Kubernetes-Clusters.md (98%) rename {blog => content/en/blog}/_posts/2017-02-00-Inside-Jd-Com-Shift-To-Kubernetes-From-Openstack.md (98%) rename {blog => content/en/blog}/_posts/2017-02-00-Postgresql-Clusters-Kubernetes-Statefulsets.md (98%) rename {blog => content/en/blog}/_posts/2017-02-00-Run-Deep-Learning-With-Paddlepaddle-On-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2017-03-00-Advanced-Scheduling-In-Kubernetes.md (99%) rename {blog => content/en/blog}/_posts/2017-03-00-Dynamic-Provisioning-And-Storage-Classes-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2017-03-00-Five-Days-Of-Kubernetes-1.6.md (93%) rename {blog => content/en/blog}/_posts/2017-03-00-K8Sport-Engaging-The-Kubernetes-Community.md (96%) rename {blog => content/en/blog}/_posts/2017-03-00-Kubernetes-1.6-Multi-User-Multi-Workloads-At-Scale.md (99%) rename {blog => content/en/blog}/_posts/2017-03-00-Scalability-Updates-In-Kubernetes-1.6.md (98%) rename {blog => content/en/blog}/_posts/2017-04-00-Configuring-Private-Dns-Zones-Upstream-Nameservers-Kubernetes.md (97%) rename {blog => content/en/blog}/_posts/2017-04-00-Multi-Stage-Canary-Deployments-With-Kubernetes-In-The-Cloud-Onprem.md (98%) rename {blog => content/en/blog}/_posts/2017-04-00-Rbac-Support-In-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2017-05-00-Draft-Kubernetes-Container-Development.md (98%) rename {blog => content/en/blog}/_posts/2017-05-00-Kubernetes-Monitoring-Guide.md (98%) rename {blog => content/en/blog}/_posts/2017-05-00-Kubernetes-Security-Process-Explained.md (97%) rename {blog => content/en/blog}/_posts/2017-05-00-Kubespray-Ansible-Collaborative-Kubernetes-Ops.md (97%) rename {blog => content/en/blog}/_posts/2017-05-00-Managing-Microservices-With-Istio-Service-Mesh.md (98%) rename {blog => content/en/blog}/_posts/2017-06-00-Kubernetes-1.7-Security-Hardening-Stateful-Application-Extensibility-Updates.md (97%) rename {blog => content/en/blog}/_posts/2017-07-00-Happy-Second-Birthday-Kubernetes.md (91%) rename {blog => content/en/blog}/_posts/2017-07-00-How-Watson-Health-Cloud-Deploys.md (94%) rename {blog => content/en/blog}/_posts/2017-08-00-High-Performance-Networking-With-Ec2.md (98%) rename {blog => content/en/blog}/_posts/2017-08-00-Kompose-Helps-Developers-Move-Docker.md (98%) rename {blog => content/en/blog}/_posts/2017-08-00-Kubernetes-Meets-High-Performance.md (98%) rename {blog => content/en/blog}/_posts/2017-09-00-Introducing-Resource-Management-Working.md (98%) rename {blog => content/en/blog}/_posts/2017-09-00-Kubernetes-18-Security-Workloads-And.md (98%) rename {blog => content/en/blog}/_posts/2017-09-00-Kubernetes-Statefulsets-Daemonsets.md (99%) rename {blog => content/en/blog}/_posts/2017-09-00-Windows-Networking-At-Parity-With-Linux.md (98%) rename {blog => content/en/blog}/_posts/2017-10-00-Enforcing-Network-Policies-In-Kubernetes.md (97%) rename {blog => content/en/blog}/_posts/2017-10-00-Five-Days-Of-Kubernetes-18.md (95%) rename {blog => content/en/blog}/_posts/2017-10-00-It-Takes-Village-To-Raise-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2017-10-00-Kubeadm-V18-Released.md (99%) rename {blog => content/en/blog}/_posts/2017-10-00-Kubernetes-Community-Steering-Committee-Election-Results.md (94%) rename {blog => content/en/blog}/_posts/2017-10-00-Request-Routing-And-Policy-Management.md (99%) rename {blog => content/en/blog}/_posts/2017-10-00-Software-Conformance-Certification.md (97%) rename {blog => content/en/blog}/_posts/2017-10-00-Using-Rbac-Generally-Available-18.md (98%) rename {blog => content/en/blog}/_posts/2017-11-00-Autoscaling-In-Kubernetes.md (89%) rename {blog => content/en/blog}/_posts/2017-11-00-Certified-Kubernetes-Conformance.md (83%) rename {blog => content/en/blog}/_posts/2017-11-00-Containerd-Container-Runtime-Options-Kubernetes.md (97%) rename {blog => content/en/blog}/_posts/2017-11-00-Kubernetes-Easy-Way.md (98%) rename {blog => content/en/blog}/_posts/2017-11-00-Kubernetes-Is-Still-Hard-For-Developers.md (72%) rename {blog => content/en/blog}/_posts/2017-11-00-Securing-Software-Supply-Chain-Grafeas.md (98%) rename {blog => content/en/blog}/_posts/2017-12-00-Introducing-Kubeflow-Composable.md (98%) rename {blog => content/en/blog}/_posts/2017-12-00-Kubernetes-19-Workloads-Expanded-Ecosystem.md (98%) rename {blog => content/en/blog}/_posts/2017-12-00-Paddle-Paddle-Fluid-Elastic-Learning.md (98%) rename {blog => content/en/blog}/_posts/2017-12-00-Using-Ebpf-In-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2018-01-00-Core-Workloads-Api-Ga.md (99%) rename {blog => content/en/blog}/_posts/2018-01-00-Extensible-Admission-Is-Beta.md (98%) rename {blog => content/en/blog}/_posts/2018-01-00-Five-Days-Of-Kubernetes-19.md (94%) rename {blog => content/en/blog}/_posts/2018-01-00-Introducing-Client-Go-Version-6.md (99%) rename {blog => content/en/blog}/_posts/2018-01-00-Introducing-Container-Storage-Interface.md (99%) rename {blog => content/en/blog}/_posts/2018-01-00-Kubernetes-V19-Beta-Windows-Support.md (98%) rename {blog => content/en/blog}/_posts/2018-01-00-Reporting-Errors-Using-Kubernetes-Events.md (97%) rename {blog => content/en/blog}/_posts/2018-03-00-Apache-Spark-23-With-Native-Kubernetes.md (98%) rename {blog => content/en/blog}/_posts/2018-03-00-Expanding-User-Support-With-Office-Hours.md (97%) rename {blog => content/en/blog}/_posts/2018-03-00-First-Beta-Version-Of-Kubernetes-1-10.md (99%) rename {blog => content/en/blog}/_posts/2018-03-00-How-To-Integrate-Rollingupdate-Strategy.md (96%) rename {blog => content/en/blog}/_posts/2018-03-00-Principles-Of-Container-App-Design.md (96%) rename {blog => content/en/blog}/_posts/2018-03-26-kubernetes-1.10-stabilizing-storage-security-networking.md (99%) rename {blog => content/en/blog}/_posts/2018-04-04-fixing-subpath-volume-vulnerability.md (99%) rename {blog => content/en/blog}/_posts/2018-04-10-container-storage-interface-beta.md (99%) rename {blog => content/en/blog}/_posts/2018-04-11-migrating-the-kubernetes-blog.md (97%) rename {blog => content/en/blog}/_posts/2018-04-13-local-persistent-volumes-beta.md (99%) rename {blog => content/en/blog}/_posts/2018-04-24-kubernetes-application-survey-results-2018.md (98%) rename {blog => content/en/blog}/_posts/2018-04-25-open-source-charts-2017.md (98%) rename {blog => content/en/blog}/_posts/2018-04-30-zero-downtime-deployment-kubernetes-jenkins.md (97%) rename {blog => content/en/blog}/_posts/2018-05-01-developing-on-kubernetes.md (99%) rename {blog => content/en/blog}/_posts/2018-05-02-policy-in-kubernetes.md (99%) rename {blog => content/en/blog}/_posts/http/2018-05-04-Announcing-Kubeflow-0.1.md (99%) rename {case-studies => content/en/case-studies}/OWNERS (100%) rename case-studies/index.html => content/en/case-studies/_index.html (98%) rename {case-studies => content/en/case-studies}/amadeus.html (99%) rename {case-studies => content/en/case-studies}/ancestry.html (99%) rename {case-studies => content/en/case-studies}/blablacar.html (99%) mode change 100755 => 100644 rename {case-studies => content/en/case-studies}/blackrock.html (99%) rename {case-studies => content/en/case-studies}/box.html (99%) rename {case-studies => content/en/case-studies}/buffer.html (99%) mode change 100755 => 100644 rename {case-studies => content/en/case-studies}/crowdfire.html (99%) rename {case-studies => content/en/case-studies}/golfnow.html (99%) rename {case-studies => content/en/case-studies}/haufegroup.html (99%) rename {case-studies => content/en/case-studies}/huawei.html (99%) rename {case-studies => content/en/case-studies}/peardeck.html (99%) rename {case-studies => content/en/case-studies}/pearson.html (99%) rename {case-studies => content/en/case-studies}/squarespace.html (99%) rename {case-studies => content/en/case-studies}/wikimedia.html (99%) rename {case-studies => content/en/case-studies}/wink.html (99%) mode change 100755 => 100644 rename {case-studies => content/en/case-studies}/zalando.html (99%) rename code-of-conduct.md => content/en/code-of-conduct.md (100%) rename community/index.html => content/en/community/_index.html (93%) create mode 100644 content/en/docs/_index.md rename {docs => content/en/docs}/admin/OWNERS (100%) create mode 100755 content/en/docs/admin/_index.md rename {docs => content/en/docs}/admin/accessing-the-api.md (100%) rename {docs => content/en/docs}/admin/admission-controllers.md (94%) rename {docs => content/en/docs}/admin/authentication.md (99%) rename docs/admin/authorization/index.md => content/en/docs/admin/authorization/_index.md (98%) rename {docs => content/en/docs}/admin/authorization/abac.md (96%) rename {docs => content/en/docs}/admin/authorization/node.md (99%) rename {docs => content/en/docs}/admin/authorization/rbac.md (99%) rename {docs => content/en/docs}/admin/authorization/webhook.md (93%) rename {docs => content/en/docs}/admin/bootstrap-tokens.md (96%) rename {docs => content/en/docs}/admin/cluster-large.md (81%) rename {docs => content/en/docs}/admin/extensible-admission-controllers.md (98%) rename {docs => content/en/docs}/admin/federation/OWNERS (100%) rename docs/admin/federation/index.md => content/en/docs/admin/federation/_index.md (99%) rename {docs => content/en/docs}/admin/high-availability/OWNERS (100%) rename {docs => content/en/docs}/admin/high-availability/building.md (97%) rename {docs => content/en/docs}/admin/high-availability/default-kubelet (100%) rename {docs => content/en/docs}/admin/high-availability/etcd.yaml (100%) rename {docs => content/en/docs}/admin/high-availability/kube-apiserver.yaml (100%) rename {docs => content/en/docs}/admin/high-availability/kube-controller-manager.yaml (100%) rename {docs => content/en/docs}/admin/high-availability/kube-scheduler.yaml (100%) rename {docs => content/en/docs}/admin/high-availability/monit-docker (100%) rename {docs => content/en/docs}/admin/high-availability/monit-kubelet (100%) rename {docs => content/en/docs}/admin/high-availability/podmaster.yaml (100%) rename {docs => content/en/docs}/admin/kubelet-authentication-authorization.md (99%) rename {docs => content/en/docs}/admin/kubelet-tls-bootstrapping.md (99%) rename {docs => content/en/docs}/admin/limitrange/OWNERS (100%) rename {docs => content/en/docs}/admin/limitrange/invalid-pod.yaml (100%) rename {docs => content/en/docs}/admin/limitrange/limits.yaml (100%) rename {docs => content/en/docs}/admin/limitrange/namespace.yaml (100%) rename {docs => content/en/docs}/admin/limitrange/valid-pod.yaml (100%) rename {docs => content/en/docs}/admin/multiple-schedulers/OWNERS (100%) rename {docs => content/en/docs}/admin/multiple-schedulers/pod1.yaml (100%) rename {docs => content/en/docs}/admin/multiple-schedulers/pod2.yaml (100%) rename {docs => content/en/docs}/admin/multiple-schedulers/pod3.yaml (100%) rename {docs => content/en/docs}/admin/multiple-zones.md (99%) rename {docs => content/en/docs}/admin/node-conformance.md (96%) rename {docs => content/en/docs}/admin/resourcequota/OWNERS (100%) rename {docs => content/en/docs}/admin/resourcequota/best-effort.yaml (100%) rename {docs => content/en/docs}/admin/resourcequota/compute-resources.yaml (100%) rename {docs => content/en/docs}/admin/resourcequota/limits.yaml (100%) mode change 100755 => 100644 rename {docs => content/en/docs}/admin/resourcequota/namespace.yaml (100%) rename {docs => content/en/docs}/admin/resourcequota/not-best-effort.yaml (100%) rename {docs => content/en/docs}/admin/resourcequota/object-counts.yaml (100%) rename {docs => content/en/docs}/admin/salt.md (99%) rename {docs => content/en/docs}/admin/service-accounts-admin.md (100%) rename docs/concepts/index.md => content/en/docs/concepts/_index.md (99%) create mode 100755 content/en/docs/concepts/api-extension/_index.md rename {docs => content/en/docs}/concepts/api-extension/apiserver-aggregation.md (92%) rename {docs => content/en/docs}/concepts/api-extension/custom-resources.md (98%) create mode 100755 content/en/docs/concepts/architecture/_index.md rename {docs => content/en/docs}/concepts/architecture/cloud-controller.md (98%) rename {docs => content/en/docs}/concepts/architecture/master-node-communication.md (99%) rename {docs => content/en/docs}/concepts/architecture/nodes.md (99%) create mode 100755 content/en/docs/concepts/cluster-administration/_index.md rename {docs => content/en/docs}/concepts/cluster-administration/addons.md (100%) rename {docs => content/en/docs}/concepts/cluster-administration/certificates.md (99%) rename {docs => content/en/docs}/concepts/cluster-administration/cloud-providers.md (99%) rename {docs => content/en/docs}/concepts/cluster-administration/cluster-administration-overview.md (97%) rename {docs => content/en/docs}/concepts/cluster-administration/controller-metrics.md (93%) rename {docs => content/en/docs}/concepts/cluster-administration/counter-pod.yaml (100%) rename {docs => content/en/docs}/concepts/cluster-administration/device-plugins.md (93%) rename {docs => content/en/docs}/concepts/cluster-administration/federation.md (96%) rename {docs => content/en/docs}/concepts/cluster-administration/fluentd-sidecar-config.yaml (100%) rename {docs => content/en/docs}/concepts/cluster-administration/kubelet-garbage-collection.md (99%) rename {docs => content/en/docs}/concepts/cluster-administration/logging.md (93%) rename {docs => content/en/docs}/concepts/cluster-administration/manage-deployment.md (98%) rename {docs => content/en/docs}/concepts/cluster-administration/network-plugins.md (88%) rename {docs => content/en/docs}/concepts/cluster-administration/networking.md (99%) rename {docs => content/en/docs}/concepts/cluster-administration/nginx-app.yaml (100%) rename {docs => content/en/docs}/concepts/cluster-administration/nginx-deployment.yaml (100%) rename {docs => content/en/docs}/concepts/cluster-administration/nginx/nginx-deployment.yaml (100%) rename {docs => content/en/docs}/concepts/cluster-administration/nginx/nginx-svc.yaml (100%) rename {docs => content/en/docs}/concepts/cluster-administration/proxies.md (94%) rename {docs => content/en/docs}/concepts/cluster-administration/two-files-counter-pod-agent-sidecar.yaml (100%) rename {docs => content/en/docs}/concepts/cluster-administration/two-files-counter-pod-streaming-sidecar.yaml (100%) rename {docs => content/en/docs}/concepts/cluster-administration/two-files-counter-pod.yaml (100%) create mode 100755 content/en/docs/concepts/configuration/_index.md rename {docs => content/en/docs}/concepts/configuration/assign-pod-node.md (97%) rename {docs => content/en/docs}/concepts/configuration/commands.yaml (100%) rename {docs => content/en/docs}/concepts/configuration/manage-compute-resources-container.md (96%) rename {docs => content/en/docs}/concepts/configuration/organize-cluster-access-kubeconfig.md (97%) rename {docs => content/en/docs}/concepts/configuration/overview.md (95%) rename {docs => content/en/docs}/concepts/configuration/pod-priority-preemption.md (97%) rename {docs => content/en/docs}/concepts/configuration/pod-with-node-affinity.yaml (100%) rename {docs => content/en/docs}/concepts/configuration/pod-with-pod-affinity.yaml (100%) rename {docs => content/en/docs}/concepts/configuration/pod.yaml (100%) rename {docs => content/en/docs}/concepts/configuration/secret.md (98%) rename {docs => content/en/docs}/concepts/configuration/taint-and-toleration.md (99%) create mode 100755 content/en/docs/concepts/containers/_index.md rename {docs => content/en/docs}/concepts/containers/container-environment-variables.md (87%) rename {docs => content/en/docs}/concepts/containers/container-lifecycle-hooks.md (97%) rename {docs => content/en/docs}/concepts/containers/images.md (99%) rename {docs => content/en/docs}/concepts/example-concept-template.md (78%) create mode 100755 content/en/docs/concepts/overview/_index.md rename {docs => content/en/docs}/concepts/overview/components.md (91%) rename {docs => content/en/docs}/concepts/overview/extending.md (96%) rename {docs => content/en/docs}/concepts/overview/kubernetes-api.md (100%) create mode 100755 content/en/docs/concepts/overview/object-management-kubectl/_index.md rename {docs => content/en/docs}/concepts/overview/object-management-kubectl/declarative-config.md (96%) rename {docs => content/en/docs}/concepts/overview/object-management-kubectl/imperative-command.md (95%) rename {docs => content/en/docs}/concepts/overview/object-management-kubectl/imperative-config.md (95%) rename {docs => content/en/docs}/concepts/overview/object-management-kubectl/overview.md (94%) rename {docs => content/en/docs}/concepts/overview/object-management-kubectl/simple_deployment.yaml (100%) rename {docs => content/en/docs}/concepts/overview/object-management-kubectl/update_deployment.yaml (100%) rename {docs => content/en/docs}/concepts/overview/what-is-kubernetes.md (97%) create mode 100755 content/en/docs/concepts/overview/working-with-objects/_index.md rename {docs => content/en/docs}/concepts/overview/working-with-objects/annotations.md (92%) rename {docs => content/en/docs}/concepts/overview/working-with-objects/kubernetes-objects.md (88%) rename {docs => content/en/docs}/concepts/overview/working-with-objects/labels.md (99%) rename {docs => content/en/docs}/concepts/overview/working-with-objects/names.md (86%) rename {docs => content/en/docs}/concepts/overview/working-with-objects/namespaces.md (100%) rename {docs => content/en/docs}/concepts/overview/working-with-objects/nginx-deployment.yaml (100%) create mode 100755 content/en/docs/concepts/policy/_index.md rename {docs => content/en/docs}/concepts/policy/example-psp.yaml (100%) rename {docs => content/en/docs}/concepts/policy/pod-security-policy.md (98%) rename {docs => content/en/docs}/concepts/policy/privileged-psp.yaml (100%) rename {docs => content/en/docs}/concepts/policy/resource-quotas.md (100%) rename {docs => content/en/docs}/concepts/policy/restricted-psp.yaml (100%) rename docs/concepts/service-catalog/index.md => content/en/docs/concepts/service-catalog/_index.md (91%) create mode 100755 content/en/docs/concepts/services-networking/_index.md rename {docs => content/en/docs}/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md (95%) rename {docs => content/en/docs}/concepts/services-networking/connect-applications-service.md (92%) rename {docs => content/en/docs}/concepts/services-networking/curlpod.yaml (100%) rename {docs => content/en/docs}/concepts/services-networking/custom-dns.yaml (100%) rename {docs => content/en/docs}/concepts/services-networking/dns-pod-service.md (96%) rename {docs => content/en/docs}/concepts/services-networking/hostaliases-pod.yaml (100%) rename {docs => content/en/docs}/concepts/services-networking/ingress.md (96%) rename {docs => content/en/docs}/concepts/services-networking/ingress.yaml (100%) rename {docs => content/en/docs}/concepts/services-networking/network-policies.md (98%) rename {docs => content/en/docs}/concepts/services-networking/nginx-secure-app.yaml (100%) rename {docs => content/en/docs}/concepts/services-networking/nginx-svc.yaml (100%) rename {docs => content/en/docs}/concepts/services-networking/run-my-nginx.yaml (100%) rename {docs => content/en/docs}/concepts/services-networking/service.md (98%) create mode 100755 content/en/docs/concepts/storage/_index.md rename {docs => content/en/docs}/concepts/storage/dynamic-provisioning.md (97%) rename {docs => content/en/docs}/concepts/storage/persistent-volumes.md (98%) rename {docs => content/en/docs}/concepts/storage/storage-classes.md (99%) rename {docs => content/en/docs}/concepts/storage/volumes.md (94%) create mode 100755 content/en/docs/concepts/workloads/controllers/_index.md rename {docs => content/en/docs}/concepts/workloads/controllers/cron-jobs.md (98%) rename {docs => content/en/docs}/concepts/workloads/controllers/cronjob.yaml (100%) rename {docs => content/en/docs}/concepts/workloads/controllers/daemonset.md (98%) rename {docs => content/en/docs}/concepts/workloads/controllers/daemonset.yaml (100%) rename {docs => content/en/docs}/concepts/workloads/controllers/deployment.md (98%) rename {docs => content/en/docs}/concepts/workloads/controllers/frontend.yaml (100%) rename {docs => content/en/docs}/concepts/workloads/controllers/garbage-collection.md (95%) rename {docs => content/en/docs}/concepts/workloads/controllers/hpa-rs.yaml (100%) rename {docs => content/en/docs}/concepts/workloads/controllers/job.yaml (100%) rename {docs => content/en/docs}/concepts/workloads/controllers/jobs-run-to-completion.md (98%) rename {docs => content/en/docs}/concepts/workloads/controllers/my-repset.yaml (100%) rename {docs => content/en/docs}/concepts/workloads/controllers/nginx-deployment.yaml (100%) rename {docs => content/en/docs}/concepts/workloads/controllers/replicaset.md (96%) rename {docs => content/en/docs}/concepts/workloads/controllers/replication.yaml (100%) rename {docs => content/en/docs}/concepts/workloads/controllers/replicationcontroller.md (98%) rename {docs => content/en/docs}/concepts/workloads/controllers/statefulset.md (96%) create mode 100755 content/en/docs/concepts/workloads/pods/_index.md rename {docs => content/en/docs}/concepts/workloads/pods/disruptions.md (98%) rename {docs => content/en/docs}/concepts/workloads/pods/init-containers.md (97%) rename {docs => content/en/docs}/concepts/workloads/pods/pod-lifecycle.md (89%) rename {docs => content/en/docs}/concepts/workloads/pods/pod-overview.md (97%) rename {docs => content/en/docs}/concepts/workloads/pods/pod.md (99%) rename {docs => content/en/docs}/concepts/workloads/pods/podpreset.md (94%) rename editdocs.md => content/en/docs/editdocs.md (97%) rename {docs => content/en/docs}/getting-started-guides/OWNERS (100%) create mode 100755 content/en/docs/getting-started-guides/_index.md rename {docs => content/en/docs}/getting-started-guides/alibaba-cloud.md (100%) rename {docs => content/en/docs}/getting-started-guides/alternatives.md (100%) rename {docs => content/en/docs}/getting-started-guides/aws.md (96%) rename {docs => content/en/docs}/getting-started-guides/azure.md (100%) rename {docs => content/en/docs}/getting-started-guides/clc.md (99%) rename {docs => content/en/docs}/getting-started-guides/cloudstack.md (97%) rename {docs => content/en/docs}/getting-started-guides/coreos/OWNERS (100%) rename docs/getting-started-guides/coreos/index.md => content/en/docs/getting-started-guides/coreos/_index.md (99%) rename {docs => content/en/docs}/getting-started-guides/coreos/cloud-configs/master.yaml (100%) rename {docs => content/en/docs}/getting-started-guides/coreos/cloud-configs/node.yaml (100%) rename {docs => content/en/docs}/getting-started-guides/dcos.md (100%) rename {docs => content/en/docs}/getting-started-guides/fedora/OWNERS (100%) create mode 100755 content/en/docs/getting-started-guides/fedora/_index.md rename {docs => content/en/docs}/getting-started-guides/fedora/fedora_manual_config.md (99%) rename {docs => content/en/docs}/getting-started-guides/fedora/flannel_multi_node_cluster.md (99%) rename {docs => content/en/docs}/getting-started-guides/gce.md (97%) rename {docs => content/en/docs}/getting-started-guides/kops.md (100%) rename {docs => content/en/docs}/getting-started-guides/kubespray.md (99%) rename {docs => content/en/docs}/getting-started-guides/minikube.md (99%) rename {docs => content/en/docs}/getting-started-guides/ovirt.md (99%) rename {docs => content/en/docs}/getting-started-guides/scratch.md (98%) rename {docs => content/en/docs}/getting-started-guides/stackpoint.md (99%) rename docs/getting-started-guides/ubuntu/index.md => content/en/docs/getting-started-guides/ubuntu/_index.md (95%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/backups.md (94%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/decommissioning.md (93%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/glossary.md (92%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/installation.md (98%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/local.md (93%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/logging.md (91%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/monitoring.md (96%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/networking.md (90%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/operational-considerations.md (97%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/rancher.md (98%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/scaling.md (94%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/security.md (87%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/storage.md (93%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/troubleshooting.md (98%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/upgrades.md (96%) rename {docs => content/en/docs}/getting-started-guides/ubuntu/validation.md (96%) rename {docs => content/en/docs}/getting-started-guides/windows/OVN_OVS_Windows_Installer.png (100%) rename {docs => content/en/docs}/getting-started-guides/windows/UpstreamRouting.png (100%) rename docs/getting-started-guides/windows/index.md => content/en/docs/getting-started-guides/windows/_index.md (99%) rename {docs => content/en/docs}/getting-started-guides/windows/configmap-pod.yaml (100%) rename {docs => content/en/docs}/getting-started-guides/windows/emptydir-pod.yaml (100%) rename {docs => content/en/docs}/getting-started-guides/windows/hostpath-volume-pod.yaml (100%) rename {docs => content/en/docs}/getting-started-guides/windows/ovn_kubernetes.png (100%) rename {docs => content/en/docs}/getting-started-guides/windows/sample-l2bridge-wincni-config.json (100%) rename {docs => content/en/docs}/getting-started-guides/windows/secret-pod.yaml (100%) rename {docs => content/en/docs}/getting-started-guides/windows/windows-setup.png (100%) create mode 100644 content/en/docs/home/_index.md create mode 100755 content/en/docs/home/contribute/_index.md rename {docs => content/en/docs}/home/contribute/blog-post.md (94%) create mode 100644 content/en/docs/home/contribute/content-organization.md rename {docs => content/en/docs}/home/contribute/create-pull-request.md (96%) rename {docs => content/en/docs}/home/contribute/generated-reference/federation-api.md (93%) rename {docs => content/en/docs}/home/contribute/generated-reference/kubectl.md (97%) rename {docs => content/en/docs}/home/contribute/generated-reference/kubernetes-api.md (97%) rename {docs => content/en/docs}/home/contribute/generated-reference/kubernetes-components.md (97%) create mode 100644 content/en/docs/home/contribute/includes/example1.md create mode 100644 content/en/docs/home/contribute/includes/example2.md create mode 100644 content/en/docs/home/contribute/includes/index.md create mode 100644 content/en/docs/home/contribute/includes/podtemplate.json rename {docs => content/en/docs}/home/contribute/localization.md (97%) rename {docs => content/en/docs}/home/contribute/page-templates.md (100%) rename {docs => content/en/docs}/home/contribute/participating.md (96%) rename {docs => content/en/docs}/home/contribute/review-issues.md (96%) rename {docs => content/en/docs}/home/contribute/stage-documentation-changes.md (92%) rename {docs => content/en/docs}/home/contribute/style-guide.md (78%) rename {docs => content/en/docs}/home/contribute/write-new-topic.md (96%) rename {docs => content/en/docs}/home/supported-doc-versions.md (50%) rename docs/imported/index.md => content/en/docs/imported/_index.md (100%) create mode 100755 content/en/docs/imported/community/_index.md rename {docs => content/en/docs}/imported/community/devel.md (100%) mode change 100755 => 100644 rename {docs => content/en/docs}/imported/community/guide.md (100%) mode change 100755 => 100644 rename {docs => content/en/docs}/imported/community/keps.md (100%) mode change 100755 => 100644 rename {docs => content/en/docs}/imported/community/mentoring.md (100%) mode change 100755 => 100644 create mode 100755 content/en/docs/imported/release/_index.md rename {docs => content/en/docs}/imported/release/notes.md (100%) mode change 100755 => 100644 rename docs/reference/index.md => content/en/docs/reference/_index.md (98%) rename {docs => content/en/docs}/reference/api-concepts.md (99%) rename {docs => content/en/docs}/reference/api-overview.md (95%) rename {docs => content/en/docs}/reference/client-libraries.md (97%) rename {docs => content/en/docs}/reference/deprecation-policy.md (100%) rename {docs => content/en/docs}/reference/feature-gates.md (99%) create mode 100755 content/en/docs/reference/glossary/annotation.md create mode 100755 content/en/docs/reference/glossary/application-architect.md create mode 100755 content/en/docs/reference/glossary/application-developer.md create mode 100755 content/en/docs/reference/glossary/approver.md create mode 100755 content/en/docs/reference/glossary/certificate.md create mode 100755 content/en/docs/reference/glossary/cla.md create mode 100755 content/en/docs/reference/glossary/cloud-controller-manager.md create mode 100755 content/en/docs/reference/glossary/cloud-provider.md create mode 100755 content/en/docs/reference/glossary/cluster-architect.md create mode 100755 content/en/docs/reference/glossary/cluster-operator.md create mode 100755 content/en/docs/reference/glossary/cluster.md create mode 100755 content/en/docs/reference/glossary/code-contributor.md create mode 100755 content/en/docs/reference/glossary/configmap.md create mode 100755 content/en/docs/reference/glossary/container-env-variables.md create mode 100755 content/en/docs/reference/glossary/container.md create mode 100755 content/en/docs/reference/glossary/contributor.md create mode 100755 content/en/docs/reference/glossary/controller.md create mode 100755 content/en/docs/reference/glossary/cronjob.md create mode 100755 content/en/docs/reference/glossary/customresourcedefinition.md create mode 100755 content/en/docs/reference/glossary/daemonset.md create mode 100755 content/en/docs/reference/glossary/deployment.md create mode 100755 content/en/docs/reference/glossary/developer.md create mode 100755 content/en/docs/reference/glossary/docker.md create mode 100755 content/en/docs/reference/glossary/downstream.md create mode 100755 content/en/docs/reference/glossary/dynamic-volume-provisioning.md create mode 100755 content/en/docs/reference/glossary/etcd.md create mode 100755 content/en/docs/reference/glossary/helm-chart.md create mode 100755 content/en/docs/reference/glossary/horizontal-pod-autoscaler.md create mode 100755 content/en/docs/reference/glossary/image.md create mode 100755 content/en/docs/reference/glossary/index.md create mode 100755 content/en/docs/reference/glossary/ingress.md create mode 100755 content/en/docs/reference/glossary/init-container.md create mode 100755 content/en/docs/reference/glossary/istio.md create mode 100755 content/en/docs/reference/glossary/job.md create mode 100755 content/en/docs/reference/glossary/kops.md create mode 100755 content/en/docs/reference/glossary/kube-apiserver.md create mode 100755 content/en/docs/reference/glossary/kube-controller-manager.md create mode 100755 content/en/docs/reference/glossary/kube-proxy.md create mode 100755 content/en/docs/reference/glossary/kube-scheduler.md create mode 100755 content/en/docs/reference/glossary/kubeadm.md create mode 100755 content/en/docs/reference/glossary/kubectl.md create mode 100755 content/en/docs/reference/glossary/kubelet.md create mode 100755 content/en/docs/reference/glossary/kubernetes-api.md create mode 100755 content/en/docs/reference/glossary/label.md create mode 100755 content/en/docs/reference/glossary/maintainer.md create mode 100755 content/en/docs/reference/glossary/managed-service.md create mode 100755 content/en/docs/reference/glossary/member.md create mode 100755 content/en/docs/reference/glossary/minikube.md create mode 100755 content/en/docs/reference/glossary/name.md create mode 100755 content/en/docs/reference/glossary/namespace.md create mode 100755 content/en/docs/reference/glossary/network-policy.md create mode 100755 content/en/docs/reference/glossary/node.md create mode 100755 content/en/docs/reference/glossary/persistent-volume-claim.md create mode 100755 content/en/docs/reference/glossary/persistent-volume.md create mode 100755 content/en/docs/reference/glossary/platform-developer.md create mode 100755 content/en/docs/reference/glossary/pod-security-policy.md create mode 100755 content/en/docs/reference/glossary/pod.md create mode 100755 content/en/docs/reference/glossary/podpreset.md create mode 100755 content/en/docs/reference/glossary/rbac.md create mode 100755 content/en/docs/reference/glossary/replica-set.md create mode 100755 content/en/docs/reference/glossary/replication-controller.md create mode 100755 content/en/docs/reference/glossary/resource-quota.md create mode 100755 content/en/docs/reference/glossary/reviewer.md create mode 100755 content/en/docs/reference/glossary/secret.md create mode 100755 content/en/docs/reference/glossary/security-context.md create mode 100755 content/en/docs/reference/glossary/selector.md create mode 100755 content/en/docs/reference/glossary/service-account.md create mode 100755 content/en/docs/reference/glossary/service-broker.md create mode 100755 content/en/docs/reference/glossary/service-catalog.md create mode 100755 content/en/docs/reference/glossary/service.md create mode 100755 content/en/docs/reference/glossary/sig.md create mode 100755 content/en/docs/reference/glossary/statefulset.md create mode 100755 content/en/docs/reference/glossary/storage-class.md create mode 100755 content/en/docs/reference/glossary/uid.md create mode 100755 content/en/docs/reference/glossary/upstream.md create mode 100755 content/en/docs/reference/glossary/volume-plugin.md create mode 100755 content/en/docs/reference/glossary/volume.md create mode 100755 content/en/docs/reference/glossary/wg.md create mode 100755 content/en/docs/reference/kubectl/_index.md rename {docs => content/en/docs}/reference/kubectl/cheatsheet.md (100%) rename {docs => content/en/docs}/reference/kubectl/conventions.md (99%) rename {docs => content/en/docs}/reference/kubectl/docker-cli-to-kubectl.md (99%) rename {docs => content/en/docs}/reference/kubectl/jsonpath.md (100%) rename {docs => content/en/docs}/reference/kubectl/overview.md (99%) rename {docs => content/en/docs}/reference/labels-annotations-taints.md (100%) rename {docs => content/en/docs}/reference/security.md (98%) create mode 100755 content/en/docs/reference/setup-tools/kubeadm/_index.md rename {docs/reference => content/en/docs/reference/setup-tools/kubeadm}/generated/README.md (100%) create mode 100644 content/en/docs/reference/setup-tools/kubeadm/generated/_index.md rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_all.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-dns.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-proxy.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_all.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_cluster-info.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_create.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-auto-approve.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-post-csrs.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_all.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-etcd-client.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-kubelet-client.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_ca.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-ca.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-healthcheck-client.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-peer.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-server.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-ca.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-client.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_sa.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_all.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_apiserver.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_controller-manager.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_scheduler.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd_local.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_admin.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_all.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_controller-manager.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_kubelet.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_scheduler.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_user.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_mark-master.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_master.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_node.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting_convert-from-staticpods.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_upload-config.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_completion.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_config.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_config_upload.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-file.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-flags.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_config_view.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_init.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_join.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_reset.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_token.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_token_generate.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_token_list.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_upgrade.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/generated/kubeadm_version.md (100%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/implementation-details.md (99%) create mode 100644 content/en/docs/reference/setup-tools/kubeadm/kubeadm-alpha.md rename {docs => content/en/docs}/reference/setup-tools/kubeadm/kubeadm-config.md (70%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/kubeadm-init.md (98%) mode change 100755 => 100644 rename {docs => content/en/docs}/reference/setup-tools/kubeadm/kubeadm-join.md (97%) mode change 100755 => 100644 rename {docs => content/en/docs}/reference/setup-tools/kubeadm/kubeadm-reset.md (73%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/kubeadm-token.md (65%) rename {docs => content/en/docs}/reference/setup-tools/kubeadm/kubeadm-upgrade.md (83%) mode change 100755 => 100644 create mode 100644 content/en/docs/reference/setup-tools/kubeadm/kubeadm-version.md rename {docs => content/en/docs}/reference/setup-tools/kubeadm/kubeadm.md (100%) rename {docs => content/en/docs}/reference/workloads-18-19.md (100%) create mode 100644 content/en/docs/search.md rename docs/setup/index.md => content/en/docs/setup/_index.md (91%) rename {docs => content/en/docs}/setup/building-from-source.md (90%) create mode 100755 content/en/docs/setup/independent/_index.md rename {docs => content/en/docs}/setup/independent/create-cluster-kubeadm.md (96%) rename {docs => content/en/docs}/setup/independent/high-availability.md (83%) rename {docs => content/en/docs}/setup/independent/install-kubeadm.md (84%) rename {docs => content/en/docs}/setup/independent/troubleshooting-kubeadm.md (99%) rename {docs => content/en/docs}/setup/pick-right-solution.md (99%) rename {docs => content/en/docs}/sitemap.md (100%) rename docs/tasks/index.md => content/en/docs/tasks/_index.md (98%) create mode 100755 content/en/docs/tasks/access-application-cluster/_index.md rename {docs => content/en/docs}/tasks/access-application-cluster/access-cluster.md (99%) rename {docs => content/en/docs}/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md (86%) rename {docs => content/en/docs}/tasks/access-application-cluster/configure-access-multiple-clusters.md (97%) rename {docs => content/en/docs}/tasks/access-application-cluster/configure-cloud-provider-firewall.md (100%) rename {docs => content/en/docs}/tasks/access-application-cluster/connecting-frontend-backend.md (87%) rename {docs => content/en/docs}/tasks/access-application-cluster/create-external-load-balancer.md (96%) rename {docs => content/en/docs}/tasks/access-application-cluster/frontend.yaml (100%) rename {docs => content/en/docs}/tasks/access-application-cluster/frontend/Dockerfile (100%) rename {docs => content/en/docs}/tasks/access-application-cluster/frontend/frontend.conf (100%) rename {docs => content/en/docs}/tasks/access-application-cluster/hello-service.yaml (100%) rename {docs => content/en/docs}/tasks/access-application-cluster/hello.yaml (100%) rename {docs => content/en/docs}/tasks/access-application-cluster/hello/Dockerfile (100%) rename {docs => content/en/docs}/tasks/access-application-cluster/hello/README (100%) rename {docs => content/en/docs}/tasks/access-application-cluster/hello/main.go (100%) rename {docs => content/en/docs}/tasks/access-application-cluster/list-all-running-container-images.md (90%) rename {docs => content/en/docs}/tasks/access-application-cluster/load-balance-access-application-cluster.md (90%) rename {docs => content/en/docs}/tasks/access-application-cluster/port-forward-access-application-cluster.md (90%) rename {docs => content/en/docs}/tasks/access-application-cluster/redis-master.yaml (100%) rename {docs => content/en/docs}/tasks/access-application-cluster/service-access-application-cluster.md (92%) rename {docs => content/en/docs}/tasks/access-application-cluster/two-container-pod.yaml (100%) rename {docs => content/en/docs}/tasks/access-application-cluster/web-ui-dashboard.md (99%) create mode 100755 content/en/docs/tasks/access-kubernetes-api/_index.md rename {docs => content/en/docs}/tasks/access-kubernetes-api/configure-aggregation-layer.md (87%) rename {docs => content/en/docs}/tasks/access-kubernetes-api/extend-api-custom-resource-definitions.md (97%) rename {docs => content/en/docs}/tasks/access-kubernetes-api/extend-api-third-party-resource.md (98%) rename {docs => content/en/docs}/tasks/access-kubernetes-api/http-proxy-access-api.md (87%) rename {docs => content/en/docs}/tasks/access-kubernetes-api/migrate-third-party-resource.md (93%) rename {docs => content/en/docs}/tasks/access-kubernetes-api/setup-extension-api-server.md (95%) create mode 100755 content/en/docs/tasks/administer-cluster/_index.md rename {docs => content/en/docs}/tasks/administer-cluster/access-cluster-api.md (96%) rename {docs => content/en/docs}/tasks/administer-cluster/access-cluster-services.md (96%) rename {docs => content/en/docs}/tasks/administer-cluster/busybox.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/calico-network-policy.md (87%) rename {docs => content/en/docs}/tasks/administer-cluster/change-default-storage-class.md (91%) rename {docs => content/en/docs}/tasks/administer-cluster/change-pv-reclaim-policy.md (87%) rename {docs => content/en/docs}/tasks/administer-cluster/cilium-network-policy.md (90%) rename {docs => content/en/docs}/tasks/administer-cluster/cloud-controller-manager-daemonset-example.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/cluster-management.md (99%) rename {docs => content/en/docs}/tasks/administer-cluster/configure-multiple-schedulers.md (93%) rename {docs => content/en/docs}/tasks/administer-cluster/configure-upgrade-etcd.md (98%) rename {docs => content/en/docs}/tasks/administer-cluster/coredns.md (84%) rename {docs => content/en/docs}/tasks/administer-cluster/cpu-constraint-namespace.md (88%) rename {docs => content/en/docs}/tasks/administer-cluster/cpu-constraints-pod-2.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/cpu-constraints-pod-3.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/cpu-constraints-pod-4.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/cpu-constraints-pod.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/cpu-constraints.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/cpu-default-namespace.md (86%) rename {docs => content/en/docs}/tasks/administer-cluster/cpu-defaults-pod-2.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/cpu-defaults-pod-3.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/cpu-defaults-pod.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/cpu-defaults.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/cpu-management-policies.md (98%) rename {docs => content/en/docs}/tasks/administer-cluster/declare-network-policy.md (96%) rename {docs => content/en/docs}/tasks/administer-cluster/developing-cloud-controller-manager.md (99%) rename {docs => content/en/docs}/tasks/administer-cluster/dns-custom-nameservers.md (94%) rename {docs => content/en/docs}/tasks/administer-cluster/dns-custom-nameservers/dns.png (100%) rename {docs => content/en/docs}/tasks/administer-cluster/dns-debugging-resolution.md (93%) rename {docs => content/en/docs}/tasks/administer-cluster/dns-horizontal-autoscaler.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/dns-horizontal-autoscaling.md (94%) rename {docs => content/en/docs}/tasks/administer-cluster/encrypt-data.md (97%) rename {docs => content/en/docs}/tasks/administer-cluster/extended-resource-node.md (94%) rename {docs => content/en/docs}/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md (99%) rename {docs => content/en/docs}/tasks/administer-cluster/highly-available-master.md (99%) rename {docs => content/en/docs}/tasks/administer-cluster/ip-masq-agent.md (96%) rename {docs => content/en/docs}/tasks/administer-cluster/kms-provider.md (96%) rename {docs => content/en/docs}/tasks/administer-cluster/kube-router-network-policy.md (83%) rename {docs => content/en/docs}/tasks/administer-cluster/kubelet-config-file.md (92%) rename {docs => content/en/docs}/tasks/administer-cluster/limit-storage-consumption.md (90%) rename {docs => content/en/docs}/tasks/administer-cluster/memory-available.sh (100%) rename {docs => content/en/docs}/tasks/administer-cluster/memory-constraint-namespace.md (88%) rename {docs => content/en/docs}/tasks/administer-cluster/memory-constraints-pod-2.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/memory-constraints-pod-3.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/memory-constraints-pod-4.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/memory-constraints-pod.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/memory-constraints.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/memory-default-namespace.md (87%) rename {docs => content/en/docs}/tasks/administer-cluster/memory-defaults-pod-2.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/memory-defaults-pod-3.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/memory-defaults-pod.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/memory-defaults.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/my-scheduler.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/namespace-dev.json (100%) rename {docs => content/en/docs}/tasks/administer-cluster/namespace-prod.json (100%) rename {docs => content/en/docs}/tasks/administer-cluster/namespaces-walkthrough.md (97%) rename {docs => content/en/docs}/tasks/administer-cluster/namespaces.md (96%) rename {docs => content/en/docs}/tasks/administer-cluster/out-of-resource.md (99%) rename {docs => content/en/docs}/tasks/administer-cluster/persistent-volume-label-initializer-config.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/pod1.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/pod2.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/pod3.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/pvc-protection.md (93%) rename {docs => content/en/docs}/tasks/administer-cluster/quota-api-object.md (85%) rename {docs => content/en/docs}/tasks/administer-cluster/quota-mem-cpu-pod-2.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/quota-mem-cpu-pod.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/quota-mem-cpu.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/quota-memory-cpu-namespace.md (86%) rename {docs => content/en/docs}/tasks/administer-cluster/quota-objects-pvc-2.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/quota-objects-pvc.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/quota-objects.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/quota-pod-deployment.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/quota-pod-namespace.md (83%) rename {docs => content/en/docs}/tasks/administer-cluster/quota-pod.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/quota-pvc-2.yaml (100%) rename {docs => content/en/docs}/tasks/administer-cluster/reconfigure-kubelet.md (98%) rename {docs => content/en/docs}/tasks/administer-cluster/reserve-compute-resources.md (99%) rename {docs => content/en/docs}/tasks/administer-cluster/romana-network-policy.md (80%) rename {docs => content/en/docs}/tasks/administer-cluster/running-cloud-controller.md (95%) rename {docs => content/en/docs}/tasks/administer-cluster/safely-drain-node.md (96%) rename {docs => content/en/docs}/tasks/administer-cluster/securing-a-cluster.md (98%) rename {docs => content/en/docs}/tasks/administer-cluster/static-pod.md (100%) rename {docs => content/en/docs}/tasks/administer-cluster/storage-object-in-use-protection.md (96%) rename {docs => content/en/docs}/tasks/administer-cluster/sysctl-cluster.md (93%) create mode 100755 content/en/docs/tasks/administer-cluster/upgrade-downgrade/_index.md rename {docs => content/en/docs}/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-1-7.md (93%) rename {docs => content/en/docs}/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-1-8.md (98%) rename {docs => content/en/docs}/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-1-9.md (98%) rename {docs => content/en/docs}/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-ha.md (97%) rename {docs => content/en/docs}/tasks/administer-cluster/upgrade-downgrade/upgrade-1-6.md (98%) rename {docs => content/en/docs}/tasks/administer-cluster/weave-network-policy.md (90%) create mode 100755 content/en/docs/tasks/administer-federation/_index.md rename {docs => content/en/docs}/tasks/administer-federation/cluster.md (94%) rename {docs => content/en/docs}/tasks/administer-federation/configmap.md (91%) rename {docs => content/en/docs}/tasks/administer-federation/daemonset.md (90%) rename {docs => content/en/docs}/tasks/administer-federation/deployment.md (92%) rename {docs => content/en/docs}/tasks/administer-federation/events.md (95%) rename {docs => content/en/docs}/tasks/administer-federation/hpa.md (96%) rename {docs => content/en/docs}/tasks/administer-federation/ingress.md (98%) rename {docs => content/en/docs}/tasks/administer-federation/job.md (90%) rename {docs => content/en/docs}/tasks/administer-federation/namespaces.md (91%) rename {docs => content/en/docs}/tasks/administer-federation/replicaset.md (94%) rename {docs => content/en/docs}/tasks/administer-federation/secret.md (98%) create mode 100755 content/en/docs/tasks/configure-pod-container/_index.md rename {docs => content/en/docs}/tasks/configure-pod-container/assign-cpu-resource.md (93%) rename {docs => content/en/docs}/tasks/configure-pod-container/assign-memory-resource.md (93%) rename {docs => content/en/docs}/tasks/configure-pod-container/assign-pods-nodes.md (85%) rename {docs => content/en/docs}/tasks/configure-pod-container/attach-handler-lifecycle-event.md (79%) rename {docs => content/en/docs}/tasks/configure-pod-container/configmap/kubectl/game.properties (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/configmap/kubectl/ui.properties (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/configure-liveness-readiness-probes.md (90%) rename {docs => content/en/docs}/tasks/configure-pod-container/configure-persistent-volume-storage.md (89%) rename {docs => content/en/docs}/tasks/configure-pod-container/configure-pod-configmap.md (97%) rename {docs => content/en/docs}/tasks/configure-pod-container/configure-pod-initialization.md (86%) rename {docs => content/en/docs}/tasks/configure-pod-container/configure-projected-volume-storage.md (79%) rename {docs => content/en/docs}/tasks/configure-pod-container/configure-service-account.md (99%) rename {docs => content/en/docs}/tasks/configure-pod-container/configure-volume-storage.md (83%) rename {docs => content/en/docs}/tasks/configure-pod-container/cpu-request-limit-2.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/cpu-request-limit.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/exec-liveness.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/extended-resource-pod-2.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/extended-resource-pod.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/extended-resource.md (83%) rename {docs => content/en/docs}/tasks/configure-pod-container/game-env-file.properties (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/http-liveness.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/init-containers.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/lifecycle-events.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/mem-limit-range.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/memory-request-limit-2.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/memory-request-limit-3.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/memory-request-limit.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/pod-redis.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/pod.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/private-reg-pod.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/projected-volume.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/pull-image-private-registry.md (88%) rename {docs => content/en/docs}/tasks/configure-pod-container/qos-pod-2.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/qos-pod-3.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/qos-pod-4.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/qos-pod.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/quality-service-pod.md (89%) rename {docs => content/en/docs}/tasks/configure-pod-container/rq-compute-resources.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/security-context-2.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/security-context-3.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/security-context-4.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/security-context.md (89%) rename {docs => content/en/docs}/tasks/configure-pod-container/security-context.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/share-process-namespace.md (88%) rename {docs => content/en/docs}/tasks/configure-pod-container/share-process-namespace.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/task-pv-claim.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/task-pv-pod.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/task-pv-volume.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/tcp-liveness-readiness.yaml (100%) rename {docs => content/en/docs}/tasks/configure-pod-container/ui-env-file.properties (100%) create mode 100755 content/en/docs/tasks/debug-application-cluster/_index.md rename {docs => content/en/docs}/tasks/debug-application-cluster/audit-policy.yaml (100%) rename {docs => content/en/docs}/tasks/debug-application-cluster/audit.md (97%) rename {docs => content/en/docs}/tasks/debug-application-cluster/core-metrics-pipeline.md (100%) rename {docs => content/en/docs}/tasks/debug-application-cluster/counter-pod.yaml (100%) rename {docs => content/en/docs}/tasks/debug-application-cluster/debug-application-introspection.md (99%) rename {docs => content/en/docs}/tasks/debug-application-cluster/debug-application.md (99%) rename {docs => content/en/docs}/tasks/debug-application-cluster/debug-cluster.md (100%) rename {docs => content/en/docs}/tasks/debug-application-cluster/debug-init-containers.md (91%) rename {docs => content/en/docs}/tasks/debug-application-cluster/debug-pod-replication-controller.md (99%) rename {docs => content/en/docs}/tasks/debug-application-cluster/debug-service.md (99%) rename {docs => content/en/docs}/tasks/debug-application-cluster/debug-stateful-set.md (84%) rename {docs => content/en/docs}/tasks/debug-application-cluster/determine-reason-pod-failure.md (84%) rename {docs => content/en/docs}/tasks/debug-application-cluster/event-exporter-deploy.yaml (100%) rename {docs => content/en/docs}/tasks/debug-application-cluster/events-stackdriver.md (95%) rename {docs => content/en/docs}/tasks/debug-application-cluster/fluentd-gcp-configmap.yaml (100%) rename {docs => content/en/docs}/tasks/debug-application-cluster/fluentd-gcp-ds.yaml (100%) rename {docs => content/en/docs}/tasks/debug-application-cluster/get-shell-running-container.md (87%) rename {docs => content/en/docs}/tasks/debug-application-cluster/local-debugging.md (93%) rename {docs => content/en/docs}/tasks/debug-application-cluster/logging-elasticsearch-kibana.md (100%) rename {docs => content/en/docs}/tasks/debug-application-cluster/logging-stackdriver.md (98%) rename {docs => content/en/docs}/tasks/debug-application-cluster/monitor-node-health.md (93%) rename {docs => content/en/docs}/tasks/debug-application-cluster/nginx-dep.yaml (100%) rename {docs => content/en/docs}/tasks/debug-application-cluster/node-problem-detector-configmap.yaml (100%) rename {docs => content/en/docs}/tasks/debug-application-cluster/node-problem-detector.yaml (100%) rename {docs => content/en/docs}/tasks/debug-application-cluster/resource-usage-monitoring.md (100%) rename {docs => content/en/docs}/tasks/debug-application-cluster/shell-demo.yaml (100%) rename {docs => content/en/docs}/tasks/debug-application-cluster/termination.yaml (100%) rename {docs => content/en/docs}/tasks/debug-application-cluster/troubleshooting.md (98%) rename {docs => content/en/docs}/tasks/example-task-template.md (70%) rename {docs => content/en/docs}/tasks/extend-kubectl/kubectl-plugins.md (97%) rename {docs => content/en/docs}/tasks/federation/Values.yaml (100%) create mode 100755 content/en/docs/tasks/federation/_index.md rename {docs => content/en/docs}/tasks/federation/federation-service-discovery.md (99%) rename {docs => content/en/docs}/tasks/federation/policy-engine-deployment.yaml (100%) rename {docs => content/en/docs}/tasks/federation/policy-engine-service.yaml (100%) rename {docs => content/en/docs}/tasks/federation/policy.rego (100%) rename {docs => content/en/docs}/tasks/federation/replicaset-example-policy.yaml (100%) rename {docs => content/en/docs}/tasks/federation/scheduling-policy-admission.yaml (100%) rename {docs => content/en/docs}/tasks/federation/set-up-cluster-federation-kubefed.md (99%) rename {docs => content/en/docs}/tasks/federation/set-up-coredns-provider-federation.md (92%) rename {docs => content/en/docs}/tasks/federation/set-up-placement-policies-federation.md (83%) create mode 100755 content/en/docs/tasks/inject-data-application/_index.md rename {docs => content/en/docs}/tasks/inject-data-application/commands.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/dapi-envars-container.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/dapi-envars-pod.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/dapi-volume-resources.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/dapi-volume.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/define-command-argument-container.md (90%) rename {docs => content/en/docs}/tasks/inject-data-application/define-environment-variable-container.md (83%) rename {docs => content/en/docs}/tasks/inject-data-application/distribute-credentials-secure.md (81%) rename {docs => content/en/docs}/tasks/inject-data-application/downward-api-volume-expose-pod-information.md (88%) rename {docs => content/en/docs}/tasks/inject-data-application/envars.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/environment-variable-expose-pod-information.md (74%) rename {docs => content/en/docs}/tasks/inject-data-application/podpreset-allow-db-merged.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/podpreset-allow-db.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/podpreset-configmap.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/podpreset-conflict-pod.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/podpreset-conflict-preset.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/podpreset-merged.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/podpreset-multi-merged.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/podpreset-pod.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/podpreset-preset.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/podpreset-proxy.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/podpreset-replicaset-merged.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/podpreset-replicaset.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/podpreset.md (55%) rename {docs => content/en/docs}/tasks/inject-data-application/secret-envars-pod.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/secret-pod.yaml (100%) rename {docs => content/en/docs}/tasks/inject-data-application/secret.yaml (100%) create mode 100755 content/en/docs/tasks/job/_index.md rename {docs => content/en/docs}/tasks/job/coarse-parallel-processing-work-queue/Dockerfile (100%) rename docs/tasks/job/coarse-parallel-processing-work-queue/index.md => content/en/docs/tasks/job/coarse-parallel-processing-work-queue/_index.md (97%) rename {docs => content/en/docs}/tasks/job/coarse-parallel-processing-work-queue/job.yaml (100%) rename {docs => content/en/docs}/tasks/job/coarse-parallel-processing-work-queue/worker.py (100%) mode change 100755 => 100644 rename {docs => content/en/docs}/tasks/job/fine-parallel-processing-work-queue/Dockerfile (100%) rename docs/tasks/job/fine-parallel-processing-work-queue/index.md => content/en/docs/tasks/job/fine-parallel-processing-work-queue/_index.md (96%) rename {docs => content/en/docs}/tasks/job/fine-parallel-processing-work-queue/job.yaml (100%) rename {docs => content/en/docs}/tasks/job/fine-parallel-processing-work-queue/redis-pod.yaml (100%) rename {docs => content/en/docs}/tasks/job/fine-parallel-processing-work-queue/redis-service.yaml (100%) rename {docs => content/en/docs}/tasks/job/fine-parallel-processing-work-queue/rediswq.py (100%) rename {docs => content/en/docs}/tasks/job/fine-parallel-processing-work-queue/worker.py (100%) mode change 100755 => 100644 rename {docs => content/en/docs}/tasks/job/job.yaml (100%) rename {docs => content/en/docs}/tasks/job/parallel-processing-expansion.md (97%) create mode 100755 content/en/docs/tasks/manage-daemon/_index.md rename {docs => content/en/docs}/tasks/manage-daemon/rollback-daemon-set.md (95%) rename {docs => content/en/docs}/tasks/manage-daemon/update-daemon-set.md (95%) rename {docs => content/en/docs}/tasks/manage-gpus/scheduling-gpus.md (100%) rename {docs => content/en/docs}/tasks/manage-hugepages/scheduling-hugepages.md (91%) create mode 100755 content/en/docs/tasks/run-application/_index.md rename {docs => content/en/docs}/tasks/run-application/configure-pdb.md (97%) rename {docs => content/en/docs}/tasks/run-application/delete-stateful-set.md (92%) rename {docs => content/en/docs}/tasks/run-application/deployment-patch-demo.yaml (100%) rename {docs => content/en/docs}/tasks/run-application/deployment-scale.yaml (100%) rename {docs => content/en/docs}/tasks/run-application/deployment-update.yaml (100%) rename {docs => content/en/docs}/tasks/run-application/deployment.yaml (100%) rename {docs => content/en/docs}/tasks/run-application/force-delete-stateful-set-pod.md (95%) rename {docs => content/en/docs}/tasks/run-application/horizontal-pod-autoscale-walkthrough.md (97%) rename {docs => content/en/docs}/tasks/run-application/horizontal-pod-autoscale.md (99%) rename {docs => content/en/docs}/tasks/run-application/hpa-php-apache.yaml (100%) rename {docs => content/en/docs}/tasks/run-application/mysql-configmap.yaml (100%) rename {docs => content/en/docs}/tasks/run-application/mysql-deployment.yaml (100%) rename {docs => content/en/docs}/tasks/run-application/mysql-services.yaml (100%) rename {docs => content/en/docs}/tasks/run-application/mysql-statefulset.yaml (100%) rename {docs => content/en/docs}/tasks/run-application/rolling-update-replication-controller.md (97%) rename {docs => content/en/docs}/tasks/run-application/run-replicated-stateful-application.md (95%) rename {docs => content/en/docs}/tasks/run-application/run-single-instance-stateful-application.md (93%) rename {docs => content/en/docs}/tasks/run-application/run-stateless-application-deployment.md (86%) rename {docs => content/en/docs}/tasks/run-application/scale-stateful-set.md (93%) rename {docs => content/en/docs}/tasks/run-application/update-api-object-kubectl-patch.md (95%) create mode 100755 content/en/docs/tasks/service-catalog/_index.md rename {docs => content/en/docs}/tasks/service-catalog/install-service-catalog-using-helm.md (87%) rename {docs => content/en/docs}/tasks/service-catalog/install-service-catalog-using-sc.md (87%) create mode 100755 content/en/docs/tasks/tls/_index.md rename {docs => content/en/docs}/tasks/tls/certificate-rotation.md (94%) rename {docs => content/en/docs}/tasks/tls/managing-tls-in-a-cluster.md (99%) create mode 100755 content/en/docs/tasks/tools/_index.md rename {docs => content/en/docs}/tasks/tools/install-kubectl.md (80%) rename {docs => content/en/docs}/tasks/tools/install-minikube.md (84%) rename _includes/feature-state-alpha.md => content/en/docs/templates/feature-state-alpha.txt (70%) rename _includes/feature-state-beta.md => content/en/docs/templates/feature-state-beta.txt (84%) create mode 100644 content/en/docs/templates/feature-state-deprecated.txt create mode 100644 content/en/docs/templates/feature-state-stable.txt create mode 100644 content/en/docs/templates/index.md rename docs/tools/index.md => content/en/docs/tools/_index.md (100%) rename docs/tools/kompose/index.md => content/en/docs/tools/kompose/_index.md (100%) rename {docs => content/en/docs}/tools/kompose/user-guide.md (99%) rename docs/tutorials/index.md => content/en/docs/tutorials/_index.md (99%) create mode 100755 content/en/docs/tutorials/clusters/_index.md rename {docs => content/en/docs}/tutorials/clusters/apparmor.md (97%) rename {docs => content/en/docs}/tutorials/clusters/deny-write.profile (100%) rename {docs => content/en/docs}/tutorials/clusters/hello-apparmor-pod.yaml (100%) create mode 100755 content/en/docs/tutorials/configuration/_index.md rename {docs => content/en/docs}/tutorials/configuration/configmap/redis/redis-config (100%) rename {docs => content/en/docs}/tutorials/configuration/configmap/redis/redis-pod.yaml (100%) rename {docs => content/en/docs}/tutorials/configuration/configure-redis-using-configmap.md (90%) rename {docs => content/en/docs}/tutorials/example-tutorial-template.md (70%) rename docs/tutorials/kubernetes-basics/index.html => content/en/docs/tutorials/kubernetes-basics/_index.html (99%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/cluster-interactive.html (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/cluster-intro.html (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/deploy-interactive.html (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/deploy-intro.html (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/explore-interactive.html (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/explore-intro.html (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/expose-interactive.html (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/expose-intro.html (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/css/overrides.css (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/css/styles.css (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/badge-01.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/badge-02.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/badge-03.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/badge-04.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/badge-05.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/badge-06.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/badge-07.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/badge-08.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/badge-09.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/badge-1.png (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/dislike.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/like.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/logo.png (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/logo.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/logo_2.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/logo_mobile.png (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_01.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_01_cluster.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_02.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_02_first_app.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_03.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_03_nodes.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_03_pods.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_04.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_04_labels.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_04_services.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_05.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_05_scaling1.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_05_scaling2.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_06.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_06_rollingupdates1.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_06_rollingupdates2.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_06_rollingupdates3.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/module_06_rollingupdates4.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/nav_point.png (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/nav_point.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/nav_point_active.png (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/nav_point_active.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/nav_point_sub.svg (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/quiz_false.png (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/quiz_true.png (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/public/images/twitter.png (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/scale-interactive.html (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/scale-intro.html (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/update-interactive.html (100%) rename {docs => content/en/docs}/tutorials/kubernetes-basics/update-intro.html (100%) create mode 100755 content/en/docs/tutorials/online-training/_index.md rename {docs => content/en/docs}/tutorials/online-training/overview.md (76%) create mode 100755 content/en/docs/tutorials/services/_index.md rename {docs => content/en/docs}/tutorials/services/source-ip.md (96%) rename {docs => content/en/docs}/tutorials/stateful-application/Dockerfile (100%) create mode 100755 content/en/docs/tutorials/stateful-application/_index.md rename {docs => content/en/docs}/tutorials/stateful-application/basic-stateful-set.md (98%) rename {docs => content/en/docs}/tutorials/stateful-application/cassandra.md (92%) rename {docs => content/en/docs}/tutorials/stateful-application/cassandra/cassandra-service.yaml (100%) rename {docs => content/en/docs}/tutorials/stateful-application/cassandra/cassandra-statefulset.yaml (100%) rename {docs => content/en/docs}/tutorials/stateful-application/mysql-wordpress-persistent-volume.md (89%) rename {docs => content/en/docs}/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml (100%) rename {docs => content/en/docs}/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml (100%) rename {docs => content/en/docs}/tutorials/stateful-application/web.yaml (100%) rename {docs => content/en/docs}/tutorials/stateful-application/webp.yaml (100%) rename {docs => content/en/docs}/tutorials/stateful-application/zookeeper.md (98%) rename {docs => content/en/docs}/tutorials/stateful-application/zookeeper.yaml (100%) rename {docs => content/en/docs}/tutorials/stateless-application/Dockerfile (100%) create mode 100755 content/en/docs/tutorials/stateless-application/_index.md rename {docs => content/en/docs}/tutorials/stateless-application/deployment.yaml (100%) rename {docs => content/en/docs}/tutorials/stateless-application/expose-external-ip-address.md (94%) rename {docs => content/en/docs}/tutorials/stateless-application/guestbook.md (89%) rename {docs => content/en/docs}/tutorials/stateless-application/guestbook/frontend-deployment.yaml (100%) rename {docs => content/en/docs}/tutorials/stateless-application/guestbook/frontend-service.yaml (100%) rename {docs => content/en/docs}/tutorials/stateless-application/guestbook/redis-master-deployment.yaml (100%) rename {docs => content/en/docs}/tutorials/stateless-application/guestbook/redis-master-service.yaml (100%) rename {docs => content/en/docs}/tutorials/stateless-application/guestbook/redis-slave-deployment.yaml (100%) rename {docs => content/en/docs}/tutorials/stateless-application/guestbook/redis-slave-service.yaml (100%) rename {docs => content/en/docs}/tutorials/stateless-application/hello-minikube.md (95%) rename {docs => content/en/docs}/tutorials/stateless-application/server.js (100%) rename {docs => content/en/docs}/update-user-guide-links.py (100%) rename {docs => content/en/docs}/user-guide/OWNERS (100%) create mode 100644 content/en/docs/user-guide/_index.md rename {docs => content/en/docs}/user-guide/walkthrough/OWNERS (100%) rename docs/user-guide/walkthrough/index.md => content/en/docs/user-guide/walkthrough/_index.md (94%) rename {docs => content/en/docs}/user-guide/walkthrough/deployment-update.yaml (100%) rename {docs => content/en/docs}/user-guide/walkthrough/deployment.yaml (100%) rename {docs => content/en/docs}/user-guide/walkthrough/k8s201.md (89%) rename {docs => content/en/docs}/user-guide/walkthrough/pod-nginx-with-label.yaml (100%) rename {docs => content/en/docs}/user-guide/walkthrough/pod-nginx.yaml (100%) rename {docs => content/en/docs}/user-guide/walkthrough/pod-redis.yaml (100%) rename {docs => content/en/docs}/user-guide/walkthrough/pod-with-http-healthcheck.yaml (100%) rename {docs => content/en/docs}/user-guide/walkthrough/pod-with-tcp-socket-healthcheck.yaml (100%) rename {docs => content/en/docs}/user-guide/walkthrough/service.yaml (100%) create mode 100644 content/en/docs/user-journeys/_index.md create mode 100755 content/en/docs/user-journeys/users/application-developer/_index.md create mode 100644 content/en/docs/user-journeys/users/application-developer/advanced.md create mode 100644 content/en/docs/user-journeys/users/application-developer/foundational.md create mode 100644 content/en/docs/user-journeys/users/application-developer/intermediate.md rename {docs => content/en/docs}/user-journeys/users/cluster-operator/_advanced.md (99%) create mode 100755 content/en/docs/user-journeys/users/cluster-operator/_index.md rename {docs => content/en/docs}/user-journeys/users/cluster-operator/foundational.md (98%) rename {docs => content/en/docs}/user-journeys/users/cluster-operator/intermediate.md (98%) create mode 100644 content/en/includes/default-storage-class-prereqs.md create mode 100644 content/en/includes/federated-task-tutorial-prereqs.md create mode 100644 content/en/includes/federation-content-moved.md create mode 100644 content/en/includes/federation-current-state.md create mode 100644 content/en/includes/index.md rename {_includes => content/en/includes}/partner-script.js (99%) rename {_includes => content/en/includes}/partner-style.css (100%) create mode 100644 content/en/includes/task-tutorial-prereqs.md create mode 100644 content/en/includes/user-guide-content-moved.md create mode 100644 content/en/includes/user-guide-migration-notice.md rename partners/index.html => content/en/partners/_index.html (93%) rename {_data => data}/canonical-tags/architecture.yaml (100%) rename {_data => data}/canonical-tags/community.yaml (100%) rename {_data => data}/canonical-tags/core-object.yaml (100%) rename {_data => data}/canonical-tags/extension.yaml (100%) rename {_data => data}/canonical-tags/fundamental.yaml (100%) rename {_data => data}/canonical-tags/networking.yaml (100%) rename {_data => data}/canonical-tags/operation.yaml (100%) rename {_data => data}/canonical-tags/security.yaml (100%) rename {_data => data}/canonical-tags/storage.yaml (100%) rename {_data => data}/canonical-tags/tool.yaml (100%) rename {_data => data}/canonical-tags/user-type.yaml (100%) rename {_data => data}/canonical-tags/workload.yaml (100%) rename {_data => data}/concepts.yml (100%) rename {_data => data}/docs-home.yml (100%) rename {_data => data}/globals.yml (100%) rename {_data => data}/glossary/_example.yml (100%) rename {_data => data}/glossary/annotation.yaml (100%) rename {_data => data}/glossary/application-architect.yaml (100%) rename {_data => data}/glossary/application-developer.yaml (100%) rename {_data => data}/glossary/approver.yaml (100%) rename {_data => data}/glossary/certificate.yaml (100%) rename {_data => data}/glossary/cla.yaml (100%) rename {_data => data}/glossary/cloud-controller-manager.yml (100%) rename {_data => data}/glossary/cloud-provider.yaml (100%) rename {_data => data}/glossary/cluster-architect.yaml (100%) rename {_data => data}/glossary/cluster-operator.yaml (100%) rename {_data => data}/glossary/cluster.yaml (100%) rename {_data => data}/glossary/code-contributor.yaml (100%) rename {_data => data}/glossary/configmap.yaml (100%) rename {_data => data}/glossary/container-env-variables.yaml (100%) rename {_data => data}/glossary/container.yaml (100%) rename {_data => data}/glossary/contributor.yaml (100%) rename {_data => data}/glossary/controller.yaml (100%) rename {_data => data}/glossary/cronjob.yaml (100%) rename {_data => data}/glossary/customresourcedefinition.yaml (100%) rename {_data => data}/glossary/daemonset.yaml (100%) rename {_data => data}/glossary/deployment.yaml (100%) rename {_data => data}/glossary/developer.yaml (100%) rename {_data => data}/glossary/docker.yaml (100%) rename {_data => data}/glossary/downstream.yaml (100%) rename {_data => data}/glossary/dynamic-volume-provisioning.yaml (100%) rename {_data => data}/glossary/etcd.yaml (100%) rename {_data => data}/glossary/helm-chart.yaml (100%) rename {_data => data}/glossary/horizontal-pod-autoscaler.yaml (100%) rename {_data => data}/glossary/image.yaml (100%) rename {_data => data}/glossary/ingress.yaml (100%) rename {_data => data}/glossary/init-container.yaml (100%) rename {_data => data}/glossary/istio.yaml (100%) rename {_data => data}/glossary/job.yaml (100%) rename {_data => data}/glossary/kops.yaml (100%) rename {_data => data}/glossary/kube-apiserver.yaml (100%) rename {_data => data}/glossary/kube-controller-manager.yaml (100%) rename {_data => data}/glossary/kube-proxy.yaml (100%) rename {_data => data}/glossary/kube-scheduler.yaml (100%) rename {_data => data}/glossary/kubeadm.yaml (100%) rename {_data => data}/glossary/kubectl.yaml (100%) rename {_data => data}/glossary/kubelet.yaml (100%) rename {_data => data}/glossary/kubernetes-api.yaml (100%) rename {_data => data}/glossary/label.yaml (100%) rename {_data => data}/glossary/maintainer.yaml (100%) rename {_data => data}/glossary/managed-service.yaml (100%) rename {_data => data}/glossary/member.yaml (100%) rename {_data => data}/glossary/minikube.yaml (100%) rename {_data => data}/glossary/name.yaml (100%) rename {_data => data}/glossary/namespace.yaml (100%) rename {_data => data}/glossary/network-policy.yaml (100%) rename {_data => data}/glossary/node.yaml (100%) rename {_data => data}/glossary/persistent-volume-claim.yaml (100%) rename {_data => data}/glossary/persistent-volume.yaml (100%) rename {_data => data}/glossary/platform-developer.yaml (100%) rename {_data => data}/glossary/pod-security-policy.yaml (100%) rename {_data => data}/glossary/pod.yaml (100%) rename {_data => data}/glossary/podpreset.yaml (100%) rename {_data => data}/glossary/rbac.yaml (100%) rename {_data => data}/glossary/replica-set.yml (100%) rename {_data => data}/glossary/replication-controller.yaml (100%) rename {_data => data}/glossary/resource-quota.yaml (100%) rename {_data => data}/glossary/reviewer.yaml (100%) rename {_data => data}/glossary/secret.yml (100%) rename {_data => data}/glossary/security-context.yaml (100%) rename {_data => data}/glossary/selector.yaml (100%) rename {_data => data}/glossary/service-account.yaml (100%) rename {_data => data}/glossary/service-broker.yaml (100%) rename {_data => data}/glossary/service-catalog.yaml (100%) rename {_data => data}/glossary/service.yaml (100%) rename {_data => data}/glossary/sig.yaml (100%) rename {_data => data}/glossary/statefulset.yml (100%) rename {_data => data}/glossary/storage-class.yaml (100%) rename {_data => data}/glossary/uid.yaml (100%) rename {_data => data}/glossary/upstream.yaml (100%) rename {_data => data}/glossary/volume-plugin.yaml (100%) rename {_data => data}/glossary/volume.yaml (100%) rename {_data => data}/glossary/wg.yaml (100%) rename {_data => data}/imported.yml (100%) rename {_data => data}/overrides.yml (100%) rename {_data => data}/reference.yml (100%) rename {_data => data}/search.yml (100%) rename {_data => data}/setup.yml (96%) rename {_data => data}/tasks.yml (100%) rename {_data => data}/tools.yml (100%) rename {_data => data}/tutorials.yml (100%) rename {_data => data}/user-personas/contributors/code-contributor.yaml (100%) rename {_data => data}/user-personas/contributors/community-contributor.yaml (100%) rename {_data => data}/user-personas/contributors/docs-contributor.yaml (100%) rename {_data => data}/user-personas/migrators/docker-compose-swarm.yaml (100%) rename {_data => data}/user-personas/migrators/heroku.yaml (100%) rename {_data => data}/user-personas/migrators/mesos.yaml (100%) rename {_data => data}/user-personas/migrators/vmware-openstack.yaml (100%) rename {_data => data}/user-personas/users/app-developer.yaml (100%) rename {_data => data}/user-personas/users/cluster-operator.yaml (100%) delete mode 100644 docs/home/contribute/includes.md delete mode 100644 docs/home/index.md delete mode 100644 docs/reference/generated/cloud-controller-manager.md delete mode 100644 docs/reference/generated/federation-apiserver.md delete mode 100644 docs/reference/generated/federation-controller-manager.md delete mode 100755 docs/reference/generated/federation/extensions/v1beta1/definitions.html delete mode 100755 docs/reference/generated/federation/extensions/v1beta1/operations.html delete mode 100755 docs/reference/generated/federation/federation/v1beta1/definitions.html delete mode 100755 docs/reference/generated/federation/federation/v1beta1/operations.html delete mode 100644 docs/reference/generated/federation/index.md delete mode 100755 docs/reference/generated/federation/v1/definitions.html delete mode 100755 docs/reference/generated/federation/v1/operations.html delete mode 100644 docs/reference/generated/kube-apiserver.md delete mode 100644 docs/reference/generated/kube-controller-manager.md delete mode 100644 docs/reference/generated/kube-proxy.md delete mode 100644 docs/reference/generated/kube-scheduler.md delete mode 100644 docs/reference/generated/kubectl/kubectl-commands.html delete mode 100755 docs/reference/generated/kubectl/kubectl.md delete mode 100644 docs/reference/generated/kubectl/navData.js delete mode 100644 docs/reference/generated/kubectl/node_modules/bootstrap/dist/css/bootstrap.min.css delete mode 100644 docs/reference/generated/kubectl/node_modules/font-awesome/css/font-awesome.min.css delete mode 100644 docs/reference/generated/kubectl/node_modules/highlight.js/styles/default.css delete mode 100644 docs/reference/generated/kubectl/node_modules/jquery.scrollto/jquery.scrollTo.min.js delete mode 100644 docs/reference/generated/kubectl/node_modules/jquery/dist/jquery.min.js delete mode 100644 docs/reference/generated/kubectl/scroll.js delete mode 100644 docs/reference/generated/kubectl/stylesheet.css delete mode 100644 docs/reference/generated/kubectl/tabvisibility.js delete mode 100644 docs/reference/generated/kubefed.md delete mode 100644 docs/reference/generated/kubefed_init.md delete mode 100644 docs/reference/generated/kubefed_join.md delete mode 100644 docs/reference/generated/kubefed_options.md delete mode 100644 docs/reference/generated/kubefed_unjoin.md delete mode 100644 docs/reference/generated/kubefed_version.md delete mode 100644 docs/reference/generated/kubelet.md delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/index.html delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/navData.js delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/node_modules/bootstrap/dist/css/bootstrap.min.css delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/css/font-awesome.css delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/css/font-awesome.css.map delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/css/font-awesome.min.css delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/fonts/FontAwesome.otf delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/fonts/fontawesome-webfont.eot delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/fonts/fontawesome-webfont.svg delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/fonts/fontawesome-webfont.ttf delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/fonts/fontawesome-webfont.woff delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/fonts/fontawesome-webfont.woff2 delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/node_modules/highlight.js/styles/default.css delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/node_modules/jquery.scrollto/jquery.scrollTo.min.js delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/node_modules/jquery/dist/jquery.min.js delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/scroll.js delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/stylesheet.css delete mode 100644 docs/reference/generated/kubernetes-api/v1.10/tabvisibility.js delete mode 100644 docs/reference/glossary.md delete mode 100644 docs/reference/setup-tools/kubeadm/generated/README.md delete mode 100755 docs/reference/setup-tools/kubeadm/kubeadm-alpha.md delete mode 100644 docs/reference/setup-tools/kubeadm/kubeadm-version.md delete mode 100644 docs/user-journeys/users/application-developer/advanced.md delete mode 100644 docs/user-journeys/users/application-developer/foundational.md delete mode 100644 docs/user-journeys/users/application-developer/intermediate.md delete mode 100644 images/blog/2018-04-30-zero-downtime-deployment-kubernetes-jenkins/deployment-process.png delete mode 100644 images/blog/2018-04-30-zero-downtime-deployment-kubernetes-jenkins/jenkins-pipeline.png delete mode 100644 images/blog/2018-04-30-zero-downtime-deployment-kubernetes-jenkins/resources.png delete mode 100644 images/blog/2018-05-01-developing-on-kubernetes/dok-architecture_preview.png delete mode 100644 images/blog/2018-05-01-developing-on-kubernetes/dok-devmodes_preview.png delete mode 100644 images/blog/2018-05-01-developing-on-kubernetes/dok-ksync_preview.png delete mode 100644 images/blog/2018-05-01-developing-on-kubernetes/dok-minikube-localdev_preview.png delete mode 100644 images/blog/2018-05-01-developing-on-kubernetes/dok-skaffold_preview.png delete mode 100755 jquery-ui.html create mode 100644 layouts/404.html create mode 100644 layouts/_default/baseof.html create mode 100644 layouts/_default/list.html create mode 100644 layouts/_default/single.html create mode 100644 layouts/blog/baseof.html create mode 100644 layouts/blog/list.html create mode 100644 layouts/blog/pager.html create mode 100644 layouts/blog/post.html create mode 100644 layouts/blog/single.html create mode 100644 layouts/case-studies/baseof.html create mode 100644 layouts/case-studies/single.html create mode 100644 layouts/community/list.html create mode 100644 layouts/docs/baseof.html create mode 100644 layouts/docs/docsportal.html create mode 100644 layouts/docs/docsportal_home.html create mode 100644 layouts/docs/glossary.html create mode 100644 layouts/docs/list.html rename docs/search.md => layouts/docs/search.html (91%) create mode 100644 layouts/docs/single.html create mode 100644 layouts/index.html create mode 100644 layouts/index.rss.xml create mode 100644 layouts/partials/blog/archive.html create mode 100644 layouts/partials/deprecation-warning.html create mode 100644 layouts/partials/docs/browse.html create mode 100644 layouts/partials/docs/content_page.html create mode 100644 layouts/partials/docs/side-menu.html create mode 100644 layouts/partials/docs/top-menu.html create mode 100644 layouts/partials/docs/user-journey.html rename {_includes => layouts/partials}/footer-scripts.html (90%) rename {_includes => layouts/partials}/footer.html (58%) create mode 100644 layouts/partials/head.html create mode 100644 layouts/partials/header.html create mode 100644 layouts/partials/insert-capture.html create mode 100644 layouts/partials/templates/block.html create mode 100644 layouts/partials/templates/blocks.html create mode 100644 layouts/partials/templates/concept.html create mode 100644 layouts/partials/templates/errorthrower.html rename _includes/feature-dialog.md => layouts/partials/templates/feature-dialog.html (78%) create mode 100644 layouts/partials/templates/feature-state.html create mode 100644 layouts/partials/templates/task.html create mode 100644 layouts/partials/templates/tutorial.html create mode 100644 layouts/partials/templates/user-journey-content.html create mode 100644 layouts/partials/tree.html create mode 100644 layouts/robots.txt create mode 100644 layouts/shortcodes/capture.html create mode 100644 layouts/shortcodes/caution.html create mode 100644 layouts/shortcodes/code.html create mode 100644 layouts/shortcodes/comment.html create mode 100644 layouts/shortcodes/deprecationwarning.html create mode 100644 layouts/shortcodes/feature-state.html create mode 100644 layouts/shortcodes/glossary_definition.html create mode 100644 layouts/shortcodes/glossary_tooltip.html create mode 100644 layouts/shortcodes/include.html create mode 100644 layouts/shortcodes/link.html create mode 100644 layouts/shortcodes/note.html create mode 100644 layouts/shortcodes/param.html create mode 100644 layouts/shortcodes/reference_docs.html create mode 100644 layouts/shortcodes/tab.html create mode 100644 layouts/shortcodes/tabs.html create mode 100644 layouts/shortcodes/toc.html create mode 100644 layouts/shortcodes/version-check.html create mode 100644 layouts/shortcodes/versions-other.html create mode 100644 layouts/shortcodes/warning.html delete mode 100644 robots.txt rename {_sass => src/sass}/_base.sass (98%) rename {_sass => src/sass}/_case-studies.sass (100%) rename {_sass => src/sass}/_desktop.sass (100%) rename {_sass => src/sass}/_reset.sass (100%) rename {_sass => src/sass}/_size.sass (100%) rename {_sass => src/sass}/_skin.sass (100%) rename {_sass => src/sass}/_tablet.sass (100%) create mode 100644 src/sass/case_study_styles.sass create mode 100755 src/sass/styles.sass rename _redirects => static/_redirects (100%) rename {css => static/css}/base_fonts.css (100%) rename {css => static/css}/blog.css (100%) rename {css => static/css}/callouts.css (100%) create mode 100644 static/css/case_study_styles.css rename {css => static/css}/case_study_styles.sass (100%) rename {css => static/css}/custom-jekyll/tags.css (100%) rename {css => static/css}/deprecation-warning.css (100%) rename {css => static/css}/glossary.css (100%) rename {css => static/css}/gridpage.css (100%) rename {css => static/css}/jquery-ui.min.css (100%) rename {css => static/css}/jquery-ui.structure.min.css (100%) rename {css => static/css}/jquery-ui.theme.min.css (100%) rename {css => static/css}/style_amadeus.css (100%) rename {css => static/css}/style_ancestry.css (100%) rename {css => static/css}/style_blablacar.css (100%) rename {css => static/css}/style_blackrock.css (100%) rename {css => static/css}/style_box.css (100%) rename {css => static/css}/style_buffer.css (100%) rename {css => static/css}/style_case_studies.css (100%) rename {css => static/css}/style_crowdfire.css (100%) rename {css => static/css}/style_golfnow.css (100%) rename {css => static/css}/style_haufegroup.css (100%) rename {css => static/css}/style_huawei.css (100%) rename {css => static/css}/style_peardeck.css (100%) rename {css => static/css}/style_user_journeys.css (100%) rename {css => static/css}/style_wink.css (100%) rename {css => static/css}/style_zalando.css (100%) create mode 100644 static/css/styles.css rename {css => static/css}/styles.sass (100%) rename {css => static/css}/sweetalert.css (100%) rename {fonts => static/fonts}/MaterialIcons-Regular.eot (100%) rename {fonts => static/fonts}/MaterialIcons-Regular.svg (100%) rename {fonts => static/fonts}/MaterialIcons-Regular.ttf (100%) rename {fonts => static/fonts}/MaterialIcons-Regular.woff (100%) rename {fonts => static/fonts}/MaterialIcons-Regular.woff2 (100%) rename {fonts => static/fonts}/roboto-mono-v5-latin-regular.eot (100%) rename {fonts => static/fonts}/roboto-mono-v5-latin-regular.svg (100%) rename {fonts => static/fonts}/roboto-mono-v5-latin-regular.ttf (100%) rename {fonts => static/fonts}/roboto-mono-v5-latin-regular.woff (100%) rename {fonts => static/fonts}/roboto-mono-v5-latin-regular.woff2 (100%) rename {fonts => static/fonts}/roboto-v18-latin-100.eot (100%) rename {fonts => static/fonts}/roboto-v18-latin-100.svg (100%) rename {fonts => static/fonts}/roboto-v18-latin-100.ttf (100%) rename {fonts => static/fonts}/roboto-v18-latin-100.woff (100%) rename {fonts => static/fonts}/roboto-v18-latin-100.woff2 (100%) rename {fonts => static/fonts}/roboto-v18-latin-100italic.eot (100%) rename {fonts => static/fonts}/roboto-v18-latin-100italic.svg (100%) rename {fonts => static/fonts}/roboto-v18-latin-100italic.ttf (100%) rename {fonts => static/fonts}/roboto-v18-latin-100italic.woff (100%) rename {fonts => static/fonts}/roboto-v18-latin-100italic.woff2 (100%) rename {fonts => static/fonts}/roboto-v18-latin-300.eot (100%) rename {fonts => static/fonts}/roboto-v18-latin-300.svg (100%) rename {fonts => static/fonts}/roboto-v18-latin-300.ttf (100%) rename {fonts => static/fonts}/roboto-v18-latin-300.woff (100%) rename {fonts => static/fonts}/roboto-v18-latin-300.woff2 (100%) rename {fonts => static/fonts}/roboto-v18-latin-300italic.eot (100%) rename {fonts => static/fonts}/roboto-v18-latin-300italic.svg (100%) rename {fonts => static/fonts}/roboto-v18-latin-300italic.ttf (100%) rename {fonts => static/fonts}/roboto-v18-latin-300italic.woff (100%) rename {fonts => static/fonts}/roboto-v18-latin-300italic.woff2 (100%) rename {fonts => static/fonts}/roboto-v18-latin-500.eot (100%) rename {fonts => static/fonts}/roboto-v18-latin-500.svg (100%) rename {fonts => static/fonts}/roboto-v18-latin-500.ttf (100%) rename {fonts => static/fonts}/roboto-v18-latin-500.woff (100%) rename {fonts => static/fonts}/roboto-v18-latin-500.woff2 (100%) rename {fonts => static/fonts}/roboto-v18-latin-500italic.eot (100%) rename {fonts => static/fonts}/roboto-v18-latin-500italic.svg (100%) rename {fonts => static/fonts}/roboto-v18-latin-500italic.ttf (100%) rename {fonts => static/fonts}/roboto-v18-latin-500italic.woff (100%) rename {fonts => static/fonts}/roboto-v18-latin-500italic.woff2 (100%) rename {fonts => static/fonts}/roboto-v18-latin-700.eot (100%) rename {fonts => static/fonts}/roboto-v18-latin-700.svg (100%) rename {fonts => static/fonts}/roboto-v18-latin-700.ttf (100%) rename {fonts => static/fonts}/roboto-v18-latin-700.woff (100%) rename {fonts => static/fonts}/roboto-v18-latin-700.woff2 (100%) rename {fonts => static/fonts}/roboto-v18-latin-700italic.eot (100%) rename {fonts => static/fonts}/roboto-v18-latin-700italic.svg (100%) rename {fonts => static/fonts}/roboto-v18-latin-700italic.ttf (100%) rename {fonts => static/fonts}/roboto-v18-latin-700italic.woff (100%) rename {fonts => static/fonts}/roboto-v18-latin-700italic.woff2 (100%) rename {fonts => static/fonts}/roboto-v18-latin-900.eot (100%) rename {fonts => static/fonts}/roboto-v18-latin-900.svg (100%) rename {fonts => static/fonts}/roboto-v18-latin-900.ttf (100%) rename {fonts => static/fonts}/roboto-v18-latin-900.woff (100%) rename {fonts => static/fonts}/roboto-v18-latin-900.woff2 (100%) rename {fonts => static/fonts}/roboto-v18-latin-900italic.eot (100%) rename {fonts => static/fonts}/roboto-v18-latin-900italic.svg (100%) rename {fonts => static/fonts}/roboto-v18-latin-900italic.ttf (100%) rename {fonts => static/fonts}/roboto-v18-latin-900italic.woff (100%) rename {fonts => static/fonts}/roboto-v18-latin-900italic.woff2 (100%) rename {fonts => static/fonts}/roboto-v18-latin-italic.eot (100%) rename {fonts => static/fonts}/roboto-v18-latin-italic.svg (100%) rename {fonts => static/fonts}/roboto-v18-latin-italic.ttf (100%) rename {fonts => static/fonts}/roboto-v18-latin-italic.woff (100%) rename {fonts => static/fonts}/roboto-v18-latin-italic.woff2 (100%) rename {fonts => static/fonts}/roboto-v18-latin-regular.eot (100%) rename {fonts => static/fonts}/roboto-v18-latin-regular.svg (100%) rename {fonts => static/fonts}/roboto-v18-latin-regular.ttf (100%) rename {fonts => static/fonts}/roboto-v18-latin-regular.woff (100%) rename {fonts => static/fonts}/roboto-v18-latin-regular.woff2 (100%) rename {images => static/images}/CaseStudy_amadeus_banner1.jpg (100%) rename {images => static/images}/CaseStudy_amadeus_banner3.jpg (100%) rename {images => static/images}/CaseStudy_amadeus_banner4.jpg (100%) rename {images => static/images}/CaseStudy_amadeus_banner_mobile.jpg (100%) rename {images => static/images}/CaseStudy_ancestry_banner1.jpg (100%) rename {images => static/images}/CaseStudy_ancestry_banner3.jpg (100%) rename {images => static/images}/CaseStudy_ancestry_banner4.jpg (100%) rename {images => static/images}/CaseStudy_blablacar_banner1.jpg (100%) rename {images => static/images}/CaseStudy_blablacar_banner1_mobile.jpg (100%) rename {images => static/images}/CaseStudy_blablacar_banner3.jpg (100%) rename {images => static/images}/CaseStudy_blablacar_banner4.jpg (100%) rename {images => static/images}/CaseStudy_blackrock_banner1.jpg (100%) rename {images => static/images}/CaseStudy_blackrock_banner3.jpg (100%) rename {images => static/images}/CaseStudy_blackrock_banner4.jpg (100%) rename {images => static/images}/CaseStudy_box_banner1.jpg (100%) rename {images => static/images}/CaseStudy_box_banner3.jpg (100%) rename {images => static/images}/CaseStudy_box_banner4.jpg (100%) rename {images => static/images}/CaseStudy_buffer_banner1.jpg (100%) rename {images => static/images}/CaseStudy_buffer_banner3.jpg (100%) rename {images => static/images}/CaseStudy_buffer_banner4.jpg (100%) rename {images => static/images}/CaseStudy_crowdfire_banner1.jpg (100%) rename {images => static/images}/CaseStudy_crowdfire_banner3.jpg (100%) rename {images => static/images}/CaseStudy_crowdfire_banner4.jpg (100%) rename {images => static/images}/CaseStudy_golfnow_banner1.jpg (100%) rename {images => static/images}/CaseStudy_golfnow_banner3.jpg (100%) rename {images => static/images}/CaseStudy_golfnow_banner4.jpg (100%) rename {images => static/images}/CaseStudy_haufegroup_banner1.jpg (100%) rename {images => static/images}/CaseStudy_haufegroup_banner3.jpg (100%) rename {images => static/images}/CaseStudy_haufegroup_banner4.jpg (100%) rename {images => static/images}/CaseStudy_huawei_banner1.jpg (100%) rename {images => static/images}/CaseStudy_huawei_banner3.jpg (100%) rename {images => static/images}/CaseStudy_huawei_banner4.jpg (100%) rename {images => static/images}/CaseStudy_peardeck_banner1.jpg (100%) rename {images => static/images}/CaseStudy_peardeck_banner2.jpg (100%) rename {images => static/images}/CaseStudy_peardeck_banner3.jpg (100%) rename {images => static/images}/CaseStudy_squarespace_banner1.jpg (100%) rename {images => static/images}/CaseStudy_squarespace_banner3.jpg (100%) rename {images => static/images}/CaseStudy_squarespace_banner4.jpg (100%) rename {images => static/images}/CaseStudy_wink_banner1.jpg (100%) rename {images => static/images}/CaseStudy_wink_banner3.jpg (100%) rename {images => static/images}/CaseStudy_wink_banner4.jpg (100%) rename {images => static/images}/CaseStudy_zalando_banner1.jpg (100%) rename {images => static/images}/CaseStudy_zalando_banner3.jpg (100%) rename {images => static/images}/CaseStudy_zalando_banner4.jpg (100%) rename {images => static/images}/KubeCon_EU_Community.jpg (100%) rename {images => static/images}/KubeCon_NA_Community.jpg (100%) rename {images => static/images}/KubeCon_NA_Community.png (100%) rename {images => static/images}/amadeus.png (100%) rename {images => static/images}/amadeus_logo.png (100%) rename {images => static/images}/blablacar_logo.png (100%) rename {images => static/images}/blackrock_logo.png (100%) rename {images => static/images}/blocks.png (100%) rename {images => static/images}/blog-logging/2018-04-10-container-storage-interface-beta/csi-kubernetes.png (100%) rename {images => static/images}/blog-logging/2018-04-10-container-storage-interface-beta/csi-logo.png (100%) rename {images => static/images}/blog-logging/2018-04-24-open-source-charts-2017/most-discussed.png (100%) rename {images => static/images}/blog-logging/2018-04-24-open-source-charts-2017/most-reviews.png (100%) rename {images => static/images}/blog-logging/diagrams/27gf-counter.png (100%) rename {images => static/images}/blog-logging/diagrams/cloud-logging.png (100%) rename {images => static/images}/blog/2018-03-01-cncf-color.svg (100%) rename {images => static/images}/blog/OWNERS (100%) rename {images => static/images}/blog/survey-results/2018-application-survey/custom-tooling.png (100%) rename {images => static/images}/blog/survey-results/2018-application-survey/minikube-os-usage.png (100%) rename {images => static/images}/blog/survey-results/2018-application-survey/tool-manage-apps.png (100%) rename {images => static/images}/box_logo.png (100%) rename {images => static/images}/buffer.png (100%) rename {images => static/images}/case_studies/Video-Clip-Box.png (100%) rename {images => static/images}/case_studies/amadeus.png (100%) rename {images => static/images}/case_studies/amadeus_feature.png (100%) rename {images => static/images}/case_studies/ancestry-logo.png (100%) rename {images => static/images}/case_studies/ancestry.png (100%) rename {images => static/images}/case_studies/blablacar-logo.png (100%) rename {images => static/images}/case_studies/blablacar.png (100%) rename {images => static/images}/case_studies/blackrock.png (100%) rename {images => static/images}/case_studies/blackrock2.png (100%) rename {images => static/images}/case_studies/box-small.png (100%) rename {images => static/images}/case_studies/box.png (100%) rename {images => static/images}/case_studies/box_logo.png (100%) rename {images => static/images}/case_studies/buffer.png (100%) rename {images => static/images}/case_studies/buffer_logo.png (100%) rename {images => static/images}/case_studies/ccp.png (100%) rename {images => static/images}/case_studies/comcast_logo.png (100%) rename {images => static/images}/case_studies/concur.png (100%) rename {images => static/images}/case_studies/crowdfire_feature.png (100%) rename {images => static/images}/case_studies/ebay.png (100%) rename {images => static/images}/case_studies/ebay_logo.png (100%) rename {images => static/images}/case_studies/golfnow.png (100%) rename {images => static/images}/case_studies/golfnow_logo.png (100%) rename {images => static/images}/case_studies/gs.png (100%) rename {images => static/images}/case_studies/haufegroup_logo.png (100%) rename {images => static/images}/case_studies/haufegroup_logo_feature.png (100%) rename {images => static/images}/case_studies/homeoffice.png (100%) rename {images => static/images}/case_studies/huawei.png (100%) rename {images => static/images}/case_studies/huawei_feature.png (100%) rename {images => static/images}/case_studies/jd.png (100%) rename {images => static/images}/case_studies/liveperson.png (100%) rename {images => static/images}/case_studies/monzo_logo.png (100%) rename {images => static/images}/case_studies/nyt.png (100%) rename {images => static/images}/case_studies/openai.png (100%) rename {images => static/images}/case_studies/peardeck.png (100%) rename {images => static/images}/case_studies/peardeck_logo.png (100%) rename {images => static/images}/case_studies/pearson.png (100%) rename {images => static/images}/case_studies/pearson_logo.png (100%) rename {images => static/images}/case_studies/philips_logo.png (100%) rename {images => static/images}/case_studies/pokemon_go_logo.png (100%) rename {images => static/images}/case_studies/sap.png (100%) rename {images => static/images}/case_studies/sap_small.png (100%) rename {images => static/images}/case_studies/sds.png (100%) rename {images => static/images}/case_studies/soundcloud.png (100%) rename {images => static/images}/case_studies/squarespace_feature.png (100%) rename {images => static/images}/case_studies/story.png (100%) rename {images => static/images}/case_studies/video_thumb.jpg (100%) rename {images => static/images}/case_studies/video_thumb1.png (100%) rename {images => static/images}/case_studies/wepay.png (100%) rename {images => static/images}/case_studies/wikimedia.png (100%) rename {images => static/images}/case_studies/wikimedia_logo.png (100%) rename {images => static/images}/case_studies/wink.png (100%) rename {images => static/images}/case_studies/wink_logo.png (100%) rename {images => static/images}/case_studies/wmc.png (100%) rename {images => static/images}/case_studies/yahooJapan_logo.png (100%) rename {images => static/images}/case_studies/yahoojapan.png (100%) rename {images => static/images}/case_studies/zalando_feature.png (100%) rename {images => static/images}/case_studies/zulily.png (100%) rename {images => static/images}/case_studies/zulily_logo.png (100%) rename {images => static/images}/community_logos/appformix_logo.png (100%) rename {images => static/images}/community_logos/apprenda_logo.png (100%) rename {images => static/images}/community_logos/aqua_logo.png (100%) rename {images => static/images}/community_logos/box_logo.png (100%) rename {images => static/images}/community_logos/citrix_logo.png (100%) rename {images => static/images}/community_logos/core_os_logo.png (100%) rename {images => static/images}/community_logos/crunchy_data_logo.png (100%) rename {images => static/images}/community_logos/datadog_logo.png (100%) rename {images => static/images}/community_logos/deis_logo.png (100%) rename {images => static/images}/community_logos/distelli_logo.png (100%) rename {images => static/images}/community_logos/ebay_logo.png (100%) rename {images => static/images}/community_logos/elastickube_logo.png (100%) rename {images => static/images}/community_logos/goldman_sachs_logo.png (100%) rename {images => static/images}/community_logos/ibm_logo.png (100%) rename {images => static/images}/community_logos/intel_logo.png (100%) rename {images => static/images}/community_logos/kabam_logo.png (100%) rename {images => static/images}/community_logos/mesosphere_logo.png (100%) rename {images => static/images}/community_logos/mirantis_logo.png (100%) rename {images => static/images}/community_logos/new_york_times_logo.png (100%) rename {images => static/images}/community_logos/nuage_network_logo.png (100%) rename {images => static/images}/community_logos/pearson_logo.png (100%) rename {images => static/images}/community_logos/platform9_logo.png (100%) rename {images => static/images}/community_logos/puppet_logo.png (100%) rename {images => static/images}/community_logos/rancher_logo.png (100%) rename {images => static/images}/community_logos/red_hat_logo.png (100%) rename {images => static/images}/community_logos/soundcloud_logo.png (100%) rename {images => static/images}/community_logos/sysdig_cloud_logo.png (100%) rename {images => static/images}/community_logos/sysdig_logo.png (100%) rename {images => static/images}/community_logos/ubuntu_cannonical_logo.png (100%) rename {images => static/images}/community_logos/viacom_logo.png (100%) rename {images => static/images}/community_logos/we_pay_logo.png (100%) rename {images => static/images}/community_logos/wercker_logo.png (100%) rename {images => static/images}/community_logos/wikimedia_foundation_logo.png (100%) rename {images => static/images}/community_logos/wikimedia_logo.png (100%) rename {images => static/images}/community_logos/zulily_logo.png (100%) rename {images => static/images}/copycode.svg (100%) rename {images => static/images}/crowdfire_logo.png (100%) rename {images => static/images}/diamanti.png (100%) rename {images => static/images}/docs/Kubemark_architecture.png (100%) rename {images => static/images}/docs/Makefile (100%) rename {images => static/images}/docs/admin/access-control-overview.svg (100%) rename {images => static/images}/docs/admin/k8s_oidc_login.svg (100%) rename {images => static/images}/docs/all-lines.png (100%) rename {images => static/images}/docs/architecture.png (100%) rename {images => static/images}/docs/architecture.svg (100%) rename {images => static/images}/docs/bigquery-logging.png (100%) rename {images => static/images}/docs/cadvisor.png (100%) rename {images => static/images}/docs/cassandra.svg (100%) rename {images => static/images}/docs/cloud-logging-console.png (100%) rename {images => static/images}/docs/diagram.png (100%) rename {images => static/images}/docs/dynamic.png (100%) rename {images => static/images}/docs/es-browser.png (100%) rename {images => static/images}/docs/external_access.png (100%) rename {images => static/images}/docs/federation-high-level-arch.png (100%) rename {images => static/images}/docs/gcm.png (100%) rename {images => static/images}/docs/git_workflow.png (100%) rename {images => static/images}/docs/ha-master-gce.png (100%) rename {images => static/images}/docs/ha.png (100%) rename {images => static/images}/docs/ha.svg (100%) rename {images => static/images}/docs/horizontal-pod-autoscaler.png (100%) rename {images => static/images}/docs/horizontal-pod-autoscaler.svg (100%) rename {images => static/images}/docs/influx.png (100%) rename {images => static/images}/docs/ip-masq.png (100%) rename {images => static/images}/docs/k8s-docker.png (100%) rename {images => static/images}/docs/k8s-firewall.png (100%) rename {images => static/images}/docs/k8s-guestbook.png (100%) rename {images => static/images}/docs/k8s-singlenode-docker.png (100%) rename {images => static/images}/docs/kibana-logs.png (100%) rename {images => static/images}/docs/kibana.png (100%) rename {images => static/images}/docs/kitten.jpg (100%) rename {images => static/images}/docs/kubectl_drain.svg (100%) rename {images => static/images}/docs/kubectl_rollingupdate.svg (100%) rename {images => static/images}/docs/monitoring-architecture.png (100%) rename {images => static/images}/docs/nautilus.jpg (100%) rename {images => static/images}/docs/node-allocatable.png (100%) rename {images => static/images}/docs/ovs-networking.png (100%) rename {images => static/images}/docs/pleg.png (100%) rename {images => static/images}/docs/pod-cache.png (100%) rename {images => static/images}/docs/pod-overview.svg (100%) rename {images => static/images}/docs/pod.svg (100%) rename {images => static/images}/docs/pods/single-container_1.ai (100%) rename {images => static/images}/docs/pods/single-container_1.svg (100%) rename {images => static/images}/docs/post-ccm-arch.png (100%) rename {images => static/images}/docs/pr_workflow.png (100%) rename {images => static/images}/docs/pre-ccm-arch.png (100%) rename {images => static/images}/docs/redis.svg (100%) rename {images => static/images}/docs/releasing.png (100%) rename {images => static/images}/docs/releasing.svg (100%) rename {images => static/images}/docs/service-catalog-architecture.svg (100%) rename {images => static/images}/docs/service-catalog-bind.svg (100%) rename {images => static/images}/docs/service-catalog-list.svg (100%) rename {images => static/images}/docs/service-catalog-map.svg (100%) rename {images => static/images}/docs/service-catalog-provision.svg (100%) rename {images => static/images}/docs/services-detail.png (100%) rename {images => static/images}/docs/services-detail.svg (100%) rename {images => static/images}/docs/services-iptables-overview.png (100%) rename {images => static/images}/docs/services-iptables-overview.svg (100%) rename {images => static/images}/docs/services-ipvs-overview.svg (100%) rename {images => static/images}/docs/services-overview.png (100%) rename {images => static/images}/docs/services-overview.svg (100%) rename {images => static/images}/docs/services-userspace-overview.png (100%) rename {images => static/images}/docs/services-userspace-overview.svg (100%) rename {images => static/images}/docs/stackdriver-event-exporter-filter.png (100%) rename {images => static/images}/docs/stackdriver-event-exporter-resource.png (100%) rename {images => static/images}/docs/static.png (100%) rename {images => static/images}/docs/synth-logger.png (100%) rename {images => static/images}/docs/ubuntu/00-select-cloud.png (100%) rename {images => static/images}/docs/ubuntu/01-deploy.png (100%) rename {images => static/images}/docs/ubuntu/02-bootstrap.png (100%) rename {images => static/images}/docs/ubuntu/03-waiting.png (100%) rename {images => static/images}/docs/ubuntu/04-postprocessing.png (100%) rename {images => static/images}/docs/ubuntu/05-final-summary.png (100%) rename {images => static/images}/docs/ui-dashboard-deploy-file.png (100%) rename {images => static/images}/docs/ui-dashboard-deploy-simple.png (100%) rename {images => static/images}/docs/ui-dashboard-deployment-detail.png (100%) rename {images => static/images}/docs/ui-dashboard-detailsview.png (100%) rename {images => static/images}/docs/ui-dashboard-logs-view.png (100%) rename {images => static/images}/docs/ui-dashboard-node.png (100%) rename {images => static/images}/docs/ui-dashboard-secret-detail.png (100%) rename {images => static/images}/docs/ui-dashboard-service-list.png (100%) rename {images => static/images}/docs/ui-dashboard-workloadview.png (100%) rename {images => static/images}/docs/ui-dashboard-zerostate.png (100%) rename {images => static/images}/docs/ui-dashboard.png (100%) rename {images => static/images}/docs/user-guide/logging/logging-from-application.png (100%) rename {images => static/images}/docs/user-guide/logging/logging-node-level.png (100%) rename {images => static/images}/docs/user-guide/logging/logging-with-node-agent.png (100%) rename {images => static/images}/docs/user-guide/logging/logging-with-sidecar-agent.png (100%) rename {images => static/images}/docs/user-guide/logging/logging-with-streaming-sidecar.png (100%) rename {images => static/images}/docs/warning.png (100%) rename {images => static/images}/docs/why_containers.svg (100%) rename {images => static/images}/docs/wordpress.svg (100%) rename {images => static/images}/favicon.png (100%) rename {images => static/images}/flower.png (100%) rename {images => static/images}/github_icon.png (100%) rename {images => static/images}/golfnow.png (100%) rename {images => static/images}/golfnow_logo.png (100%) rename {images => static/images}/haufegroup_logo.png (100%) rename {images => static/images}/hellonode/image_0.png (100%) rename {images => static/images}/hellonode/image_1.png (100%) rename {images => static/images}/hellonode/image_10.png (100%) rename {images => static/images}/hellonode/image_11.png (100%) rename {images => static/images}/hellonode/image_12.png (100%) rename {images => static/images}/hellonode/image_13.png (100%) rename {images => static/images}/hellonode/image_14.png (100%) rename {images => static/images}/hellonode/image_2.png (100%) rename {images => static/images}/hellonode/image_3.png (100%) rename {images => static/images}/hellonode/image_4.png (100%) rename {images => static/images}/hellonode/image_5.png (100%) rename {images => static/images}/hellonode/image_6.png (100%) rename {images => static/images}/hellonode/image_7.png (100%) rename {images => static/images}/hellonode/image_8.png (100%) rename {images => static/images}/hellonode/image_9.png (100%) rename {images => static/images}/hpc-ec2-vpc-2.png (100%) rename {images => static/images}/hpn-ec2-vpc.png (100%) rename {images => static/images}/huawei_logo.png (100%) rename {images => static/images}/icon-pencil.svg (100%) rename {images => static/images}/journeys/placeholder.png (100%) rename {images => static/images}/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png (100%) rename {images => static/images}/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png (100%) rename {images => static/images}/jquery-ui/ui-bg_flat_10_000000_40x100.png (100%) rename {images => static/images}/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png (100%) rename {images => static/images}/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png (100%) rename {images => static/images}/jquery-ui/ui-bg_glass_65_ffffff_1x400.png (100%) rename {images => static/images}/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png (100%) rename {images => static/images}/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png (100%) rename {images => static/images}/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png (100%) rename {images => static/images}/jquery-ui/ui-icons_222222_256x240.png (100%) rename {images => static/images}/jquery-ui/ui-icons_228ef1_256x240.png (100%) rename {images => static/images}/jquery-ui/ui-icons_444444_256x240.png (100%) rename {images => static/images}/jquery-ui/ui-icons_555555_256x240.png (100%) rename {images => static/images}/jquery-ui/ui-icons_777620_256x240.png (100%) rename {images => static/images}/jquery-ui/ui-icons_777777_256x240.png (100%) rename {images => static/images}/jquery-ui/ui-icons_cc0000_256x240.png (100%) rename {images => static/images}/jquery-ui/ui-icons_ef8c08_256x240.png (100%) rename {images => static/images}/jquery-ui/ui-icons_ffd27a_256x240.png (100%) rename {images => static/images}/jquery-ui/ui-icons_ffffff_256x240.png (100%) rename {images => static/images}/kub_video_banner.jpg (100%) rename {images => static/images}/kub_video_banner_box.jpg (100%) rename {images => static/images}/kub_video_thm.jpg (100%) rename {images => static/images}/link.png (100%) rename {images => static/images}/logos/redhat_logo.png (100%) rename {images => static/images}/logos/soundcloud_logo.png (100%) rename {images => static/images}/logos/verizon_logo.png (100%) rename {images => static/images}/logos/viacom_logo.png (100%) rename {images => static/images}/logos/wepay_logo.png (100%) rename {images => static/images}/metadocs/jekyll-tags-glossary-injector.gif (100%) rename {images => static/images}/metadocs/jekyll-tags-glossary-tooltip.png (100%) rename {images => static/images}/nav_logo.svg (100%) rename {images => static/images}/nav_logo2.svg (100%) rename {images => static/images}/overview_uml.svg (100%) rename {images => static/images}/peardeck_logo.png (100%) rename {images => static/images}/pencil.png (100%) rename {images => static/images}/scalable.png (100%) rename {images => static/images}/search-icon.svg (100%) rename {images => static/images}/self-heal.png (100%) rename {images => static/images}/slack_icon.png (100%) rename {images => static/images}/social_sprite.png (100%) rename {images => static/images}/square-logos/accenture.png (100%) rename {images => static/images}/square-logos/alauda.png (100%) rename {images => static/images}/square-logos/alibaba.png (100%) rename {images => static/images}/square-logos/altoros.png (100%) rename {images => static/images}/square-logos/aporeto.png (100%) rename {images => static/images}/square-logos/appformix.png (100%) rename {images => static/images}/square-logos/applatix.png (100%) rename {images => static/images}/square-logos/apprenda.png (100%) rename {images => static/images}/square-logos/appscode.png (100%) rename {images => static/images}/square-logos/aqua.png (100%) rename {images => static/images}/square-logos/asag.png (100%) rename {images => static/images}/square-logos/asm.png (100%) rename {images => static/images}/square-logos/avinetworks.png (100%) rename {images => static/images}/square-logos/aws.png (100%) rename {images => static/images}/square-logos/azure.png (100%) rename {images => static/images}/square-logos/baidu.png (100%) rename {images => static/images}/square-logos/biarca.png (100%) rename {images => static/images}/square-logos/bigbinary.png (100%) rename {images => static/images}/square-logos/bitnami.png (100%) rename {images => static/images}/square-logos/bloombase.png (100%) rename {images => static/images}/square-logos/bluefyre.png (100%) rename {images => static/images}/square-logos/bocloud.png (100%) rename {images => static/images}/square-logos/bootkube.png (100%) rename {images => static/images}/square-logos/boozallenhamilton.png (100%) rename {images => static/images}/square-logos/ca.png (100%) rename {images => static/images}/square-logos/caicloud.png (100%) rename {images => static/images}/square-logos/canonical.png (100%) rename {images => static/images}/square-logos/cascadeo.png (100%) rename {images => static/images}/square-logos/cff.png (100%) rename {images => static/images}/square-logos/circulo.png (100%) rename {images => static/images}/square-logos/cisco.png (100%) rename {images => static/images}/square-logos/citrix.png (100%) rename {images => static/images}/square-logos/claranet.png (100%) rename {images => static/images}/square-logos/cloudbase.png (100%) rename {images => static/images}/square-logos/cloudbourne.png (100%) rename {images => static/images}/square-logos/cloudkite.png (100%) rename {images => static/images}/square-logos/cloudops.png (100%) rename {images => static/images}/square-logos/cloudperceptions.png (100%) rename {images => static/images}/square-logos/cloudplex.png (100%) rename {images => static/images}/square-logos/cobe.png (100%) rename {images => static/images}/square-logos/cockroach_labs.png (100%) rename {images => static/images}/square-logos/codecrux.png (100%) rename {images => static/images}/square-logos/codedellemc.png (100%) rename {images => static/images}/square-logos/codefresh.png (100%) rename {images => static/images}/square-logos/componentsoft.png (100%) rename {images => static/images}/square-logos/container_solutions.png (100%) rename {images => static/images}/square-logos/containership.png (100%) rename {images => static/images}/square-logos/contino.png (100%) rename {images => static/images}/square-logos/controlplane.png (100%) rename {images => static/images}/square-logos/core_os.png (100%) rename {images => static/images}/square-logos/coreos.png (100%) rename {images => static/images}/square-logos/coscale.png (100%) rename {images => static/images}/square-logos/creationline.png (100%) rename {images => static/images}/square-logos/crunchy.png (100%) rename {images => static/images}/square-logos/daocloud.png (100%) rename {images => static/images}/square-logos/datacore.png (100%) rename {images => static/images}/square-logos/datadog.png (100%) rename {images => static/images}/square-logos/dataspine.png (100%) rename {images => static/images}/square-logos/datawire.png (100%) rename {images => static/images}/square-logos/datera.png (100%) rename {images => static/images}/square-logos/deis.png (100%) rename {images => static/images}/square-logos/devopsguru.png (100%) rename {images => static/images}/square-logos/diamanti.png (100%) rename {images => static/images}/square-logos/distelli.png (100%) rename {images => static/images}/square-logos/docker.png (100%) rename {images => static/images}/square-logos/easynube.png (100%) rename {images => static/images}/square-logos/easystack.png (100%) rename {images => static/images}/square-logos/ein.png (100%) rename {images => static/images}/square-logos/eking.png (100%) rename {images => static/images}/square-logos/elastickube.png (100%) rename {images => static/images}/square-logos/elastifile.png (100%) rename {images => static/images}/square-logos/elastisys.png (100%) rename {images => static/images}/square-logos/endocode.png (100%) rename {images => static/images}/square-logos/eta.png (100%) rename {images => static/images}/square-logos/f5networks.png (100%) rename {images => static/images}/square-logos/fluentd.png (100%) rename {images => static/images}/square-logos/gce.png (100%) rename {images => static/images}/square-logos/gcp.png (100%) rename {images => static/images}/square-logos/ghostcloud.png (100%) rename {images => static/images}/square-logos/giant_swarm.png (100%) rename {images => static/images}/square-logos/gitlab.png (100%) rename {images => static/images}/square-logos/google.png (100%) rename {images => static/images}/square-logos/gopaddle.png (100%) rename {images => static/images}/square-logos/gravitational.png (100%) rename {images => static/images}/square-logos/greenfield.png (100%) rename {images => static/images}/square-logos/guardicore.png (100%) rename {images => static/images}/square-logos/harbur.png (100%) rename {images => static/images}/square-logos/harmony.png (100%) rename {images => static/images}/square-logos/harness.png (100%) rename {images => static/images}/square-logos/hasura.png (100%) rename {images => static/images}/square-logos/hedvig.png (100%) rename {images => static/images}/square-logos/heptio.png (100%) rename {images => static/images}/square-logos/hitachi.png (100%) rename {images => static/images}/square-logos/hpe.png (100%) rename {images => static/images}/square-logos/huawei.png (100%) rename {images => static/images}/square-logos/humio.png (100%) rename {images => static/images}/square-logos/ibm.png (100%) rename {images => static/images}/square-logos/ibmcloud.png (100%) rename {images => static/images}/square-logos/ibmprivate.png (100%) rename {images => static/images}/square-logos/inexcco.png (100%) rename {images => static/images}/square-logos/infosys.png (100%) rename {images => static/images}/square-logos/infracloud.png (100%) rename {images => static/images}/square-logos/instana.png (100%) rename {images => static/images}/square-logos/intel.png (100%) rename {images => static/images}/square-logos/inwinstack.png (100%) rename {images => static/images}/square-logos/isotoma.png (100%) rename {images => static/images}/square-logos/jetbrains.png (100%) rename {images => static/images}/square-logos/jetstack.png (100%) rename {images => static/images}/square-logos/jfrog.png (100%) rename {images => static/images}/square-logos/joyent.png (100%) rename {images => static/images}/square-logos/kasten.png (100%) rename {images => static/images}/square-logos/kenzan.png (100%) rename {images => static/images}/square-logos/kinvolk.png (100%) rename {images => static/images}/square-logos/kismatic.png (100%) rename {images => static/images}/square-logos/kloia.png (100%) rename {images => static/images}/square-logos/kong.png (100%) rename {images => static/images}/square-logos/kraken.png (100%) rename {images => static/images}/square-logos/kubeadm.png (100%) rename {images => static/images}/square-logos/kubermatic.png (100%) rename {images => static/images}/square-logos/kubernetic.png (100%) rename {images => static/images}/square-logos/kublr.png (100%) rename {images => static/images}/square-logos/kumina.png (100%) rename {images => static/images}/square-logos/landoop.png (100%) rename {images => static/images}/square-logos/livewyer.png (100%) rename {images => static/images}/square-logos/logdna.png (100%) rename {images => static/images}/square-logos/loodse.png (100%) rename {images => static/images}/square-logos/lovable.png (100%) rename {images => static/images}/square-logos/lti.png (100%) rename {images => static/images}/square-logos/mashape.png (100%) rename {images => static/images}/square-logos/mesosphere.png (100%) rename {images => static/images}/square-logos/microsoft.png (100%) rename {images => static/images}/square-logos/mirantis.png (100%) rename {images => static/images}/square-logos/mobilise.png (100%) rename {images => static/images}/square-logos/naitways.png (100%) rename {images => static/images}/square-logos/nats.png (100%) rename {images => static/images}/square-logos/navops.png (100%) rename {images => static/images}/square-logos/nebulaworks.png (100%) rename {images => static/images}/square-logos/netapp.png (100%) rename {images => static/images}/square-logos/netease.png (100%) rename {images => static/images}/square-logos/netsil.png (100%) rename {images => static/images}/square-logos/neuvector.png (100%) rename {images => static/images}/square-logos/nirmata.png (100%) rename {images => static/images}/square-logos/nuagenetworks.png (100%) rename {images => static/images}/square-logos/objectcomputing.png (100%) rename {images => static/images}/square-logos/opcito.png (100%) rename {images => static/images}/square-logos/openebs.png (100%) rename {images => static/images}/square-logos/opensense.png (100%) rename {images => static/images}/square-logos/openshift.png (100%) rename {images => static/images}/square-logos/opszero.png (100%) rename {images => static/images}/square-logos/oracle.png (100%) rename {images => static/images}/square-logos/oraclelinux.png (100%) rename {images => static/images}/square-logos/outcold.png (100%) rename {images => static/images}/square-logos/pivotal.png (100%) rename {images => static/images}/square-logos/platform9.png (100%) rename {images => static/images}/square-logos/polarseven.png (100%) rename {images => static/images}/square-logos/portworx.png (100%) rename {images => static/images}/square-logos/poseidon.png (100%) rename {images => static/images}/square-logos/puppet.png (100%) rename {images => static/images}/square-logos/pure_storage.png (100%) rename {images => static/images}/square-logos/qstack.png (100%) rename {images => static/images}/square-logos/rackn.png (100%) rename {images => static/images}/square-logos/rancher-labs.png (100%) rename {images => static/images}/square-logos/rancher.png (100%) rename {images => static/images}/square-logos/reactive_ops.png (100%) rename {images => static/images}/square-logos/redhat.png (100%) rename {images => static/images}/square-logos/redis.png (100%) rename {images => static/images}/square-logos/redzara.png (100%) rename {images => static/images}/square-logos/rxm.png (100%) rename {images => static/images}/square-logos/samsung_sds.png (100%) rename {images => static/images}/square-logos/sap.png (100%) rename {images => static/images}/square-logos/semantix.png (100%) rename {images => static/images}/square-logos/sematext.png (100%) rename {images => static/images}/square-logos/servian.png (100%) rename {images => static/images}/square-logos/shiwaforce.png (100%) rename {images => static/images}/square-logos/signalfx.png (100%) rename {images => static/images}/square-logos/skippbox.png (100%) rename {images => static/images}/square-logos/softserve.png (100%) rename {images => static/images}/square-logos/solinea.png (100%) rename {images => static/images}/square-logos/spheresoftware.png (100%) rename {images => static/images}/square-logos/spotinst.png (100%) rename {images => static/images}/square-logos/stackiq.png (100%) rename {images => static/images}/square-logos/stackoverdrive.png (100%) rename {images => static/images}/square-logos/stackpoint.png (100%) rename {images => static/images}/square-logos/stackstate.png (100%) rename {images => static/images}/square-logos/supergiant.png (100%) rename {images => static/images}/square-logos/superorbital.png (100%) rename {images => static/images}/square-logos/suse.png (100%) rename {images => static/images}/square-logos/sys_dig.png (100%) rename {images => static/images}/square-logos/syseleven.png (100%) rename {images => static/images}/square-logos/tectonic.png (100%) rename {images => static/images}/square-logos/tencent.png (100%) rename {images => static/images}/square-logos/tenxcloud.png (100%) rename {images => static/images}/square-logos/tigera.png (100%) rename {images => static/images}/square-logos/treasuredata.png (100%) rename {images => static/images}/square-logos/twistlock.png (100%) rename {images => static/images}/square-logos/vexxhost.png (100%) rename {images => static/images}/square-logos/vmware.png (100%) rename {images => static/images}/square-logos/wavefront.png (100%) rename {images => static/images}/square-logos/weave_works.png (100%) rename {images => static/images}/square-logos/wercker.png (100%) rename {images => static/images}/square-logos/wise2c.png (100%) rename {images => static/images}/square-logos/wisecloud.png (100%) rename {images => static/images}/square-logos/woqutech.png (100%) rename {images => static/images}/square-logos/zte.png (100%) rename {images => static/images}/squarespace_logo.png (100%) rename {images => static/images}/stackoverflow_icon.png (100%) rename {images => static/images}/suitcase.png (100%) rename {images => static/images}/texture.png (100%) rename {images => static/images}/toc_icon.png (100%) rename {images => static/images}/toc_icon_grey.png (100%) rename {images => static/images}/twitter_icon.png (100%) rename {images => static/images}/wheel.png (100%) rename {images => static/images}/wink_logo.png (100%) rename {images => static/images}/zalando_logo.png (100%) rename {js => static/js}/bootstrap.min.js (100%) rename {js => static/js}/custom-jekyll/tags.js (100%) rename {js => static/js}/glossary.js (100%) rename {js => static/js}/jquery-2.2.0.min.js (100%) rename {js => static/js}/jquery-ui.min.js (100%) rename {js => static/js}/redirects.js (100%) rename {js => static/js}/script.js (100%) rename {js => static/js}/sweetalert.min.js (100%) rename {js => static/js}/user-journeys/home.js (100%) rename {js => static/js}/user-journeys/toc.js (100%) diff --git a/.gitignore b/.gitignore index 460a88c5218d7..40876fef56a38 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ **/.DS_Store **/desktop.ini -.jekyll-metadata _site/** .sass-cache/** CNAME @@ -24,3 +23,8 @@ Session.vim tags kubernetes.github.io.iml + +nohup.out + +# Hugo output +public/ diff --git a/.travis.yml b/.travis.yml index 66680e46b6c5f..2984726e58062 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,6 +17,6 @@ install: - rm -r $GOPATH/src/k8s.io/kubernetes/vendor/ script: -# Run test -- go test -v k8s.io/website/test -- ./verify-docs-format.sh +# TODO(bep) +#- go test -v k8s.io/website/test +#- ./verify-docs-format.sh diff --git a/404.md b/404.md deleted file mode 100644 index 8354c87820b22..0000000000000 --- a/404.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -layout: docwithnav -title: 404 Error! -permalink: /404.html -no_canonical: true -sitemap: false ---- - - - -Sorry, this page was not found. :( diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 638b5cf1e8875..0000000000000 --- a/Gemfile +++ /dev/null @@ -1,53 +0,0 @@ -source "https://rubygems.org" - -# gem "github-pages", group: :jekyll_plugins - -gem "jekyll", "3.6.0" - -group :github_pages_compatible do - gem "json", "~> 1.7", ">= 1.7.7" - gem "coffee-script", "~> 2.4" - gem "coffee-script-source", "~> 1.12" - gem "ethon", "~> 0.10" - gem "execjs", "~> 2.7" - gem "minima", "~> 2.0" - gem "terminal-table", "~> 1.4" - gem "unicode-display_width", "~> 1.1" -end - -group :jekyll_plugins do - gem "jekyll-feed", "~> 0.6" - gem "jekyll-sitemap" - gem "jekyll-gist" - gem "jekyll-paginate", "1.1.0" - gem "jekyll-seo-tag" - gem "jekyll-avatar", "~> 0.4" - gem "jekyll-coffeescript", "~> 1.0" - gem "jekyll-default-layout", "~> 0.1" - gem "jekyll-github-metadata", "~> 2.2" - gem "jekyll-optional-front-matter", "~> 0.1" - gem "jekyll-readme-index", "0.0.3" - gem "jekyll-redirect-from", "~> 0.13" - gem "jekyll-relative-links", "~> 0.2" - gem "jekyll-swiss", "~> 0.4" - gem "jekyll-theme-architect", "0.0.3" - gem "jekyll-theme-cayman", "0.0.3" - gem "jekyll-theme-dinky", "0.0.3" - gem "jekyll-theme-hacker", "0.0.3" - gem "jekyll-theme-leap-day", "0.0.3" - gem "jekyll-theme-merlot", "0.0.3" - gem "jekyll-theme-midnight", "0.0.3" - gem "jekyll-theme-minimal", "0.0.3" - gem "jekyll-theme-modernist", "0.0.3" - gem "jekyll-theme-primer", "~> 0.1" - gem "jekyll-theme-slate", "0.0.3" - gem "jekyll-theme-tactile", "0.0.3" - gem "jekyll-theme-time-machine", "0.0.3" - gem "jekyll-titles-from-headings", "~> 0.1" - gem "jekyll-include-cache", "~> 0.1" - gem 'jekyll-youtube', '~> 1.0' -end - -gem "kramdown", "~> 1.11" -gem "rouge", "~> 2.0" -gem "pry" diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 050410dfc1163..0000000000000 --- a/Gemfile.lock +++ /dev/null @@ -1,183 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - addressable (2.5.2) - public_suffix (>= 2.0.2, < 4.0) - coderay (1.1.2) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.12.2) - colorator (1.1.0) - ethon (0.11.0) - ffi (>= 1.3.0) - execjs (2.7.0) - faraday (0.14.0) - multipart-post (>= 1.2, < 3) - ffi (1.9.21) - forwardable-extended (2.6.0) - jekyll (3.6.0) - addressable (~> 2.4) - colorator (~> 1.0) - jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 1.1) - kramdown (~> 1.14) - liquid (~> 4.0) - mercenary (~> 0.3.3) - pathutil (~> 0.9) - rouge (>= 1.7, < 3) - safe_yaml (~> 1.0) - jekyll-avatar (0.5.0) - jekyll (~> 3.0) - jekyll-coffeescript (1.0.1) - coffee-script (~> 2.2) - jekyll-default-layout (0.1.4) - jekyll (~> 3.0) - jekyll-feed (0.9.3) - jekyll (~> 3.3) - jekyll-gist (1.5.0) - octokit (~> 4.2) - jekyll-github-metadata (2.9.4) - jekyll (~> 3.1) - octokit (~> 4.0, != 4.4.0) - jekyll-include-cache (0.1.0) - jekyll (~> 3.3) - jekyll-optional-front-matter (0.3.0) - jekyll (~> 3.0) - jekyll-paginate (1.1.0) - jekyll-readme-index (0.0.3) - jekyll (~> 3.0) - jekyll-redirect-from (0.13.0) - jekyll (~> 3.3) - jekyll-relative-links (0.5.2) - jekyll (~> 3.3) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) - jekyll-seo-tag (2.4.0) - jekyll (~> 3.3) - jekyll-sitemap (1.2.0) - jekyll (~> 3.3) - jekyll-swiss (0.4.0) - jekyll-theme-architect (0.0.3) - jekyll (~> 3.3) - jekyll-theme-cayman (0.0.3) - jekyll (~> 3.3) - jekyll-theme-dinky (0.0.3) - jekyll (~> 3.3) - jekyll-theme-hacker (0.0.3) - jekyll (~> 3.3) - jekyll-theme-leap-day (0.0.3) - jekyll (~> 3.3) - jekyll-theme-merlot (0.0.3) - jekyll (~> 3.3) - jekyll-theme-midnight (0.0.3) - jekyll (~> 3.3) - jekyll-theme-minimal (0.0.3) - jekyll (~> 3.3) - jekyll-theme-modernist (0.0.3) - jekyll (~> 3.3) - jekyll-theme-primer (0.5.2) - jekyll (~> 3.5) - jekyll-github-metadata (~> 2.9) - jekyll-seo-tag (~> 2.2) - jekyll-theme-slate (0.0.3) - jekyll (~> 3.3) - jekyll-theme-tactile (0.0.3) - jekyll (~> 3.3) - jekyll-theme-time-machine (0.0.3) - jekyll (~> 3.3) - jekyll-titles-from-headings (0.5.1) - jekyll (~> 3.3) - jekyll-watch (1.5.1) - listen (~> 3.0) - jekyll-youtube (1.0.0) - jekyll - json (1.8.6) - kramdown (1.16.2) - liquid (4.0.0) - listen (3.1.5) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) - mercenary (0.3.6) - method_source (0.9.0) - minima (2.3.0) - jekyll (~> 3.5) - jekyll-feed (~> 0.9) - jekyll-seo-tag (~> 2.1) - multipart-post (2.0.0) - octokit (4.8.0) - sawyer (~> 0.8.0, >= 0.5.3) - pathutil (0.16.1) - forwardable-extended (~> 2.6) - pry (0.11.3) - coderay (~> 1.1.0) - method_source (~> 0.9.0) - public_suffix (3.0.2) - rb-fsevent (0.10.2) - rb-inotify (0.9.10) - ffi (>= 0.5.0, < 2) - rouge (2.2.1) - ruby_dep (1.5.0) - safe_yaml (1.0.4) - sass (3.5.5) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - sawyer (0.8.1) - addressable (>= 2.3.5, < 2.6) - faraday (~> 0.8, < 1.0) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) - unicode-display_width (1.3.0) - -PLATFORMS - ruby - -DEPENDENCIES - coffee-script (~> 2.4) - coffee-script-source (~> 1.12) - ethon (~> 0.10) - execjs (~> 2.7) - jekyll (= 3.6.0) - jekyll-avatar (~> 0.4) - jekyll-coffeescript (~> 1.0) - jekyll-default-layout (~> 0.1) - jekyll-feed (~> 0.6) - jekyll-gist - jekyll-github-metadata (~> 2.2) - jekyll-include-cache (~> 0.1) - jekyll-optional-front-matter (~> 0.1) - jekyll-paginate (= 1.1.0) - jekyll-readme-index (= 0.0.3) - jekyll-redirect-from (~> 0.13) - jekyll-relative-links (~> 0.2) - jekyll-seo-tag - jekyll-sitemap - jekyll-swiss (~> 0.4) - jekyll-theme-architect (= 0.0.3) - jekyll-theme-cayman (= 0.0.3) - jekyll-theme-dinky (= 0.0.3) - jekyll-theme-hacker (= 0.0.3) - jekyll-theme-leap-day (= 0.0.3) - jekyll-theme-merlot (= 0.0.3) - jekyll-theme-midnight (= 0.0.3) - jekyll-theme-minimal (= 0.0.3) - jekyll-theme-modernist (= 0.0.3) - jekyll-theme-primer (~> 0.1) - jekyll-theme-slate (= 0.0.3) - jekyll-theme-tactile (= 0.0.3) - jekyll-theme-time-machine (= 0.0.3) - jekyll-titles-from-headings (~> 0.1) - jekyll-youtube (~> 1.0) - json (~> 1.7, >= 1.7.7) - kramdown (~> 1.11) - minima (~> 2.0) - pry - rouge (~> 2.0) - terminal-table (~> 1.4) - unicode-display_width (~> 1.1) - -BUNDLED WITH - 1.16.1 diff --git a/Makefile b/Makefile index 85ea30f647153..8909d51974bc3 100644 --- a/Makefile +++ b/Makefile @@ -1,18 +1,22 @@ -.PHONY: all build build-preview help serve +.PHONY: all build sass build-preview help serve help: ## Show this help. @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) all: build ## Build site with production settings and put deliverables in _site. +sass: # Rebuild the SASS source into CSS + node-sass --output-style compact ./src/sass/styles.sass ./static/css/styles.css + node-sass --output-style compact ./src/sass/case_study_styles.sass ./static/css/case_study_styles.css + build: ## Build site with production settings and put deliverables in _site. - bundle exec jekyll build + hugo build-preview: ## Build site with drafts and future posts enabled. - bundle exec jekyll build --drafts --future --trace + hugo -D -F serve: ## Boot the development server. - bundle exec jekyll serve + hugo server -stage: ## Run the Jekyll staging container. - docker run -ti --rm -v "${PWD}":/k8sdocs -p 4000:4000 gcr.io/google-samples/k8sdocs:1.1 +stage: ## This needs to be updated for Hugo + #docker run -ti --rm -v "${PWD}":/k8sdocs -p 4000:4000 gcr.io/google-samples/k8sdocs:1.1 diff --git a/_config.yml b/_config.yml deleted file mode 100644 index 2fe87ddc32754..0000000000000 --- a/_config.yml +++ /dev/null @@ -1,99 +0,0 @@ -name: Kubernetes -title: Kubernetes -url: https://kubernetes.io -description: Production-Grade Container Orchestration -markdown: kramdown -kramdown: - input: GFM - html_to_native: true - hard_wrap: false - syntax_highlighter: rouge -incremental: true - -safe: false -lsi: false - -latest: "v1.10" - -paginate: 7 -paginate_path: "/blog/page:num/" - -defaults: - - - scope: - path: "" - values: - fullversion: "v1.10.0" - version: "v1.10" - githubbranch: "master" - docsbranch: "master" - versions: - - fullversion: "v1.10.0" - version: "v1.10" - githubbranch: "v1.10.0" - docsbranch: "release-1.10" - url: https://kubernetes.io - - fullversion: "v1.9.0" - version: "v1.9" - githubbranch: "v1.9.0" - docsbranch: "release-1.9" - url: https://v1-9.docs.kubernetes.io - - fullversion: "v1.8.4" - version: "v1.8" - githubbranch: "v1.8.4" - docsbranch: "release-1.8" - url: https://v1-8.docs.kubernetes.io - - fullversion: "v1.7.6" - version: "v1.7" - githubbranch: "v1.7.6" - docsbranch: "release-1.7" - url: https://v1-7.docs.kubernetes.io - - fullversion: "v1.6.8" - version: "v1.6" - githubbranch: "v1.6.8" - docsbranch: "release-1.6" - url: https://v1-6.docs.kubernetes.io - deprecated: false - currentUrl: https://kubernetes.io/docs/home/ - nextUrl: http://kubernetes-io-vnext-staging.netlify.com/ - - - scope: - path: "docs" - values: - layout: docwithnav - showedit: true - -permalink: pretty - -plugins: - - jekyll-feed - - jekyll-sitemap - - jekyll-seo-tag - - jekyll-include-cache - - jekyll-paginate - - jekyll-youtube -# disabled gems -# - jekyll-redirect-from - -include: [_redirects,_headers] - -# SEO -logo: /images/favicon.png -twitter: - username: kubernetesio - -# empty array for tabs -emptyArray: [] - -# Tables of contents, stored in the _data folder, that control the sidebar nav -tocs: - - docs-home - - setup - - tasks - - tutorials - - concepts - - reference - - samples - - search - - imported - - blog diff --git a/_data/glossary/kk.yaml b/_data/glossary/kk.yaml deleted file mode 100644 index 07ed957b0009d..0000000000000 --- a/_data/glossary/kk.yaml +++ /dev/null @@ -1,8 +0,0 @@ -id: kk -name: k/k -tags: -- community -short-description: > - k/k is short for the kubernetes/kubernetes repo -long-description: > - k/k is frequently used in communications to the community (comments, SIG meetings, etc.). It is a shortened moniker for the [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) core code repository. diff --git a/_includes/CommunityHangout/Apr3.html b/_includes/CommunityHangout/Apr3.html deleted file mode 100644 index e5637e0c5206f..0000000000000 --- a/_includes/CommunityHangout/Apr3.html +++ /dev/null @@ -1,227 +0,0 @@ -
-
-
-Every week the Kubernetes contributing community meet virtually over Google Hangouts. We want anyone who's interested to know what's discussed in this forum.
-
-
-
-Agenda:
- -
-
-Notes from meeting:
-
    -
  1. -Quinton - Cluster federation
    -
  2. - -
-
-
    -
  1. -Satnam - Soak Test
    -
  2. - -
  3. -Brian - v1beta3 is enabled by default, v1beta1 and v1beta2 deprecated, turned off  in June.  Should still work with upgrading existing clusters, etc.
    -
  4. -
-
diff --git a/_includes/CommunityHangout/Mar27.html b/_includes/CommunityHangout/Mar27.html deleted file mode 100644 index a3a892119c329..0000000000000 --- a/_includes/CommunityHangout/Mar27.html +++ /dev/null @@ -1,176 +0,0 @@ - - - -
-
- Every week the Kubernetes contributing community meet virtually over Google Hangouts. We want anyone who's interested to know what's discussed in this forum.
-
-
-
- Agenda:
-
- - Andy - demo remote execution and port forwarding
-
- - Quinton - Cluster federation - Postponed
-
- - Clayton - UI code sharing and collaboration around Kubernetes
-
-
-
- Notes from meeting:
-
- 1. Andy from RedHat:
- -
- 2. Clayton: where are we wrt a community organization for e.g. kubernetes UI components?
- -
- 3. Brian Grant:
- -
- 4. General consensus that 30 minutes is better than 60
-
- -
diff --git a/_includes/code.html b/_includes/code.html deleted file mode 100644 index 83a702785d636..0000000000000 --- a/_includes/code.html +++ /dev/null @@ -1,26 +0,0 @@ -{% capture samplecode %}{% include_relative {{include.file}} %}{% endcapture %} -{% if include.k8slink %}{% capture ghlink %}https://raw.githubusercontent.com/kubernetes/kubernetes/blob/{{page.githubbranch}}{{include.k8slink}}{% endcapture %}{% endif %} -{% if include.ghlink %}{% capture ghlink %}https://raw.githubusercontent.com/kubernetes/website/{{page.docsbranch}}{{include.ghlink}}{% endcapture %}{% endif %} -{% capture mysample %} -```{{include.language}} -{{ samplecode | raw | strip }} -``` -{: id="{{include.file | handleize}}"} -{% endcapture %} - - - - - - - - - - - -
- {% if ghlink %}{% endif %} - {{include.file}} - {% if ghlink %}{% endif %} - -
{{ mysample | markdownify }}
diff --git a/_includes/deprecation-warning.html b/_includes/deprecation-warning.html deleted file mode 100644 index 39e9ff628971c..0000000000000 --- a/_includes/deprecation-warning.html +++ /dev/null @@ -1,12 +0,0 @@ -{% if page.deprecated %} -
-
-
-

- Documentation for Kubernetes {{ page.version}} is no longer actively maintained. The version you are currently viewing is a static snapshot. - For up-to-date documentation, see the latest version. -

-
-
-
-{% endif %} diff --git a/_includes/feature-state-deprecated.md b/_includes/feature-state-deprecated.md deleted file mode 100644 index 4379da5b7ff91..0000000000000 --- a/_includes/feature-state-deprecated.md +++ /dev/null @@ -1,6 +0,0 @@ -{% assign dialog_title = "deprecated" %} -{% capture dialog_content %} -This feature is *deprecated*. For more information on this state, see the [Kubernetes Deprecation Policy](/docs/reference/deprecation-policy/). -{% endcapture %} - -**DEPRECATION NOTICE:** As of `Kubernetes {{ for_k8s_version | default: page.version }}`, this has been {% include feature-dialog.md %} diff --git a/_includes/feature-state-stable.md b/_includes/feature-state-stable.md deleted file mode 100644 index 58b6b2f4c2410..0000000000000 --- a/_includes/feature-state-stable.md +++ /dev/null @@ -1,10 +0,0 @@ -{% assign dialog_title = "stable" %} -{% capture dialog_content %} -This feature is *stable*, meaning: - -* The version name is vX where X is an integer. -* Stable versions of features will appear in released software for many subsequent versions. - -{% endcapture %} - -**FEATURE STATE:** `Kubernetes {{ for_k8s_version | default: page.version }}` {% include feature-dialog.md %} diff --git a/_includes/head.html b/_includes/head.html deleted file mode 100644 index 624f7dd925893..0000000000000 --- a/_includes/head.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - {% if page.case_study_styles %}{% else %}{% endif %} - - - - - {% if page.deprecated %}{% endif %} - {% if page.class == "gridPage" %}{% endif %} - {% if page.css %}{% assign csslist = page.css | split: ',' | compact %}{% for cssurl in csslist %} - {% endfor %}{% else %}{% endif %} - - {% if page.description %} - - {% else %} - - {% endif %} - - - - - - - - {% if page.js %}{% assign jslist = page.js | split: ',' | compact %}{% for jsurl in jslist %} - {% endfor %}{% else %}{% endif %} - {% seo %} - {% feed_meta %} - diff --git a/_includes/header.html b/_includes/header.html deleted file mode 100644 index 25bbc8c22678c..0000000000000 --- a/_includes/header.html +++ /dev/null @@ -1,54 +0,0 @@ -
- -
- - - - - -
diff --git a/_includes/tabs.md b/_includes/tabs.md deleted file mode 100644 index 48fd7f9b418db..0000000000000 --- a/_includes/tabs.md +++ /dev/null @@ -1,15 +0,0 @@ -{% comment %} See /docs/tabs-example.md for usage example. {% endcomment %} -{% assign tab_set_id = tab_set_name | default: "tabset" | slugify %} -
- -{% for content in tab_contents %} -
- {{ content | markdownify }} -
-{% endfor %} -
- diff --git a/_includes/tag-map.md b/_includes/tag-map.md deleted file mode 100644 index 1a1cb23c06cb1..0000000000000 --- a/_includes/tag-map.md +++ /dev/null @@ -1,15 +0,0 @@ - - -{% assign glossary_terms = site.data.glossary | where_exp: "term", "term.id != '_example'" %} - -{% assign tag_map = "" | split: " " %} - -{% for tag in site.data.canonical-tags %} - -{% assign term_list = glossary_terms | where_exp:"term", "term.tags contains tag" | map: "id" %} - -{% assign tag_obj = "" | split: " " | push: tag | push: term_list %} - -{% assign tag_map = tag_map | push: tag_obj %} - -{% endfor %} diff --git a/_includes/templates/_errorthrower.md b/_includes/templates/_errorthrower.md deleted file mode 100644 index f956a7570904f..0000000000000 --- a/_includes/templates/_errorthrower.md +++ /dev/null @@ -1,16 +0,0 @@ -### ERROR: You must define a `{{ include.missing_block }}` block -{: style="color:red" } - -This template requires that you provide text that {{ include.purpose }}. The text in this block will -be displayed under the heading **{{ include.heading }}**. - -To get rid of this message and take advantage of this template, define the `{{ include.missing_block }}` -variable and populate it with content. - -```liquid -{% raw %}{%{% endraw %} capture {{ include.missing_block }} {% raw %}%}{% endraw %} -Text that {{ include.purpose }}. -{% raw %}{%{% endraw %} endcapture {% raw %}%}{% endraw %} -``` - - \ No newline at end of file diff --git a/_includes/templates/concept-overview.md b/_includes/templates/concept-overview.md deleted file mode 100644 index 0cb0831a813d8..0000000000000 --- a/_includes/templates/concept-overview.md +++ /dev/null @@ -1,88 +0,0 @@ -{% if concept %} - -# Overview of {{concept}}s - -{% if what_is %} - -### What is a {{ concept }}? - -{{ what_is }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='what_is' heading='What is a (Concept)?' purpose='explains what this concept is and its purpose.' %} - -{% endif %} - - -{% if when_to_use %} - -### When to use {{ concept }}s - -{{ when_to_use }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='when_to_use' heading='When to use (Concept)' purpose='explains when to use this object.' %} - -{% endif %} - - -{% if when_not_to_use %} - -### When not to use {{ concept }}s - -{{ when_not_to_use }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='when_not_to_use' heading='When not to use (Concept)' purpose='explains when not to use this object.' %} - -{% endif %} - - -{% if status %} - -### {{ concept }} status - -{{ status }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='status' heading='Retrieving status for a (Concept)' purpose='explains how to retrieve a status description for this object.' %} - -{% endif %} - - -{% if usage %} - -#### Usage - -{{ usage }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='usage' heading='Usage' purpose='shows the most basic, common use case for this object, in the form of a code sample, command, etc, using tabs to show multiple approaches' %} - -{% endif %} - - - -{% else %} - -### ERROR: You must define a "concept" variable -{: style="color:red" } - -This template requires a variable called `concept` that is simply the name of the -concept for which you are giving an overview. This will be displayed in the -headings for the document. - -To get rid of this message and take advantage of this template, define `concept`: - -```liquid -{% raw %}{% assign concept="Replication Controller" %}{% endraw %} -``` - -Complete this task, then we'll walk you through preparing the rest of the document. - -{% endif %} diff --git a/_includes/templates/concept.md b/_includes/templates/concept.md deleted file mode 100644 index 65edc7f808598..0000000000000 --- a/_includes/templates/concept.md +++ /dev/null @@ -1,32 +0,0 @@ -{% if overview %} - -{{ overview }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='overview' purpose='provides an overview of this concept.' %} - -{% endif %} - -* TOC -{:toc} - -{% if body %} - -{{ body }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='body' purpose='supplies the body of the page content.' %} - -{% endif %} - - -{% if whatsnext %} - -## What's next - -{{ whatsnext }} - -{% endif %} - diff --git a/_includes/templates/glossary/README.md b/_includes/templates/glossary/README.md deleted file mode 100644 index b51910b529e05..0000000000000 --- a/_includes/templates/glossary/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# Kubernetes Glossary - -To write a glossary snippet, start with a copy of the template, [`/_data/glossary/_example.yml`](/_data/glossary/_example.yml). Make sure to provide (or omit) values for the following fields: - -* (Required) `id` - * This field must match the name of the glossary file itself (without the `*.yml` extension). It is *not* intended to be displayed to users, and is only used programmatically. -* (Required) `name` - * The name of the term. -* (Optional) `full-link` - * The link to any specific long-form documentation, starting with `https://` if not within the website repo, and `/docs/...` if within the repo. -* (Required) `tags` - * Must be one of the tags listed in the [tags directory in the website repository](https://github.com/kubernetes/website/tree/master/_data/canonical-tags). -* (Required) `short description` - * Make sure to replace the instructional text in the template with your content. -* (Optional) `aka` - * These synonyms do not need to be glossary terms themselves (if they are deprecated), and can include spaces. -* (Optional) `related` - * These should be the `id`s (not the `names`) of related glossary terms. -* (Optional) `long description` - * If you do not provide a long description, remove the field -- that is, the complete key-value pair. - -The `_example.yml` template also contains basic information about how to write your snippet. For additional guidance, continue reading this readme. - -## Glossary snippet style guide - -This style guide supplements the guidance provided in the glossary template. It's intended to help you think about what and how to write glossary definitions. For more general guidance on style, consult [the core docs style guide](https://kubernetes.io/docs/home/contribute/style-guide/). - -### Minimum viable snippet: - -Every snippet must include at least the short description. The long description is optional, but should be provided for terms that need additional clarification. For consistency with existing *Concept* definitions, *write your definitions as if the term is plural*. - -**short-description** (Required): One line (or two short lines) that provides a minimum definition. Do not repeat the term. Prefer fragments. Model after tooltips. End with a period. - -**long-description** (Optional): Longer additional text to appear after (in conjunction with) short description. Provide in cases where the short description is not sufficient for the intro paragraph to a topic. Write complete but concise sentences. - -### Examples - -```yaml -- name: Pod -- tags: - - Fundamental - - Workload - - API Object -- short-description: The smallest and simplest Kubernetes objects. Represent a set of running processes on your cluster. -- long-description: Pods most often run only a single container, and are managed by a Deployment. -``` - -```yaml -- name: Deployment -- tags: - - Fundamental - - Workload - - API Object -- short-description: Controllers that provide declarative updates for Pods and ReplicaSets. -- long-description: Deployments are responsible for creating and updating instances of an application. -``` - -### Thinking about definitions - -* **Think of the short description as it would appear in a tooltip.** Is it sufficient to get the reader started? Is it short enough to be read inside a small UI element? - - *Tip*: look at the API reference doc content (for example, https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/). Note, however, that this content should be used with care. The concept docs for Pod, for example, are clearer than the reference docs. - -* **The long description should follow the short description to make a complete introduction to a topic.** (This is the content that appears at the top of the content, before any generated TOC.) Does it provide information that's not already clear from the short description? Does it provide information that readers should have a general sense of before they dive into the details of the topic it helps introduce? - - *Tip:* the long description does not need to be long; it's intended to extend but not replace the short description. Look through current related docs for ideas. (The Deployment long description is taken from a tutorial, for example.) diff --git a/_includes/templates/glossary/_error.md b/_includes/templates/glossary/_error.md deleted file mode 100644 index 75ede4d120882..0000000000000 --- a/_includes/templates/glossary/_error.md +++ /dev/null @@ -1,10 +0,0 @@ -### ERROR: You must define a `{{ include.missing_block }}` field -{: style="color:red" } - -The glossary template requires that you provide text that {{ include.purpose }}. - -To get rid of this message and take advantage of this template, define the `{{ include.missing_block }}` -field for the `{{ include.term }}` glossary term and populate it with content. - -See `_data/glossary/_example.yml` for reference. - diff --git a/_includes/templates/glossary/snippet.md b/_includes/templates/glossary/snippet.md deleted file mode 100644 index 71d59109e17f5..0000000000000 --- a/_includes/templates/glossary/snippet.md +++ /dev/null @@ -1,29 +0,0 @@ -{% assign term_data = site.data.glossary.[include.term_id] %} - -{% if include.length == "all" or include.length == "short" %} - -{% if term_data.short-description %} - -{{ term_data.short-description | liquify | markdownify }} - -{% else %} - -{% include templates/glossary/_error.md term=term_data.name missing_block='short-description' purpose='concisely describes the key term in 1-2 lines' %} - -{% endif %} - -{% endif %} - -{% if include.length == "all" or include.length == "long" %} - -{% if term_data.long-description %} - -{{ term_data.long-description | liquify | markdownify }} - -{% else %} - -{% include templates/glossary/_error.md term=term_data.name missing_block='long-description' purpose='describes the key term in greater depth, supplementing the short-description' %} - -{% endif %} - -{% endif %} diff --git a/_includes/templates/kubectl.md b/_includes/templates/kubectl.md deleted file mode 100644 index 1b50a7b95d1dc..0000000000000 --- a/_includes/templates/kubectl.md +++ /dev/null @@ -1,37 +0,0 @@ -{% if command %} - -# {% if site.data.kubectl[command].name != "kubectl" %}kubectl {% endif %}{{ site.data.kubectl[command].name }} - -{{ site.data.kubectl[command].synopsis }} - -## Description - -{{ site.data.kubectl[command].description }} - -{% if site.data.kubectl[command].options %} -## Options - -| Option | Shorthand | Default Value | Usage | -|--------------------|---------------|-------|{% for option in site.data.kubectl[command].options %} -| `{{option.name | strip}}` | {% if option.shorthand %}`{{ option.shorthand | strip }}`{% endif %} | {% if option.default_value %}`{{option.default_value| strip}}`{% endif %} | {% if option.usage %}{{option.usage| strip | replace:'|',', '}}{% endif %} |{% endfor %} -{% endif %} - -{% if site.data.kubectl[command].inherited_options %} -## Inherited Options - -| Option | Shorthand | Default Value | Usage | -|--------------------|---------------|-------|{% for option in site.data.kubectl[command].inherited_options %} -| `{{option.name | strip}}` | {% if option.shorthand %}`{{ option.shorthand | strip }}`{% endif %} | {% if option.default_value %}`{{option.default_value| strip}}`{% endif %} | {% if option.usage %}{{option.usage| strip | replace:'|',', '}}{% endif %} |{% endfor %} -{% endif %} - -## See also - -{% for seealso in site.data.kubectl[command].see_also %} -- [`{{ seealso }}`](/docs/kubectl/{% if seealso != "kubectl" %}kubectl_{{seealso}}{% endif %}) -{% endfor %} - -{% else %} - -{% include templates/_errorthrower.md missing_block='command' heading='kubectl (command)' purpose='names the kubectl command, so that the appropriate YAML file (from _data/kubectl) can be transformed into a page.' %} - -{% endif %} \ No newline at end of file diff --git a/_includes/templates/task.md b/_includes/templates/task.md deleted file mode 100644 index e76cb7b117871..0000000000000 --- a/_includes/templates/task.md +++ /dev/null @@ -1,55 +0,0 @@ -{% if overview %} - -{{ overview }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='overview' purpose='states, in one or two sentences, the purpose of this document' %} - -{% endif %} - - -* TOC -{: toc} - - -{% if prerequisites %} - -## Before you begin - -{{ prerequisites }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='prerequisites' heading='Before you begin' purpose='lists action prerequisites and knowledge prerequisites' %} - -{% endif %} - - -{% if steps %} - -{{ steps }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='steps' purpose='lists a sequence of numbered steps that accomplish the task.' %} - -{% endif %} - - -{% if discussion %} - -{{ discussion }} - -{% else %} - -{% endif %} - - -{% if whatsnext %} - -## What's next - -{{ whatsnext }} - -{% endif %} diff --git a/_includes/templates/tutorial.md b/_includes/templates/tutorial.md deleted file mode 100644 index b4c1faa0f10ef..0000000000000 --- a/_includes/templates/tutorial.md +++ /dev/null @@ -1,68 +0,0 @@ -{% if overview %} - -{{ overview }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='overview' purpose='states, in one or two sentences, the purpose of this document' %} - -{% endif %} - - -* TOC -{: toc} - - -{% if objectives %} - -## Objectives - -{{ objectives }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='objectives' heading='Objectives' purpose='lists the objectives for this tutorial.' %} - -{% endif %} - - -{% if prerequisites %} - -## Before you begin - -{{ prerequisites }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='prerequisites' heading='Before you begin' purpose='lists action prerequisites and knowledge prerequisites' %} - -{% endif %} - - -{% if lessoncontent %} - -{{ lessoncontent }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='lessoncontent' purpose='provides the lesson content for this tutorial.' %} - -{% endif %} - - -{% if cleanup %} - -## Cleaning up - -{{ cleanup }} - -{% endif %} - - -{% if whatsnext %} - -## What's next - -{{ whatsnext }} - -{% endif %} diff --git a/_includes/templates/user-journey-content.md b/_includes/templates/user-journey-content.md deleted file mode 100644 index 5c9e731bcbe16..0000000000000 --- a/_includes/templates/user-journey-content.md +++ /dev/null @@ -1,26 +0,0 @@ -
{{ page.track }}
-
- Introduction -
-
sections in this doc
-
- -
- -
- -{% if overview %} -{{ overview | liquify | markdownify }} -{% else %} -{% include templates/_errorthrower.md missing_block='overview' purpose='provides an introduction of this level.' %} -{% endif %} - -{% if body %} -{{ body | liquify | markdownify | replace: '', '
'}} -{% else %} -{% include templates/_errorthrower.md missing_block='body' purpose='contains content for this level.' %} -{% endif %} - -
- - diff --git a/_includes/tocsearch.html b/_includes/tocsearch.html deleted file mode 100644 index 708c8357f07c3..0000000000000 --- a/_includes/tocsearch.html +++ /dev/null @@ -1,20 +0,0 @@ -{% capture whitespace %} - {% for item in include.tree %} - {% if found_toc %} - {% break %} - {% endif %} - {% if item.section %} - {% include tocsearch.html tree=item.section toc=include.toc %} - {% else %} - {% if item.path %} - {% assign filename = item.path | replace: '/', ' ' | strip | replace: ' ', '/' | append: '.md' %} - {% else %} - {% assign filename = item %} - {% endif %} - {% if filename == page.path %} - {% assign found_toc = include.toc %} - {% break %} - {% endif %} - {% endif %} - {% endfor %} -{% endcapture %} diff --git a/_includes/tree.html b/_includes/tree.html deleted file mode 100644 index 78505504f1837..0000000000000 --- a/_includes/tree.html +++ /dev/null @@ -1,25 +0,0 @@ -{% for item in include.tree %} - {% if item.section %} -
-
- {% include_cached tree.html tree=item.section %} -
-
- {% else %} - - {% capture whitespace %} - {% if item.path %} - {% assign path = item.path %} - {% assign title = item.title %} - {% else %} - {% assign found_page = site.pages | where: "path", item | first %} - {% assign title = found_page.title %} - {% assign path = found_page.url %} - {% endif %} - {% endcapture %} - - {% if path %} - - {% endif %} - {% endif %} -{% endfor %} diff --git a/_includes/youtubePlayer.html b/_includes/youtubePlayer.html deleted file mode 100644 index 34996aa1394e7..0000000000000 --- a/_includes/youtubePlayer.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/_layouts/basic.html b/_layouts/basic.html deleted file mode 100644 index d2b684df52fad..0000000000000 --- a/_layouts/basic.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - {% include head.html %} - - - {% include header.html %} - - {{ content }} - - {% include footer.html %} - - {% include footer-scripts.html %} - - diff --git a/_layouts/blog.html b/_layouts/blog.html deleted file mode 100644 index 2ce1b98149dda..0000000000000 --- a/_layouts/blog.html +++ /dev/null @@ -1,192 +0,0 @@ ---- -#empty front matter ---- - - - - - - - - - - - - - - - - - {% if page.deprecated %}{% endif %} - - - - {% if page.description %} - - {% else %} - - {% endif %} - - - - - - - - - - {% feed_meta %} - - {% seo %} - - - - - -
-
- -
- - -
-
- -
-

Kubernetes Blog

-
- -
-
- - -
-
- -

{{ page.date | date: ' %A, %B %-d, %Y' }}

-

{{page.title}}

- {{ content }} - - -
- - -
-
- - - @Kubernetesio - View on Github - #kubernetes-users - Stack Overflow - Download Kubernetes -
- - - {% for post in site.posts %} - {% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %} - {% capture this_month %}{{ post.date | date: "%B" }}{% endcapture %} - {% capture next_year %}{{ post.previous.date | date: "%Y" }}{% endcapture %} - {% capture next_month %}{{ post.previous.date | date: "%B" }}{% endcapture %} - {% if forloop.first %} - - {% else %} - {% if this_year != next_year %} - - -
- -
- - -
- -{% include footer.html %} -{% include footer-scripts.html %} - diff --git a/_layouts/docsportal.html b/_layouts/docsportal.html deleted file mode 100644 index acb7efdc75a98..0000000000000 --- a/_layouts/docsportal.html +++ /dev/null @@ -1,66 +0,0 @@ - - - -{% include head.html %} - - - -{% include header.html %} - - -
-

{{ toc.bigheader }}

-
{{ toc.abstract }}
-
- - -
-
- -{% include deprecation-warning.html %} - -
- - -
- - {{ content }} - -
-

Analytics

- {% if page.url != "/404.html" and page.url != "/docs/search/" %} - {% unless page.no_issue %} - - Create an Issue - {% endunless %} - {% unless page.noedit %} - Edit this Page - {% endunless %} - {% endif %} -
-
-
- -{% include_cached footer.html %} -{% include footer-scripts.html %} - - - diff --git a/_layouts/docwithnav.html b/_layouts/docwithnav.html deleted file mode 100755 index ec3e4acb8707c..0000000000000 --- a/_layouts/docwithnav.html +++ /dev/null @@ -1,83 +0,0 @@ -{% for current_toc in site.tocs %} - {% if found_toc %} - {% break %} - {% else %} - {% assign toc=site.data[current_toc] %} - {% include tocsearch.html tree=toc.toc toc=toc %} - {% endif %} -{% endfor %} - - - - -{% include head.html %} - - - -{% include header.html %} - - -
-

{{ toc.bigheader }}

-
{{ toc.abstract }}
-
- - -
-
- -{% include deprecation-warning.html %} - -
-
-
- {% include_cached tree.html tree=toc.toc %} -
- -
- -
-

Edit This Page

- - {% unless page.notitle %} -

{{ page.title }}

- {% endunless %} - - {{ content }} - -

Analytics

- {% if page.url != "/404.html" and page.url != "/docs/search/"%} - {% unless page.no_issue %} - - Create an Issue - {% endunless %} - {% unless page.noedit %} - Edit this Page - {% endunless %} - {% endif %} -
-
- -{% include_cached footer.html %} -{% include footer-scripts.html %} - - - diff --git a/_layouts/none.html b/_layouts/none.html deleted file mode 100644 index cddd07099f285..0000000000000 --- a/_layouts/none.html +++ /dev/null @@ -1 +0,0 @@ -{{ content }} diff --git a/_plugins/README.md b/_plugins/README.md deleted file mode 100644 index 71265e9c9df81..0000000000000 --- a/_plugins/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# Custom Jekyll Plugins - -This directory contains `*.rb` files that extend the original Jekyll -classes and provide custom formatting for the docs site: - -### `glossary_tags.rb` - -A full list of glossary terms is available on the [Standardized Glossary](https://kubernetes.io/docs/reference/glossary/?fundamental=true) page. -For further information about term schemas, see the [README](../_includes/templates/glossary/README.md) and the provided [`_example.yml`](../_data/glossary/_example.yml). - -*NOTE: The "tags" referenced here are Liquid tags like `{% include %}`, **not** the glossary canonical tags that are used to categorize terms.* - -#### (1) `glossary_definition` tag - -This renders the definition of the glossary term inside a `
`, preserving Markdown formatting where possible. It uses the [`snippet.md` template](../_includes/templates/glossary/snippet.md). - -**Usage:** - -``` -{% glossary_definition term_id="helm-chart" length="all" %} -``` - -**Parameters:** - - -| Name | Default | Description | -| --- | --- | --- | -| `term_id` | Not Applicable (Required) | The `id` of the glossary term whose definition will be used. (This `id` is the same as the filename of the term, i.e. `_data/glossary/.yml`.) | -| `length` | "short" | Specifies which term definition should be used ("short" for the `short-description`, "long" for `long-description`, "all" when both should be included). | -| `prepend` | "Service Catalog is" | A prefix which can be attached in front of a term's short description (which is one or more sentence fragments). | - -#### (2) `glossary_tooltip` tag - -This renders the glossary term with a tooltip--when the term is moused over by the user, its definition is displayed above. - -**Usage:** - -``` -{% glossary_tooltip text="Helm Charts" term_id="helm-chart" %} -``` - -This renders the following: - -![glossary-tooltip](../images/metadocs/jekyll-tags-glossary-tooltip.png) - -**Parameters:** - - -| Name | Default | Description | -| --- | --- | --- | -| `text` | the `name` of the glossary term | The text that the user will hover over to display the glossary definition. **You should include this if using the tooltip inside of a glossary term's YAML short-description.** | -| `term_id` | Not Applicable (Required) | The `id` of the associated glossary term. (This `id` is the same as the filename of the term, i.e. `_data/glossary/.yml`.) | - -#### (3) `glossary_injector` tag - -This takes the definition of the term specified by the `term_id` and uses it to populate the contents of another HTML element specified by `placeholder_id`. - -**Usage:** - -``` -{% glossary_injector term_id="kubectl" placeholder_id="def-container" length="short" %} -``` - -This renders the following: - -![glossary-injector](../images/metadocs/jekyll-tags-glossary-injector.gif) - -*NOTE: Neither the placeholder nor the term's styling/CSS is determined by this Jekyll tag. You will need to specify this yourself in your Markdown/HTML files, i.e. by assigning a custom class.* - -**Parameters:** - - -| Name | Default | Description | -| --- | --- | --- | -| `text` | the `name` of the glossary term | The text that the user will hover over to display the glossary definition. | -| `term_id` | Not Applicable (Required) | The `id` of the glossary term whose definition will be used. (This `id` is the same as the filename of the term, i.e. `_data/glossary/.yml`.) | -| `placeholder_id` | Not Applicable (Required) | The `id` of the HTML element whose contents will be populated with the definition of `term_id` | -| `length` | "short" | Specifies which term definition should be used ("short" for the `short-description`, "long" for `long-description`, "all" when both should be included). | diff --git a/_plugins/glossary_tags.rb b/_plugins/glossary_tags.rb deleted file mode 100644 index 2577a65403515..0000000000000 --- a/_plugins/glossary_tags.rb +++ /dev/null @@ -1,129 +0,0 @@ -require 'pry' -# See /_plugins/README.md for full documentation of these custom Jekyll tags -module Jekyll - module GlossaryTags - # Base class for tags (not to be instantiated) - class Base < Liquid::Tag - VALID_PARAM_NAMES = [] - LENGTH_SHORT = "short" - LENGTH_LONG = "long" - SNIPPET_TEMPLATE = "templates/glossary/snippet.md" - - def initialize(tag_name, markup, options) - super - @args = {} - @markup.scan(/([\S]+=['"][^=]+["'])+/).each do |arg| - key, val = arg.first.split("=") - key = key.to_sym - next unless val - if self.class::VALID_PARAM_NAMES.include?(key) - @args[key] = val.gsub("\"", "") - end - end - end - - # "abstract" method - def render(context) - raise NotImplementedError - end - - protected - - def glossary_term_info(context) - global_glossary_hash = context.registers[:site].data["glossary"] - unless global_glossary_hash.keys.to_set.include?(@args[:term_id]) - raise StandardError, - "#{@args[:term_id]} is not a valid glossary term id. Please " \ - "see ./_data/glossary/* for the complete list." - end - global_glossary_hash[@args[:term_id]] - end - - def include_snippet(context) - @args[:length] ||= LENGTH_SHORT - clean_markup = @args.keys.map { |k| "#{k}=\"#{@args[k]}\"" }.join(" ") - - Jekyll::Tags::IncludeTag.parse( - "include", - "#{SNIPPET_TEMPLATE} #{clean_markup}", - nil, - @parse_context - ).render(context) - end - end - - # Tag for displaying a glossary term's definition inline - class Definition < Base - VALID_PARAM_NAMES = [ - :term_id, - :length, - :prepend, - ].freeze - - def render(context) - text = include_snippet(context) - if @args[:prepend] - text.sub(/

(.)/) { "

#{@args[:prepend]} #{$1.downcase}" } - else - text - end - end - end - - # Tag to display a tooltip for a specific glossary term - class Tooltip < Base - VALID_PARAM_NAMES = [ - :text, - :term_id - ].freeze - GLOSSARY_HOME = "/docs/reference/glossary/?all=true" - NESTED_TOOLTIPS = /{% (.*?text="(.*?)".*?) %}/ - NESTED_MARKDOWN_LINKS = /(\[(.*?)\]\(.*?\))/ - - def render(context) - term_info = glossary_term_info(context) - external_link = - term_info["full-link"] || - "#{GLOSSARY_HOME}#term-#{term_info["id"]}" - tooltip = term_info["short-description"]. - gsub(NESTED_TOOLTIPS, '\2'). - gsub(NESTED_MARKDOWN_LINKS, '\2'). - strip - - "" \ - "#{@args[:text] || term_info["name"]}" \ - "" \ - "#{tooltip}" \ - "" \ - "" - end - end - - # Tag to inject a glossary term definition into another HTML element - class Injector < Base - VALID_PARAM_NAMES = [ - :text, - :term_id, - :placeholder_id, - :length - ].freeze - RENDERED_DESCRIPTION_BLOCK = /.*

(.+)<\/p>.*/ - - def render(context) - term_info = glossary_term_info(context) - description = RENDERED_DESCRIPTION_BLOCK.match(include_snippet(context))[1] - - "" \ - "#{@args[:text] || term_info["name"]}" \ - "" \ - "#{description}" \ - "" \ - "" - end - end - end -end - -Liquid::Template.register_tag('glossary_definition', Jekyll::GlossaryTags::Definition) -Liquid::Template.register_tag('glossary_tooltip', Jekyll::GlossaryTags::Tooltip) -Liquid::Template.register_tag('glossary_injector', Jekyll::GlossaryTags::Injector) diff --git a/_plugins/liquify_filter.rb b/_plugins/liquify_filter.rb deleted file mode 100644 index 8c319156996af..0000000000000 --- a/_plugins/liquify_filter.rb +++ /dev/null @@ -1,10 +0,0 @@ -# Filter to force liquid parsing -module Jekyll - module LiquifyFilter - def liquify(input) - Liquid::Template.parse(input).render(@context) - end - end -end - -Liquid::Template.register_filter(Jekyll::LiquifyFilter) diff --git a/_sass/_code-styles.sass b/_sass/_code-styles.sass deleted file mode 100644 index 2a389574a8538..0000000000000 --- a/_sass/_code-styles.sass +++ /dev/null @@ -1,199 +0,0 @@ -/* Default gh-pages-blog css from https://github.com/thedereck/gh-pages-blog/blob/master/css/syntax.css */ -.highlight br - display: none - -.highlight - background: #ffffff - -.highlight .c - color: #999988 - font-style: italic - -.highlight .err - color: #a61717 - background-color: #e3d2d2 - -.highlight .k - font-weight: bold - -.highlight .o - font-weight: bold - -.highlight .cm - color: #999988 - font-style: italic - -.highlight .cp - color: #999999 - font-weight: bold - -.highlight .c1 - color: #999988 - font-style: italic - -.highlight .cs - color: #999999 - font-weight: bold - font-style: italic - -.highlight .gd - color: #000000 - background-color: #ffdddd - -.highlight .gd .x - color: #000000 - background-color: #ffaaaa - -.highlight .ge - font-style: italic - -.highlight .gr - color: #aa0000 - -.highlight .gh - color: #999999 - -.highlight .gi - color: #000000 - background-color: #ddffdd - -.highlight .gi .x - color: #000000 - background-color: #aaffaa - -.highlight .go - color: #888888 - -.highlight .gp - color: #555555 - -.highlight .gs - font-weight: bold - -.highlight .gu - color: #aaaaaa - -.highlight .gt - color: #aa0000 - -.highlight .kc - font-weight: bold - -.highlight .kd - font-weight: bold - -.highlight .kp - font-weight: bold - -.highlight .kr - font-weight: bold - -.highlight .kt - color: #445588 - font-weight: bold - -.highlight .m - color: #009999 - -.highlight .s - color: #d14 - -.highlight .na - color: #008080 - -.highlight .nb - color: #0086B3 - -.highlight .nc - color: #445588 - font-weight: bold - -.highlight .no - color: #008080 - -.highlight .ni - color: #800080 - -.highlight .ne - color: #990000 - font-weight: bold - -.highlight .nf - color: #990000 - font-weight: bold - -.highlight .nn - color: #555555 - -.highlight .nt - color: #000080 - -.highlight .nv - color: #008080 - -.highlight .ow - font-weight: bold - -.highlight .w - color: #bbbbbb - -.highlight .mf - color: #009999 - -.highlight .mh - color: #009999 - -.highlight .mi - color: #009999 - -.highlight .mo - color: #009999 - -.highlight .sb - color: #d14 - -.highlight .sc - color: #d14 - -.highlight .sd - color: #d14 - -.highlight .s2 - color: #d14 - -.highlight .se - color: #d14 - -.highlight .sh - color: #d14 - -.highlight .si - color: #d14 - -.highlight .sx - color: #d14 - -.highlight .sr - color: #009926 - -.highlight .s1 - color: #d14 - -.highlight .ss - color: #990073 - -.highlight .bp - color: #999999 - -.highlight .vc - color: #008080 - -.highlight .vg - color: #008080 - -.highlight .vi - color: #008080 - -.highlight .il - color: #009999 - diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000000000..00e77bd79be44 --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/blog/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes_28.md b/blog/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes_28.md deleted file mode 100644 index 07d3ffb9157bb..0000000000000 --- a/blog/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes_28.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -permalink: /blog/:year/:month/:title -layout: blog -title: Kubernetes Community Meeting Notes - 20160121 -date: Thursday, January 28, 2016 -pagination: - enabled: true ---- -#### January 21 - Configuration, Federation and Testing, oh my.  - - -Note taker: Rob Hirshfeld - - Use Case (10 min): [SFDC Paul Brown](https://docs.google.com/a/google.com/presentation/d/1MEI97efplr3f-GDX1GcWGfkEuGKKV-4niu27kHOeMLk/edit?usp=sharing_eid&ts=56a114f8) - - SIG Report - SIG-config and the story of [#18215](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link} - - - A[p](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}p[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[c](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}c[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[f](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[g](https://github.com/kubernetes/kubernetes/pull/18215) [I](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}N[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}K[8](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[,](https://github.com/kubernetes/kubernetes/pull/18215) [n](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[t](https://github.com/kubernetes/kubernetes/pull/18215) [d](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[p](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}l[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}y[m](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[n](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[f](https://github.com/kubernetes/kubernetes/pull/18215) [K](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}8[s](https://github.com/kubernetes/kubernetes/pull/18215) - - [T](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[p](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[c](https://github.com/kubernetes/kubernetes/pull/18215) [h](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[s](https://github.com/kubernetes/kubernetes/pull/18215) [b](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}r[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}u[s](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[f](https://github.com/kubernetes/kubernetes/pull/18215) [c](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[n](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}f[i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}g[u](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}r[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[n](https://github.com/kubernetes/kubernetes/pull/18215),[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[p](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[c](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[f](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[c](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}l[y](https://github.com/kubernetes/kubernetes/pull/18215) [p](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[r](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[m](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[r](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[z](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[](https://github.com/kubernetes/kubernetes/pull/18215)([a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}k[a](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[m](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}p[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[s](https://github.com/kubernetes/kubernetes/pull/18215))[. Needs:](https://github.com/kubernetes/kubernetes/pull/18215) - - - n[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[d](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[n](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}c[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}u[d](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[c](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[p](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[n](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}g[](https://github.com/kubernetes/kubernetes/pull/18215)([c](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}l[u](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[r](https://github.com/kubernetes/kubernetes/pull/18215) [n](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[m](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[s](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}p[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}c[e](https://github.com/kubernetes/kubernetes/pull/18215)) - - s[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[g](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}h[t](https://github.com/kubernetes/kubernetes/pull/18215) [c](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}u[s](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}m[i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}z[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[n (naming changes, but not major config)](https://github.com/kubernetes/kubernetes/pull/18215) - - [m](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}u[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}p[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}p[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[n](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[n](https://github.com/kubernetes/kubernetes/pull/18215) [h](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[w](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}d[o](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}h[i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[n](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}c[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}u[d](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[n](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}g[](https://github.com/kubernetes/kubernetes/pull/18215) - - - -a[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}l[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}w[i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[g](https://github.com/kubernetes/kubernetes/pull/18215) [e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}x[t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[r](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}l[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[r](https://github.com/kubernetes/kubernetes/pull/18215) [s](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[m](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}p[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[x](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[s](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[s](https://github.com/kubernetes/kubernetes/pull/18215). - - -P[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[S](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[t](https://github.com/kubernetes/kubernetes/pull/18215) [c](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}r[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[s](https://github.com/kubernetes/kubernetes/pull/18215) [i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[s](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[c](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[s](https://github.com/kubernetes/kubernetes/pull/18215) [w](https://github.com/kubernetes/kubernetes/pull/18215)/[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[b](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}l[e](https://github.com/kubernetes/kubernetes/pull/18215) [n](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[m](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[s](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}p[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}c[e](https://github.com/kubernetes/kubernetes/pull/18215) - - -[W](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[r](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}k[f](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}l[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}w[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}p[r](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[p](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[s](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[l](https://github.com/kubernetes/kubernetes/pull/18215) - - -[D](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[s](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[r](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[b](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}u[t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[d](https://github.com/kubernetes/kubernetes/pull/18215) [C](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}h[r](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[n](https://github.com/kubernetes/kubernetes/pull/18215). - - -C[h](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}l[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[g](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[s](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}h[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}c[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[f](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[g](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[d](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}c[r](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[e](https://github.com/kubernetes/kubernetes/pull/18215) [m](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}u[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}p[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[b](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}j[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}c[t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[n](https://github.com/kubernetes/kubernetes/pull/18215) [s](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[q](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}u[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[c](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e - - -T[r](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}y[i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[g](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}f[i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}g[u](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}r[e](https://github.com/kubernetes/kubernetes/pull/18215) [o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}u[t](https://github.com/kubernetes/kubernetes/pull/18215) [h](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[w](https://github.com/kubernetes/kubernetes/pull/18215) [b](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[n](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}c[e](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}h[e](https://github.com/kubernetes/kubernetes/pull/18215) [m](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[n](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}y[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}c[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[f](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[g](https://github.com/kubernetes/kubernetes/pull/18215) [o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}p[t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[s](https://github.com/kubernetes/kubernetes/pull/18215) [o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}u[t](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}h[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}r[e](https://github.com/kubernetes/kubernetes/pull/18215) [(](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}c[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}m[p](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[s](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[,](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[r](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}r[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}f[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}r[m](https://github.com/kubernetes/kubernetes/pull/18215),[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[n](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}b[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[/](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}c[)](https://github.com/kubernetes/kubernetes/pull/18215) - - -[G](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}l[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[s](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[](https://github.com/kubernetes/kubernetes/pull/18215)“[m](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}p[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[p](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}l[e](https://github.com/kubernetes/kubernetes/pull/18215) [w](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}h[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}r[e](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}h[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}y[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[r](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[”](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}k[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[p](https://github.com/kubernetes/kubernetes/pull/18215) [i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}m[p](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}l[e](https://github.com/kubernetes/kubernetes/pull/18215) - - -[Q](https://github.com/kubernetes/kubernetes/pull/18215): is there an opinion for the keystore sizing - - - -large size / data blob would not be appropriate - - -you can pull data(config) from another store for larger objects - - -[SIG Report - SIG-federation - progress on Ubernetes-Lite & Ubernetes design](https://github.com/kubernetes/kubernetes/pull/18215) - - - -[G](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}l[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}i[t](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}b[e](https://github.com/kubernetes/kubernetes/pull/18215) [a](https://github.com/kubernetes/kubernetes/pull/18215)b[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[o](https://github.com/kubernetes/kubernetes/pull/18215) [h](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[v](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}c[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}u[s](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}r[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}m[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}g[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}r[,](https://github.com/kubernetes/kubernetes/pull/18215) [s](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}o[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}y[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}u[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}c[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}n[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}f[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}d[e](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}r[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[e](https://github.com/kubernetes/kubernetes/pull/18215) [c](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}l[u](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[r](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[.  They will automatically distribute the pods.](https://github.com/kubernetes/kubernetes/pull/18215) - - -P[l](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[n](https://github.com/kubernetes/kubernetes/pull/18215) [i](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[o](https://github.com/kubernetes/kubernetes/pull/18215) [u](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[e](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}h[e](https://github.com/kubernetes/kubernetes/pull/18215) [s](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}a[m](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}A[P](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}I[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}f[o](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}r[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}t[h](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}m[a](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[t](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}e[r](https://github.com/kubernetes/kubernetes/pull/18215) [c](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}l[u](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}s[te](https://github.com/kubernetes/kubernetes/pull/18215){: .inline-link}r - - Quinton's Ubernetes Talk:  https://youtu.be/L2ZK24JojB4 - - Design for Ubernetes: https://github.com/kubernetes/kubernetes/pull/19313 - - - - Conformance testing Q+A [Isaac Hollander McCreery] - - - status on conformance testing for release process - - - expect to be forward compatible but not backwards - - is there interest for a sig-testing meeting - - testing needs to a higher priority for the project - - lots of focus on trying to make this a higher priority -To get involved in the Kubernetes community consider joining our [Slack channel](http://slack.k8s.io/), taking a look at the [Kubernetes project](https://github.com/kubernetes/) on GitHub, or join the [Kubernetes-dev Google group](https://groups.google.com/forum/#!forum/kubernetes-dev). If you’re really excited, you can do all of the above and join us for the next community conversation -- January 27th, 2016. Please add yourself or a topic you want to know about to the [agenda](https://docs.google.com/document/d/1VQDIAB0OqiSjIHI8AWMvSdceWhnz56jNpZrLs6o7NJY/edit) and get a calendar invitation by joining [this group](https://groups.google.com/forum/#!forum/kubernetes-community-video-chat). - - - -Still want more Kubernetes? Check out the [recording](https://www.youtube.com/watch?v=izQLFx_6kwY&feature=youtu.be&list=PL69nYSiGNLP1pkHsbPjzAewvMgGUpkCnJ) of this meeting and the growing of the archive of [Kubernetes Community Meetings](https://www.youtube.com/playlist?list=PL69nYSiGNLP1pkHsbPjzAewvMgGUpkCnJ). diff --git a/blog/index.html b/blog/index.html deleted file mode 100644 index 304b2f7cb4ad9..0000000000000 --- a/blog/index.html +++ /dev/null @@ -1,28 +0,0 @@ ---- -layout: blog ---- - - {% for post in paginator.posts %} -

{{ post.title }}

-

-

{{ post.date | date: "%B %d %Y"}}

-

-
- {{ post.content | markdownify }} -
- {% endfor %} - - - diff --git a/cn/README.md b/cn/README.md deleted file mode 100644 index 3bfbba8c777a7..0000000000000 --- a/cn/README.md +++ /dev/null @@ -1,18 +0,0 @@ -## 如何参与 Kubernetes 文档汉化工作 - -我们非常欢迎,非常希望您参与 Kubernetes 文档汉化做出贡献。 - -您可以单击屏幕右上角的 **Fork** 按钮,在您的 Github 账户中创建一外名为 *fork* 的存储库副本。在您的分支中进行更改,当您准备好将这些更改发送给我们时,请转到您的仓库创建新的 pull 请求,让我们知道这一点。 - -关于更多的贡献信息,请参阅: - -* [贡献于 Kubernetes 文档](http://kubernetes.io/editdocs/) -* [创建文档拉取请求](http://kubernetes.io/docs/home/contribute/create-pull-request/) -* [写一个新的话题](http://kubernetes.io/docs/contribute/write-new-topic/) -* [暂停您的文档更改](http://kubernetes.io/docs/home/contribute/stage-documentation-changes/) -* [更用页面模板](http://kubernetes.io/docs/home/contribute/page-templates/) -* [文档样式指南](http://kubernetes.io/docs/home/contribute/style-guide/) - -## 谢谢您! - -Kubernetes 在社区参与中茁壮成长,我们非常感谢您对我们的网站和文档的贡献! diff --git a/cn/_includes/code.html b/cn/_includes/code.html deleted file mode 100644 index 83a702785d636..0000000000000 --- a/cn/_includes/code.html +++ /dev/null @@ -1,26 +0,0 @@ -{% capture samplecode %}{% include_relative {{include.file}} %}{% endcapture %} -{% if include.k8slink %}{% capture ghlink %}https://raw.githubusercontent.com/kubernetes/kubernetes/blob/{{page.githubbranch}}{{include.k8slink}}{% endcapture %}{% endif %} -{% if include.ghlink %}{% capture ghlink %}https://raw.githubusercontent.com/kubernetes/website/{{page.docsbranch}}{{include.ghlink}}{% endcapture %}{% endif %} -{% capture mysample %} -```{{include.language}} -{{ samplecode | raw | strip }} -``` -{: id="{{include.file | handleize}}"} -{% endcapture %} - - - - - - - - - - - -
- {% if ghlink %}{% endif %} - {{include.file}} - {% if ghlink %}{% endif %} - -
{{ mysample | markdownify }}
diff --git a/cn/_includes/task-tutorial-prereqs.md b/cn/_includes/task-tutorial-prereqs.md deleted file mode 100644 index a9cf90d265958..0000000000000 --- a/cn/_includes/task-tutorial-prereqs.md +++ /dev/null @@ -1,4 +0,0 @@ -You need to have a Kubernetes cluster, and the kubectl command-line tool must -be configured to communicate with your cluster. If you do not already have a -cluster, you can create one by using -[Minikube](/docs/getting-started-guides/minikube). diff --git a/cn/_includes/templates/concept.md b/cn/_includes/templates/concept.md deleted file mode 100644 index cfd2c8eae9f2e..0000000000000 --- a/cn/_includes/templates/concept.md +++ /dev/null @@ -1,32 +0,0 @@ -{% if overview %} - -{{ overview }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='overview' purpose='provides an overview of this concept.' %} - -{% endif %} - -* TOC -{:toc} - -{% if body %} - -{{ body }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='body' purpose='supplies the body of the page content.' %} - -{% endif %} - - -{% if whatsnext %} - -## 开始下一步 - -{{ whatsnext }} - -{% endif %} - diff --git a/cn/_includes/templates/task.md b/cn/_includes/templates/task.md deleted file mode 100644 index e76cb7b117871..0000000000000 --- a/cn/_includes/templates/task.md +++ /dev/null @@ -1,55 +0,0 @@ -{% if overview %} - -{{ overview }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='overview' purpose='states, in one or two sentences, the purpose of this document' %} - -{% endif %} - - -* TOC -{: toc} - - -{% if prerequisites %} - -## Before you begin - -{{ prerequisites }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='prerequisites' heading='Before you begin' purpose='lists action prerequisites and knowledge prerequisites' %} - -{% endif %} - - -{% if steps %} - -{{ steps }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='steps' purpose='lists a sequence of numbered steps that accomplish the task.' %} - -{% endif %} - - -{% if discussion %} - -{{ discussion }} - -{% else %} - -{% endif %} - - -{% if whatsnext %} - -## What's next - -{{ whatsnext }} - -{% endif %} diff --git a/cn/_includes/templates/tutorial.md b/cn/_includes/templates/tutorial.md deleted file mode 100644 index b4c1faa0f10ef..0000000000000 --- a/cn/_includes/templates/tutorial.md +++ /dev/null @@ -1,68 +0,0 @@ -{% if overview %} - -{{ overview }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='overview' purpose='states, in one or two sentences, the purpose of this document' %} - -{% endif %} - - -* TOC -{: toc} - - -{% if objectives %} - -## Objectives - -{{ objectives }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='objectives' heading='Objectives' purpose='lists the objectives for this tutorial.' %} - -{% endif %} - - -{% if prerequisites %} - -## Before you begin - -{{ prerequisites }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='prerequisites' heading='Before you begin' purpose='lists action prerequisites and knowledge prerequisites' %} - -{% endif %} - - -{% if lessoncontent %} - -{{ lessoncontent }} - -{% else %} - -{% include templates/_errorthrower.md missing_block='lessoncontent' purpose='provides the lesson content for this tutorial.' %} - -{% endif %} - - -{% if cleanup %} - -## Cleaning up - -{{ cleanup }} - -{% endif %} - - -{% if whatsnext %} - -## What's next - -{{ whatsnext }} - -{% endif %} diff --git a/cn/_includes/user-guide-content-moved.md b/cn/_includes/user-guide-content-moved.md deleted file mode 100644 index a7ac1fb2fdf0e..0000000000000 --- a/cn/_includes/user-guide-content-moved.md +++ /dev/null @@ -1,2 +0,0 @@ -Kubernetes 文档的 [用户指南](/docs/user-guide/) 部分中的主题将被移动到 [任务](/docs/tasks/)、[教程](/docs/tutorials/)和 -[概念](/docs/concepts) 部分。 本主题的内容已转移到: diff --git a/cn/docs/tasks/inject-data-application/podpreset.md b/cn/docs/tasks/inject-data-application/podpreset.md deleted file mode 100644 index af28ac14c0d54..0000000000000 --- a/cn/docs/tasks/inject-data-application/podpreset.md +++ /dev/null @@ -1,124 +0,0 @@ ---- -approvers: -- jessfraz -title: 使用 PodPreset 将信息注入 Pods ---- - -在 pod 创建时,用户可以使用 `podpreset` 对象将 secrets、卷挂载和环境变量等信息注入其中。 -本文展示了一些 `PodPreset` 资源使用的示例。 -用户可以从[理解 Pod Presets](/docs/concepts/workloads/pods/podpreset/) 中了解 PodPresets 的整体情况。 - -* TOC -{:toc} - -## 创建 Pod Preset - -### 简单的 Pod Spec 示例 - -这里是一个简单的示例,展示了如何通过 Pod Preset 修改 Pod spec 。 - -**用户提交的 pod spec:** - -{% include code.html language="yaml" file="podpreset-pod.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-pod.yaml" %} - -**Pod Preset 示例:** - -{% include code.html language="yaml" file="podpreset-preset.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-preset.yaml" %} - -**通过准入控制器后的 Pod spec:** - -{% include code.html language="yaml" file="podpreset-merged.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-merged.yaml" %} - -### 带有 `ConfigMap` 的 Pod Spec 示例 - -这里的示例展示了如何通过 Pod Preset 修改 Pod spec,Pod Preset 中定义了 `ConfigMap` 作为环境变量取值来源。 - -**用户提交的 pod spec:** - -{% include code.html language="yaml" file="podpreset-pod.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-pod.yaml" %} - -**用户提交的 `ConfigMap`:** - -{% include code.html language="yaml" file="podpreset-configmap.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-configmap.yaml" %} - -**Pod Preset 示例:** - -{% include code.html language="yaml" file="podpreset-allow-db.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-allow-db.yaml" %} - -**通过准入控制器后的 Pod spec:** - -{% include code.html language="yaml" file="podpreset-allow-db-merged.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml" %} - -### 带有 Pod Spec 的 ReplicaSet 示例 - -以下示例展示了(通过 ReplicaSet 创建 pod 后)只有 pod spec 会被 Pod Preset 所修改。 - -**用户提交的 ReplicaSet:** - -{% include code.html language="yaml" file="podpreset-replicaset.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-replicaset.yaml" %} - -**Pod Preset 示例:** - -{% include code.html language="yaml" file="podpreset-preset.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-preset.yaml" %} - -**通过准入控制器后的 Pod spec:** - -注意 ReplicaSet spec 没有改变,用户必须检查单独的 pod 来验证 PodPreset 已被应用。 - -{% include code.html language="yaml" file="podpreset-replicaset-merged.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml" %} - -### 多 PodPreset 示例 - -这里的示例展示了如何通过多个 Pod 注入策略修改 Pod spec。 - -**用户提交的 pod spec:** - -{% include code.html language="yaml" file="podpreset-pod.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-pod.yaml" %} - -**Pod Preset 示例:** - -{% include code.html language="yaml" file="podpreset-preset.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-preset.yaml" %} - -**另一个 Pod Preset 示例:** - -{% include code.html language="yaml" file="podpreset-proxy.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-proxy.yaml" %} - -**通过准入控制器后的 Pod spec:** - -{% include code.html language="yaml" file="podpreset-multi-merged.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-multi-merged.yaml" %} - -### 冲突示例 - -这里的示例展示了 Pod Preset 与原 Pod 存在冲突时,Pod spec 不会被修改。 - -**用户提交的 pod spec:** - -{% include code.html language="yaml" file="podpreset-conflict-pod.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml" %} - -**Pod Preset 示例:** - -{% include code.html language="yaml" file="podpreset-conflict-preset.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml" %} - -**因存在冲突,通过准入控制器后的 Pod spec 不会改变:** - -{% include code.html language="yaml" file="podpreset-conflict-pod.yaml" ghlink="/cn/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml" %} - -**如果运行 `kubectl describe...` 用户会看到以下事件:** - -``` -$ kubectl describe ... -.... -Events: - FirstSeen LastSeen Count From SubobjectPath Reason Message - Tue, 07 Feb 2017 16:56:12 -0700 Tue, 07 Feb 2017 16:56:12 -0700 1 {podpreset.admission.kubernetes.io/podpreset-allow-database } conflict Conflict on pod preset. Duplicate mountPath /cache. -``` - -## 删除 Pod Preset - -一旦用户不再需要 pod preset,可以使用 `kubectl` 进行删除: - -```shell -$ kubectl delete podpreset allow-database -podpreset "allow-database" deleted -``` - diff --git a/config.toml b/config.toml new file mode 100644 index 0000000000000..006dc713877af --- /dev/null +++ b/config.toml @@ -0,0 +1,111 @@ +baseURL = "https://kubernetes.io" +title = "Kubernetes" + +defaultContentLanguage = "en" +defaultContentLanguageInSubdir = false +enableRobotsTXT = true + +disableKinds = ["taxonomy", "taxonomyTerm"] + +ignoreFiles = [ "^OWNERS$", "README.md", "^node_modules$" ] + +contentDir = "content/en" + +timeout = 3000 + +# Highlighting config. +pygmentsCodeFences = true +pygmentsUseClasses = false +# See https://help.farbox.com/pygments.html +pygmentsStyle = "emacs" + +[blackfriday] +hrefTargetBlank = true +fractions = false + +[frontmatter] +date = ["date", ":filename", "publishDate", "lastmod"] + +[permalinks] + blog = "/:section/:year/:month/:day/:slug/" + +# Be explicit about the output formats. We (currently) only want an RSS feed for the home page. +[outputs] +home = [ "HTML", "RSS"] +page = [ "HTML"] +section = [ "HTML"] + +[outputFormats] +[outputFormats.RSS] +baseName = "feed" + +[params] + +time_format_blog = "Monday, January 02, 2006" +description = "Production-Grade Container Orchestration" +showedit = true + +latest = "v1.10" + +fullversion = "v1.10.0" +version = "v1.10" +githubbranch = "master" +docsbranch = "master" +deprecated = false +currentUrl = "https://kubernetes.io/docs/home/" +nextUrl = "http://kubernetes-io-vnext-staging.netlify.com/" +githubWebsiteRepo = "github.com/kubernetes/website" + +[[params.versions]] +fullversion = "v1.10.0" +version = "v1.10" +githubbranch = "v1.10.0" +docsbranch = "release-1.10" +url = "https://kubernetes.io" + +[[params.versions]] +fullversion = "v1.9.0" +version = "v1.9" +githubbranch = "v1.9.0" +docsbranch = "release-1.9" +url = "https://v1-9.docs.kubernetes.io" + +[[params.versions]] +fullversion = "v1.8.4" +version = "v1.8" +githubbranch = "v1.8.4" +docsbranch = "release-1.8" +url = "https://v1-8.docs.kubernetes.io" + +[[params.versions]] +fullversion = "v1.7.6" +version = "v1.7" +githubbranch = "v1.7.6" +docsbranch = "release-1.7" +url = "https://v1-7.docs.kubernetes.io" + +[[params.versions]] +fullversion = "v1.6.8" +version = "v1.6" +githubbranch = "v1.6.8" +docsbranch = "release-1.6" +url = "https://v1-6.docs.kubernetes.io" + + +# Language definitions. + +[languages] +[languages.en] +title = "Kubernetes" +description = "Production-Grade Container Orchestration" +languageName ="English" +# Weight used for sorting. +weight = 1 +[languages.cn] +title = "Kubernetes" +description = "Production-Grade Container Orchestration" +languageName ="Chinese" +weight = 2 +contentDir = "content/cn" + + diff --git a/cn/docs/.gitkeep b/content/.gitkeep similarity index 100% rename from cn/docs/.gitkeep rename to content/.gitkeep diff --git a/cn/index.html b/content/cn/_index.html similarity index 65% rename from cn/index.html rename to content/cn/_index.html index 7443e05d59b61..0a8a7aa6138b7 100644 --- a/cn/index.html +++ b/content/cn/_index.html @@ -1,32 +1,12 @@ --- -layout: basic -cid: home +title: "生产级别的容器编排系统" +abstract: "自动化的容器部署、扩展和管理" +cid: "home" --- - -
-
-
- -

生产级别的容器编排系统

-
自动化的容器部署、扩展和管理
-
- - 尝试我们的互动教程 -
- - - - - - - -
- -
-
+

Kubernetes 是用于自动部署,扩展和管理容器化应用程序的开源系统。

@@ -34,23 +14,23 @@

Kubernetes 是用

-
+
- +

星际尺度

根据同样的原则设计,允许 Google 每周运行数十亿个容器,Kubernetes 可以在不增加您的 ops 团队的情况下进行弹性扩展。

-
+
- +

永不过时

无论您应用运行在本地还是运行于全球任何地域,Kubernetes 的灵活性都可以随着您的需求复杂度不断增加,还可以持续、轻松地对外提供服务。

-
+

随处运行

@@ -58,25 +38,22 @@

随处运行

-
- +

Kubernetes: 最后… 它是真正的云平台

Box 的联合创始人和服务架构师 Sam Ghods 发表了热情洋溢的演讲,随着使用 Kubernetes,我们首次有一个通用接口,可以建立真正的部署工具。

-

Kubernetes 特性

-
- +

自动包装

根据资源需求和其他约束自动放置容器,同时不会牺牲可用性,混合关键和最大努力的工作负载,以提高资源利用率并节省更多资源。

@@ -86,7 +63,6 @@

-
@@ -111,76 +86,68 @@

密钥

存储编排

自动安装您所选择的存储系统,无论是本地存储,如公有云提供商 GCPAWS, 还是网络存储系统 NFS, iSCSI, - Gluster, Ceph, Cinder, 或 Flocker。

-
-
-

批处理

-

除了服务之外,Kubernetes还可以管理您的批处理和 CI 工作负载,如果需要,替换出现故障的容器。

-
+ Gluster, Ceph, Cinder, 或 Flocker。

- -
+
+

批处理

+

除了服务之外,Kubernetes还可以管理您的批处理和 CI 工作负载,如果需要,替换出现故障的容器。

+
+
+ -
-
- -

实例探究

-
-
-

使用Kubernetes来重塑世界上最大的教育公司

- 阅读更多 -
-
-

Kubernetes at Box: 微服务的最大优势

- 阅读更多 -
-
-

在 eBay 内部转移到 OpenStack 上的 Kubernetes 和容器

- 阅读更多 -
-
-

将本地的集群迁移至 Kubernetes

- 观看视频 -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
探究所有的案例
-
+
+ +

实例探究

+
+
+

使用Kubernetes来重塑世界上最大的教育公司

+ 阅读更多 +
+
+

Kubernetes at Box: 微服务的最大优势

+ 阅读更多 +
+
+

在 eBay 内部转移到 OpenStack 上的 Kubernetes 和容器

+ 阅读更多 +
+
+

将本地的集群迁移至 Kubernetes

+ 观看视频 +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
探究所有的案例
+
- - - -
- - -
+ + + \ No newline at end of file diff --git a/cn/docs/tutorials/stateful-application/FETCH_HEAD b/content/cn/docs/.gitkeep similarity index 100% rename from cn/docs/tutorials/stateful-application/FETCH_HEAD rename to content/cn/docs/.gitkeep diff --git a/content/cn/docs/_index.md b/content/cn/docs/_index.md new file mode 100644 index 0000000000000..05b658bceaade --- /dev/null +++ b/content/cn/docs/_index.md @@ -0,0 +1,4 @@ +--- +title: Home +weight: 5 +--- diff --git a/cn/docs/admin/accessing-the-api.md b/content/cn/docs/admin/accessing-the-api.md similarity index 100% rename from cn/docs/admin/accessing-the-api.md rename to content/cn/docs/admin/accessing-the-api.md diff --git a/cn/docs/admin/authorization/index.md b/content/cn/docs/admin/authorization/_index.md similarity index 98% rename from cn/docs/admin/authorization/index.md rename to content/cn/docs/admin/authorization/_index.md index ff878b6da4955..92c3d2174da3a 100644 --- a/cn/docs/admin/authorization/index.md +++ b/content/cn/docs/admin/authorization/_index.md @@ -5,15 +5,16 @@ approvers: - deads2k - liggitt title: 概述 +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 学习有关 Kubernetes 授权的更多信息,包括有关使用支持的授权模块创建策略的详细信息。 -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} 在 Kubernetes 里,您必须经过身份验证(登录),才能授权您的请求(授予访问权限).。有关认证的信息,请参阅[访问控制概述](/docs/admin/access-the-api/)。 @@ -144,12 +145,12 @@ subjectaccessreview "" created 从版本 1.3 开始,配置由 kube-up.sh 创建的集群,使得 ABAC 授权模块处于启用状态。但是,其输入文件最初设置为允许所有用户执行所有操作,集群管理员需要编辑该文件,或者配置不同的授权器来限制用户可以执行的操作。 -{% endcapture %} -{% capture whatsnext %} +{{% /capture %}} +{{% capture whatsnext %}} * 要学习有关身份验证的更多信息,请参阅**身份验证**[控制访问 Kubernetes API](docs/admin/access-the-api/)。 * 要了解有关入学管理的更多信息,请参阅[使用 Admission 控制器](docs/admin/admission-controllers/)。 * -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/admin/authorization/abac.md b/content/cn/docs/admin/authorization/abac.md similarity index 96% rename from cn/docs/admin/authorization/abac.md rename to content/cn/docs/admin/authorization/abac.md index a78cd4d0d824d..4c3715e495faf 100644 --- a/cn/docs/admin/authorization/abac.md +++ b/content/cn/docs/admin/authorization/abac.md @@ -5,15 +5,16 @@ approvers: - deads2k - liggitt title: ABAC 模式 +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 基于属性的访问控制(Attribute-based access control - ABAC)定义了访问控制范例,其中通过使用将属性组合在一起的策略来向用户授予访问权限。 -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## 策略文件格式 @@ -114,7 +115,7 @@ Kubectl 使用 api-server 的 `/api` 和 `/apis` 端点进行协商客户端/服 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:unauthenticated", "readonly": true, "nonResourcePath": "*"}} ``` -[完整文件示例](http://releases.k8s.io/{{page.githubbranch}}/pkg/auth/authorizer/abac/example_policy_file.jsonl) +[完整文件示例](http://releases.k8s.io/{{< param "githubbranch" >}}/pkg/auth/authorizer/abac/example_policy_file.jsonl) ## 服务帐户的快速说明 @@ -137,5 +138,5 @@ system:serviceaccount::default 需要重新启动 apiserver 以获取新的策略行. -{% endcapture %} -{% include templates/concept.md %} +{{% /capture %}} + diff --git a/cn/docs/admin/authorization/webhook.md b/content/cn/docs/admin/authorization/webhook.md similarity index 97% rename from cn/docs/admin/authorization/webhook.md rename to content/cn/docs/admin/authorization/webhook.md index 5c4f7a13e455e..e80fed7dc297e 100644 --- a/cn/docs/admin/authorization/webhook.md +++ b/content/cn/docs/admin/authorization/webhook.md @@ -5,13 +5,14 @@ approvers: - deads2k - liggitt title: Webhook Mode +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} WebHook 是一种 HTTP 回调:某些条件下触发的 HTTP POST 请求;通过 HTTP POST 发送的简单事件通知。一个基于 web 应用实现的 WebHook 会在特定事件发生时把消息发送给特定的 URL 。 -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} 具体来说,当在判断用户权限时,`Webhook` 模式会使 Kubernetes 查询外部的 REST 服务。 ## 配置文件格式 @@ -137,6 +138,6 @@ contexts: 更多信息可以参考 uthorization.v1beta1 API 对象和 [webhook.go](https://git.k8s.io/kubernetes/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/webhook/webhook.go). -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/admin/bootstrap-tokens.md b/content/cn/docs/admin/bootstrap-tokens.md similarity index 99% rename from cn/docs/admin/bootstrap-tokens.md rename to content/cn/docs/admin/bootstrap-tokens.md index 11ce1c53d751f..4dfae1b85690a 100644 --- a/cn/docs/admin/bootstrap-tokens.md +++ b/content/cn/docs/admin/bootstrap-tokens.md @@ -4,8 +4,7 @@ approvers: title: 使用启动引导令牌(Bootstrap Tokens)认证 --- -* TOC -{:toc} +{{< toc >}} ## 概述 diff --git a/cn/docs/admin/cluster-large.md b/content/cn/docs/admin/cluster-large.md similarity index 77% rename from cn/docs/admin/cluster-large.md rename to content/cn/docs/admin/cluster-large.md index 5670f7e0aeb7a..b84e2477d486d 100644 --- a/cn/docs/admin/cluster-large.md +++ b/content/cn/docs/admin/cluster-large.md @@ -7,7 +7,7 @@ title: 创建大规模集群 ## 支持规格 -在 {{page.version}},Kubernetes支持最多5000节点规模的集群。 更具体地说,我们支持满足以下 *所有* 标准的配置: +在 {{< param "version" >}},Kubernetes支持最多5000节点规模的集群。 更具体地说,我们支持满足以下 *所有* 标准的配置: * 不超过5000节点 * 总共不超过15000个pod @@ -17,13 +17,13 @@ title: 创建大规模集群
* TOC -{:toc} +{{< toc >}} ## 创建 集群是一组运行Kubernetes代理组件的节点(物理或虚拟机),它们被 "master" (集群管理平面)所管理。 -一般来说,集群的节点数量通过平台相关的 `config-default.sh` 文件中的 `NUM_NODES` 值来控制,(例如,详见 [GCE's `config-default.sh`](http://releases.k8s.io/{{page.githubbranch}}/cluster/gce/config-default.sh))。 +一般来说,集群的节点数量通过平台相关的 `config-default.sh` 文件中的 `NUM_NODES` 值来控制,(例如,详见 [GCE's `config-default.sh`](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/gce/config-default.sh))。 对很多云提供商来说,单纯地修改`NUM_NODES` 为一个非常大的值,可能会导致集群的创建脚本失败。 例如,在GCE中部署时,会因配额不足,导致集群启动失败。 @@ -78,7 +78,7 @@ AWS使用的规格为: ### 插件的资源占用 -为防止 [集群插件](https://releases.k8s.io/{{page.githubbranch}}/cluster/addons) 耗尽节点资源引起内存泄漏或其他资源问题, Kubernetes 设置了插件容器资源的上限,来限制其对CPU和内存资源的占用 (参考 PR [#10653](http://pr.k8s.io/10653/files) 和 [#10778](http://pr.k8s.io/10778/files))。 +为防止 [集群插件](https://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons) 耗尽节点资源引起内存泄漏或其他资源问题, Kubernetes 设置了插件容器资源的上限,来限制其对CPU和内存资源的占用 (参考 PR [#10653](http://pr.k8s.io/10653/files) 和 [#10778](http://pr.k8s.io/10778/files))。 例如: @@ -97,14 +97,14 @@ AWS使用的规格为: 为了避免集群插件的资源问题,创建多节点的集群时,考虑以下几点: * 当扩大集群规模时,如果涉及,相应扩大以下插件的内存和CPU限制 (通过一个实例处理整个集群,因此其内存和CPU使用量往往与集群的大小/负载成比例增长): - * [InfluxDB 和 Grafana](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/cluster-monitoring/influxdb/influxdb-grafana-controller.yaml) - * [kubedns, dnsmasq, 和 sidecar](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/dns/kubedns-controller.yaml.in) - * [Kibana](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/fluentd-elasticsearch/kibana-controller.yaml) + * [InfluxDB 和 Grafana](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/cluster-monitoring/influxdb/influxdb-grafana-controller.yaml) + * [kubedns, dnsmasq, 和 sidecar](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/dns/kubedns-controller.yaml.in) + * [Kibana](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/fluentd-elasticsearch/kibana-controller.yaml) * 当扩大集群规模时,如果涉及,相应扩大以下插件副本数 (每个组件有多个副本,因此增加副本将有助于处理增加的负载,但是,由于每个副本的负载也略有增加,也应考虑提高CPU /内存上限): - * [elasticsearch](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/fluentd-elasticsearch/es-controller.yaml) + * [elasticsearch](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/fluentd-elasticsearch/es-controller.yaml) * 当扩大集群规模时,如果涉及,略微扩大以下插件的内存和CPU限制 (每个节点一个副本, 但是CPU/内存使用随集群的大小/负载增长变化不明显): - * [FluentD with ElasticSearch Plugin](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml) - * [FluentD with GCP Plugin](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/fluentd-gcp/fluentd-gcp-ds.yaml) + * [FluentD with ElasticSearch Plugin](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml) + * [FluentD with GCP Plugin](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/fluentd-gcp/fluentd-gcp-ds.yaml) Heapster的资源限制是基于集群的初始规模动态设置的 (参考 [#16185](http://issue.k8s.io/16185) 和 [#22940](http://issue.k8s.io/22940))。 当发现Heapster资源耗尽,应考虑调整计算Heapster内存请求的公式 (参考上述PR)。 diff --git a/cn/docs/admin/daemon.yaml b/content/cn/docs/admin/daemon.yaml similarity index 100% rename from cn/docs/admin/daemon.yaml rename to content/cn/docs/admin/daemon.yaml diff --git a/cn/docs/admin/high-availability/index.md b/content/cn/docs/admin/high-availability/_index.md similarity index 98% rename from cn/docs/admin/high-availability/index.md rename to content/cn/docs/admin/high-availability/_index.md index 2994680cfafdd..d0f624c812e49 100644 --- a/cn/docs/admin/high-availability/index.md +++ b/content/cn/docs/admin/high-availability/_index.md @@ -13,8 +13,7 @@ title: 构建高可用集群 此外,当前在我们的端到端(e2e)测试环境中,没有对Kubernetes高可用的支持进行连续测试。我们将会增加这个连续测试项,但当前对单节点master的安装测试得更加严格。 -* TOC -{:toc} +{{< toc >}} ## 概览 @@ -53,7 +52,7 @@ title: 构建高可用集群 如果你是从标准的Kubernetes安装扩展而来,那么`kubelet`二进制文件应该已经存在于你的系统中。你可以运行`which kubelet`来判断是否确实安装了这个二进制文件。如果没有安装的话,你应该手动安装 [kubelet binary](https://storage.googleapis.com/kubernetes-release/release/v0.19.3/bin/linux/amd64/kubelet), -[kubelet init file](http://releases.k8s.io/{{page.githubbranch}}/cluster/saltbase/salt/kubelet/initd) 和 [default-kubelet](/docs/admin/high-availability/default-kubelet)脚本。 +[kubelet init file](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/saltbase/salt/kubelet/initd) 和 [default-kubelet](/docs/admin/high-availability/default-kubelet)脚本。 如果使用monit,你还需要安装monit守护程序(`apt-get install monit`)以及[monit-kubelet](/docs/admin/high-availability/monit-kubelet) 和 [monit-docker](/docs/admin/high-availability/monit-docker) 配置。 diff --git a/cn/docs/admin/kube-apiserver.md b/content/cn/docs/admin/kube-apiserver.md similarity index 100% rename from cn/docs/admin/kube-apiserver.md rename to content/cn/docs/admin/kube-apiserver.md diff --git a/cn/docs/admin/kubelet-authentication-authorization.md b/content/cn/docs/admin/kubelet-authentication-authorization.md similarity index 99% rename from cn/docs/admin/kubelet-authentication-authorization.md rename to content/cn/docs/admin/kubelet-authentication-authorization.md index 4df5a3654911c..fbd12fa93384b 100644 --- a/cn/docs/admin/kubelet-authentication-authorization.md +++ b/content/cn/docs/admin/kubelet-authentication-authorization.md @@ -4,8 +4,7 @@ approvers: title: Kubelet authentication/authorization --- -* TOC -{:toc} +{{< toc >}} ## Overview diff --git a/cn/docs/admin/kubelet-tls-bootstrapping.md b/content/cn/docs/admin/kubelet-tls-bootstrapping.md similarity index 99% rename from cn/docs/admin/kubelet-tls-bootstrapping.md rename to content/cn/docs/admin/kubelet-tls-bootstrapping.md index 92abe801d6d6a..e195748965c66 100644 --- a/cn/docs/admin/kubelet-tls-bootstrapping.md +++ b/content/cn/docs/admin/kubelet-tls-bootstrapping.md @@ -6,8 +6,7 @@ approvers: title: TLS bootstrapping --- -* TOC -{:toc} +{{< toc >}} ## Overview diff --git a/cn/docs/admin/multiple-zones.md b/content/cn/docs/admin/multiple-zones.md similarity index 99% rename from cn/docs/admin/multiple-zones.md rename to content/cn/docs/admin/multiple-zones.md index daf2d53d86ef5..5b01b9bf3b25e 100644 --- a/cn/docs/admin/multiple-zones.md +++ b/content/cn/docs/admin/multiple-zones.md @@ -10,7 +10,7 @@ title: 多区域运行 Kubernetes 从v1.2开始支持将集群运行在多个故障域中。 (GCE 中称其为 "区(Zones)", AWS 中称其为 "可用区(Availability Zones)",这里我们也称其为 "区")。 -它是广泛意义上的集群联邦特性的轻量级版本 (之前被称为 ["Ubernetes"](https://github.com/kubernetes/community/blob/{{page.githubbranch}}/contributors/design-proposals/multicluster/federation.md))。 +它是广泛意义上的集群联邦特性的轻量级版本 (之前被称为 ["Ubernetes"](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/design-proposals/multicluster/federation.md))。 完整的集群联邦能够将多个分别运行在不同区或云供应商(或本地数据中心)的集群集中管理。 然而,很多用户只是希望通过将单一云供应商上的Kubernetes集群运行在多个区域,来提高集群的可用性, 这就是1.2版本中提供的对多区域的支持。 @@ -20,8 +20,7 @@ Kubernetes 从v1.2开始支持将集群运行在多个故障域中。 目前只有GCE和AWS自动支持 (尽管在其他云甚至裸机上,也很容易通过为节点和卷添加合适的标签来实现类似的支持)。 -* TOC -{:toc} +{{< toc >}} ## 功能 diff --git a/cn/docs/admin/node-conformance.md b/content/cn/docs/admin/node-conformance.md similarity index 93% rename from cn/docs/admin/node-conformance.md rename to content/cn/docs/admin/node-conformance.md index 91af9fde637dd..1aa9be2412939 100644 --- a/cn/docs/admin/node-conformance.md +++ b/content/cn/docs/admin/node-conformance.md @@ -5,7 +5,7 @@ title: 节点设置校验 --- * TOC -{:toc} +{{< toc >}} ## 节点合规性测试 @@ -73,7 +73,7 @@ sudo docker run -it --rm --privileged --net=host \ k8s.gcr.io/node-test:0.2 ``` -节点合规性测试是[节点端到端测试](https://github.com/kubernetes/community/blob/{{page.githubbranch}}/contributors/devel/e2e-node-tests.md)的一个容器化的版本。 +节点合规性测试是[节点端到端测试](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/devel/e2e-node-tests.md)的一个容器化的版本。 默认情况下, 它会运行所有的合规性测试用例。 理论上,只要合理地配置容器和挂载所需的卷,就可以运行任何的节点端到端测试用例。 但是这里 **强烈建议只运行合规性测试**,因为运行非合规性测试需要很多复杂的配置。 diff --git a/cn/docs/admin/ovs-networking.md b/content/cn/docs/admin/ovs-networking.md similarity index 100% rename from cn/docs/admin/ovs-networking.md rename to content/cn/docs/admin/ovs-networking.md diff --git a/cn/docs/admin/service-accounts-admin.md b/content/cn/docs/admin/service-accounts-admin.md similarity index 100% rename from cn/docs/admin/service-accounts-admin.md rename to content/cn/docs/admin/service-accounts-admin.md diff --git a/cn/docs/concepts/architecture/cloud-controller.md b/content/cn/docs/concepts/architecture/cloud-controller.md similarity index 100% rename from cn/docs/concepts/architecture/cloud-controller.md rename to content/cn/docs/concepts/architecture/cloud-controller.md diff --git a/cn/docs/concepts/architecture/master-node-communication.md b/content/cn/docs/concepts/architecture/master-node-communication.md similarity index 99% rename from cn/docs/concepts/architecture/master-node-communication.md rename to content/cn/docs/concepts/architecture/master-node-communication.md index 41db6abf44f71..f99d9ed47ad29 100644 --- a/cn/docs/concepts/architecture/master-node-communication.md +++ b/content/cn/docs/concepts/architecture/master-node-communication.md @@ -7,8 +7,7 @@ approvers: title: Master 节点通信 --- -* TOC -{:toc} +{{< toc >}} ## 概览 diff --git a/cn/docs/concepts/architecture/nodes.md b/content/cn/docs/concepts/architecture/nodes.md similarity index 99% rename from cn/docs/concepts/architecture/nodes.md rename to content/cn/docs/concepts/architecture/nodes.md index da999dd7a600d..954e5b3c6b12f 100644 --- a/cn/docs/concepts/architecture/nodes.md +++ b/content/cn/docs/concepts/architecture/nodes.md @@ -11,8 +11,7 @@ redirect_from: - "/docs/concepts/nodes/node.html" --- -* TOC -{:toc} +{{< toc >}} ## Node 是什么? @@ -231,4 +230,4 @@ spec: Node 是 Kubernetes REST API 的顶级资源。更多关于 API 对象的细节可以在这里找到: [Node API -object](/docs/api-reference/{{page.version}}/#node-v1-core).`` +object](/docs/api-reference/{{< param "version" >}}/#node-v1-core).`` diff --git a/cn/docs/concepts/cluster-administration/addons.md b/content/cn/docs/concepts/cluster-administration/addons.md similarity index 100% rename from cn/docs/concepts/cluster-administration/addons.md rename to content/cn/docs/concepts/cluster-administration/addons.md diff --git a/cn/docs/concepts/cluster-administration/certificates.md b/content/cn/docs/concepts/cluster-administration/certificates.md similarity index 99% rename from cn/docs/concepts/cluster-administration/certificates.md rename to content/cn/docs/concepts/cluster-administration/certificates.md index 6de8e29fdad46..c70f17b7431a7 100644 --- a/cn/docs/concepts/cluster-administration/certificates.md +++ b/content/cn/docs/concepts/cluster-administration/certificates.md @@ -4,8 +4,7 @@ cn-approvers: title: 证书 --- -* TOC -{:toc} +{{< toc >}} ## 创建证书 diff --git a/cn/docs/concepts/cluster-administration/cloud-providers.md b/content/cn/docs/concepts/cluster-administration/cloud-providers.md similarity index 98% rename from cn/docs/concepts/cluster-administration/cloud-providers.md rename to content/cn/docs/concepts/cluster-administration/cloud-providers.md index 130acd29162b1..2b9721d3fe4ba 100644 --- a/cn/docs/concepts/cluster-administration/cloud-providers.md +++ b/content/cn/docs/concepts/cluster-administration/cloud-providers.md @@ -1,12 +1,13 @@ --- title: 云供应商 +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 本文介绍了如何管理运行在特定云供应商上的 Kubernetes 集群。 -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} # AWS 本节介绍在 Amazon Web Services 上运行 Kubernetes 时可以使用的所有配置。 @@ -103,6 +104,6 @@ Kubernetes 利用 OpenStack 服务目录对它知道如何使用的服务进行 [BlockStorage] bs-version=v2 ``` -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/concepts/cluster-administration/cluster-administration-overview.md b/content/cn/docs/concepts/cluster-administration/cluster-administration-overview.md similarity index 96% rename from cn/docs/concepts/cluster-administration/cluster-administration-overview.md rename to content/cn/docs/concepts/cluster-administration/cluster-administration-overview.md index 9f6fbf0f9ec81..d21cc0bb1b877 100644 --- a/cn/docs/concepts/cluster-administration/cluster-administration-overview.md +++ b/content/cn/docs/concepts/cluster-administration/cluster-administration-overview.md @@ -4,14 +4,15 @@ approvers: - lavalamp title: 集群管理概述 +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 集群管理概述面向任何创建和管理 Kubernetes 集群的读者人群。我们假设你对 [用户指南](/docs/user-guide/)中的概念有一些熟悉。 -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## 规划集群 @@ -81,6 +82,6 @@ title: 集群管理概述 * [记录和监控集群活动](/docs/concepts/cluster-administration/logging/) 阐述了Kubernetes 的日志如何工作以及怎样实现。 -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/concepts/cluster-administration/device-plugins.md b/content/cn/docs/concepts/cluster-administration/device-plugins.md similarity index 91% rename from cn/docs/concepts/cluster-administration/device-plugins.md rename to content/cn/docs/concepts/cluster-administration/device-plugins.md index 9ba08c89155ab..1792960105ae1 100644 --- a/cn/docs/concepts/cluster-administration/device-plugins.md +++ b/content/cn/docs/concepts/cluster-administration/device-plugins.md @@ -2,20 +2,21 @@ approvers: title: 设备插件 description: 使用 Kubernetes 设备插件框架来为 GPUs、 NICs、 FPGAs、 InfiniBand 和其他类似的需要供应商特别设置的资源开发插件。 +content_template: templates/concept --- -{% include feature-state-alpha.md %} +{{< feature-state state="alpha" >}} -{% capture overview %} +{{% capture overview %}} 从1.8版本开始,Kubernetes 提供了一套 [设备插件框架](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/resource-management/device-plugin.md), 使得供应商能够在不改动 Kubernetes 核心代码的情况下,向 kubelet 发布它们的资源。 供应商可以实现一个手动或以 DaemonSet 形式部署的插件,而不是编写自定义的 Kubernetes 代码。 插件的目标设备包括 GPUs、 高性能 NICs、 FPGAs、 InfiniBand 和其他类似的可能需要供应商特定的初始化和设置的计算资源。 -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## 设备插件注册 @@ -41,7 +42,7 @@ service Registration { 例如, 设备插件注册 `vendor-domain/foo` 到 kubelet , 并上报了节点上的两个健康的设备后,节点状态将更新, 发布2个 `vendor-domain/foo` 。 -然后,开发者可以在 [容器](/docs/api-reference/{{page.version}}/#container-v1-core) +然后,开发者可以在 [容器](/docs/api-reference/{{< param "version" >}}/#container-v1-core) 规格中通过使用与 [不透明整数型资源](/docs/tasks/configure-pod-container/opaque-integer-resource/) 中同样的流程来请求使用设备。 @@ -84,13 +85,13 @@ Kubernetes能够重新启动 Pods 。 否则就需要额外的设备插件故障 目录 `/var/lib/kubelet/device-plugins` 需要访问特权, 所以设备插件必须在特权的安全上下文环境下运行。 如果设备插件以 DaemonSet 形式运行, `/var/lib/kubelet/device-plugins` -目录必须在插件的 [PodSpec](/docs/api-reference/{{page.version}}/#podspec-v1-core) 中以 [Volume](/docs/api-reference/{{page.version}}/#volume-v1-core) 的形式挂载。 +目录必须在插件的 [PodSpec](/docs/api-reference/{{< param "version" >}}/#podspec-v1-core) 中以 [Volume](/docs/api-reference/{{< param "version" >}}/#volume-v1-core) 的形式挂载。 ## 示例 设备插件实现的示例,参考 [基于 COS 操作系统的 nvidia GPU 设备插件](https://github.com/GoogleCloudPlatform/container-engine-accelerators/tree/master/cmd/nvidia_gpu)。 -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/concepts/cluster-administration/federation.md b/content/cn/docs/concepts/cluster-administration/federation.md similarity index 96% rename from cn/docs/concepts/cluster-administration/federation.md rename to content/cn/docs/concepts/cluster-administration/federation.md index 752a4e30ce286..649e7b261c949 100644 --- a/cn/docs/concepts/cluster-administration/federation.md +++ b/content/cn/docs/concepts/cluster-administration/federation.md @@ -1,12 +1,13 @@ --- title: 联邦 +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 本页面阐明了为何以及如何使用联邦创建Kubernetes集群。 -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## 为何使用联邦 联邦可以使多个集群的管理简单化。它提供了两个主要构件模块: @@ -104,13 +105,13 @@ Kubernetes集群数量选择也许是一个相对静止的选择,因为对其 最后,如果你的集群需求超过一个Kubernetes集群推荐的最大节点数,那么你可能需要更多的集群。Kubernetes1.3版本支持多达1000个节点的集群规模。 -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} -* 进一步学习[联邦提案](https://github.com/kubernetes/community/blob/{{page.githubbranch}}/contributors/design-proposals/multicluster/federation.md)。 +{{% capture whatsnext %}} +* 进一步学习[联邦提案](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/design-proposals/multicluster/federation.md)。 * 集群联邦参考该[配置指导](/docs/tutorials/federation/set-up-cluster-federation-kubefed/)。 * 查看[Kubecon2016浅谈联邦](https://www.youtube.com/watch?v=pq9lbkmxpS8) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/concepts/cluster-administration/proxies.md b/content/cn/docs/concepts/cluster-administration/proxies.md similarity index 94% rename from cn/docs/concepts/cluster-administration/proxies.md rename to content/cn/docs/concepts/cluster-administration/proxies.md index 76637b7a581cc..5ebaca61ed412 100644 --- a/cn/docs/concepts/cluster-administration/proxies.md +++ b/content/cn/docs/concepts/cluster-administration/proxies.md @@ -1,12 +1,13 @@ --- title: Kubernetes 中的代理 +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 本文讲述了 Kubernetes 中所使用的代理。 -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## 代理 @@ -58,6 +59,6 @@ Kubernetes 用户通常只需要关心前两种类型的代理,集群管理员 代理已经取代重定向功能,重定向已被弃用。 -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/concepts/cluster-administration/sysctl-cluster.md b/content/cn/docs/concepts/cluster-administration/sysctl-cluster.md similarity index 97% rename from cn/docs/concepts/cluster-administration/sysctl-cluster.md rename to content/cn/docs/concepts/cluster-administration/sysctl-cluster.md index 9476750d551fa..3f204dee521c0 100644 --- a/cn/docs/concepts/cluster-administration/sysctl-cluster.md +++ b/content/cn/docs/concepts/cluster-administration/sysctl-cluster.md @@ -4,8 +4,7 @@ approvers: title: Kubernetes集群中使用Sysctls --- -* TOC -{:toc} +{{< toc >}} 这篇文章描述了如何在Kubernetes集群中使用Sysctls。 @@ -40,7 +39,7 @@ $ sudo sysctl -a Sysctls中非命名空间级的被称为 _节点级_ ,其必须由集群管理员手动设置,要么通过节点的底层Linux分布方式(例如,通过 `/etc/sysctls.conf`),亦或在特权容器中使用Daemonset。 **注意**: 这是很好的做法,考虑在一个集群里给有特殊sysctl的节点设置为 _污点_ ,并且给他们安排仅需要这些sysctl设置的pods。 建议采用Kubernetes [_污点和容点_ -特征](/docs/user-guide/kubectl/{{page.version}}/#taint) 来实现。 +特征](/docs/user-guide/kubectl/{{< param "version" >}}/#taint) 来实现。 ## 安全的 vs. 不安全的 Sysctls diff --git a/cn/docs/concepts/configuration/commands.yaml b/content/cn/docs/concepts/configuration/commands.yaml similarity index 100% rename from cn/docs/concepts/configuration/commands.yaml rename to content/cn/docs/concepts/configuration/commands.yaml diff --git a/cn/docs/concepts/configuration/manage-compute-resources-container.md b/content/cn/docs/concepts/configuration/manage-compute-resources-container.md similarity index 94% rename from cn/docs/concepts/configuration/manage-compute-resources-container.md rename to content/cn/docs/concepts/configuration/manage-compute-resources-container.md index 341706ef10d1e..78ddbf153c89f 100644 --- a/cn/docs/concepts/configuration/manage-compute-resources-container.md +++ b/content/cn/docs/concepts/configuration/manage-compute-resources-container.md @@ -1,15 +1,16 @@ --- title: Managing Compute Resources for Containers +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 当您定义 [Pod](/docs/user-guide/pods) 的时候可以选择为每个容器指定需要的 CPU 和内存(RAM)大小。当为容器指定了资源请求后,调度器就能够更好的判断出将容器调度到哪个节点上。如果您还为容器指定了资源限制,节点上的资源就可以按照指定的方式做竞争。关于资源请求和限制的不同点和更多资料请参考 [Resource QoS](https://git.k8s.io/community/contributors/design-proposals/resource-qos.md)。 -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## 资源类型 @@ -108,7 +109,7 @@ spec: Pod 的资源使用情况被报告为 Pod 状态的一部分。 -如果为集群配置了 [可选监控](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/cluster-monitoring/README.md),则可以从监控系统检索 Pod 资源的使用情况。 +如果为集群配置了 [可选监控](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/cluster-monitoring/README.md),则可以从监控系统检索 Pod 资源的使用情况。 ## 疑难解答 @@ -159,7 +160,7 @@ Allocated resources: 通过查看 `Pods` 部分,您将看到哪些 Pod 占用的节点上的资源。 -Pod 可用的资源量小于节点容量,因为系统守护程序使用一部分可用资源。 [NodeStatus](/docs/resources-reference/{{page.version}}/#nodestatus-v1-core) 的 `allocatable` 字段给出了可用于 Pod 的资源量。有关更多信息,请参阅 [节点可分配资源](https://git.k8s.io/community/contributors/design-proposals/node-allocatable.md)。 +Pod 可用的资源量小于节点容量,因为系统守护程序使用一部分可用资源。 [NodeStatus](/docs/resources-reference/{{< param "version" >}}/#nodestatus-v1-core) 的 `allocatable` 字段给出了可用于 Pod 的资源量。有关更多信息,请参阅 [节点可分配资源](https://git.k8s.io/community/contributors/design-proposals/node-allocatable.md)。 可以将 [资源配额](/docs/concepts/policy/resource-quotas/) 功能配置为限制可以使用的资源总量。如果与 namespace 配合一起使用,就可以防止一个团队占用所有资源。 @@ -209,10 +210,10 @@ Events: 您可以使用 `kubectl get pod` 命令加上 `-o go-template=...` 选项来获取之前终止容器的状态。 -```shell{% raw %} +```shell [13:59:01] $ kubectl 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]]{% endraw %} +LastState: map[terminated:map[exitCode:137 reason:OOM Killed startedAt:2015-07-07T20:58:43Z finishedAt:2015-07-07T20:58:43Z containerID:docker://0e4095bba1feccdfe7ef9fb6ebffe972b4b14285d5acdec6f0d3ae8a22fad8b2]] ``` 您可以看到容器因为 `reason:OOM killed` 被终止,`OOM` 表示 Out Of Memory。 @@ -278,21 +279,21 @@ spec: 在 kubernetes 1.5 版本中仅允许在容器上指定资源量。计划改进对所有容器在 Pod 中共享资源的计量,如 [emptyDir volume](/docs/concepts/storage/volumes/#emptydir)。 -在 kubernetes 1.5 版本中仅支持容器对 CPU 和内存的申请和限制。计划增加新的资源类型,包括节点磁盘空间资源和一个可支持自定义 [资源类型](https://github.com/kubernetes/community/blob/{{page.githubbranch}}/contributors/design-proposals/resources.md) 的框架。 +在 kubernetes 1.5 版本中仅支持容器对 CPU 和内存的申请和限制。计划增加新的资源类型,包括节点磁盘空间资源和一个可支持自定义 [资源类型](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/design-proposals/resources.md) 的框架。 Kubernetes 通过支持通过多级别的 [服务质量](http://issue.k8s.io/168) 来支持资源的过度使用。 在 kubernetes 1.5 版本中,一个 CPU 单位在不同的云提供商和同一云提供商的不同机器类型中的意味都不同。例如,在 AWS 上,节点的容量报告为 [ECU](http://aws.amazon.com/ec2/faqs/),而在 GCE 中报告为逻辑内核。我们计划修改 cpu 资源的定义,以便在不同的提供商和平台之间保持一致。 -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} - 获取将 [CPU 和内存资源分配给容器](/docs/tasks/configure-pod-container/assign-cpu-ram-container/) 的实践经验 -- [容器](/docs/api-reference/{{page.version}}/#container-v1-core) -- [ResourceRequirements](/docs/resources-reference/{{page.version}}/#resourcerequirements-v1-core) +- [容器](/docs/api-reference/{{< param "version" >}}/#container-v1-core) +- [ResourceRequirements](/docs/resources-reference/{{< param "version" >}}/#resourcerequirements-v1-core) + +{{% /capture %}} -{% endcapture %} -{% include templates/concept.md %} diff --git a/cn/docs/concepts/configuration/pod-with-node-affinity.yaml b/content/cn/docs/concepts/configuration/pod-with-node-affinity.yaml similarity index 100% rename from cn/docs/concepts/configuration/pod-with-node-affinity.yaml rename to content/cn/docs/concepts/configuration/pod-with-node-affinity.yaml diff --git a/cn/docs/concepts/configuration/pod-with-pod-affinity.yaml b/content/cn/docs/concepts/configuration/pod-with-pod-affinity.yaml similarity index 100% rename from cn/docs/concepts/configuration/pod-with-pod-affinity.yaml rename to content/cn/docs/concepts/configuration/pod-with-pod-affinity.yaml diff --git a/cn/docs/concepts/configuration/pod.yaml b/content/cn/docs/concepts/configuration/pod.yaml similarity index 100% rename from cn/docs/concepts/configuration/pod.yaml rename to content/cn/docs/concepts/configuration/pod.yaml diff --git a/cn/docs/concepts/configuration/secret.md b/content/cn/docs/concepts/configuration/secret.md similarity index 99% rename from cn/docs/concepts/configuration/secret.md rename to content/cn/docs/concepts/configuration/secret.md index c8c9319485a3e..fd1a9d03779fd 100644 --- a/cn/docs/concepts/configuration/secret.md +++ b/content/cn/docs/concepts/configuration/secret.md @@ -6,8 +6,7 @@ title: Secret `Secret` 对象类型用来保存敏感信息,例如密码、OAuth 令牌和 ssh key。将这些信息放在 `secret` 中比放在 `pod` 的定义或者 docker 镜像中来说更加安全和灵活。参阅 [Secret 设计文档](https://git.k8s.io/community/contributors/design-proposals/secrets.md) 获取更多详细信息。 -* TOC -{:toc} +{{< toc >}} ## Secret 概览 Secret 是一种包含少量敏感信息例如密码、token 或 key 的对象。这样的信息可能会被放在 Pod spec 中或者镜像中;将其放在一个 secret 对象中可以更好地控制它的用途,并降低意外暴露的风险。 diff --git a/cn/docs/concepts/containers/container-environment-variables.md b/content/cn/docs/concepts/containers/container-environment-variables.md similarity index 84% rename from cn/docs/concepts/containers/container-environment-variables.md rename to content/cn/docs/concepts/containers/container-environment-variables.md index 354115ddea5a5..6b1c49f3a2945 100644 --- a/cn/docs/concepts/containers/container-environment-variables.md +++ b/content/cn/docs/concepts/containers/container-environment-variables.md @@ -3,17 +3,18 @@ approvers: - mikedanese - thockin title: 容器环境变量 +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 本文介绍容器环境中对容器可用的资源。 -{% endcapture %} +{{% /capture %}} -{:toc} +{{< toc >}} -{% capture body %} +{{% capture body %}} ## 容器环境 @@ -47,15 +48,15 @@ FOO_SERVICE_HOST=<服务所在的主机地址> FOO_SERVICE_PORT=<服务所启用的端口> ``` -服务具有专用 IP 地址,如果启用了 [DNS 插件](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/dns/),还可以在容器中通过 DNS 进行访问。 +服务具有专用 IP 地址,如果启用了 [DNS 插件](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/dns/),还可以在容器中通过 DNS 进行访问。 -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * 查看[容器生命周期挂钩(hooks)](/docs/concepts/containers/container-lifecycle-hooks/)了解更多。 * 获取[为容器生命周期事件附加处理程序](/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/)的实践经验。 -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/concepts/containers/images.md b/content/cn/docs/concepts/containers/images.md similarity index 99% rename from cn/docs/concepts/containers/images.md rename to content/cn/docs/concepts/containers/images.md index f630c443e98cf..11f902444889c 100644 --- a/cn/docs/concepts/containers/images.md +++ b/content/cn/docs/concepts/containers/images.md @@ -3,18 +3,19 @@ approvers: - erictune - thockin title: 镜像 +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 在Kubernetes pod中引用镜像前,请创建Docker镜像,并将之推送到镜像仓库中。 容器的“image”属性支持和Docker命令行相同的语法,包括私有仓库和标签。 -{% endcapture %} +{{% /capture %}} -{:toc} +{{< toc >}} -{% capture body %} +{{% capture body %}} ## 升级镜像 默认的镜像拉取策略是“IfNotPresent”,在镜像已经存在的情况下,kubelet将不在去拉取镜像。 @@ -291,6 +292,6 @@ spec: - 为每个租户获取仓库凭证,放置在secret中,并发布到每个租户的namespace下 - 租户将secret增加到每个namespace下的imagePullSecrets中 -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/concepts/example-concept-template.md b/content/cn/docs/concepts/example-concept-template.md similarity index 77% rename from cn/docs/concepts/example-concept-template.md rename to content/cn/docs/concepts/example-concept-template.md index ae33aea1f2f6f..e4096cca689b4 100644 --- a/cn/docs/concepts/example-concept-template.md +++ b/content/cn/docs/concepts/example-concept-template.md @@ -2,17 +2,18 @@ title: 概念模板示例 approvers: - chenopis +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} **注意:** 注意为新文档 [create an entry in the table of contents](/docs/home/contribute/write-new-topic/#creating-an-entry-in-the-table-of-contents) 。 本页解释了 ... -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## 了解 ... @@ -22,15 +23,15 @@ Kubernetes 提供 ... 使用 ... -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} **[可选章节]** * 了解更多 [Writing a New Topic](/docs/home/contribute/write-new-topic/)。 * 查看 [Using Page Templates - Concept template](/docs/home/contribute/page-templates/#concept_template) 了解如何使用本模板。 -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/concepts/overview/components.md b/content/cn/docs/concepts/overview/components.md similarity index 98% rename from cn/docs/concepts/overview/components.md rename to content/cn/docs/concepts/overview/components.md index 75a9bd0d46eb3..e01069d409c3d 100644 --- a/cn/docs/concepts/overview/components.md +++ b/content/cn/docs/concepts/overview/components.md @@ -5,12 +5,13 @@ title: Kubernetes 组件 redirect_from: - "/docs/admin/cluster-components/" - "/docs/admin/cluster-components.html" +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 本文档概述了 Kubernetes 所需的各种二进制组件, 用于提供齐全的功能。 -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Master 组件 @@ -119,6 +120,6 @@ supervisord 是一个轻量级的进程监控系统,可以用来保证 kubelet fluentd 是一个守护进程,它有助于提供[集群层面日志](#cluster-level-logging) 集群层面的日志。 -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/concepts/overview/kubernetes-api.md b/content/cn/docs/concepts/overview/kubernetes-api.md similarity index 100% rename from cn/docs/concepts/overview/kubernetes-api.md rename to content/cn/docs/concepts/overview/kubernetes-api.md diff --git a/cn/docs/concepts/overview/what-is-kubernetes.md b/content/cn/docs/concepts/overview/what-is-kubernetes.md similarity index 97% rename from cn/docs/concepts/overview/what-is-kubernetes.md rename to content/cn/docs/concepts/overview/what-is-kubernetes.md index 2b0de77af654a..fd5a6cb493cac 100644 --- a/cn/docs/concepts/overview/what-is-kubernetes.md +++ b/content/cn/docs/concepts/overview/what-is-kubernetes.md @@ -91,7 +91,7 @@ Kubernetes 提供了很多的功能,总会有新的场景受益于新特性。 [Label](/docs/user-guide/labels/) 允许用户按照自己的方式组织管理对应的资源。 [注解](/docs/user-guide/annotations/) 使用户能够以自定义的描述信息来修饰资源,以适用于自己的工作流,并为管理工具提供检查点状态的简单方法。 -此外,[Kubernetes 控制面 (Control Plane)](/docs/admin/cluster-components) 是构建在相同的 [APIs](/docs/api/) 上面,开发人员和用户都可以用。用户可以编写自己的控制器, [调度器](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/docs/devel/scheduler.md)等等,如果这么做,根据新加的[自定义 API](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/design/extending-api.md) ,可以扩展当前的通用 [CLI 命令行工具](/docs/user-guide/kubectl-overview/)。 +此外,[Kubernetes 控制面 (Control Plane)](/docs/admin/cluster-components) 是构建在相同的 [APIs](/docs/api/) 上面,开发人员和用户都可以用。用户可以编写自己的控制器, [调度器](https://github.com/kubernetes/kubernetes/tree/{{< param "githubbranch" >}}/docs/devel/scheduler.md)等等,如果这么做,根据新加的[自定义 API](https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/docs/design/extending-api.md) ,可以扩展当前的通用 [CLI 命令行工具](/docs/user-guide/kubectl-overview/)。 这种 [设计](https://git.k8s.io/community/contributors/design-proposals/architecture/principles.md) 使得许多其他系统可以构建在 Kubernetes 之上。 diff --git a/cn/docs/concepts/overview/working-with-objects/kubernetes-objects.md b/content/cn/docs/concepts/overview/working-with-objects/kubernetes-objects.md similarity index 93% rename from cn/docs/concepts/overview/working-with-objects/kubernetes-objects.md rename to content/cn/docs/concepts/overview/working-with-objects/kubernetes-objects.md index 33a2507d42625..13f6075718ece 100644 --- a/cn/docs/concepts/overview/working-with-objects/kubernetes-objects.md +++ b/content/cn/docs/concepts/overview/working-with-objects/kubernetes-objects.md @@ -4,14 +4,15 @@ title: 理解 Kubernetes 对象 redirect_from: - "/docs/concepts/abstractions/overview/" - "/docs/concepts/abstractions/overview.html" +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 本页说明了 Kubernetes 对象在 Kubernetes API 中是如何表示的,以及如何在 `.yaml` 格式的文件中表示。 -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} @@ -59,7 +60,7 @@ Kubernetes 系统读取 Deployment 规约,并启动我们所期望的该应用 这里有一个 `.yaml` 示例文件,展示了 Kubernetes Deployment 的必需字段和对象规约: -{% include code.html language="yaml" file="nginx-deployment.yaml" ghlink="/docs/concepts/overview/working-with-objects/nginx-deployment.yaml" %} +{{< code file="nginx-deployment.yaml" >}} 使用类似于上面的 `.yaml` 文件来创建 Deployment,一种方式是使用 `kubectl` 命令行接口(CLI)中的 [`kubectl create`](/docs/user-guide/kubectl/v1.7/#create) 命令,将 `.yaml` 文件作为参数。下面是一个示例: @@ -88,11 +89,11 @@ deployment "nginx-deployment" created 也需要提供对象的 `spec` 字段。对象 `spec` 的精确格式对每个 Kubernetes 对象来说是不同的,包含了特定于该对象的嵌套字段。[Kubernetes API 参考](/docs/api/)能够帮助我们找到任何我们想创建的对象的 spec 格式。 -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * 了解最重要的基本 Kubernetes 对象,例如 [Pod](/docs/concepts/abstractions/pod/)。 -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/concepts/overview/working-with-objects/nginx-deployment.yaml b/content/cn/docs/concepts/overview/working-with-objects/nginx-deployment.yaml similarity index 100% rename from cn/docs/concepts/overview/working-with-objects/nginx-deployment.yaml rename to content/cn/docs/concepts/overview/working-with-objects/nginx-deployment.yaml diff --git a/cn/docs/concepts/policy/pod-security-policy.md b/content/cn/docs/concepts/policy/pod-security-policy.md similarity index 98% rename from cn/docs/concepts/policy/pod-security-policy.md rename to content/cn/docs/concepts/policy/pod-security-policy.md index 5cc7ab07f3f79..a33cb3a043a91 100644 --- a/cn/docs/concepts/policy/pod-security-policy.md +++ b/content/cn/docs/concepts/policy/pod-security-policy.md @@ -12,8 +12,7 @@ redirect_from: `PodSecurityPolicy` 类型的对象能够控制,是否可以向 Pod 发送请求,该 Pod 能够影响被应用到 Pod 和容器的 `SecurityContext`。 查看 [Pod 安全策略建议](https://git.k8s.io/community/contributors/design-proposals/security-context-constraints.md) 获取更多信息。 -* TOC -{:toc} +{{< toc >}} @@ -150,7 +149,7 @@ Pod 必须基于 PSP 验证每个字段。 下面是一个 Pod 安全策略的例子,所有字段的设置都被允许: -{% include code.html language="yaml" file="psp.yaml" ghlink="/docs/concepts/policy/psp.yaml" %} +{{< code file="psp.yaml" >}} diff --git a/cn/docs/concepts/policy/psp.yaml b/content/cn/docs/concepts/policy/psp.yaml similarity index 100% rename from cn/docs/concepts/policy/psp.yaml rename to content/cn/docs/concepts/policy/psp.yaml diff --git a/cn/docs/concepts/policy/resource-quotas.md b/content/cn/docs/concepts/policy/resource-quotas.md similarity index 100% rename from cn/docs/concepts/policy/resource-quotas.md rename to content/cn/docs/concepts/policy/resource-quotas.md diff --git a/cn/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md b/content/cn/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md similarity index 94% rename from cn/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md rename to content/cn/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md index 3ad123902169b..b6862ef5c690b 100644 --- a/cn/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md +++ b/content/cn/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md @@ -8,8 +8,7 @@ redirect_from: - "/docs/user-guide/add-entries-to-pod-etc-hosts-with-host-aliases.md" --- -* TOC -{:toc} +{{< toc >}} @@ -39,7 +38,7 @@ nginx 1/1 Running 0 13s 10.200.0.4 worker0 除了默认的样板内容,我们可以向 hosts 文件添加额外的条目,将 `foo.local`、 `bar.local` 解析为`127.0.0.1`,将 `foo.remote`、 `bar.remote` 解析为 `10.1.2.3`,我们可以在 `.spec.hostAliases` 下为 Pod 添加 HostAliases。 -{% include code.html language="yaml" file="hostaliases-pod.yaml" ghlink="/docs/concepts/services-networking/hostaliases-pod.yaml" %} +{{< code file="hostaliases-pod.yaml" >}} hosts 文件的内容看起来类似如下这样: diff --git a/cn/docs/concepts/services-networking/connect-applications-service.md b/content/cn/docs/concepts/services-networking/connect-applications-service.md similarity index 92% rename from cn/docs/concepts/services-networking/connect-applications-service.md rename to content/cn/docs/concepts/services-networking/connect-applications-service.md index bf548162dd52e..fca03618e2df0 100644 --- a/cn/docs/concepts/services-networking/connect-applications-service.md +++ b/content/cn/docs/concepts/services-networking/connect-applications-service.md @@ -6,8 +6,7 @@ approvers: title: 应用连接到 Service --- -* TOC -{:toc} +{{< toc >}} @@ -36,7 +35,7 @@ Kubernetes 假设 Pod 可与其它 Pod 通信,不管它们在哪个主机上 我们在之前的示例中已经做过,然而再让我重试一次,这次聚焦在网络连接的视角。 创建一个 Nginx Pod,指示它具有一个容器端口的说明: -{% include code.html language="yaml" file="run-my-nginx.yaml" ghlink="/docs/concepts/services-networking/run-my-nginx.yaml" %} +{{< code file="run-my-nginx.yaml" >}} @@ -92,12 +91,12 @@ service "my-nginx" exposed 这等价于使用 `kubectl create -f` 命令创建,对应如下的 yaml 文件: -{% include code.html language="yaml" file="nginx-svc.yaml" ghlink="/docs/concepts/services-networking/nginx-svc.yaml" %} +{{< code file="nginx-svc.yaml" >}} 上述规约将创建一个 Service,对应具有标签 `run: my-nginx` 的 Pod,目标 TCP 端口 80,并且在一个抽象的 Service 端口(`targetPort`:容器接收流量的端口;`port`:抽象的 Service 端口,可以使任何其它 Pod 访问该 Service 的端口)上暴露。 -查看 [Service API 对象](/docs/api-reference/{{page.version}}/#service-v1-core) 了解 Service 定义支持的字段列表。 +查看 [Service API 对象](/docs/api-reference/{{< param "version" >}}/#service-v1-core) 了解 Service 定义支持的字段列表。 ```shell $ kubectl get svc my-nginx @@ -139,7 +138,7 @@ my-nginx 10.244.2.5:80,10.244.3.4:80 1m ## 访问 Service -Kubernetes 支持两种主要的服务发现模式 —— 环境变量和 DNS。前者在单个节点上可用使用,然而后者必须使用 [kube-dns 集群插件](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/dns/README.md)。 +Kubernetes 支持两种主要的服务发现模式 —— 环境变量和 DNS。前者在单个节点上可用使用,然而后者必须使用 [kube-dns 集群插件](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/dns/README.md)。 @@ -198,7 +197,7 @@ kube-dns 10.0.0.10 53/UDP,53/TCP 8m -如果没有在运行,可以 [启用它](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/dns/README.md#how-do-i-configure-it)。 +如果没有在运行,可以 [启用它](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/dns/README.md#how-do-i-configure-it)。 本段剩余的内容,将假设已经有一个 Service,它具有一个长久存在的 IP(my-nginx),一个为该 IP 指派名称的 DNS 服务器(kube-dns 集群插件),所以可以通过标准做法,使在集群中的任何 Pod 都能与该 Service 通信(例如:gethostbyname)。 让我们运行另一个 curl 应用来进行测试: @@ -232,7 +231,7 @@ Address 1: 10.0.162.149 * 使用证书配置的 Nginx server * 使证书可以访问 Pod 的[秘钥](/docs/user-guide/secrets) -可以从 [Nginx https 示例](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/examples/https-nginx/) 获取所有上述内容,简明示例如下: +可以从 [Nginx https 示例](https://github.com/kubernetes/kubernetes/tree/{{< param "githubbranch" >}}/examples/https-nginx/) 获取所有上述内容,简明示例如下: ```shell $ make keys secret KEY=/tmp/nginx.key CERT=/tmp/nginx.crt SECRET=/tmp/secret.json @@ -248,7 +247,7 @@ nginxsecret Opaque 2 1m 现在修改 Nginx 副本,启动一个使用在秘钥中的证书的 https 服务器和 Servcie,都暴露端口(80 和 443): -{% include code.html language="yaml" file="nginx-secure-app.yaml" ghlink="/docs/concepts/services-networking/nginx-secure-app.yaml" %} +{{< code file="nginx-secure-app.yaml" >}} @@ -257,7 +256,7 @@ nginxsecret Opaque 2 1m - 它在相同的文件中包含了 Deployment 和 Service 的规格 -- [Nginx server](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/examples/https-nginx/default.conf) 处理 80 端口上的 http 流量,以及 443 端口上的 https 流量,Nginx Service 暴露了这两个端口。 +- [Nginx server](https://github.com/kubernetes/kubernetes/tree/{{< param "githubbranch" >}}/examples/https-nginx/default.conf) 处理 80 端口上的 http 流量,以及 443 端口上的 https 流量,Nginx Service 暴露了这两个端口。 - 每个容器访问挂载在 /etc/nginx/ssl 卷上的秘钥。这需要在 Nginx server 启动之前安装好。 ```shell @@ -282,7 +281,7 @@ node $ curl -k https://10.244.3.5 通过创建 Service,我们连接了在证书中的 CName 与在 Service 查询时被 Pod使用的实际 DNS 名字。 让我们从一个 Pod 来测试(为了简化使用同一个秘钥,Pod 仅需要使用 nginx.crt 去访问 Service): -{% include code.html language="yaml" file="curlpod.yaml" ghlink="/docs/concepts/services-networking/curlpod.yaml" %} +{{< code file="curlpod.yaml" >}} ```shell $ kubectl create -f ./curlpod.yaml diff --git a/cn/docs/concepts/services-networking/curlpod.yaml b/content/cn/docs/concepts/services-networking/curlpod.yaml similarity index 100% rename from cn/docs/concepts/services-networking/curlpod.yaml rename to content/cn/docs/concepts/services-networking/curlpod.yaml diff --git a/cn/docs/concepts/services-networking/dns-pod-service.md b/content/cn/docs/concepts/services-networking/dns-pod-service.md similarity index 98% rename from cn/docs/concepts/services-networking/dns-pod-service.md rename to content/cn/docs/concepts/services-networking/dns-pod-service.md index 1ce39cde26d7a..b26c85edf0f95 100644 --- a/cn/docs/concepts/services-networking/dns-pod-service.md +++ b/content/cn/docs/concepts/services-networking/dns-pod-service.md @@ -12,7 +12,7 @@ redirect_from: ## 介绍 -Kubernetes 从 1.3 版本起, DNS 是内置的服务,通过插件管理器 [集群插件](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/README.md) 自动被启动。 +Kubernetes 从 1.3 版本起, DNS 是内置的服务,通过插件管理器 [集群插件](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/README.md) 自动被启动。 Kubernetes DNS 在集群中调度 DNS Pod 和 Service ,配置 kubelet 以通知个别容器使用 DNS Service 的 IP 解析 DNS 名字。 @@ -410,7 +410,7 @@ Linux libc 在限制为3个 DNS `nameserver` 记录和3个 DNS `search` 记录 ## 参考 -- [DNS 集群插件文档](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/dns/README.md) +- [DNS 集群插件文档](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/dns/README.md) diff --git a/cn/docs/concepts/services-networking/hostaliases-pod.yaml b/content/cn/docs/concepts/services-networking/hostaliases-pod.yaml similarity index 100% rename from cn/docs/concepts/services-networking/hostaliases-pod.yaml rename to content/cn/docs/concepts/services-networking/hostaliases-pod.yaml diff --git a/cn/docs/concepts/services-networking/ingress.yaml b/content/cn/docs/concepts/services-networking/ingress.yaml similarity index 100% rename from cn/docs/concepts/services-networking/ingress.yaml rename to content/cn/docs/concepts/services-networking/ingress.yaml diff --git a/cn/docs/concepts/services-networking/network-policies.md b/content/cn/docs/concepts/services-networking/network-policies.md similarity index 96% rename from cn/docs/concepts/services-networking/network-policies.md rename to content/cn/docs/concepts/services-networking/network-policies.md index ae8ccf69ea44b..2693ad7580793 100644 --- a/cn/docs/concepts/services-networking/network-policies.md +++ b/content/cn/docs/concepts/services-networking/network-policies.md @@ -6,8 +6,7 @@ approvers: title: 网络策略 --- -* TOC -{:toc} +{{< toc >}} 网络策略(NetworkPolicy)是一种关于pod间及pod与其他网络端点间所允许的通信规则的规范。 @@ -25,7 +24,7 @@ Pod可以通过相关的网络策略进行隔离。一旦命名空间中有网 ## `NetworkPolicy` 资源 -通过[api参考](/docs/api-reference/{{page.version}}/#networkpolicy-v1-networking)来了解资源定义。 +通过[api参考](/docs/api-reference/{{< param "version" >}}/#networkpolicy-v1-networking)来了解资源定义。 下面是一个 `NetworkPolicy` 的示例: diff --git a/cn/docs/concepts/services-networking/nginx-secure-app.yaml b/content/cn/docs/concepts/services-networking/nginx-secure-app.yaml similarity index 100% rename from cn/docs/concepts/services-networking/nginx-secure-app.yaml rename to content/cn/docs/concepts/services-networking/nginx-secure-app.yaml diff --git a/cn/docs/concepts/services-networking/nginx-svc.yaml b/content/cn/docs/concepts/services-networking/nginx-svc.yaml similarity index 100% rename from cn/docs/concepts/services-networking/nginx-svc.yaml rename to content/cn/docs/concepts/services-networking/nginx-svc.yaml diff --git a/cn/docs/concepts/services-networking/run-my-nginx.yaml b/content/cn/docs/concepts/services-networking/run-my-nginx.yaml similarity index 100% rename from cn/docs/concepts/services-networking/run-my-nginx.yaml rename to content/cn/docs/concepts/services-networking/run-my-nginx.yaml diff --git a/cn/docs/concepts/services-networking/service.md b/content/cn/docs/concepts/services-networking/service.md similarity index 98% rename from cn/docs/concepts/services-networking/service.md rename to content/cn/docs/concepts/services-networking/service.md index 2f7f13937742c..ab5d74490570c 100644 --- a/cn/docs/concepts/services-networking/service.md +++ b/content/cn/docs/concepts/services-networking/service.md @@ -34,8 +34,7 @@ Kubernetes `Service` 定义了这样一种抽象:一个 `Pod` 的逻辑分组 对 Kubernetes 集群中的应用,Kubernetes 提供了简单的 `Endpoints` API,只要 `Service` 中的一组 `Pod` 发生变更,应用程序就会被更新。 对非 Kubernetes 集群中的应用,Kubernetes 提供了基于 VIP 的网桥的方式访问 `Service`,再由 `Service` 重定向到 backend `Pod`。 -* TOC -{:toc} +{{< toc >}} @@ -283,7 +282,7 @@ Kubernetes 支持2种基本的服务发现模式 —— 环境变量和 DNS。 当 `Pod` 运行在 `Node` 上,kubelet 会为每个活跃的 `Service` 添加一组环境变量。 -它同时支持 [Docker links兼容](https://docs.docker.com/userguide/dockerlinks/) 变量(查看 [makeLinkVariables](http://releases.k8s.io/{{page.githubbranch}}/pkg/kubelet/envvars/envvars.go#L49))、简单的 `{SVCNAME}_SERVICE_HOST` 和 `{SVCNAME}_SERVICE_PORT` 变量,这里 `Service` 的名称需大写,横线被转换成下划线。 +它同时支持 [Docker links兼容](https://docs.docker.com/userguide/dockerlinks/) 变量(查看 [makeLinkVariables](http://releases.k8s.io/{{< param "githubbranch" >}}/pkg/kubelet/envvars/envvars.go#L49))、简单的 `{SVCNAME}_SERVICE_HOST` 和 `{SVCNAME}_SERVICE_PORT` 变量,这里 `Service` 的名称需大写,横线被转换成下划线。 @@ -306,7 +305,7 @@ REDIS_MASTER_PORT_6379_TCP_ADDR=10.0.0.11 -一个可选(尽管强烈推荐)[集群插件](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/README.md) 是 DNS 服务器。 +一个可选(尽管强烈推荐)[集群插件](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/README.md) 是 DNS 服务器。 DNS 服务器监视着创建新 `Service` 的 Kubernetes API,从而为每一个 `Service` 创建一组 DNS 记录。 如果整个集群的 DNS 一直被启用,那么所有的 `Pod` 应该能够自动对 `Service` 进行名称解析。 @@ -622,7 +621,7 @@ Kubernetes 最主要的哲学之一,是用户不应该暴露那些能够导致 ## API 对象 -在 Kubernetes REST API 中,Service 是 top-level 资源。关于 API 对象的更多细节可以查看:[Service API 对象](/docs/api-reference/{{page.version}}/#service-v1-core)。 +在 Kubernetes REST API 中,Service 是 top-level 资源。关于 API 对象的更多细节可以查看:[Service API 对象](/docs/api-reference/{{< param "version" >}}/#service-v1-core)。 diff --git a/cn/docs/concepts/workloads/controllers/cron-jobs.md b/content/cn/docs/concepts/workloads/controllers/cron-jobs.md similarity index 99% rename from cn/docs/concepts/workloads/controllers/cron-jobs.md rename to content/cn/docs/concepts/workloads/controllers/cron-jobs.md index 6d3d990c0746b..a409a24a9a942 100644 --- a/cn/docs/concepts/workloads/controllers/cron-jobs.md +++ b/content/cn/docs/concepts/workloads/controllers/cron-jobs.md @@ -11,8 +11,7 @@ redirect_from: - "/docs/user-guide/cron-jobs.html" --- -* TOC -{:toc} +{{< toc >}} diff --git a/cn/docs/concepts/workloads/controllers/daemonset.md b/content/cn/docs/concepts/workloads/controllers/daemonset.md similarity index 99% rename from cn/docs/concepts/workloads/controllers/daemonset.md rename to content/cn/docs/concepts/workloads/controllers/daemonset.md index e7058e4bc4765..f2662bd0d3231 100644 --- a/cn/docs/concepts/workloads/controllers/daemonset.md +++ b/content/cn/docs/concepts/workloads/controllers/daemonset.md @@ -7,8 +7,7 @@ redirect_from: - "/docs/admin/daemons.html" --- -* TOC -{:toc} +{{< toc >}} diff --git a/cn/docs/concepts/workloads/controllers/daemonset.yaml b/content/cn/docs/concepts/workloads/controllers/daemonset.yaml similarity index 100% rename from cn/docs/concepts/workloads/controllers/daemonset.yaml rename to content/cn/docs/concepts/workloads/controllers/daemonset.yaml diff --git a/cn/docs/concepts/workloads/controllers/deployment.md b/content/cn/docs/concepts/workloads/controllers/deployment.md similarity index 98% rename from cn/docs/concepts/workloads/controllers/deployment.md rename to content/cn/docs/concepts/workloads/controllers/deployment.md index 361b3d528fc31..523d36d870076 100644 --- a/cn/docs/concepts/workloads/controllers/deployment.md +++ b/content/cn/docs/concepts/workloads/controllers/deployment.md @@ -3,22 +3,24 @@ approvers: - bgrant0607 - janetkuo title: Deployments +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} A _Deployment_ controller provides declarative updates for [Pods](/docs/concepts/workloads/pods/pod/) and [ReplicaSets](/docs/concepts/workloads/controllers/replicaset/). You describe a _desired state_ in a Deployment object, and the Deployment controller changes the actual state to the desired state at a controlled rate. You can define Deployments to create new ReplicaSets, or to remove existing Deployments and adopt all their resources with new Deployments. +{{< note >}} **Note:** You should not manage ReplicaSets owned by a Deployment. All the use cases should be covered by manipulating the Deployment object. Consider opening an issue in the main Kubernetes repository if your use case is not covered below. -{: .note} +{{< /note >}} -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Use Case @@ -37,7 +39,7 @@ The following are typical use cases for Deployments: Here is an example Deployment. It creates a ReplicaSet to bring up three nginx Pods. -{% include code.html language="yaml" file="nginx-deployment.yaml" ghlink="/docs/concepts/workloads/controllers/nginx-deployment.yaml" %} +{{< code file="nginx-deployment.yaml" >}} Run the example by downloading the example file and then running this command: @@ -100,17 +102,19 @@ nginx-deployment-2035384211-qqcnn 1/1 Running 0 18s app The created ReplicaSet ensures that there are three nginx Pods at all times. +{{< note >}} **Note:** You must specify an appropriate selector and pod template labels in a Deployment (in this case, `app = nginx`). That is, don't overlap with other controllers (including other Deployments, ReplicaSets, StatefulSets, etc.). Kubernetes doesn't stop you from overlapping, and if multiple controllers have overlapping selectors, those controllers may fight with each other and won't behave correctly. -{: .note} +{{< /note >}} ### Pod-template-hash label +{{< note >}} **Note:** Do not change this label. -{: .note} +{{< /note >}} Note the pod-template-hash label in the example output in the pod labels above. This label is added by the Deployment controller to every ReplicaSet that a Deployment creates or adopts. Its purpose is to make sure that child @@ -120,9 +124,10 @@ and in any existing Pods that the ReplicaSet may have. ## Updating a Deployment +{{< note >}} **Note:** A Deployment's rollout is triggered if and only if the Deployment's pod template (that is, `.spec.template`) is changed, for example if the labels or container images of the template are updated. Other updates, such as scaling the Deployment, do not trigger a rollout. -{: .note} +{{< /note >}} Suppose that we now want to update the nginx Pods to use the `nginx:1.9.1` image instead of the `nginx:1.7.9` image. @@ -264,13 +269,14 @@ Sometimes you may want to rollback a Deployment; for example, when the Deploymen By default, all of the Deployment's rollout history is kept in the system so that you can rollback anytime you want (you can change that by modifying revision history limit). +{{< note >}} **Note:** A Deployment's revision is created when a Deployment's rollout is triggered. This means that the new revision is created if and only if the Deployment's pod template (`.spec.template`) is changed, for example if you update the labels or container images of the template. Other updates, such as scaling the Deployment, do not create a Deployment revision, so that we can facilitate simultaneous manual- or auto-scaling. This means that when you roll back to an earlier revision, only the Deployment's pod template part is rolled back. -{: .note} +{{< /note >}} Suppose that we made a typo while updating the Deployment, by putting the image name as `nginx:1.91` instead of `nginx:1.9.1`: @@ -311,12 +317,13 @@ nginx-deployment-3066724191-08mng 0/1 ImagePullBackOff 0 6s nginx-deployment-3066724191-eocby 0/1 ImagePullBackOff 0 6s ``` +{{< note >}} **Note:** The Deployment controller will stop the bad rollout automatically, and will stop scaling up the new ReplicaSet. This depends on the rollingUpdate parameters (`maxUnavailable` specifically) that you have specified. Kubernetes by default sets the value to 1 and spec.replicas to 1 so if you haven't cared about setting those parameters, your Deployment can have 100% unavailability by default! This will be fixed in Kubernetes in a future version. -{: .note} +{{< /note >}} ```shell $ kubectl describe deployment @@ -398,7 +405,7 @@ $ kubectl rollout undo deployment/nginx-deployment --to-revision=2 deployment "nginx-deployment" rolled back ``` -For more details about rollout related commands, read [`kubectl rollout`](/docs/user-guide/kubectl/{{page.version}}/#rollout). +For more details about rollout related commands, read [`kubectl rollout`](/docs/user-guide/kubectl/{{< param "version" >}}/#rollout). The Deployment is now rolled back to a previous stable revision. As you can see, a `DeploymentRollback` event for rolling back to revision 2 is generated from Deployment controller. @@ -588,8 +595,9 @@ nginx-2142116321 0 0 0 2m nginx-3926361531 3 3 3 28s ``` +{{< note >}} **Note:** You cannot rollback a paused Deployment until you resume it. -{: .note} +{{< /note >}} ## Deployment status @@ -660,15 +668,17 @@ attributes to the Deployment's `status.conditions`: See the [Kubernetes API conventions](https://git.k8s.io/community/contributors/devel/api-conventions.md#typical-status-properties) for more information on status conditions. +{{< note >}} **Note:** Kubernetes will take no action on a stalled Deployment other than to report a status condition with `Reason=ProgressDeadlineExceeded`. Higher level orchestrators can take advantage of it and act accordingly, for example, rollback the Deployment to its previous version. -{: .note} +{{< /note >}} +{{< note >}} **Note:** If you pause a Deployment, Kubernetes does not check progress against your specified deadline. You can safely pause a Deployment in the middle of a rollout and resume without triggering the condition for exceeding the deadline. -{: .note} +{{< /note >}} You may experience transient errors with your Deployments, either due to a low timeout that you have set or due to any other kind of error that can be treated as transient. For example, let's suppose you have @@ -769,9 +779,10 @@ You can set `.spec.revisionHistoryLimit` field in a Deployment to specify how ma this Deployment you want to retain. The rest will be garbage-collected in the background. By default, all revision history will be kept. In a future version, it will default to switch to 2. +{{< note >}} **Note:** Explicitly setting this field to 0, will result in cleaning up all the history of your Deployment thus that Deployment will not be able to roll back. -{: .note} +{{< /note >}} ## Use Cases @@ -819,10 +830,11 @@ A Deployment may terminate Pods whose labels match the selector if their templat from `.spec.template` or if the total number of such Pods exceeds `.spec.replicas`. It brings up new Pods with `.spec.template` if the number of Pods is less than the desired number. +{{< note >}} **Note:** You should not create other pods whose labels match this selector, either directly, by creating another Deployment, or by creating another controller such as a ReplicaSet or a ReplicationController. If you do so, the first Deployment thinks that it created these other pods. Kubernetes does not stop you from doing this. -{: .note} +{{< /note >}} If you have multiple controllers that have overlapping selectors, the controllers will fight with each other and won't behave correctly. @@ -926,10 +938,10 @@ it is created. ### kubectl rolling update -[Kubectl rolling update](/docs/user-guide/kubectl/{{page.version}}/#rolling-update) updates Pods and ReplicationControllers +[Kubectl rolling update](/docs/user-guide/kubectl/{{< param "version" >}}/#rolling-update) updates Pods and ReplicationControllers in a similar fashion. But Deployments are recommended, since they are declarative, server side, and have additional features, such as rolling back to any previous revision even after the rolling update is done. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/concepts/workloads/controllers/frontend.yaml b/content/cn/docs/concepts/workloads/controllers/frontend.yaml similarity index 100% rename from cn/docs/concepts/workloads/controllers/frontend.yaml rename to content/cn/docs/concepts/workloads/controllers/frontend.yaml diff --git a/cn/docs/concepts/workloads/controllers/garbage-collection.md b/content/cn/docs/concepts/workloads/controllers/garbage-collection.md similarity index 95% rename from cn/docs/concepts/workloads/controllers/garbage-collection.md rename to content/cn/docs/concepts/workloads/controllers/garbage-collection.md index c9af3905b7fd1..a25ae71064998 100644 --- a/cn/docs/concepts/workloads/controllers/garbage-collection.md +++ b/content/cn/docs/concepts/workloads/controllers/garbage-collection.md @@ -6,9 +6,10 @@ redirect_from: - "/docs/user-guide/garbage-collection/" - "/docs/user-guide/garbage-collection.html" +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} @@ -16,10 +17,10 @@ Kubernetes 垃圾收集器的角色是删除指定的对象,这些对象曾经 **注意**:垃圾收集是 beta 特性,在 Kubernetes 1.4 及以上版本默认启用。 -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Owner 和 Dependent @@ -38,7 +39,7 @@ Kubernetes 垃圾收集器的角色是删除指定的对象,这些对象曾经 这里有一个配置文件,表示一个具有 3 个 Pod 的 ReplicaSet: -{% include code.html language="yaml" file="my-repset.yaml" ghlink="/docs/concepts/workloads/controllers/my-repset.yaml" %} +{{< code file="my-repset.yaml" >}} @@ -164,17 +165,17 @@ kubectl delete replicaset my-repset --cascade=false [其它已知的问题](https://github.com/kubernetes/kubernetes/issues/26120) -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} [设计文档 1](https://git.k8s.io/community/contributors/design-proposals/garbage-collection.md) [设计文档 2](https://git.k8s.io/community/contributors/design-proposals/synchronous-garbage-collection.md) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/concepts/workloads/controllers/hpa-rs.yaml b/content/cn/docs/concepts/workloads/controllers/hpa-rs.yaml similarity index 100% rename from cn/docs/concepts/workloads/controllers/hpa-rs.yaml rename to content/cn/docs/concepts/workloads/controllers/hpa-rs.yaml diff --git a/cn/docs/concepts/workloads/controllers/job.yaml b/content/cn/docs/concepts/workloads/controllers/job.yaml similarity index 100% rename from cn/docs/concepts/workloads/controllers/job.yaml rename to content/cn/docs/concepts/workloads/controllers/job.yaml diff --git a/cn/docs/concepts/workloads/controllers/my-repset.yaml b/content/cn/docs/concepts/workloads/controllers/my-repset.yaml similarity index 100% rename from cn/docs/concepts/workloads/controllers/my-repset.yaml rename to content/cn/docs/concepts/workloads/controllers/my-repset.yaml diff --git a/cn/docs/concepts/workloads/controllers/nginx-deployment.yaml b/content/cn/docs/concepts/workloads/controllers/nginx-deployment.yaml similarity index 100% rename from cn/docs/concepts/workloads/controllers/nginx-deployment.yaml rename to content/cn/docs/concepts/workloads/controllers/nginx-deployment.yaml diff --git a/cn/docs/concepts/workloads/controllers/replication.yaml b/content/cn/docs/concepts/workloads/controllers/replication.yaml similarity index 100% rename from cn/docs/concepts/workloads/controllers/replication.yaml rename to content/cn/docs/concepts/workloads/controllers/replication.yaml diff --git a/cn/docs/concepts/workloads/pods/init-containers.md b/content/cn/docs/concepts/workloads/pods/init-containers.md similarity index 98% rename from cn/docs/concepts/workloads/pods/init-containers.md rename to content/cn/docs/concepts/workloads/pods/init-containers.md index 08611bf61aca2..3b809a78da40c 100644 --- a/cn/docs/concepts/workloads/pods/init-containers.md +++ b/content/cn/docs/concepts/workloads/pods/init-containers.md @@ -7,20 +7,21 @@ redirect_from: - "/docs/concepts/abstractions/init-containers.html" - "/docs/user-guide/pods/init-container/" - "/docs/user-guide/pods/init-container.html" +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 本页提供了 Init 容器的概览,它是一种专用的容器,在应用容器启动之前运行,并包括一些应用镜像中不存在的实用工具和安装脚本。 -{% endcapture %} +{{% /capture %}} -{:toc} +{{< toc >}} 这个特性在 1.6 版本已经退出 beta 版本。Init 容器可以在 PodSpec 中同应用的 `containers` 数组一起来指定。 beta 注解的值将仍然需要保留,并覆盖 PodSpec 字段值。 -{% capture body %} +{{% capture body %}} ## 理解 Init 容器 @@ -315,16 +316,16 @@ Apiserver 版本为 1.6 或更高版本的集群,通过使用 `spec.initContai 之前的版本可以使用 alpha 和 beta 注解支持 Init 容器。 `spec.initContainers` 字段也被加入到 alpha 和 beta 注解中,所以 Kubernetes 1.3.0 版本或更高版本可以执行 Init 容器,并且 1.6 版本的 apiserver 能够安全的回退到 1.5.x 版本,而不会使存在的已创建 Pod 失去 Init 容器的功能。 -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [创建具有 Init 容器的 Pod](/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod-that-has-an-init-container) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/concepts/workloads/pods/pod-lifecycle.md b/content/cn/docs/concepts/workloads/pods/pod-lifecycle.md similarity index 97% rename from cn/docs/concepts/workloads/pods/pod-lifecycle.md rename to content/cn/docs/concepts/workloads/pods/pod-lifecycle.md index 176e57b8291cc..f5e6db4b4006d 100644 --- a/cn/docs/concepts/workloads/pods/pod-lifecycle.md +++ b/content/cn/docs/concepts/workloads/pods/pod-lifecycle.md @@ -3,18 +3,19 @@ title: Pod 的生命周期 redirect_from: - "/docs/user-guide/pod-states/" - "/docs/user-guide/pod-states.html" +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} -{% comment %}Updated: 4/14/2015{% endcomment %} -{% comment %}Edited and moved to Concepts section: 2/2/17{% endcomment %} +{{< comment >}}Updated: 4/14/2015{{< /comment >}} +{{< comment >}}Edited and moved to Concepts section: 2/2/17{{< /comment >}} 该页面将描述 Pod 的生命周期。 -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Pod phase @@ -168,7 +169,7 @@ spec: - 节点控制器将 Pod `phase` 设置为 Failed。 - 如果是用控制器来运行,Pod 将在别处重建。 -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/concepts/workloads/pods/podpreset.md b/content/cn/docs/concepts/workloads/pods/podpreset.md similarity index 93% rename from cn/docs/concepts/workloads/pods/podpreset.md rename to content/cn/docs/concepts/workloads/pods/podpreset.md index 76d2d778beb35..81b9f5d4db0cd 100644 --- a/cn/docs/concepts/workloads/pods/podpreset.md +++ b/content/cn/docs/concepts/workloads/pods/podpreset.md @@ -2,16 +2,17 @@ approvers: - jessfraz title: Pod Preset +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 本文提供了 PodPreset 的概述。 在 pod 创建时,用户可以使用 `podpreset` 对象将特定信息注入 pod 中,这些信息可以包括 secret、 卷、卷挂载和环境变量。 -{% endcapture %} +{{% /capture %}} -{:toc} +{{< toc >}} -{% capture body %} +{{% capture body %}} ## 理解 Pod Preset `Pod Preset` 是一种 API 资源,在 pod 创建时,用户可以用它将额外的运行时需求信息注入 pod。 @@ -40,9 +41,10 @@ Kubernetes 提供了准入控制器 (`PodPreset`),该控制器被启用时, 修改 pod spec。 对于 `Env`、 `EnvFrom` 和 `VolumeMounts` 的改动, Kubernetes 修改 pod 中所有容器的规格,对于卷的改动,Kubernetes 修改 Pod spec。 +{{< note >}} **注意:** Pod Preset 能够在适当的时候修改 Pod spec 的 `spec.containers` 字段, 但是不会应用于 `initContainers` 字段。 -{: .note} +{{< /note >}} ### 为特定 Pod 禁用 Pod Preset @@ -53,18 +55,18 @@ Kubernetes 提供了准入控制器 (`PodPreset`),该控制器被启用时, 为了在集群中使用 Pod Preset,必须确保以下几点: -1. 已启用 api 类型 `settings.k8s.io/v1alpha1/podpreset`。 这可以通过在 API 服务器的 +1. 已启用 api 类型 `settings.k8s.io/v1alpha1/podpreset`。 这可以通过在 API 服务器的 `--runtime-config` 配置项中包含 `settings.k8s.io/v1alpha1=true` 来实现。 -1. 已启用准入控制器 `PodPreset`。 启用的一种方式是在 API 服务器的 `--admission-control` +1. 已启用准入控制器 `PodPreset`。 启用的一种方式是在 API 服务器的 `--admission-control` 配置项中包含 `PodPreset` 。 1. 已经通过在相应的名字空间中创建 `PodPreset` 对象,定义了 Pod preset。 -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [使用 PodPreset 将信息注入 Pods](/docs/tasks/inject-data-application/podpreset/) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/cn/docs/reference/labels-annotations-taints.md b/content/cn/docs/reference/labels-annotations-taints.md similarity index 100% rename from cn/docs/reference/labels-annotations-taints.md rename to content/cn/docs/reference/labels-annotations-taints.md diff --git a/cn/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md b/content/cn/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md similarity index 87% rename from cn/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md rename to content/cn/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md index 0a0b9b953f1c5..f18d916d10445 100644 --- a/cn/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md +++ b/content/cn/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md @@ -5,26 +5,27 @@ redirect_from: - "/docs/user-guide/pods/multi-container.html" - "/docs/tasks/configure-pod-container/communicate-containers-same-pod/" - "/docs/tasks/configure-pod-container/communicate-containers-same-pod.html" +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本文旨在说明如何让一个 Pod 内的两个容器使用一个卷(Volume)进行通信。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 创建一个包含两个容器的 Pod @@ -35,7 +36,7 @@ redirect_from: 在这个练习中,你会创建一个包含两个容器的 Pod。两个容器共享一个卷用于他们之间的通信。 Pod 的配置文件如下: -{% include code.html language="yaml" file="two-container-pod.yaml" ghlink="/docs/tasks/access-application-cluster/two-container-pod.yaml" %} +{{< code file="two-container-pod.yaml" >}} @@ -130,10 +131,10 @@ Pod 的配置文件如下: Hello from the debian container -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## 讨论 @@ -156,10 +157,10 @@ Pod 能有多个容器的主要原因是为了支持辅助应用(helper applic 在本练习中的卷为 Pod 生命周期中的容器相互通信提供了一种方法。如果 Pod 被删除或者重建了, 任何共享卷中的数据都会丢失。 -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} @@ -175,12 +176,12 @@ Pod 能有多个容器的主要原因是为了支持辅助应用(helper applic * 参见 [配置一个使用存储卷的 Pod](/docs/tasks/configure-pod-container/configure-volume-storage/)。 -* 参见 [卷](/docs/api-reference/{{page.version}}/#volume-v1-core)。 +* 参见 [卷](/docs/api-reference/{{< param "version" >}}/#volume-v1-core)。 -* 参见 [Pod](/docs/api-reference/{{page.version}}/#pod-v1-core). +* 参见 [Pod](/docs/api-reference/{{< param "version" >}}/#pod-v1-core). + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/cn/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md b/content/cn/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md similarity index 96% rename from cn/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md rename to content/cn/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md index c3583aab6ba3b..d3e74824d4ae7 100644 --- a/cn/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md +++ b/content/cn/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md @@ -1,25 +1,27 @@ --- title: 配置对多集群的访问 +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本文展示如何使用配置文件来配置对多个集群的访问。 在将集群、用户和上下文定义在一个或多个配置文件中之后,用户可以使用 `kubectl config use-context` 命令快速地在集群之间进行切换。 +{{< note >}} **注意:** 用于配置集群访问的文件有时被称为 *kubeconfig 文件*。 这是一种引用配置文件的通用方式,并不意味着存在一个名为 `kubeconfig` 的文件。 -{: .note} +{{< /note >}} -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} 需要安装 [`kubectl`](/docs/tasks/tools/install-kubectl/) 命令行工具。 -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 定义集群、用户和上下文 @@ -303,14 +305,14 @@ kubectl config view export KUBECONFIG=$KUBECONFIG_SAVED ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [使用 kubeconfig 文件组织集群访问](/docs/concepts/configuration/organize-cluster-access-kubeconfig/) -* [kubectl 配置](/docs/user-guide/kubectl/{{page.version}}/) +* [kubectl 配置](/docs/user-guide/kubectl/{{< param "version" >}}/) + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/cn/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md b/content/cn/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md similarity index 100% rename from cn/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md rename to content/cn/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md diff --git a/cn/docs/tasks/access-application-cluster/connecting-frontend-backend.md b/content/cn/docs/tasks/access-application-cluster/connecting-frontend-backend.md similarity index 85% rename from cn/docs/tasks/access-application-cluster/connecting-frontend-backend.md rename to content/cn/docs/tasks/access-application-cluster/connecting-frontend-backend.md index a63ad90777298..0c12f2410d450 100644 --- a/cn/docs/tasks/access-application-cluster/connecting-frontend-backend.md +++ b/content/cn/docs/tasks/access-application-cluster/connecting-frontend-backend.md @@ -1,9 +1,10 @@ --- title: 使用 Service 把前端连接到后端 +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} @@ -11,10 +12,10 @@ title: 使用 Service 把前端连接到后端 本任务会描述如何创建前端微服务和后端微服务。后端微服务是一个 hello 欢迎程序。 前端和后端的连接是通过 Kubernetes 服务对象(Service object)完成的。 -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} @@ -23,22 +24,22 @@ title: 使用 Service 把前端连接到后端 * 从后端将流量路由到前端 * 使用服务对象把前端应用连接到后端应用 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * 本任务使用 [外部负载均衡服务](/docs/tasks/access-application-cluster/create-external-load-balancer/), 所以需要对应的可支持此功能的环境。如果你的环境不能支持,你可以使用 [NodePort](/docs/user-guide/services/#type-nodeport) 类型的服务代替。 -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ### 使用部署对象(Deployment)创建后端 @@ -47,7 +48,7 @@ title: 使用 Service 把前端连接到后端 后端是一个简单的 hello 欢迎微服务应用。这是后端应用的 Deployment 配置文件: -{% include code.html language="yaml" file="hello.yaml" ghlink="/docs/tasks/access-application-cluster/hello.yaml" %} +{{< code file="hello.yaml" >}} 创建后端 Deployment: @@ -97,7 +98,7 @@ Events: 首先,浏览 Service 的配置文件: -{% include code.html language="yaml" file="hello-service.yaml" ghlink="/docs/tasks/access-application-cluster/hello-service.yaml" %} +{{< code file="hello-service.yaml" >}} @@ -129,7 +130,7 @@ DNS 名是 "hello",也就是 Service 配置文件中 `name` 字段的值。 前端 Deployment 中的 Pods 运行一个 nginx 镜像,这个已经配置好镜像去寻找后端的 hello Service。 只是 nginx 的配置文件: -{% include code.html file="frontend/frontend.conf" ghlink="/docs/tasks/access-application-cluster/frontend/frontend.conf" %} +{{< code file="frontend/frontend.conf" >}} @@ -137,7 +138,7 @@ DNS 名是 "hello",也就是 Service 配置文件中 `name` 字段的值。 与后端类似,前端用包含一个 Deployment 和一个 Service。Service 的配置文件包含了 `type: LoadBalancer`, 也就是说,Service 会使用你的云服务商的默认负载均衡设备。 -{% include code.html language="yaml" file="frontend.yaml" ghlink="/docs/tasks/access-application-cluster/frontend.yaml" %} +{{< code file="frontend.yaml" >}} 创建前端 Deployment 和 Service: @@ -208,16 +209,16 @@ curl http:// {"message":"Hello"} ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * 了解更多 [Services](/docs/concepts/services-networking/service/) * 了解更多 [ConfigMaps](/docs/tasks/configure-pod-container/configure-pod-configmap/) -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/cn/docs/tasks/access-application-cluster/frontend.yaml b/content/cn/docs/tasks/access-application-cluster/frontend.yaml similarity index 100% rename from cn/docs/tasks/access-application-cluster/frontend.yaml rename to content/cn/docs/tasks/access-application-cluster/frontend.yaml diff --git a/cn/docs/tasks/access-application-cluster/frontend/frontend.conf b/content/cn/docs/tasks/access-application-cluster/frontend/frontend.conf similarity index 100% rename from cn/docs/tasks/access-application-cluster/frontend/frontend.conf rename to content/cn/docs/tasks/access-application-cluster/frontend/frontend.conf diff --git a/cn/docs/tasks/access-application-cluster/hello-service.yaml b/content/cn/docs/tasks/access-application-cluster/hello-service.yaml similarity index 100% rename from cn/docs/tasks/access-application-cluster/hello-service.yaml rename to content/cn/docs/tasks/access-application-cluster/hello-service.yaml diff --git a/cn/docs/tasks/access-application-cluster/hello.yaml b/content/cn/docs/tasks/access-application-cluster/hello.yaml similarity index 100% rename from cn/docs/tasks/access-application-cluster/hello.yaml rename to content/cn/docs/tasks/access-application-cluster/hello.yaml diff --git a/cn/docs/tasks/access-application-cluster/redis-master.yaml b/content/cn/docs/tasks/access-application-cluster/redis-master.yaml similarity index 100% rename from cn/docs/tasks/access-application-cluster/redis-master.yaml rename to content/cn/docs/tasks/access-application-cluster/redis-master.yaml diff --git a/cn/docs/tasks/access-application-cluster/two-container-pod.yaml b/content/cn/docs/tasks/access-application-cluster/two-container-pod.yaml similarity index 100% rename from cn/docs/tasks/access-application-cluster/two-container-pod.yaml rename to content/cn/docs/tasks/access-application-cluster/two-container-pod.yaml diff --git a/cn/docs/tasks/administer-cluster/access-cluster-services.md b/content/cn/docs/tasks/administer-cluster/access-cluster-services.md similarity index 96% rename from cn/docs/tasks/administer-cluster/access-cluster-services.md rename to content/cn/docs/tasks/administer-cluster/access-cluster-services.md index 00e06266abd85..2035d498b415d 100644 --- a/cn/docs/tasks/administer-cluster/access-cluster-services.md +++ b/content/cn/docs/tasks/administer-cluster/access-cluster-services.md @@ -4,19 +4,20 @@ title: 访问集群上运行的服务 redirect_from: - "/docs/user-guide/accessing-the-cluster/" - "/docs/user-guide/accessing-the-cluster.html" +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本文展示了如何连接 Kubernetes 集群上运行的服务。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} -{% endcapture %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 访问集群上运行的服务 @@ -105,6 +106,6 @@ $ kubectl cluster-info - Web 服务器不总是能够传递令牌,所以你可能需要使用基本(密码)认证。 Apiserver 可以配置为接受基本认证,但你的集群可能并没有这样配置。 - 某些 web 应用可能不能工作,特别是那些使用客户端侧 javascript 的应用,它们构造 url 的方式可能不能理解代理路径前缀。 -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md b/content/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md similarity index 98% rename from cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md rename to content/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md index 408f6b4b412ba..3f94a633ad064 100644 --- a/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md +++ b/content/cn/docs/tasks/administer-cluster/apply-resource-quota-limit.md @@ -9,9 +9,10 @@ redirect_from: - "/docs/admin/resourcequota/walkthrough.html" - "/docs/tasks/configure-pod-container/apply-resource-quota-limit/" - "/docs/tasks/configure-pod-container/apply-resource-quota-limit.html" +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本示例展示了在一个 namespace 中控制资源用量的典型设置。 @@ -19,15 +20,15 @@ redirect_from: 本文展示了以下资源的使用: [Namespace](/docs/admin/namespaces), [ResourceQuota](/docs/concepts/policy/resource-quotas/) 和 [LimitRange](/docs/tasks/configure-pod-container/limit-range/)。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 场景 @@ -391,9 +392,9 @@ Scopes 提供了一种来对任何配额文档追踪的资源集合进行细分 除 `BestEffort` 和 `NotBestEffort` scopes 之外,还有用于限制长时间运行和有时限 pods 的scopes。`Terminating` scope 将匹配任何 `spec.activeDeadlineSeconds` 不为 `nil` 的 pod。`NotTerminating` scope 将匹配任何 `spec.activeDeadlineSeconds` 为 `nil` 的 pod。这些 scopes 允许你基于 pods 在你集群中 node 上的预期持久程度来为它们指定配额。 -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## 总结 @@ -406,6 +407,6 @@ Scopes 提供了一种来对任何配额文档追踪的资源集合进行细分 可以基于服务质量或者在你集群中节点上的预期持久程度来分配配额。 -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/administer-cluster/calico-network-policy.md b/content/cn/docs/tasks/administer-cluster/calico-network-policy.md similarity index 88% rename from cn/docs/tasks/administer-cluster/calico-network-policy.md rename to content/cn/docs/tasks/administer-cluster/calico-network-policy.md index 0ec16607e90bd..8fb0dcae551c7 100644 --- a/cn/docs/tasks/administer-cluster/calico-network-policy.md +++ b/content/cn/docs/tasks/administer-cluster/calico-network-policy.md @@ -2,19 +2,20 @@ approvers: - caseydavenport title: 使用 Calico 来提供 NetworkPolicy +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本页展示怎么样使用 Calico 来提供 NetworkPolicy -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * 为 Kubernetes 安装 Calico -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 使用 Calico 部署一个集群 @@ -29,9 +30,9 @@ curl -sS https://get.k8s.io | bash 如果希望了解其它的部署选项,请您参考 [Calico 项目文档](http://docs.projectcalico.org/) -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## 理解 Calico 组件 @@ -64,11 +65,11 @@ calico-policy-controller-65rw1 1/1 Running 0 - 在集群的每个节点上都会运行一个以 `calico-node` 开头命名的 Pod,用于配置 iptables 去实现那些机器上 Pods 的出/入网络策略 - 整个集群环境只有一个以 `calico-policy-controller` 开头命名的 Pod,用于从 Kubernetes API 中读取策略和标签信息,适当的对 Calico 进行配置 -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} 集群部署完成之后,您可以通过 [NetworkPolicy 入门指南](/docs/getting-started-guides/network-policy/walkthrough)去尝试使用 Kubernetes NetworkPolicy -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/administer-cluster/change-default-storage-class.md b/content/cn/docs/tasks/administer-cluster/change-default-storage-class.md similarity index 91% rename from cn/docs/tasks/administer-cluster/change-default-storage-class.md rename to content/cn/docs/tasks/administer-cluster/change-default-storage-class.md index b1ba51a064176..fe419be70b834 100644 --- a/cn/docs/tasks/administer-cluster/change-default-storage-class.md +++ b/content/cn/docs/tasks/administer-cluster/change-default-storage-class.md @@ -1,21 +1,22 @@ --- title: 改变默认 StorageClass +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本文展示了如何改变默认的 Storage Class,它用于为没有特殊需求的 PersistentVolumeClaims 配置 volumes。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 为什么要改变默认 storage class? @@ -84,11 +85,11 @@ title: 改变默认 StorageClass standard kubernetes.io/gce-pd gold (default) kubernetes.io/gce-pd -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * 了解更多关于 [StorageClasses](/docs/concepts/storage/persistent-volumes/)。 - {% endcapture %} + {{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/administer-cluster/change-pv-reclaim-policy.md b/content/cn/docs/tasks/administer-cluster/change-pv-reclaim-policy.md similarity index 82% rename from cn/docs/tasks/administer-cluster/change-pv-reclaim-policy.md rename to content/cn/docs/tasks/administer-cluster/change-pv-reclaim-policy.md index 10caf64853353..dfb3191420828 100644 --- a/cn/docs/tasks/administer-cluster/change-pv-reclaim-policy.md +++ b/content/cn/docs/tasks/administer-cluster/change-pv-reclaim-policy.md @@ -1,20 +1,21 @@ --- title: 更改 PersistentVolume 的回收策略 +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本文展示了如何更改 Kubernetes PersistentVolume 的回收策略。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 为什么要更改 PersistentVolume 的回收策略 @@ -61,9 +62,9 @@ title: 更改 PersistentVolume 的回收策略 在前面的输出中,你可以看到绑定到 claim `default/claim3` 的 volume 拥有的回收策略为 `Retain`。当用户删除 claim `default/claim3` 时,它不会被自动删除。 -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * 了解更多关于 [PersistentVolumes](/docs/concepts/storage/persistent-volumes/)的信息。 * 了解更多关于 [PersistentVolumeClaims](/docs/user-guide/persistent-volumes/#persistentvolumeclaims) 的信息。 @@ -71,10 +72,10 @@ title: 更改 PersistentVolume 的回收策略 ### 参考 -* [PersistentVolume](/docs/api-reference/{{page.version}}/#persistentvolume-v1-core) -* [PersistentVolumeClaim](/docs/api-reference/{{page.version}}/#persistentvolumeclaim-v1-core) +* [PersistentVolume](/docs/api-reference/{{< param "version" >}}/#persistentvolume-v1-core) +* [PersistentVolumeClaim](/docs/api-reference/{{< param "version" >}}/#persistentvolumeclaim-v1-core) + +* 查阅 [PersistentVolumeSpec](/docs/api-reference/{{< param "version" >}}/#persistentvolumeclaim-v1-core) 的 `persistentVolumeReclaimPolicy` 字段。 +{{% /capture %}} -* 查阅 [PersistentVolumeSpec](/docs/api-reference/{{page.version}}/#persistentvolumeclaim-v1-core) 的 `persistentVolumeReclaimPolicy` 字段。 -{% endcapture %} -{% include templates/task.md %} diff --git a/cn/docs/tasks/administer-cluster/cluster-management.md b/content/cn/docs/tasks/administer-cluster/cluster-management.md similarity index 99% rename from cn/docs/tasks/administer-cluster/cluster-management.md rename to content/cn/docs/tasks/administer-cluster/cluster-management.md index 671bd29989021..2b88c784e08a5 100644 --- a/cn/docs/tasks/administer-cluster/cluster-management.md +++ b/content/cn/docs/tasks/administer-cluster/cluster-management.md @@ -6,8 +6,7 @@ title: 集群管理 --- -* TOC -{:toc} +{{< toc >}} 本文描述了和集群生命周期相关的几个主题:创建新集群、更新集群的 master 和 worker 节点、执行节点维护(例如升级内核)以及升级运行中集群的 Kubernetes API 版本。 diff --git a/cn/docs/tasks/administer-cluster/cpu-constraints-pod-2.yaml b/content/cn/docs/tasks/administer-cluster/cpu-constraints-pod-2.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/cpu-constraints-pod-2.yaml rename to content/cn/docs/tasks/administer-cluster/cpu-constraints-pod-2.yaml diff --git a/cn/docs/tasks/administer-cluster/cpu-constraints-pod-3.yaml b/content/cn/docs/tasks/administer-cluster/cpu-constraints-pod-3.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/cpu-constraints-pod-3.yaml rename to content/cn/docs/tasks/administer-cluster/cpu-constraints-pod-3.yaml diff --git a/cn/docs/tasks/administer-cluster/cpu-constraints-pod-4.yaml b/content/cn/docs/tasks/administer-cluster/cpu-constraints-pod-4.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/cpu-constraints-pod-4.yaml rename to content/cn/docs/tasks/administer-cluster/cpu-constraints-pod-4.yaml diff --git a/cn/docs/tasks/administer-cluster/cpu-constraints-pod.yaml b/content/cn/docs/tasks/administer-cluster/cpu-constraints-pod.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/cpu-constraints-pod.yaml rename to content/cn/docs/tasks/administer-cluster/cpu-constraints-pod.yaml diff --git a/cn/docs/tasks/administer-cluster/cpu-constraints.yaml b/content/cn/docs/tasks/administer-cluster/cpu-constraints.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/cpu-constraints.yaml rename to content/cn/docs/tasks/administer-cluster/cpu-constraints.yaml diff --git a/cn/docs/tasks/administer-cluster/cpu-defaults-pod-2.yaml b/content/cn/docs/tasks/administer-cluster/cpu-defaults-pod-2.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/cpu-defaults-pod-2.yaml rename to content/cn/docs/tasks/administer-cluster/cpu-defaults-pod-2.yaml diff --git a/cn/docs/tasks/administer-cluster/cpu-defaults-pod-3.yaml b/content/cn/docs/tasks/administer-cluster/cpu-defaults-pod-3.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/cpu-defaults-pod-3.yaml rename to content/cn/docs/tasks/administer-cluster/cpu-defaults-pod-3.yaml diff --git a/cn/docs/tasks/administer-cluster/cpu-defaults-pod.yaml b/content/cn/docs/tasks/administer-cluster/cpu-defaults-pod.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/cpu-defaults-pod.yaml rename to content/cn/docs/tasks/administer-cluster/cpu-defaults-pod.yaml diff --git a/cn/docs/tasks/administer-cluster/cpu-defaults.yaml b/content/cn/docs/tasks/administer-cluster/cpu-defaults.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/cpu-defaults.yaml rename to content/cn/docs/tasks/administer-cluster/cpu-defaults.yaml diff --git a/cn/docs/tasks/administer-cluster/cpu-management-policies.md b/content/cn/docs/tasks/administer-cluster/cpu-management-policies.md similarity index 98% rename from cn/docs/tasks/administer-cluster/cpu-management-policies.md rename to content/cn/docs/tasks/administer-cluster/cpu-management-policies.md index 78266c47e02d1..9be8e7da03028 100644 --- a/cn/docs/tasks/administer-cluster/cpu-management-policies.md +++ b/content/cn/docs/tasks/administer-cluster/cpu-management-policies.md @@ -2,8 +2,7 @@ title: 控制节点上的CPU管理策略 --- -* TOC -{:toc} +{{< toc >}} 按照设计,Kubernetes 对 pod 执行相关的很多方面进行了抽象,使得用户不必关心。然而,为了正常运行,有些工作负载要求在延迟和/或性能方面有更强的保证。 为此,kubelet 提供方法来实现更复杂的负载放置策略,同时保持抽象,避免显式的放置指令。 @@ -36,16 +35,19 @@ CPU管理器定期通过 CRI 写入资源更新,以保证内存中 CPU 分配 `static` 策略针对具有整数型 CPU `requests` 的 pod ,它允许该类 pod 中的容器访问节点上的独占 CPU 资源。这种独占性是使用 [cpuset cgroup 控制器](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt) 来实现的。 +{{< note >}} **注意:** 诸如容器运行时和 kubelet 本身的系统服务可以继续在这些独占 CPU 上运行。独占性仅针对其他 pod。 -{: .note} +{{< /note >}} +{{< note >}} **注意:** 该策略的 alpha 版本不保证 Kubelet 重启前后的静态独占性分配。 -{: .note} +{{< /note >}} 该策略管理一个共享 CPU 资源池,最初,该资源池包含节点上所有的 CPU 资源。可用的独占性 CPU 资源数量等于节点的 CPU 总量减去通过 `--kube-reserved` 或 `--system-reserved` 参数保留的 CPU 。通过这些参数预留的 CPU 是以整数方式,按物理内核 ID 升序从初始共享池获取的。 共享池是 `BestEffort` 和 `Burstable` pod 运行的 CPU 集合。`Guaranteed` pod 中的容器,如果声明了非整数值的 CPU `requests` ,也将运行在共享池的 CPU 上。只有 `Guaranteed` pod 中,指定了整数型 CPU `requests` 的容器,才会被分配独占 CPU 资源。 +{{< note >}} **注意:** 当启用 static 策略时,要求使用 `--kube-reserved` 和/或 `--system-reserved` 来保证预留的 CPU 值大于零。 这是因为零预留 CPU 值可能使得共享池变空。 -{: .note} +{{< /note >}} 当 `Guaranteed` pod 调度到节点上时,如果其容器符合静态分配要求,相应的 CPU 会被从共享池中移除,并放置到容器的 cpuset 中。因为这些容器所使用的 CPU 受到调度域本身的限制,所以不需要使用 CFS 配额来进行 CPU 的绑定。换言之,容器 cpuset 中的 CPU 数量与 pod 规格中指定的整数型 CPU `limit` 相等。这种静态分配增强了 CPU 亲和性,减少了 CPU 密集的工作负载在节流时引起的上下文切换。 diff --git a/cn/docs/tasks/administer-cluster/cpu-memory-limit.md b/content/cn/docs/tasks/administer-cluster/cpu-memory-limit.md similarity index 96% rename from cn/docs/tasks/administer-cluster/cpu-memory-limit.md rename to content/cn/docs/tasks/administer-cluster/cpu-memory-limit.md index 341e3070f60f2..d867fc14b720f 100644 --- a/cn/docs/tasks/administer-cluster/cpu-memory-limit.md +++ b/content/cn/docs/tasks/administer-cluster/cpu-memory-limit.md @@ -8,9 +8,10 @@ redirect_from: - "/docs/admin/limitrange/index.html" - "/docs/tasks/configure-pod-container/limit-range/" - "/docs/tasks/configure-pod-container/limit-range.html" +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} @@ -21,15 +22,15 @@ redirect_from: 这个例子演示了如何限制 Kubernetes [Namespace](/docs/tasks/administer-cluster/namespaces-walkthrough/),以此来控制每个 Pod 的最小/最大资源限额。 另外,这个例子演示了当终端用户没有为 Pod 设置资源限额时,如何使用默认的资源限额。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} @@ -217,9 +218,9 @@ $ kubectl get namespaces NAME STATUS AGE default Active 12m ``` -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## 设置资限额制的动机 @@ -245,14 +246,14 @@ default Active 12m 想要限制单个容器或 Pod 消耗资源总量的集群操作员,能够为每个 Kubernetes Namespace 定义可允许的范围。 在没有任何明确指派的情况下,Kubernetes 系统能够使用默认的资源 *limits* 和 *requests*,如果需要的话,限制一个节点上的 Pod 的资源总量。 -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * 查看 [LimitRange 设计文档](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/resource-management/admission_control_limit_range.md) 获取更多信息。 * 查看 [资源](/docs/concepts/configuration/manage-compute-resources-container/) 获取关于 Kubernetes 资源模型的详细描述。 -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/administer-cluster/declare-network-policy.md b/content/cn/docs/tasks/administer-cluster/declare-network-policy.md similarity index 96% rename from cn/docs/tasks/administer-cluster/declare-network-policy.md rename to content/cn/docs/tasks/administer-cluster/declare-network-policy.md index d43ca3770f7d3..0fe49f3db2f37 100644 --- a/cn/docs/tasks/administer-cluster/declare-network-policy.md +++ b/content/cn/docs/tasks/administer-cluster/declare-network-policy.md @@ -3,16 +3,17 @@ approvers: - caseydavenport - danwinship title: 声明网络策略 +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本文可以帮助您开始使用 Kubernetes 的 [NetworkPolicy API](/docs/concepts/services-networking/network-policies/) 声明网络策略去管理 Pod 之间的通信 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} 您首先需要有一个支持网络策略的 Kubernetes 集群。已经有许多支持 NetworkPolicy 的网络提供商,包括: @@ -24,9 +25,9 @@ title: 声明网络策略 **注意**:以上列表是根据产品名称按字母顺序排序,而不是按推荐或偏好排序。下面示例对于使用了上面任何提供商的 Kubernetes 集群都是有效的 -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 创建一个`nginx` deployment 并且通过服务将其暴露 @@ -142,6 +143,6 @@ Hit enter for command prompt Connecting to nginx (10.100.0.16:80) / # ``` -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/administer-cluster/dns-custom-nameservers.md b/content/cn/docs/tasks/administer-cluster/dns-custom-nameservers.md similarity index 94% rename from cn/docs/tasks/administer-cluster/dns-custom-nameservers.md rename to content/cn/docs/tasks/administer-cluster/dns-custom-nameservers.md index bd84ce0b88607..2257319d48a47 100644 --- a/cn/docs/tasks/administer-cluster/dns-custom-nameservers.md +++ b/content/cn/docs/tasks/administer-cluster/dns-custom-nameservers.md @@ -3,25 +3,26 @@ approvers: - bowei - zihongz title: 在 Kubernetes 中配置私有 DNS 和上游域名服务器 +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本页展示了如何添加自定义私有 DNS 域(存根域)和上游域名服务器。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} -* {% include task-tutorial-prereqs.md %} +{{% capture prerequisites %}} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * Kubernetes 1.6 及其以上版本。 * 集群必须配置使用 `kube-dns` 插件。 -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} @@ -59,9 +60,9 @@ data: 查看 [ConfigMap 选项](#configmap-options) 获取更多关于配置选项格式的详细信息。 -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} @@ -156,6 +157,6 @@ metadata: [“172.16.0.1”] ``` -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/administer-cluster/dns-horizontal-autoscaler.yaml b/content/cn/docs/tasks/administer-cluster/dns-horizontal-autoscaler.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/dns-horizontal-autoscaler.yaml rename to content/cn/docs/tasks/administer-cluster/dns-horizontal-autoscaler.yaml diff --git a/cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md b/content/cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md similarity index 99% rename from cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md rename to content/cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md index 0ea2bee5b9175..a99010e0d4764 100644 --- a/cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md +++ b/content/cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md @@ -6,8 +6,7 @@ approvers: title: 关键插件 Pod 的调度保证 --- -* TOC -{:toc} +{{< toc >}} diff --git a/cn/docs/tasks/administer-cluster/kubelet-config-file.md b/content/cn/docs/tasks/administer-cluster/kubelet-config-file.md similarity index 91% rename from cn/docs/tasks/administer-cluster/kubelet-config-file.md rename to content/cn/docs/tasks/administer-cluster/kubelet-config-file.md index 08aaf24057944..e6ce55345e6c2 100644 --- a/cn/docs/tasks/administer-cluster/kubelet-config-file.md +++ b/content/cn/docs/tasks/administer-cluster/kubelet-config-file.md @@ -9,25 +9,26 @@ cn-reviwers: - zjj2wry - chentao1596 title: 通过配置文件设置 Kubelet 参数 +content_template: templates/task --- -{% capture overview %} -{% include feature-state-alpha.md %} +{{% capture overview %}} +{{< feature-state state="alpha" >}} 在 Kubernetes 1.8 版本上,除了可以通过命令行参数外,还可以通过保存在硬盘的配置文件设置 Kubelet 的配置子集。 将来,大部分现存的命令行参数都将被废弃,取而代之以配置文件的方式提供参数,以简化节点部署过程。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} - 需要安装 1.8 版本或更高版本的 Kubelet 二进制文件。 -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 创建配置文件 @@ -47,9 +48,9 @@ title: 通过配置文件设置 Kubelet 参数 启动 Kubelet 需要将其 `--init-config-dir` 标志设置为包含 `kubelet` 文件的文件夹路径。Kubelet 将从 `kubelet` 文件中读取由 `KubeletConfiguration` 定义的参数,而不是从参数相关的命令行标志中读取。 -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## 与动态 Kubelet 配置的关系 @@ -60,6 +61,6 @@ title: 通过配置文件设置 Kubelet 参数 请注意,`--init-config-dir` 文件的布局结构镜像了 ConfigMap 中用于动态 Kubelet 配置的数据结构;文件命名和 ConfigMap 的 key 相同,文件的内容是 ConfigMap 中相同数据结构的 JSON 或 YAML 表现形式。虽然以后可能会出现更多,但目前只有 kubelet:KubeletConfiguration 配置对。更多信息请查阅 [重新配置活动集群节点的 Kubelet](/docs/tasks/administer-cluster/reconfigure-kubelet)。 -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/administer-cluster/memory-constraints-pod-2.yaml b/content/cn/docs/tasks/administer-cluster/memory-constraints-pod-2.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/memory-constraints-pod-2.yaml rename to content/cn/docs/tasks/administer-cluster/memory-constraints-pod-2.yaml diff --git a/cn/docs/tasks/administer-cluster/memory-constraints-pod-3.yaml b/content/cn/docs/tasks/administer-cluster/memory-constraints-pod-3.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/memory-constraints-pod-3.yaml rename to content/cn/docs/tasks/administer-cluster/memory-constraints-pod-3.yaml diff --git a/cn/docs/tasks/administer-cluster/memory-constraints-pod-4.yaml b/content/cn/docs/tasks/administer-cluster/memory-constraints-pod-4.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/memory-constraints-pod-4.yaml rename to content/cn/docs/tasks/administer-cluster/memory-constraints-pod-4.yaml diff --git a/cn/docs/tasks/administer-cluster/memory-constraints-pod.yaml b/content/cn/docs/tasks/administer-cluster/memory-constraints-pod.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/memory-constraints-pod.yaml rename to content/cn/docs/tasks/administer-cluster/memory-constraints-pod.yaml diff --git a/cn/docs/tasks/administer-cluster/memory-constraints.yaml b/content/cn/docs/tasks/administer-cluster/memory-constraints.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/memory-constraints.yaml rename to content/cn/docs/tasks/administer-cluster/memory-constraints.yaml diff --git a/cn/docs/tasks/administer-cluster/memory-defaults-pod-2.yaml b/content/cn/docs/tasks/administer-cluster/memory-defaults-pod-2.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/memory-defaults-pod-2.yaml rename to content/cn/docs/tasks/administer-cluster/memory-defaults-pod-2.yaml diff --git a/cn/docs/tasks/administer-cluster/memory-defaults-pod-3.yaml b/content/cn/docs/tasks/administer-cluster/memory-defaults-pod-3.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/memory-defaults-pod-3.yaml rename to content/cn/docs/tasks/administer-cluster/memory-defaults-pod-3.yaml diff --git a/cn/docs/tasks/administer-cluster/memory-defaults-pod.yaml b/content/cn/docs/tasks/administer-cluster/memory-defaults-pod.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/memory-defaults-pod.yaml rename to content/cn/docs/tasks/administer-cluster/memory-defaults-pod.yaml diff --git a/cn/docs/tasks/administer-cluster/memory-defaults.yaml b/content/cn/docs/tasks/administer-cluster/memory-defaults.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/memory-defaults.yaml rename to content/cn/docs/tasks/administer-cluster/memory-defaults.yaml diff --git a/cn/docs/tasks/administer-cluster/my-scheduler.yaml b/content/cn/docs/tasks/administer-cluster/my-scheduler.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/my-scheduler.yaml rename to content/cn/docs/tasks/administer-cluster/my-scheduler.yaml diff --git a/cn/docs/tasks/administer-cluster/pod1.yaml b/content/cn/docs/tasks/administer-cluster/pod1.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/pod1.yaml rename to content/cn/docs/tasks/administer-cluster/pod1.yaml diff --git a/cn/docs/tasks/administer-cluster/pod2.yaml b/content/cn/docs/tasks/administer-cluster/pod2.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/pod2.yaml rename to content/cn/docs/tasks/administer-cluster/pod2.yaml diff --git a/cn/docs/tasks/administer-cluster/pod3.yaml b/content/cn/docs/tasks/administer-cluster/pod3.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/pod3.yaml rename to content/cn/docs/tasks/administer-cluster/pod3.yaml diff --git a/cn/docs/tasks/administer-cluster/quota-mem-cpu-pod-2.yaml b/content/cn/docs/tasks/administer-cluster/quota-mem-cpu-pod-2.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/quota-mem-cpu-pod-2.yaml rename to content/cn/docs/tasks/administer-cluster/quota-mem-cpu-pod-2.yaml diff --git a/cn/docs/tasks/administer-cluster/quota-mem-cpu-pod.yaml b/content/cn/docs/tasks/administer-cluster/quota-mem-cpu-pod.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/quota-mem-cpu-pod.yaml rename to content/cn/docs/tasks/administer-cluster/quota-mem-cpu-pod.yaml diff --git a/cn/docs/tasks/administer-cluster/quota-mem-cpu.yaml b/content/cn/docs/tasks/administer-cluster/quota-mem-cpu.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/quota-mem-cpu.yaml rename to content/cn/docs/tasks/administer-cluster/quota-mem-cpu.yaml diff --git a/cn/docs/tasks/administer-cluster/quota-objects-pvc-2.yaml b/content/cn/docs/tasks/administer-cluster/quota-objects-pvc-2.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/quota-objects-pvc-2.yaml rename to content/cn/docs/tasks/administer-cluster/quota-objects-pvc-2.yaml diff --git a/cn/docs/tasks/administer-cluster/quota-objects-pvc.yaml b/content/cn/docs/tasks/administer-cluster/quota-objects-pvc.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/quota-objects-pvc.yaml rename to content/cn/docs/tasks/administer-cluster/quota-objects-pvc.yaml diff --git a/cn/docs/tasks/administer-cluster/quota-objects.yaml b/content/cn/docs/tasks/administer-cluster/quota-objects.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/quota-objects.yaml rename to content/cn/docs/tasks/administer-cluster/quota-objects.yaml diff --git a/cn/docs/tasks/administer-cluster/quota-pod-deployment.yaml b/content/cn/docs/tasks/administer-cluster/quota-pod-deployment.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/quota-pod-deployment.yaml rename to content/cn/docs/tasks/administer-cluster/quota-pod-deployment.yaml diff --git a/cn/docs/tasks/administer-cluster/quota-pod-namespace.md b/content/cn/docs/tasks/administer-cluster/quota-pod-namespace.md similarity index 85% rename from cn/docs/tasks/administer-cluster/quota-pod-namespace.md rename to content/cn/docs/tasks/administer-cluster/quota-pod-namespace.md index 201baa56eb60c..0a75c4bc045e8 100644 --- a/cn/docs/tasks/administer-cluster/quota-pod-namespace.md +++ b/content/cn/docs/tasks/administer-cluster/quota-pod-namespace.md @@ -3,22 +3,22 @@ title: 配置命名空间下pod总数 --- -{% capture overview %} +{{% capture overview %}} 本文主要描述如何配置一个命名空间下可运行的pod总数。资源配额详细信息可查看:[资源配额](/docs/api-reference/v1.7/#resourcequota-v1-core) 。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 创建一个命名空间 @@ -32,7 +32,7 @@ kubectl create namespace quota-pod-example 下面是一个资源配额的配置文件: -{% include code.html language="yaml" file="quota-pod.yaml" ghlink="/docs/tasks/administer-cluster/quota-pod.yaml" %} +{{< code file="quota-pod.yaml" >}} 创建这个资源配额: @@ -61,7 +61,7 @@ status: 下面是一个Deployment的配置文件: -{% include code.html language="yaml" file="quota-pod-deployment.yaml" ghlink="/docs/tasks/administer-cluster/quota-pod-deployment.yaml" %} +{{< code file="quota-pod-deployment.yaml" >}} 在配置文件中, `replicas: 3` 告诉kubernetes尝试创建三个pods,且运行相同的应用。 @@ -100,9 +100,9 @@ lastUpdateTime: 2017-07-07T20:57:05Z kubectl delete namespace quota-pod-example ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} ### 对于集群管理 @@ -126,9 +126,9 @@ kubectl delete namespace quota-pod-example * [配置pod的QoS](/docs/tasks/configure-pod-container/quality-service-pod/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/administer-cluster/quota-pod.yaml b/content/cn/docs/tasks/administer-cluster/quota-pod.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/quota-pod.yaml rename to content/cn/docs/tasks/administer-cluster/quota-pod.yaml diff --git a/cn/docs/tasks/administer-cluster/quota-pvc-2.yaml b/content/cn/docs/tasks/administer-cluster/quota-pvc-2.yaml similarity index 100% rename from cn/docs/tasks/administer-cluster/quota-pvc-2.yaml rename to content/cn/docs/tasks/administer-cluster/quota-pvc-2.yaml diff --git a/cn/docs/tasks/administer-cluster/romana-network-policy.md b/content/cn/docs/tasks/administer-cluster/romana-network-policy.md similarity index 80% rename from cn/docs/tasks/administer-cluster/romana-network-policy.md rename to content/cn/docs/tasks/administer-cluster/romana-network-policy.md index ec542ceac2749..3c7f64fd2447a 100644 --- a/cn/docs/tasks/administer-cluster/romana-network-policy.md +++ b/content/cn/docs/tasks/administer-cluster/romana-network-policy.md @@ -2,23 +2,24 @@ approvers: - chrismarino title: 使用 Romana 来提供 NetworkPolicy +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本页展示怎么样使用 Romana 来提供 NetworkPolicy -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} 完成 [kubeadm 入门指南](/docs/getting-started-guides/kubeadm/)中的步骤1、2和3 -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 使用 kubeadm 安装 Romana @@ -38,13 +39,13 @@ title: 使用 Romana 来提供 NetworkPolicy * NetworkPolicy API -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Romana 安装完成之后,您可以通过 [NetworkPolicy 入门指南](/docs/getting-started-guides/network-policy/walkthrough)去尝试使用 Kubernetes NetworkPolicy -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/administer-cluster/static-pod.md b/content/cn/docs/tasks/administer-cluster/static-pod.md similarity index 100% rename from cn/docs/tasks/administer-cluster/static-pod.md rename to content/cn/docs/tasks/administer-cluster/static-pod.md diff --git a/cn/docs/tasks/administer-cluster/weave-network-policy.md b/content/cn/docs/tasks/administer-cluster/weave-network-policy.md similarity index 91% rename from cn/docs/tasks/administer-cluster/weave-network-policy.md rename to content/cn/docs/tasks/administer-cluster/weave-network-policy.md index 6d744bef8e559..55b7a46672a3c 100644 --- a/cn/docs/tasks/administer-cluster/weave-network-policy.md +++ b/content/cn/docs/tasks/administer-cluster/weave-network-policy.md @@ -2,23 +2,24 @@ approvers: - bboreham title: 使用 Weave 网络来提供 NetworkPolicy +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本页展示怎么样使用 Weave 网络来提供 NetworkPolicy -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} 完成 [kubeadm 入门指南](/docs/getting-started-guides/kubeadm/)中的步骤1、2和3 -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 安装 Weave 网络插件 @@ -29,9 +30,9 @@ title: 使用 Weave 网络来提供 NetworkPolicy Kubernetes 的 Weave 网络插件配有一个[网络策略控制器](https://www.weave.works/docs/net/latest/kube-addon/#npc),它监控所有命名空间下 NetworkPolicy 相关的注解,然后配置 iptables 规则生成允许或者阻断通信的策略 -{% endcapture %} +{{% /capture %}} -{% capture example %} +{{% capture example %}} ## 命名空间隔离示例 @@ -113,6 +114,6 @@ spec: Weave 网络插件安装完成之后,您可以通过 [NetworkPolicy 入门指南](/docs/getting-started-guides/network-policy/walkthrough)去尝试使用 Kubernetes NetworkPolicy -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/configure-pod-container/cpu-request-limit-2.yaml b/content/cn/docs/tasks/configure-pod-container/cpu-request-limit-2.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/cpu-request-limit-2.yaml rename to content/cn/docs/tasks/configure-pod-container/cpu-request-limit-2.yaml diff --git a/cn/docs/tasks/configure-pod-container/cpu-request-limit.yaml b/content/cn/docs/tasks/configure-pod-container/cpu-request-limit.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/cpu-request-limit.yaml rename to content/cn/docs/tasks/configure-pod-container/cpu-request-limit.yaml diff --git a/cn/docs/tasks/configure-pod-container/exec-liveness.yaml b/content/cn/docs/tasks/configure-pod-container/exec-liveness.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/exec-liveness.yaml rename to content/cn/docs/tasks/configure-pod-container/exec-liveness.yaml diff --git a/cn/docs/tasks/configure-pod-container/http-liveness.yaml b/content/cn/docs/tasks/configure-pod-container/http-liveness.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/http-liveness.yaml rename to content/cn/docs/tasks/configure-pod-container/http-liveness.yaml diff --git a/cn/docs/tasks/configure-pod-container/init-containers.yaml b/content/cn/docs/tasks/configure-pod-container/init-containers.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/init-containers.yaml rename to content/cn/docs/tasks/configure-pod-container/init-containers.yaml diff --git a/cn/docs/tasks/configure-pod-container/lifecycle-events.yaml b/content/cn/docs/tasks/configure-pod-container/lifecycle-events.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/lifecycle-events.yaml rename to content/cn/docs/tasks/configure-pod-container/lifecycle-events.yaml diff --git a/cn/docs/tasks/configure-pod-container/mem-limit-range.yaml b/content/cn/docs/tasks/configure-pod-container/mem-limit-range.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/mem-limit-range.yaml rename to content/cn/docs/tasks/configure-pod-container/mem-limit-range.yaml diff --git a/cn/docs/tasks/configure-pod-container/memory-request-limit-2.yaml b/content/cn/docs/tasks/configure-pod-container/memory-request-limit-2.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/memory-request-limit-2.yaml rename to content/cn/docs/tasks/configure-pod-container/memory-request-limit-2.yaml diff --git a/cn/docs/tasks/configure-pod-container/memory-request-limit-3.yaml b/content/cn/docs/tasks/configure-pod-container/memory-request-limit-3.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/memory-request-limit-3.yaml rename to content/cn/docs/tasks/configure-pod-container/memory-request-limit-3.yaml diff --git a/cn/docs/tasks/configure-pod-container/memory-request-limit.yaml b/content/cn/docs/tasks/configure-pod-container/memory-request-limit.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/memory-request-limit.yaml rename to content/cn/docs/tasks/configure-pod-container/memory-request-limit.yaml diff --git a/cn/docs/tasks/configure-pod-container/oir-pod-2.yaml b/content/cn/docs/tasks/configure-pod-container/oir-pod-2.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/oir-pod-2.yaml rename to content/cn/docs/tasks/configure-pod-container/oir-pod-2.yaml diff --git a/cn/docs/tasks/configure-pod-container/oir-pod.yaml b/content/cn/docs/tasks/configure-pod-container/oir-pod.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/oir-pod.yaml rename to content/cn/docs/tasks/configure-pod-container/oir-pod.yaml diff --git a/cn/docs/tasks/configure-pod-container/opaque-integer-resource.md b/content/cn/docs/tasks/configure-pod-container/opaque-integer-resource.md similarity index 82% rename from cn/docs/tasks/configure-pod-container/opaque-integer-resource.md rename to content/cn/docs/tasks/configure-pod-container/opaque-integer-resource.md index 7e2a42ef20ee0..a2b08c6e67936 100644 --- a/cn/docs/tasks/configure-pod-container/opaque-integer-resource.md +++ b/content/cn/docs/tasks/configure-pod-container/opaque-integer-resource.md @@ -1,27 +1,28 @@ --- title: 给容器分配非透明整型资源 +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本页展示了如何给容器分配非透明整型资源。 -{% include feature-state-alpha.md %} +{{< feature-state state="alpha" >}} -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} 在做这个练习之前,请在[给节点配置非透明整型资源](/docs/tasks/administer-cluster/opaque-integer-resource-node/)文档中进行练习, 该文档介绍了在一个节点上配置dongle资源。 -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 给Pod分配非透明整型资源 @@ -30,7 +31,7 @@ title: 给容器分配非透明整型资源 下面是含有一个容器的Pod的配置文件: -{% include code.html language="yaml" file="oir-pod.yaml" ghlink="/cn/docs/tasks/configure-pod-container/oir-pod.yaml" %} +{{< code file="oir-pod.yaml" >}} 在配置文件中,可以看到容器请求了3个dongles资源。 @@ -63,7 +64,7 @@ Requests: 下面是含有一个容器的Pod的配置文件。该容器请求了两个dongles资源。 -{% include code.html language="yaml" file="oir-pod-2.yaml" ghlink="/docs/tasks/configure-pod-container/oir-pod-2.yaml" %} +{{< code file="oir-pod-2.yaml" >}} Kubernetes无法再满足两个dongles的请求,因为第一个Pod已经使用了四个可用dongles中的三个。 @@ -115,9 +116,9 @@ oir-demo-2 0/1 Pending 0 6m kubectl delete pod oir-demo ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} ### 对于应用开发者 @@ -128,10 +129,10 @@ kubectl delete pod oir-demo * [给节点配置非透明整型资源](/docs/tasks/administer-cluster/opaque-integer-resource-node/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/configure-pod-container/pod-redis.yaml b/content/cn/docs/tasks/configure-pod-container/pod-redis.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/pod-redis.yaml rename to content/cn/docs/tasks/configure-pod-container/pod-redis.yaml diff --git a/cn/docs/tasks/configure-pod-container/pod.yaml b/content/cn/docs/tasks/configure-pod-container/pod.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/pod.yaml rename to content/cn/docs/tasks/configure-pod-container/pod.yaml diff --git a/cn/docs/tasks/configure-pod-container/private-reg-pod.yaml b/content/cn/docs/tasks/configure-pod-container/private-reg-pod.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/private-reg-pod.yaml rename to content/cn/docs/tasks/configure-pod-container/private-reg-pod.yaml diff --git a/cn/docs/tasks/configure-pod-container/projected-volume.yaml b/content/cn/docs/tasks/configure-pod-container/projected-volume.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/projected-volume.yaml rename to content/cn/docs/tasks/configure-pod-container/projected-volume.yaml diff --git a/cn/docs/tasks/configure-pod-container/qos-pod-2.yaml b/content/cn/docs/tasks/configure-pod-container/qos-pod-2.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/qos-pod-2.yaml rename to content/cn/docs/tasks/configure-pod-container/qos-pod-2.yaml diff --git a/cn/docs/tasks/configure-pod-container/qos-pod-3.yaml b/content/cn/docs/tasks/configure-pod-container/qos-pod-3.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/qos-pod-3.yaml rename to content/cn/docs/tasks/configure-pod-container/qos-pod-3.yaml diff --git a/cn/docs/tasks/configure-pod-container/qos-pod-4.yaml b/content/cn/docs/tasks/configure-pod-container/qos-pod-4.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/qos-pod-4.yaml rename to content/cn/docs/tasks/configure-pod-container/qos-pod-4.yaml diff --git a/cn/docs/tasks/configure-pod-container/qos-pod.yaml b/content/cn/docs/tasks/configure-pod-container/qos-pod.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/qos-pod.yaml rename to content/cn/docs/tasks/configure-pod-container/qos-pod.yaml diff --git a/cn/docs/tasks/configure-pod-container/rq-compute-resources.yaml b/content/cn/docs/tasks/configure-pod-container/rq-compute-resources.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/rq-compute-resources.yaml rename to content/cn/docs/tasks/configure-pod-container/rq-compute-resources.yaml diff --git a/cn/docs/tasks/configure-pod-container/security-context-2.yaml b/content/cn/docs/tasks/configure-pod-container/security-context-2.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/security-context-2.yaml rename to content/cn/docs/tasks/configure-pod-container/security-context-2.yaml diff --git a/cn/docs/tasks/configure-pod-container/security-context-3.yaml b/content/cn/docs/tasks/configure-pod-container/security-context-3.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/security-context-3.yaml rename to content/cn/docs/tasks/configure-pod-container/security-context-3.yaml diff --git a/cn/docs/tasks/configure-pod-container/security-context-4.yaml b/content/cn/docs/tasks/configure-pod-container/security-context-4.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/security-context-4.yaml rename to content/cn/docs/tasks/configure-pod-container/security-context-4.yaml diff --git a/cn/docs/tasks/configure-pod-container/security-context.yaml b/content/cn/docs/tasks/configure-pod-container/security-context.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/security-context.yaml rename to content/cn/docs/tasks/configure-pod-container/security-context.yaml diff --git a/cn/docs/tasks/configure-pod-container/task-pv-claim.yaml b/content/cn/docs/tasks/configure-pod-container/task-pv-claim.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/task-pv-claim.yaml rename to content/cn/docs/tasks/configure-pod-container/task-pv-claim.yaml diff --git a/cn/docs/tasks/configure-pod-container/task-pv-pod.yaml b/content/cn/docs/tasks/configure-pod-container/task-pv-pod.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/task-pv-pod.yaml rename to content/cn/docs/tasks/configure-pod-container/task-pv-pod.yaml diff --git a/cn/docs/tasks/configure-pod-container/task-pv-volume.yaml b/content/cn/docs/tasks/configure-pod-container/task-pv-volume.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/task-pv-volume.yaml rename to content/cn/docs/tasks/configure-pod-container/task-pv-volume.yaml diff --git a/cn/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml b/content/cn/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml similarity index 100% rename from cn/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml rename to content/cn/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml diff --git a/cn/docs/tasks/debug-application-cluster/debug-application.md b/content/cn/docs/tasks/debug-application-cluster/debug-application.md similarity index 99% rename from cn/docs/tasks/debug-application-cluster/debug-application.md rename to content/cn/docs/tasks/debug-application-cluster/debug-application.md index cc4513e204368..86fb3cbd95397 100644 --- a/cn/docs/tasks/debug-application-cluster/debug-application.md +++ b/content/cn/docs/tasks/debug-application-cluster/debug-application.md @@ -5,8 +5,7 @@ title: 应用故障排查 本指南帮助用户来调试kubernetes上那些没有正常运行的应用。 本指南*不能*调试集群。如果想调试集群的话,请参阅[这里](/docs/admin/cluster-troubleshooting)。 -* TOC -{:toc} +{{< toc >}} ## 诊断问题 diff --git a/cn/docs/tasks/debug-application-cluster/debug-cluster.md b/content/cn/docs/tasks/debug-application-cluster/debug-cluster.md similarity index 100% rename from cn/docs/tasks/debug-application-cluster/debug-cluster.md rename to content/cn/docs/tasks/debug-application-cluster/debug-cluster.md diff --git a/cn/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md b/content/cn/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md similarity index 99% rename from cn/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md rename to content/cn/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md index af1691c162b2e..3b14f25e6cda3 100644 --- a/cn/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md +++ b/content/cn/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md @@ -2,8 +2,7 @@ title: 调试Pods和Replication Controllers --- -* TOC -{:toc} +{{< toc >}} ## 调试Pods diff --git a/cn/docs/tasks/debug-application-cluster/debug-stateful-set.md b/content/cn/docs/tasks/debug-application-cluster/debug-stateful-set.md similarity index 92% rename from cn/docs/tasks/debug-application-cluster/debug-stateful-set.md rename to content/cn/docs/tasks/debug-application-cluster/debug-stateful-set.md index 9b77f375a62d6..61a77fa1f86e1 100644 --- a/cn/docs/tasks/debug-application-cluster/debug-stateful-set.md +++ b/content/cn/docs/tasks/debug-application-cluster/debug-stateful-set.md @@ -1,22 +1,23 @@ --- title: 调试StatefulSet +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 此任务展示如何调试StatefulSet。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * 你需要有一个Kubernetes集群,通过必要的配置使kubectl命令行工具与您的集群进行通信。 * 你应该有一个运行中的StatefulSet,以便用于调试。 -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 调试StatefulSet @@ -66,12 +67,12 @@ spec: kubectl annotate pods pod.alpha.kubernetes.io/initialized="true" --overwrite ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} 点击链接[调试init-container](/docs/tasks/troubleshoot/debug-init-containers/),了解更多信息。 -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/inject-data-application/commands.yaml b/content/cn/docs/tasks/inject-data-application/commands.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/commands.yaml rename to content/cn/docs/tasks/inject-data-application/commands.yaml diff --git a/cn/docs/tasks/inject-data-application/dapi-envars-container.yaml b/content/cn/docs/tasks/inject-data-application/dapi-envars-container.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/dapi-envars-container.yaml rename to content/cn/docs/tasks/inject-data-application/dapi-envars-container.yaml diff --git a/cn/docs/tasks/inject-data-application/dapi-envars-pod.yaml b/content/cn/docs/tasks/inject-data-application/dapi-envars-pod.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/dapi-envars-pod.yaml rename to content/cn/docs/tasks/inject-data-application/dapi-envars-pod.yaml diff --git a/cn/docs/tasks/inject-data-application/dapi-volume-resources.yaml b/content/cn/docs/tasks/inject-data-application/dapi-volume-resources.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/dapi-volume-resources.yaml rename to content/cn/docs/tasks/inject-data-application/dapi-volume-resources.yaml diff --git a/cn/docs/tasks/inject-data-application/dapi-volume.yaml b/content/cn/docs/tasks/inject-data-application/dapi-volume.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/dapi-volume.yaml rename to content/cn/docs/tasks/inject-data-application/dapi-volume.yaml diff --git a/cn/docs/tasks/inject-data-application/define-command-argument-container.md b/content/cn/docs/tasks/inject-data-application/define-command-argument-container.md similarity index 91% rename from cn/docs/tasks/inject-data-application/define-command-argument-container.md rename to content/cn/docs/tasks/inject-data-application/define-command-argument-container.md index abcef87811185..0e699d53f7a39 100644 --- a/cn/docs/tasks/inject-data-application/define-command-argument-container.md +++ b/content/cn/docs/tasks/inject-data-application/define-command-argument-container.md @@ -1,22 +1,23 @@ --- title: 为容器设置启动时要执行的命令及其入参 +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本页将展示如何为Kubernetes Pod下的容器设置启动时要执行的命令及其入参。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 创建Pod时为其下的容器设置启动时要执行的命令及其入参 @@ -30,7 +31,7 @@ title: 为容器设置启动时要执行的命令及其入参 本示例中,将创建一个只包含单个容器的Pod。在Pod配置文件中设置了一个命令与两个入参: -{% include code.html language="yaml" file="commands.yaml" ghlink="/cn/docs/tasks/inject-data-application/commands.yaml" %} +{{< code file="commands.yaml" >}} 1. 基于YAML文件创建一个Pod: @@ -67,9 +68,10 @@ title: 为容器设置启动时要执行的命令及其入参 与 [Secrets](/docs/concepts/configuration/secret/). +{{< note >}} **注意:** 环境变量需要加上括号,类似于`"$(VAR)"`。这是在`command` 或 `args`字段使用变量的格式要求。 -{: .note} +{{< /note >}} ## 通过shell来执行命令 @@ -113,16 +115,16 @@ title: 为容器设置启动时要执行的命令及其入参 | `[/ep-1]` | `[foo bar]` | `[/ep-2]` | `[zoo boo]` | `[ep-2 zoo boo]` | -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * 获取更多资讯可参考 [containers and commands](/docs/user-guide/containers/). * 获取更多资讯可参考 [configuring pods and containers](/docs/tasks/). * 获取更多资讯可参考 [running commands in a container](/docs/tasks/debug-application-cluster/get-shell-running-container/). -* 参考 [Container](/docs/api-reference/{{page.version}}/#container-v1-core). +* 参考 [Container](/docs/api-reference/{{< param "version" >}}/#container-v1-core). + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/cn/docs/tasks/inject-data-application/define-environment-variable-container.md b/content/cn/docs/tasks/inject-data-application/define-environment-variable-container.md similarity index 78% rename from cn/docs/tasks/inject-data-application/define-environment-variable-container.md rename to content/cn/docs/tasks/inject-data-application/define-environment-variable-container.md index 74734c3255a3a..e422fc750d9cb 100644 --- a/cn/docs/tasks/inject-data-application/define-environment-variable-container.md +++ b/content/cn/docs/tasks/inject-data-application/define-environment-variable-container.md @@ -1,22 +1,23 @@ --- title: 为容器设置环境变量 +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本页将展示如何为kubernetes Pod下的容器设置环境变量。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 为容器设置一个环境变量 @@ -25,7 +26,7 @@ title: 为容器设置环境变量 本示例中,将创建一个只包含单个容器的Pod。Pod的配置文件中设置环境变量的名称为`DEMO_GREETING`, 其值为`"Hello from the environment"`。下面是Pod的配置文件内容: -{% include code.html language="yaml" file="envars.yaml" ghlink="/docs/tasks/inject-data-application/envars.yaml" %} +{{< code file="envars.yaml" >}} 1. 基于YAML文件创建一个Pod: @@ -58,15 +59,15 @@ title: 为容器设置环境变量 1. 通过键入`exit`退出命令终端。 -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * 有关环境变量的更多信息,请参阅[这里](/docs/tasks/configure-pod-container/environment-variable-expose-pod-information/)。 * 有关如何通过环境变量来使用Secret,请参阅[这里](/docs/user-guide/secrets/#using-secrets-as-environment-variables)。 -* 关于[EnvVarSource](/docs/api-reference/{{page.version}}/#envvarsource-v1-core)资源的信息。 +* 关于[EnvVarSource](/docs/api-reference/{{< param "version" >}}/#envvarsource-v1-core)资源的信息。 + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/cn/docs/tasks/inject-data-application/distribute-credentials-secure.md b/content/cn/docs/tasks/inject-data-application/distribute-credentials-secure.md similarity index 81% rename from cn/docs/tasks/inject-data-application/distribute-credentials-secure.md rename to content/cn/docs/tasks/inject-data-application/distribute-credentials-secure.md index 62ff4c1aaa95b..b00e62e7504e6 100644 --- a/cn/docs/tasks/inject-data-application/distribute-credentials-secure.md +++ b/content/cn/docs/tasks/inject-data-application/distribute-credentials-secure.md @@ -1,18 +1,19 @@ --- title: 使用 Secret 安全地分发凭证 +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本文展示如何安全地将敏感数据(如密码和加密密钥)注入到 Pods 中。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 将 secret 数据转换为 base-64 形式 @@ -29,14 +30,15 @@ base-64 形式的密码为 `Mzk1MjgkdmRnN0pi`。 这里是一个配置文件,可以用来创建存有用户名和密码的 Secret: -{% include code.html language="yaml" file="secret.yaml" ghlink="/docs/tasks/inject-data-application/secret.yaml" %} +{{< code file="secret.yaml" >}} 1. 创建 Secret kubectl create -f secret.yaml + {{< note >}} **注意:** 如果想要跳过 Base64 编码的步骤,可以使用 `kubectl create secret` 命令来创建 Secret: - {: .note} + {{< /note >}} kubectl create secret generic test-secret --from-literal=username='my-app' --from-literal=password='39528$vdg7Jb' @@ -71,7 +73,7 @@ base-64 形式的密码为 `Mzk1MjgkdmRnN0pi`。 这里是一个可以用来创建 pod 的配置文件: -{% include code.html language="yaml" file="secret-pod.yaml" ghlink="/docs/tasks/inject-data-application/secret-pod.yaml" %} +{{< code file="secret-pod.yaml" >}} 1. 创建 Pod: @@ -104,7 +106,7 @@ base-64 形式的密码为 `Mzk1MjgkdmRnN0pi`。 password username -1. 在 shell 中,显示 `username` 和 `password` 文件的内容: +1. 在 shell 中,显示 `username` 和 `password` 文件的内容: root@secret-test-pod:/etc/secret-volume# cat username; echo; cat password; echo @@ -117,7 +119,7 @@ base-64 形式的密码为 `Mzk1MjgkdmRnN0pi`。 这里是一个可以用来创建 pod 的配置文件: -{% include code.html language="yaml" file="secret-envars-pod.yaml" ghlink="/docs/tasks/inject-data-application/secret-envars-pod.yaml" %} +{{< code file="secret-envars-pod.yaml" >}} 1. 创建 Pod: @@ -147,19 +149,19 @@ base-64 形式的密码为 `Mzk1MjgkdmRnN0pi`。 ... SECRET_PASSWORD=39528$vdg7Jb -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * 了解更多关于 [Secrets](/docs/concepts/configuration/secret/)。 * 了解 [Volumes](/docs/concepts/storage/volumes/)。 ### 参考 -* [Secret](/docs/api-reference/{{page.version}}/#secret-v1-core) -* [Volume](/docs/api-reference/{{page.version}}/#volume-v1-core) -* [Pod](/docs/api-reference/{{page.version}}/#pod-v1-core) +* [Secret](/docs/api-reference/{{< param "version" >}}/#secret-v1-core) +* [Volume](/docs/api-reference/{{< param "version" >}}/#volume-v1-core) +* [Pod](/docs/api-reference/{{< param "version" >}}/#pod-v1-core) + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/cn/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md b/content/cn/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md similarity index 82% rename from cn/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md rename to content/cn/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md index bbb7162888535..a230f57afdfab 100644 --- a/cn/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md +++ b/content/cn/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md @@ -1,21 +1,22 @@ --- title: 通过文件将Pod信息呈现给容器 +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 此页面描述Pod如何使用DownwardAPIVolumeFile把自己的信息呈现给pod中运行的容器。DownwardAPIVolumeFile可以呈现pod的字段和容器字段。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Downward API @@ -30,16 +31,17 @@ title: 通过文件将Pod信息呈现给容器 在这个练习中,你将创建一个包含一个容器的pod。这是该pod的配置文件: -{% include code.html language="yaml" file="dapi-volume.yaml" ghlink="/cn/docs/tasks/inject-data-application/dapi-volume.yaml" %} +{{< code file="dapi-volume.yaml" >}} 在配置文件中,你可以看到Pod有一个`downwardAPI`类型的Volume,并且挂载到容器中的`/etc`。 -查看`downwardAPI`下面的`items`数组。每个数组元素都是一个[DownwardAPIVolumeFile](/docs/resources-reference/{{page.version}}/#downwardapivolumefile-v1-core)。 +查看`downwardAPI`下面的`items`数组。每个数组元素都是一个[DownwardAPIVolumeFile](/docs/resources-reference/{{< param "version" >}}/#downwardapivolumefile-v1-core)。 第一个元素指示Pod的`metadata.labels`字段的值保存在名为`labels`的文件中。 第二个元素指示Pod的`annotations`字段的值保存在名为`annotations`的文件中。 +{{< note >}} **注意:** 本示例中的字段是Pod字段,不是Pod中容器的字段。 -{: .note} +{{< /note >}} 创建Pod: @@ -129,7 +131,7 @@ total 8 前面的练习中,你将Pod字段保存到DownwardAPIVolumeFile中。接下来这个练习,你将存储容器字段。这里是包含一个容器的pod的配置文件: -{% include code.html language="yaml" file="dapi-volume-resources.yaml" ghlink="/cn/docs/tasks/inject-data-application/dapi-volume-resources.yaml" %} +{{< code file="dapi-volume-resources.yaml" >}} 在这个配置文件中,你可以看到Pod有一个`downwardAPI`类型的Volume,并且挂载到容器的`/etc`目录。 @@ -156,9 +158,9 @@ kubectl exec -it kubernetes-downwardapi-volume-example-2 -- sh ``` 你可以使用同样的命令查看`cpu_request`, `mem_limit` 和`mem_request` 文件. -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Capabilities of the Downward API @@ -181,8 +183,9 @@ kubectl exec -it kubernetes-downwardapi-volume-example-2 -- sh * Pod的标签 * Pod的注释 +{{< note >}} **Note:** 如果容器未指定CPU和memory limits,则Downward API默认为节点可分配值。 -{: .note} +{{< /note >}} ## 投射密钥到指定路径并且指定文件权限 @@ -193,17 +196,17 @@ kubectl exec -it kubernetes-downwardapi-volume-example-2 -- sh 对于容器来说,有时候拥有自己的信息是很有用的,可避免与Kubernetes过度耦合。Downward API使得容器使用自己或者集群的信息,而不必通过Kubernetes客户端或API服务器。 一个例子是有一个现有的应用假定要用一个非常熟悉的环境变量来保存一个唯一标识。一种可能是给应用增加处理层,但这样是冗余和易出错的,而且它违反了低耦合的目标。更好的选择是使用Pod名称作为标识,把Pod名称注入这个环境变量中。 -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} -* [PodSpec](/docs/resources-reference/{{page.version}}/#podspec-v1-core) -* [Volume](/docs/resources-reference/{{page.version}}/#volume-v1-core) -* [DownwardAPIVolumeSource](/docs/resources-reference/{{page.version}}/#downwardapivolumesource-v1-core) -* [DownwardAPIVolumeFile](/docs/resources-reference/{{page.version}}/#downwardapivolumefile-v1-core) -* [ResourceFieldSelector](/docs/resources-reference/{{page.version}}/#resourcefieldselector-v1-core) +* [PodSpec](/docs/resources-reference/{{< param "version" >}}/#podspec-v1-core) +* [Volume](/docs/resources-reference/{{< param "version" >}}/#volume-v1-core) +* [DownwardAPIVolumeSource](/docs/resources-reference/{{< param "version" >}}/#downwardapivolumesource-v1-core) +* [DownwardAPIVolumeFile](/docs/resources-reference/{{< param "version" >}}/#downwardapivolumefile-v1-core) +* [ResourceFieldSelector](/docs/resources-reference/{{< param "version" >}}/#resourcefieldselector-v1-core) + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/cn/docs/tasks/inject-data-application/envars.yaml b/content/cn/docs/tasks/inject-data-application/envars.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/envars.yaml rename to content/cn/docs/tasks/inject-data-application/envars.yaml diff --git a/cn/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md b/content/cn/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md similarity index 68% rename from cn/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md rename to content/cn/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md index 1eb2c074e1b51..6ba33be637a0e 100644 --- a/cn/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md +++ b/content/cn/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md @@ -1,33 +1,34 @@ --- title: 通过环境变量将Pod信息呈现给容器 +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 此页面显示了Pod如何使用环境变量把自己的信息呈现给pod中运行的容器。环境变量可以呈现pod的字段和容器字段。 有两种方式可以将Pod和Container字段呈现给运行中的容器: -环境变量 和[DownwardAPIVolumeFiles](/docs/resources-reference/{{page.version}}/#downwardapivolumefile-v1-core). +环境变量 和[DownwardAPIVolumeFiles](/docs/resources-reference/{{< param "version" >}}/#downwardapivolumefile-v1-core). 这两种呈现Pod和Container字段的方式都称为*Downward API*。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Downward API 有两种方式可以将Pod和Container字段呈现给运行中的容器: * 环境变量 -* [DownwardAPIVolumeFiles](/docs/resources-reference/{{page.version}}/#downwardapivolumefile-v1-core) +* [DownwardAPIVolumeFiles](/docs/resources-reference/{{< param "version" >}}/#downwardapivolumefile-v1-core) 这两种呈现Pod和Container字段的方式都称为*Downward API*。 @@ -36,13 +37,14 @@ title: 通过环境变量将Pod信息呈现给容器 在这个练习中,你将创建一个包含一个容器的pod。这是该pod的配置文件: -{% include code.html language="yaml" file="dapi-envars-pod.yaml" ghlink="/cn/docs/tasks/inject-data-application/dapi-envars-pod.yaml" %} +{{< code file="dapi-envars-pod.yaml" >}} -这个配置文件中,你可以看到五个环境变量。`env`字段是一个[EnvVars](/docs/resources-reference/{{page.version}}/#envvar-v1-core)类型的数组。 +这个配置文件中,你可以看到五个环境变量。`env`字段是一个[EnvVars](/docs/resources-reference/{{< param "version" >}}/#envvar-v1-core)类型的数组。 数组中第一个元素指定`MY_NODE_NAME`这个环境变量从Pod的`spec.nodeName`字段获取变量值。同样,其它环境变量也是从Pod的字段获取它们的变量值。 +{{< note >}} **注意:** 本示例中的字段是Pod字段,不是Pod中容器的字段。 -{: .note} +{{< /note >}} 创建Pod: @@ -103,9 +105,9 @@ MY_POD_NAME=dapi-envars-fieldref 前面的练习中,你将Pod字段作为环境变量的值。接下来这个练习,你将用容器字段作为环境变量的值。这里是包含一个容器的pod的配置文件: -{% include code.html language="yaml" file="dapi-envars-container.yaml" ghlink="/cn/docs/tasks/inject-data-application/dapi-envars-container.yaml" %} +{{< code file="dapi-envars-container.yaml" >}} -这个配置文件中,你可以看到四个环境变量。`env`字段是一个[EnvVars](/docs/resources-reference/{{page.version}}/#envvar-v1-core) +这个配置文件中,你可以看到四个环境变量。`env`字段是一个[EnvVars](/docs/resources-reference/{{< param "version" >}}/#envvar-v1-core) 类型的数组。数组中第一个元素指定`MY_CPU_REQUEST`这个环境变量从容器的`requests.cpu`字段获取变量值。同样,其它环境变量也是从容器的字段获取它们的变量值。 创建Pod: @@ -135,19 +137,19 @@ kubectl logs dapi-envars-resourcefieldref 67108864 ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [给容器定义环境变量](/docs/tasks/configure-pod-container/define-environment-variable-container/) -* [PodSpec](/docs/resources-reference/{{page.version}}/#podspec-v1-core) -* [Container](/docs/resources-reference/{{page.version}}/#container-v1-core) -* [EnvVar](/docs/resources-reference/{{page.version}}/#envvar-v1-core) -* [EnvVarSource](/docs/resources-reference/{{page.version}}/#envvarsource-v1-core) -* [ObjectFieldSelector](/docs/resources-reference/{{page.version}}/#objectfieldselector-v1-core) -* [ResourceFieldSelector](/docs/resources-reference/{{page.version}}/#resourcefieldselector-v1-core) +* [PodSpec](/docs/resources-reference/{{< param "version" >}}/#podspec-v1-core) +* [Container](/docs/resources-reference/{{< param "version" >}}/#container-v1-core) +* [EnvVar](/docs/resources-reference/{{< param "version" >}}/#envvar-v1-core) +* [EnvVarSource](/docs/resources-reference/{{< param "version" >}}/#envvarsource-v1-core) +* [ObjectFieldSelector](/docs/resources-reference/{{< param "version" >}}/#objectfieldselector-v1-core) +* [ResourceFieldSelector](/docs/resources-reference/{{< param "version" >}}/#resourcefieldselector-v1-core) + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/cn/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml b/content/cn/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml rename to content/cn/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml diff --git a/cn/docs/tasks/inject-data-application/podpreset-allow-db.yaml b/content/cn/docs/tasks/inject-data-application/podpreset-allow-db.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/podpreset-allow-db.yaml rename to content/cn/docs/tasks/inject-data-application/podpreset-allow-db.yaml diff --git a/cn/docs/tasks/inject-data-application/podpreset-configmap.yaml b/content/cn/docs/tasks/inject-data-application/podpreset-configmap.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/podpreset-configmap.yaml rename to content/cn/docs/tasks/inject-data-application/podpreset-configmap.yaml diff --git a/cn/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml b/content/cn/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml rename to content/cn/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml diff --git a/cn/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml b/content/cn/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml rename to content/cn/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml diff --git a/cn/docs/tasks/inject-data-application/podpreset-merged.yaml b/content/cn/docs/tasks/inject-data-application/podpreset-merged.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/podpreset-merged.yaml rename to content/cn/docs/tasks/inject-data-application/podpreset-merged.yaml diff --git a/cn/docs/tasks/inject-data-application/podpreset-multi-merged.yaml b/content/cn/docs/tasks/inject-data-application/podpreset-multi-merged.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/podpreset-multi-merged.yaml rename to content/cn/docs/tasks/inject-data-application/podpreset-multi-merged.yaml diff --git a/cn/docs/tasks/inject-data-application/podpreset-pod.yaml b/content/cn/docs/tasks/inject-data-application/podpreset-pod.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/podpreset-pod.yaml rename to content/cn/docs/tasks/inject-data-application/podpreset-pod.yaml diff --git a/cn/docs/tasks/inject-data-application/podpreset-preset.yaml b/content/cn/docs/tasks/inject-data-application/podpreset-preset.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/podpreset-preset.yaml rename to content/cn/docs/tasks/inject-data-application/podpreset-preset.yaml diff --git a/cn/docs/tasks/inject-data-application/podpreset-proxy.yaml b/content/cn/docs/tasks/inject-data-application/podpreset-proxy.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/podpreset-proxy.yaml rename to content/cn/docs/tasks/inject-data-application/podpreset-proxy.yaml diff --git a/cn/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml b/content/cn/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml rename to content/cn/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml diff --git a/cn/docs/tasks/inject-data-application/podpreset-replicaset.yaml b/content/cn/docs/tasks/inject-data-application/podpreset-replicaset.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/podpreset-replicaset.yaml rename to content/cn/docs/tasks/inject-data-application/podpreset-replicaset.yaml diff --git a/content/cn/docs/tasks/inject-data-application/podpreset.md b/content/cn/docs/tasks/inject-data-application/podpreset.md new file mode 100644 index 0000000000000..d7aec51d50b62 --- /dev/null +++ b/content/cn/docs/tasks/inject-data-application/podpreset.md @@ -0,0 +1,123 @@ +--- +approvers: +- jessfraz +title: 使用 PodPreset 将信息注入 Pods +--- + +在 pod 创建时,用户可以使用 `podpreset` 对象将 secrets、卷挂载和环境变量等信息注入其中。 +本文展示了一些 `PodPreset` 资源使用的示例。 +用户可以从[理解 Pod Presets](/docs/concepts/workloads/pods/podpreset/) 中了解 PodPresets 的整体情况。 + +{{< toc >}} + +## 创建 Pod Preset + +### 简单的 Pod Spec 示例 + +这里是一个简单的示例,展示了如何通过 Pod Preset 修改 Pod spec 。 + +**用户提交的 pod spec:** + +{{< code file="podpreset-pod.yaml" >}} + +**Pod Preset 示例:** + +{{< code file="podpreset-preset.yaml" >}} + +**通过准入控制器后的 Pod spec:** + +{{< code file="podpreset-merged.yaml" >}} + +### 带有 `ConfigMap` 的 Pod Spec 示例 + +这里的示例展示了如何通过 Pod Preset 修改 Pod spec,Pod Preset 中定义了 `ConfigMap` 作为环境变量取值来源。 + +**用户提交的 pod spec:** + +{{< code file="podpreset-pod.yaml" >}} + +**用户提交的 `ConfigMap`:** + +{{< code file="podpreset-configmap.yaml" >}} + +**Pod Preset 示例:** + +{{< code file="podpreset-allow-db.yaml" >}} + +**通过准入控制器后的 Pod spec:** + +{{< code file="podpreset-allow-db-merged.yaml" >}} + +### 带有 Pod Spec 的 ReplicaSet 示例 + +以下示例展示了(通过 ReplicaSet 创建 pod 后)只有 pod spec 会被 Pod Preset 所修改。 + +**用户提交的 ReplicaSet:** + +{{< code file="podpreset-replicaset.yaml" >}} + +**Pod Preset 示例:** + +{{< code file="podpreset-preset.yaml" >}} + +**通过准入控制器后的 Pod spec:** + +注意 ReplicaSet spec 没有改变,用户必须检查单独的 pod 来验证 PodPreset 已被应用。 + +{{< code file="podpreset-replicaset-merged.yaml" >}} + +### 多 PodPreset 示例 + +这里的示例展示了如何通过多个 Pod 注入策略修改 Pod spec。 + +**用户提交的 pod spec:** + +{{< code file="podpreset-pod.yaml" >}} + +**Pod Preset 示例:** + +{{< code file="podpreset-preset.yaml" >}} + +**另一个 Pod Preset 示例:** + +{{< code file="podpreset-proxy.yaml" >}} + +**通过准入控制器后的 Pod spec:** + +{{< code file="podpreset-multi-merged.yaml" >}} + +### 冲突示例 + +这里的示例展示了 Pod Preset 与原 Pod 存在冲突时,Pod spec 不会被修改。 + +**用户提交的 pod spec:** + +{{< code file="podpreset-conflict-pod.yaml" >}} + +**Pod Preset 示例:** + +{{< code file="podpreset-conflict-preset.yaml" >}} + +**因存在冲突,通过准入控制器后的 Pod spec 不会改变:** + +{{< code file="podpreset-conflict-pod.yaml" >}} + +**如果运行 `kubectl describe...` 用户会看到以下事件:** + +``` +$ kubectl describe ... +.... +Events: + FirstSeen LastSeen Count From SubobjectPath Reason Message + Tue, 07 Feb 2017 16:56:12 -0700 Tue, 07 Feb 2017 16:56:12 -0700 1 {podpreset.admission.kubernetes.io/podpreset-allow-database } conflict Conflict on pod preset. Duplicate mountPath /cache. +``` + +## 删除 Pod Preset + +一旦用户不再需要 pod preset,可以使用 `kubectl` 进行删除: + +```shell +$ kubectl delete podpreset allow-database +podpreset "allow-database" deleted +``` + diff --git a/cn/docs/tasks/inject-data-application/secret-envars-pod.yaml b/content/cn/docs/tasks/inject-data-application/secret-envars-pod.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/secret-envars-pod.yaml rename to content/cn/docs/tasks/inject-data-application/secret-envars-pod.yaml diff --git a/cn/docs/tasks/inject-data-application/secret-pod.yaml b/content/cn/docs/tasks/inject-data-application/secret-pod.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/secret-pod.yaml rename to content/cn/docs/tasks/inject-data-application/secret-pod.yaml diff --git a/cn/docs/tasks/inject-data-application/secret.yaml b/content/cn/docs/tasks/inject-data-application/secret.yaml similarity index 100% rename from cn/docs/tasks/inject-data-application/secret.yaml rename to content/cn/docs/tasks/inject-data-application/secret.yaml diff --git a/cn/docs/tasks/manage-daemon/rollback-daemon-set.md b/content/cn/docs/tasks/manage-daemon/rollback-daemon-set.md similarity index 94% rename from cn/docs/tasks/manage-daemon/rollback-daemon-set.md rename to content/cn/docs/tasks/manage-daemon/rollback-daemon-set.md index c9684be648068..1b58c16438788 100644 --- a/cn/docs/tasks/manage-daemon/rollback-daemon-set.md +++ b/content/cn/docs/tasks/manage-daemon/rollback-daemon-set.md @@ -2,24 +2,25 @@ approvers: - janetkuo title: 对 DaemonSet 执行回滚 +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本文展示了如何对 DaemonSet 执行回滚。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * DaemonSet 滚动升级历史和 DaemonSet 回滚特性仅在 Kubernetes 1.7 及以后版本的 `kubectl` 中支持。 * 确保您了解如何 [对 DaemonSet 执行滚动升级](/docs/tasks/manage-daemon/update-daemon-set/)。 -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 对 DaemonSet 执行回滚 @@ -97,10 +98,10 @@ kubectl rollout status ds/ daemonset "" successfully rolled out ``` -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## 理解 DaemonSet 版本 @@ -133,6 +134,6 @@ NAME CONTROLLER REVISION AGE * 查看 [DaemonSet 滚动升级故障排除](/docs/tasks/manage-daemon/update-daemon-set/#troubleshooting)。 -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/manage-gpus/scheduling-gpus.md b/content/cn/docs/tasks/manage-gpus/scheduling-gpus.md similarity index 96% rename from cn/docs/tasks/manage-gpus/scheduling-gpus.md rename to content/cn/docs/tasks/manage-gpus/scheduling-gpus.md index 6aded77023868..45d4b8d443067 100644 --- a/cn/docs/tasks/manage-gpus/scheduling-gpus.md +++ b/content/cn/docs/tasks/manage-gpus/scheduling-gpus.md @@ -2,16 +2,17 @@ approvers: - vishh title: 调度 GPU +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} Kubernetes 提供对分布在节点上的 NVIDIA GPU 进行管理的**实验**支持。本页描述用户如何使用 GPU 以及当前使用的一些限制 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} 1. Kubernetes 节点必须预先安装好 NVIDIA 驱动,否则,Kubelet 将检测不到可用的GPU信息;如果节点的 Capacity 属性中没有出现 NIVIDA GPU 的数量,有可能是驱动没有安装或者安装失败,请尝试重新安装 @@ -23,9 +24,9 @@ Kubernetes 提供对分布在节点上的 NVIDIA GPU 进行管理的**实验** 上述预备工作完成后,节点会自动发现它上面的 NVIDIA GPU,并将其作为可调度资源暴露 -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## API @@ -173,6 +174,6 @@ spec: - 类似访问 CUDA 库这种关键的可用性问题将得到解决 -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/manage-hugepages/scheduling-hugepages.md b/content/cn/docs/tasks/manage-hugepages/scheduling-hugepages.md similarity index 91% rename from cn/docs/tasks/manage-hugepages/scheduling-hugepages.md rename to content/cn/docs/tasks/manage-hugepages/scheduling-hugepages.md index 1055b1fdd0fa2..eb1666d8731f4 100644 --- a/cn/docs/tasks/manage-hugepages/scheduling-hugepages.md +++ b/content/cn/docs/tasks/manage-hugepages/scheduling-hugepages.md @@ -2,16 +2,17 @@ approvers: - derekwaynecarr title: 管理巨页(HugePages) +content_template: templates/task --- -{% capture overview %} -{% include feature-state-alpha.md %} +{{% capture overview %}} +{{< feature-state state="alpha" >}} 作为 **alpha** 特性,Kubernetes 支持在 Pod 应用中使用预先分配的巨页(或称“大页面”,下文统称为“巨页”)。 本文描述了用户如何使用巨页,以及当前的限制。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} 1. 为了使节点能够上报巨页容量,Kubernetes 节点必须预先分配巨页。 每个节点只能预先分配一种特定规格的巨页。 @@ -19,9 +20,9 @@ title: 管理巨页(HugePages) 节点会自动发现全部巨页资源,并作为可供调度的资源进行上报。 -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## API @@ -64,6 +65,6 @@ spec: - 支持 ResourceQuota 。 - 支持 LimitRange 。 -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/run-application/deployment-patch-demo.yaml b/content/cn/docs/tasks/run-application/deployment-patch-demo.yaml similarity index 100% rename from cn/docs/tasks/run-application/deployment-patch-demo.yaml rename to content/cn/docs/tasks/run-application/deployment-patch-demo.yaml diff --git a/cn/docs/tasks/run-application/deployment-scale.yaml b/content/cn/docs/tasks/run-application/deployment-scale.yaml similarity index 100% rename from cn/docs/tasks/run-application/deployment-scale.yaml rename to content/cn/docs/tasks/run-application/deployment-scale.yaml diff --git a/cn/docs/tasks/run-application/deployment-update.yaml b/content/cn/docs/tasks/run-application/deployment-update.yaml similarity index 100% rename from cn/docs/tasks/run-application/deployment-update.yaml rename to content/cn/docs/tasks/run-application/deployment-update.yaml diff --git a/cn/docs/tasks/run-application/deployment.yaml b/content/cn/docs/tasks/run-application/deployment.yaml similarity index 100% rename from cn/docs/tasks/run-application/deployment.yaml rename to content/cn/docs/tasks/run-application/deployment.yaml diff --git a/cn/docs/tasks/run-application/gce-volume.yaml b/content/cn/docs/tasks/run-application/gce-volume.yaml similarity index 100% rename from cn/docs/tasks/run-application/gce-volume.yaml rename to content/cn/docs/tasks/run-application/gce-volume.yaml diff --git a/cn/docs/tasks/run-application/mysql-configmap.yaml b/content/cn/docs/tasks/run-application/mysql-configmap.yaml similarity index 100% rename from cn/docs/tasks/run-application/mysql-configmap.yaml rename to content/cn/docs/tasks/run-application/mysql-configmap.yaml diff --git a/cn/docs/tasks/run-application/mysql-deployment.yaml b/content/cn/docs/tasks/run-application/mysql-deployment.yaml similarity index 100% rename from cn/docs/tasks/run-application/mysql-deployment.yaml rename to content/cn/docs/tasks/run-application/mysql-deployment.yaml diff --git a/cn/docs/tasks/run-application/mysql-services.yaml b/content/cn/docs/tasks/run-application/mysql-services.yaml similarity index 100% rename from cn/docs/tasks/run-application/mysql-services.yaml rename to content/cn/docs/tasks/run-application/mysql-services.yaml diff --git a/cn/docs/tasks/run-application/mysql-statefulset.yaml b/content/cn/docs/tasks/run-application/mysql-statefulset.yaml similarity index 100% rename from cn/docs/tasks/run-application/mysql-statefulset.yaml rename to content/cn/docs/tasks/run-application/mysql-statefulset.yaml diff --git a/cn/docs/tasks/run-application/rolling-update-replication-controller.md b/content/cn/docs/tasks/run-application/rolling-update-replication-controller.md similarity index 97% rename from cn/docs/tasks/run-application/rolling-update-replication-controller.md rename to content/cn/docs/tasks/run-application/rolling-update-replication-controller.md index 60dd2c4f239f2..b4956d0d8a62c 100644 --- a/cn/docs/tasks/run-application/rolling-update-replication-controller.md +++ b/content/cn/docs/tasks/run-application/rolling-update-replication-controller.md @@ -4,12 +4,11 @@ approvers: title: 基于Replication Controller执行滚动升级 --- -* TOC -{:toc} +{{< toc >}} ## 概述 -**注**: 创建副本应用的首选方法是使用[Deployment](/docs/api-reference/{{page.version}}/#deployment-v1beta1-apps),Deployment使用[ReplicaSet](/docs/api-reference/{{page.version}}/#replicaset-v1beta1-extensions)来进行副本控制。 +**注**: 创建副本应用的首选方法是使用[Deployment](/docs/api-reference/{{< param "version" >}}/#deployment-v1beta1-apps),Deployment使用[ReplicaSet](/docs/api-reference/{{< param "version" >}}/#replicaset-v1beta1-extensions)来进行副本控制。 更多信息, 查看[使用Deployment运行一个无状态应用](/docs/tasks/run-application/run-stateless-application-deployment/)。 为了在更新服务的同时不中断业务, `kubectl` 支持['滚动更新'](/docs/user-guide/kubectl/v1.6/#rolling-update),它一次更新一个pod,而不是同时停止整个服务。 有关更多信息,请参阅 [滚动更新设计文档](https://git.k8s.io/community/contributors/design-proposals/cli/simple-rolling-update.md) 和 [滚动更新示例](/docs/tasks/run-application/rolling-update-replication-controller/)。 diff --git a/cn/docs/tasks/run-application/run-single-instance-stateful-application.md b/content/cn/docs/tasks/run-application/run-single-instance-stateful-application.md similarity index 93% rename from cn/docs/tasks/run-application/run-single-instance-stateful-application.md rename to content/cn/docs/tasks/run-application/run-single-instance-stateful-application.md index 02ae15dc867ad..7d0bfb87e6c5c 100644 --- a/cn/docs/tasks/run-application/run-single-instance-stateful-application.md +++ b/content/cn/docs/tasks/run-application/run-single-instance-stateful-application.md @@ -1,33 +1,34 @@ --- title: 运行一个单实例有状态应用 +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} 本文介绍在Kubernetes中使用PersistentVolume和Deployment如何运行一个单实例有状态应用. 该应用是MySQL. -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * 在环境中通过磁盘创建一个PersistentVolume. * 创建一个MySQL Deployment. * 在集群内以一个已知的DNS名将MySQL暴露给其他pods. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * 为了数据持久性我们将在环境上通过磁盘创建一个持久卷. 环境支持的类型见这里[here](/docs/user-guide/persistent-volumes/#types-of-persistent-volumes). 本篇文档将介绍 `GCEPersistentDisk` . `GCEPersistentDisk`卷只能工作在Google Compute Engine平台上. -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## 在环境中设置一个磁盘 @@ -40,7 +41,7 @@ gcloud compute disks create --size=20GB mysql-disk 接下来创建一个指向刚创建的 `mysql-disk`磁盘的PersistentVolume. 下面是一个PersistentVolume的配置文件,它指向上面创建的Compute Engine磁盘: -{% include code.html language="yaml" file="gce-volume.yaml" ghlink="/docs/tasks/run-application/gce-volume.yaml" %} +{{< code file="gce-volume.yaml" >}} 注意`pdName: mysql-disk` 这行与Compute Engine环境中的磁盘名称相匹配. 有关为其 他环境编写PersistentVolume配置文件的详细信息,请参见持久卷[Persistent Volumes](/docs/concepts/storage/persistent-volumes/). @@ -64,7 +65,7 @@ kubectl create -f https://k8s.io/docs/tasks/run-application/gce-volume.yaml 注意: 在配置的yaml文件中定义密码的做法是不安全的. 具体安全解决方案请参考 [Kubernetes Secrets](/docs/concepts/configuration/secret/). -{% include code.html language="yaml" file="mysql-deployment.yaml" ghlink="/docs/tasks/run-application/mysql-deployment.yaml" %} +{{< code file="mysql-deployment.yaml" >}} 1. 部署YAML文件中定义的内容: @@ -208,10 +209,10 @@ kubectl delete pv mysql-pv gcloud compute disks delete mysql-disk ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * 了解更多Deployment对象请参考 [Deployment objects](/docs/concepts/workloads/controllers/deployment/). @@ -221,6 +222,6 @@ gcloud compute disks delete mysql-disk * 卷和持久卷请参考[Volumes](/docs/concepts/storage/volumes/) and [Persistent Volumes](/docs/concepts/storage/persistent-volumes/) -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/cn/docs/tasks/run-application/run-stateless-application-deployment.md b/content/cn/docs/tasks/run-application/run-stateless-application-deployment.md similarity index 85% rename from cn/docs/tasks/run-application/run-stateless-application-deployment.md rename to content/cn/docs/tasks/run-application/run-stateless-application-deployment.md index 610f91334a216..5425525debf1c 100644 --- a/cn/docs/tasks/run-application/run-stateless-application-deployment.md +++ b/content/cn/docs/tasks/run-application/run-stateless-application-deployment.md @@ -1,37 +1,38 @@ --- title: 使用Deployment运行一个无状态应用 +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} 本文介绍通过Kubernetes Deployment对象如何去运行一个应用. -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * 创建一个nginx deployment. * 使用kubectl列举关于deployment信息. * 更新deployment. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## 创建和探究一个nginx deployment 你可以通过创建一个Kubernetes Deployment对象来运行一个应用, 可以在一个YAML文件中描述Deployment. 例如, 下面这个YAML文件描述了一个运行nginx:1.7.9 Docker镜像的Deployment: -{% include code.html language="yaml" file="deployment.yaml" ghlink="/cn/docs/tasks/run-application/deployment.yaml" %} +{{< code file="deployment.yaml" >}} 1. 通过YAML文件创建一个Deployment: @@ -89,7 +90,7 @@ title: 使用Deployment运行一个无状态应用 你可以通过更新一个新的YAML文件来更新deployment. 下面的YAML文件指定该deployment镜像更新为nginx 1.8. -{% include code.html language="yaml" file="deployment-update.yaml" ghlink="/cn/docs/tutorials/stateless-application/deployment-update.yaml" %} +{{< code file="deployment-update.yaml" >}} 1. 应用新的YAML: @@ -103,7 +104,7 @@ title: 使用Deployment运行一个无状态应用 你可以通过应用新的YAML文件来增加Deployment中pods的数量. 该YAML文件将`replicas`设置为4, 指定该Deployment应有4个pods: -{% include code.html language="yaml" file="deployment-scale.yaml" ghlink="/cn/docs/tutorials/stateless-application/deployment-scale.yaml" %} +{{< code file="deployment-scale.yaml" >}} 1. 应用新的YAML文件: @@ -131,13 +132,13 @@ title: 使用Deployment运行一个无状态应用 创建一个多副本应用首选方法是使用Deployment,反过来使用ReplicaSet. 在Deployment和ReplicaSet加入到Kubernetes之前, 多副本应用通过[ReplicationController](/docs/concepts/workloads/controllers/replicationcontroller/)来配置. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * 了解更多 [Deployment objects](/docs/concepts/workloads/controllers/deployment/). -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/cn/docs/tasks/run-application/scale-stateful-set.md b/content/cn/docs/tasks/run-application/scale-stateful-set.md similarity index 93% rename from cn/docs/tasks/run-application/scale-stateful-set.md rename to content/cn/docs/tasks/run-application/scale-stateful-set.md index 9262faae2ea43..cf4a6817a8b00 100644 --- a/cn/docs/tasks/run-application/scale-stateful-set.md +++ b/content/cn/docs/tasks/run-application/scale-stateful-set.md @@ -8,21 +8,22 @@ approvers: - kow3ns - smarterclayton title: 弹缩StatefulSet +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本文介绍如何弹缩StatefulSet. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * StatefulSets仅适用于Kubernetes1.5及以上版本. * **不是所有Stateful应用都适合弹缩.** 在弹缩前您的应用前. 您必须充分了解您的应用, 不适当的弹缩StatefulSet或许会造成应用自身功能的不稳定. * 仅当您确定该Stateful应用的集群是完全健康才可执行弹缩操作. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 使用 `kubectl` 弹缩StatefulSets @@ -78,12 +79,12 @@ StatefulSet的扩容/缩容操作. 一些分布式数据库在节点加入和同 这些情况下,最好是在应用级别进行弹缩操作, 并且只有在您确保Stateful应用的集群是完全健康时才执行弹缩. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} 了解更多 [deleting a StatefulSet](/docs/tasks/manage-stateful-set/deleting-a-statefulset/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/cn/docs/tasks/tls/certificate-rotation.md b/content/cn/docs/tasks/tls/certificate-rotation.md similarity index 94% rename from cn/docs/tasks/tls/certificate-rotation.md rename to content/cn/docs/tasks/tls/certificate-rotation.md index 726eb5bd7374f..052e887a214f5 100644 --- a/cn/docs/tasks/tls/certificate-rotation.md +++ b/content/cn/docs/tasks/tls/certificate-rotation.md @@ -3,21 +3,22 @@ approvers: - jcbsmpsn - mikedanese title: 证书轮换 +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} 本文展示如何在 kubelet 中启用并配置证书轮换。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * 要求 Kubernetes 1.8.0 或更高的版本 * Kubelet 证书轮换在 1.8.0 版本中处于 beta 阶段, 这意味着该特性可能在没有通知的情况下发生变化。 -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## 概述 @@ -59,6 +60,6 @@ Kubelet 会从 Kubernetes API 取回签署的证书,并将其写入磁盘, 会从 Kubernetes API 取回签署的证书,并将其写入磁盘。 然后它会更新与 Kubernetes API 的连接,使用新的证书重新连接到 Kubernetes API。 -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/content/cn/docs/templates/index.md b/content/cn/docs/templates/index.md new file mode 100644 index 0000000000000..ca03031f1ee91 --- /dev/null +++ b/content/cn/docs/templates/index.md @@ -0,0 +1,3 @@ +--- +headless: true +--- diff --git a/cn/docs/tutorials/configuration/configure-redis-using-configmap.md b/content/cn/docs/tutorials/configuration/configure-redis-using-configmap.md similarity index 89% rename from cn/docs/tutorials/configuration/configure-redis-using-configmap.md rename to content/cn/docs/tutorials/configuration/configure-redis-using-configmap.md index 1b633e20c3702..dcfbc65fd56a1 100644 --- a/cn/docs/tutorials/configuration/configure-redis-using-configmap.md +++ b/content/cn/docs/tutorials/configuration/configure-redis-using-configmap.md @@ -3,31 +3,32 @@ approvers: - eparis - pmorie title: 使用ConfigMap来配置Redis +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} 这篇文档基于[使用ConfigMap来配置Containers](/docs/tasks/configure-pod-container/configure-pod-configmap/) 这个任务,提供了一个使用ConfigMap来配置Redis的真实案例。 -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * 创建一个ConfigMap。 * 使用ConfigMap来配置pod参数。 * 创建pod。 * 验证是否配置成功。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * 理解[使用ConfigMap来配置Containers](/docs/tasks/configure-pod-container/configure-pod-configmap/)。 -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## 真实世界的案例:使用ConfigMap来配置Redis @@ -115,12 +116,12 @@ title: 使用ConfigMap来配置Redis 2) "allkeys-lru" ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * 了解关于[ConfigMaps](/docs/tasks/configure-pod-container/configure-pod-configmap/)的更多知识。 -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/cn/docs/tutorials/kubernetes-basics/index.html b/content/cn/docs/tutorials/kubernetes-basics/_index.html similarity index 99% rename from cn/docs/tutorials/kubernetes-basics/index.html rename to content/cn/docs/tutorials/kubernetes-basics/_index.html index c65fbabf5ae7c..f1f442a37f3aa 100644 --- a/cn/docs/tutorials/kubernetes-basics/index.html +++ b/content/cn/docs/tutorials/kubernetes-basics/_index.html @@ -1,5 +1,6 @@ --- title: 概述 +linkTitle: Try Our Interactive Tutorials --- diff --git a/cn/docs/tutorials/kubernetes-basics/cluster-interactive.html b/content/cn/docs/tutorials/kubernetes-basics/cluster-interactive.html similarity index 100% rename from cn/docs/tutorials/kubernetes-basics/cluster-interactive.html rename to content/cn/docs/tutorials/kubernetes-basics/cluster-interactive.html diff --git a/cn/docs/tutorials/kubernetes-basics/cluster-intro.html b/content/cn/docs/tutorials/kubernetes-basics/cluster-intro.html similarity index 100% rename from cn/docs/tutorials/kubernetes-basics/cluster-intro.html rename to content/cn/docs/tutorials/kubernetes-basics/cluster-intro.html diff --git a/cn/docs/tutorials/kubernetes-basics/deploy-interactive.html b/content/cn/docs/tutorials/kubernetes-basics/deploy-interactive.html similarity index 100% rename from cn/docs/tutorials/kubernetes-basics/deploy-interactive.html rename to content/cn/docs/tutorials/kubernetes-basics/deploy-interactive.html diff --git a/cn/docs/tutorials/kubernetes-basics/deploy-intro.html b/content/cn/docs/tutorials/kubernetes-basics/deploy-intro.html similarity index 100% rename from cn/docs/tutorials/kubernetes-basics/deploy-intro.html rename to content/cn/docs/tutorials/kubernetes-basics/deploy-intro.html diff --git a/cn/docs/tutorials/kubernetes-basics/explore-interactive.html b/content/cn/docs/tutorials/kubernetes-basics/explore-interactive.html similarity index 100% rename from cn/docs/tutorials/kubernetes-basics/explore-interactive.html rename to content/cn/docs/tutorials/kubernetes-basics/explore-interactive.html diff --git a/cn/docs/tutorials/kubernetes-basics/explore-intro.html b/content/cn/docs/tutorials/kubernetes-basics/explore-intro.html similarity index 100% rename from cn/docs/tutorials/kubernetes-basics/explore-intro.html rename to content/cn/docs/tutorials/kubernetes-basics/explore-intro.html diff --git a/cn/docs/tutorials/kubernetes-basics/expose-interactive.html b/content/cn/docs/tutorials/kubernetes-basics/expose-interactive.html similarity index 100% rename from cn/docs/tutorials/kubernetes-basics/expose-interactive.html rename to content/cn/docs/tutorials/kubernetes-basics/expose-interactive.html diff --git a/cn/docs/tutorials/kubernetes-basics/expose-intro.html b/content/cn/docs/tutorials/kubernetes-basics/expose-intro.html similarity index 100% rename from cn/docs/tutorials/kubernetes-basics/expose-intro.html rename to content/cn/docs/tutorials/kubernetes-basics/expose-intro.html diff --git a/cn/docs/tutorials/kubernetes-basics/scale-interactive.html b/content/cn/docs/tutorials/kubernetes-basics/scale-interactive.html similarity index 100% rename from cn/docs/tutorials/kubernetes-basics/scale-interactive.html rename to content/cn/docs/tutorials/kubernetes-basics/scale-interactive.html diff --git a/cn/docs/tutorials/kubernetes-basics/scale-intro.html b/content/cn/docs/tutorials/kubernetes-basics/scale-intro.html similarity index 100% rename from cn/docs/tutorials/kubernetes-basics/scale-intro.html rename to content/cn/docs/tutorials/kubernetes-basics/scale-intro.html diff --git a/cn/docs/tutorials/kubernetes-basics/update-interactive.html b/content/cn/docs/tutorials/kubernetes-basics/update-interactive.html similarity index 100% rename from cn/docs/tutorials/kubernetes-basics/update-interactive.html rename to content/cn/docs/tutorials/kubernetes-basics/update-interactive.html diff --git a/cn/docs/tutorials/kubernetes-basics/update-intro.html b/content/cn/docs/tutorials/kubernetes-basics/update-intro.html similarity index 100% rename from cn/docs/tutorials/kubernetes-basics/update-intro.html rename to content/cn/docs/tutorials/kubernetes-basics/update-intro.html diff --git a/cn/docs/tutorials/object-management-kubectl/imperative-object-management-command.md b/content/cn/docs/tutorials/object-management-kubectl/imperative-object-management-command.md similarity index 96% rename from cn/docs/tutorials/object-management-kubectl/imperative-object-management-command.md rename to content/cn/docs/tutorials/object-management-kubectl/imperative-object-management-command.md index 2a29daf40dca1..2e6c59fe2d49e 100644 --- a/cn/docs/tutorials/object-management-kubectl/imperative-object-management-command.md +++ b/content/cn/docs/tutorials/object-management-kubectl/imperative-object-management-command.md @@ -1,12 +1,13 @@ --- title: 使用命令式的方式管理 Kubernetes 对象 +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 直接使用内置的 `kubectl` 命令行工具,以命令式方式可以快速创建,更新和删除 Kubernetes 对象。本文档介绍了这些命令是如何组织的,以及如何使用它们来管理活动对象。 -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## 权衡 @@ -82,14 +83,14 @@ kubectl delete deployment/nginx ## 如何查看对象 -{% comment %} +{{< comment >}} TODO(pwittrock): 实现时取消注释。 您可以使用 `kubectl view` 打印对象的指定字段。 - `view`: 打印对象的特定字段的值。 -{% endcomment %} +{{< /comment >}} @@ -124,13 +125,13 @@ kubectl create --edit -f /tmp/srv.yaml 1. 使用`create --edit` 在创建对象之前打开配置文件进行编辑。 -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} - [使用对象配置管理 Kubernetes 对象(必要)](/docs/tutorials/object-management-kubectl/imperative-object-management-configuration/) - [使用对象配置(声明式)管理 Kubernetes 对象](/docs/tutorials/object-management-kubectl/declarative-object-management-configuration/) - [Kubectl 命令参考](/docs/user-guide/kubectl/v1.6/) - [Kubernetes 对象模式参考](/docs/resources-reference/v1.6/) - {% endcapture %} + {{% /capture %}} - {% include templates/concept.md %} + diff --git a/cn/docs/tutorials/object-management-kubectl/object-management.md b/content/cn/docs/tutorials/object-management-kubectl/object-management.md similarity index 96% rename from cn/docs/tutorials/object-management-kubectl/object-management.md rename to content/cn/docs/tutorials/object-management-kubectl/object-management.md index a14271a21a119..85d95adfc4a1c 100644 --- a/cn/docs/tutorials/object-management-kubectl/object-management.md +++ b/content/cn/docs/tutorials/object-management-kubectl/object-management.md @@ -1,12 +1,13 @@ --- title: Kubernetes 对象管理 +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} `kubectl` 命令行工具支持 Kubernetes 对象几种不同的创建和管理方法。本文档简要介绍了这些方法. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## 管理技巧 @@ -136,17 +137,17 @@ kubectl apply -R -f configs/ - 声明式对象配置在意外情况下难以调试和了解结果。 - 使用差异的部分更新会创建复杂的合并和补丁操作。 - {% endcapture %} + {{% /capture %}} - {% capture whatsnext %} + {{% capture whatsnext %}} - [使用命令式的命令管理 Kubernetes 对象](/docs/tutorials/object-management-kubectl/imperative-object-management-command/) - [使用对象配置管理 Kubernetes 对象(必要)](/docs/tutorials/object-management-kubectl/imperative-object-management-configuration/) - [使用对象配置(声明式)管理 Kubernetes 对象](/docs/tutorials/object-management-kubectl/declarative-object-management-configuration/) - [Kubectl 命令参考](/docs/user-guide/kubectl/v1.6/) - [Kubernetes 对象模式参考](/docs/resources-reference/v1.6/) - {% comment %} - {% endcomment %} - {% endcapture %} + {{< comment >}} + {{< /comment >}} + {{% /capture %}} - {% include templates/concept.md %} + diff --git a/cn/docs/tutorials/services/source-ip.md b/content/cn/docs/tutorials/services/source-ip.md similarity index 96% rename from cn/docs/tutorials/services/source-ip.md rename to content/cn/docs/tutorials/services/source-ip.md index 92191c5cc4424..77da6af9d071c 100644 --- a/cn/docs/tutorials/services/source-ip.md +++ b/content/cn/docs/tutorials/services/source-ip.md @@ -1,18 +1,19 @@ --- title: 使用 Source IP +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} Kubernetes 集群中运行的应用通过抽象的 Service 查找彼此,相互通信和连接外部世界。本文揭示了发送到不同类型 Services 的数据包源 IP 的内幕,你可以根据需求改变这个行为。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} ## 术语表 @@ -37,19 +38,19 @@ $ kubectl run source-ip-app --image=k8s.gcr.io/echoserver:1.4 deployment "source-ip-app" created ``` -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * 通过多种类型的 Services 暴露一个简单应用 * 理解每种 Service 类型如何处理源 IP NAT * 理解保留源 IP 的折中 -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Type=ClusterIP 类型 Services 的 Source IP @@ -301,9 +302,9 @@ __跨平台支持__ 第一类负载均衡器必须使用一种它和后端之间约定的协议来和真实的客户端 IP 通信,例如 HTTP [X-FORWARDED-FOR](https://en.wikipedia.org/wiki/X-Forwarded-For) 头,或者 [proxy 协议](http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt)。 第二类负载均衡器可以通过简单的在保存于 Service 的 `service.spec.healthCheckNodePort` 字段上创建一个 HTTP 健康检查点来使用上面描述的特性。 -{% endcapture %} +{{% /capture %}} -{% capture cleanup %} +{{% capture cleanup %}} 删除服务: @@ -319,12 +320,12 @@ $ kubectl delete svc -l run=source-ip-app $ kubectl delete deployment source-ip-app ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * 学习更多关于 [通过 services 连接应用](/docs/concepts/services-networking/connect-applications-service/) * 学习更多关于 [负载均衡](/docs/user-guide/load-balancer) -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/cn/docs/tutorials/stateful-application/Dockerfile b/content/cn/docs/tutorials/stateful-application/Dockerfile similarity index 100% rename from cn/docs/tutorials/stateful-application/Dockerfile rename to content/cn/docs/tutorials/stateful-application/Dockerfile diff --git a/cn/docs/tutorials/stateful-application/dev b/content/cn/docs/tutorials/stateful-application/FETCH_HEAD similarity index 100% rename from cn/docs/tutorials/stateful-application/dev rename to content/cn/docs/tutorials/stateful-application/FETCH_HEAD diff --git a/cn/docs/tutorials/stateful-application/basic-stateful-set.md b/content/cn/docs/tutorials/stateful-application/basic-stateful-set.md similarity index 94% rename from cn/docs/tutorials/stateful-application/basic-stateful-set.md rename to content/cn/docs/tutorials/stateful-application/basic-stateful-set.md index 5f2b5f9edf5e4..9a5bfd9ed3af7 100644 --- a/cn/docs/tutorials/stateful-application/basic-stateful-set.md +++ b/content/cn/docs/tutorials/stateful-application/basic-stateful-set.md @@ -7,14 +7,15 @@ approvers: - kow3ns - smarterclayton title: StatefulSet基本使用 +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} 本教程介绍了如何使用 [StatefulSets](/docs/concepts/abstractions/controllers/statefulsets/) 来管理应用。演示了如何创建、删除、扩容/缩容和更新 StatefulSets 的 Pods。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} 在开始本教程之前,你应该熟悉以下 Kubernetes 的概念: @@ -22,14 +23,14 @@ title: StatefulSet基本使用 * [Cluster DNS](/docs/concepts/services-networking/dns-pod-service/) * [Headless Services](/docs/concepts/services-networking/service/#headless-services) * [PersistentVolumes](/docs/concepts/storage/volumes/) -* [PersistentVolume Provisioning](http://releases.k8s.io/{{page.githubbranch}}/examples/persistent-volume-provisioning/) +* [PersistentVolume Provisioning](http://releases.k8s.io/{{< param "githubbranch" >}}/examples/persistent-volume-provisioning/) * [StatefulSets](/docs/concepts/abstractions/controllers/statefulsets/) * [kubectl CLI](/docs/user-guide/kubectl) 本教程假设你的集群被配置为动态的提供 PersistentVolumes 。如果没有这样配置,在开始本教程之前,你需要手动准备5个1 GiB的存储卷。 -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} StatefulSets 旨在与有状态的应用及分布式系统一起使用。然而在 Kubernetes 上管理有状态应用和分布式系统是一个宽泛而复杂的话题。为了演示 StatefulSet 的基本特性,并且不使前后的主题混淆,你将会使用 StatefulSet 部署一个简单的 web 应用。 @@ -40,30 +41,30 @@ StatefulSets 旨在与有状态的应用及分布式系统一起使用。然而 * 如何删除 StatefulSet * 如何对 StatefulSet 进行扩容/缩容 * 如何更新一个 StatefulSet 的 Pods - {% endcapture %} + {{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ##创建 StatefulSet 作为开始,使用如下示例创建一个 StatefulSet。它和 [StatefulSets](/docs/concepts/abstractions/controllers/statefulsets/) 概念中的示例相似。它创建了一个 [Headless Service](/docs/user-guide/services/#headless-services) `nginx` 用来发布StatefulSet `web` 中的 Pod 的 IP 地址。 -{% include code.html language="yaml" file="web.yaml" ghlink="/docs/tutorials/stateful-application/web.yaml" %} +{{< code file="web.yaml" >}} 下载上面的例子并保存为文件 `web.yaml`。 -你需要使用两个终端窗口。在第一个终端中,使用 [`kubectl get`](/docs/user-guide/kubectl/{{page.version}}/#get) 来查看 StatefulSet 的 Pods 的创建情况。 +你需要使用两个终端窗口。在第一个终端中,使用 [`kubectl get`](/docs/user-guide/kubectl/{{< param "version" >}}/#get) 来查看 StatefulSet 的 Pods 的创建情况。 ```shell kubectl get pods -w -l app=nginx ``` -在另一个终端中,使用 [`kubectl create`](/docs/user-guide/kubectl/{{page.version}}/#create) 来创建定义在 `web.yaml` 中的 Headless Service 和 StatefulSet。 +在另一个终端中,使用 [`kubectl create`](/docs/user-guide/kubectl/{{< param "version" >}}/#create) 来创建定义在 `web.yaml` 中的 Headless Service 和 StatefulSet。 ```shell kubectl create -f web.yaml @@ -135,7 +136,7 @@ web-1 1/1 Running 0 1m ### 使用稳定的网络身份标识 -每个 Pod 都拥有一个基于其顺序索引的稳定的主机名。使用[`kubectl exec`](/docs/user-guide/kubectl/{{page.version}}/#exec) 在每个 Pod 中执行`hostname` 。 +每个 Pod 都拥有一个基于其顺序索引的稳定的主机名。使用[`kubectl exec`](/docs/user-guide/kubectl/{{< param "version" >}}/#exec) 在每个 Pod 中执行`hostname` 。 ```shell for i in 0 1; do kubectl exec web-$i -- sh -c 'hostname'; done @@ -144,7 +145,7 @@ web-1 ``` -使用 [`kubectl run`](/docs/user-guide/kubectl/{{page.version}}/#run) 运行一个提供 `nslookup` 命令的容器,该命令来自于 `dnsutils` 包。通过对 Pod 的主机名执行 `nslookup`,你可以检查他们在集群内部的 DNS 地址。 +使用 [`kubectl run`](/docs/user-guide/kubectl/{{< param "version" >}}/#run) 运行一个提供 `nslookup` 命令的容器,该命令来自于 `dnsutils` 包。通过对 Pod 的主机名执行 `nslookup`,你可以检查他们在集群内部的 DNS 地址。 ```shell kubectl run -i --tty --image busybox dns-test --restart=Never --rm /bin/sh @@ -173,7 +174,7 @@ headless service 的 CNAME 指向 SRV 记录(记录每个 Running 和 Ready kubectl get pod -w -l app=nginx ``` -在另一个终端中使用 [`kubectl delete`](/docs/user-guide/kubectl/{{page.version}}/#delete) 删除 StatefulSet 中所有的 Pod。 +在另一个终端中使用 [`kubectl delete`](/docs/user-guide/kubectl/{{< param "version" >}}/#delete) 删除 StatefulSet 中所有的 Pod。 ```shell kubectl delete pod -l app=nginx @@ -313,7 +314,7 @@ web-1 ## 扩容/缩容 StatefulSet -扩容/缩容 StatefulSet 指增加或减少它的副本数。这通过更新 `replicas` 字段完成。你可以使用[`kubectl scale`](/docs/user-guide/kubectl/{{page.version}}/#scale) 或者[`kubectl patch`](/docs/user-guide/kubectl/{{page.version}}/#patch)来扩容/缩容一个 StatefulSet。 +扩容/缩容 StatefulSet 指增加或减少它的副本数。这通过更新 `replicas` 字段完成。你可以使用[`kubectl scale`](/docs/user-guide/kubectl/{{< param "version" >}}/#scale) 或者[`kubectl patch`](/docs/user-guide/kubectl/{{< param "version" >}}/#patch)来扩容/缩容一个 StatefulSet。 ### 扩容 @@ -468,12 +469,12 @@ web-0 1/1 Running 0 3s 获取 `web` StatefulSet 的 Pod 来查看他们的容器镜像。 -```shell{% raw %} +```shell kubectl get pod -l app=nginx -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\n"}{end}' web-0 k8s.gcr.io/nginx-slim:0.7 web-1 k8s.gcr.io/nginx-slim:0.8 web-2 k8s.gcr.io/nginx-slim:0.8 -{% endraw %}``` +``` `web-0` has had its image updated, but `web-0` and `web-1` still have the original image. Complete the update by deleting the remaining Pods. @@ -511,12 +512,12 @@ web-2 1/1 Running 0 36s 获取 Pod 来查看他们的容器镜像。 -```shell{% raw %} +```shell kubectl get pod -l app=nginx -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\n"}{end}' web-0 k8s.gcr.io/nginx-slim:0.7 web-1 k8s.gcr.io/nginx-slim:0.7 web-2 k8s.gcr.io/nginx-slim:0.7 -{% endraw %} + ``` @@ -587,12 +588,12 @@ StatefulSet 里的 Pod 采用和序号相反的顺序更新。在更新下一个 获取 Pod 来查看他们的容器镜像。 -```shell{% raw %} +```shell for p in 0 1 2; do kubectl get po web-$p --template '{{range $i, $c := .spec.containers}}{{$c.image}}{{end}}'; echo; done k8s.gcr.io/nginx-slim:0.8 k8s.gcr.io/nginx-slim:0.8 k8s.gcr.io/nginx-slim:0.8 -{% endraw %} + ``` StatefulSet 中的所有 Pod 现在都在运行之前的容器镜像。 @@ -644,10 +645,10 @@ web-2 1/1 Running 0 18s 获取 Pod 的容器。 -```shell{% raw %} +```shell get po web-2 --template '{{range $i, $c := .spec.containers}}{{$c.image}}{{end}}' k8s.gcr.io/nginx-slim:0.8 -{% endraw %} + ``` @@ -681,10 +682,10 @@ web-2 1/1 Running 0 18s 获取 Pod 的容器。 -```shell{% raw %} +```shell kubectl get po web-2 --template '{{range $i, $c := .spec.containers}}{{$c.image}}{{end}}' k8s.gcr.io/nginx-slim:0.7 -{% endraw %} + ``` @@ -719,10 +720,10 @@ web-1 1/1 Running 0 18s 获取 `web-1` Pod 的容器。 -```shell{% raw %} +```shell get po web-1 --template '{{range $i, $c := .spec.containers}}{{$c.image}}{{end}}' k8s.gcr.io/nginx-slim:0.8 -{% endraw %} + ``` `web-1` 被按照原来的配置恢复,因为 Pod 的序号小于分区。当指定了分区时,如果更新了 StatefulSet 的 `.spec.template`,则所有序号大于或等于分区的 Pod 都将被更新。如果一个序号小于分区的 Pod 被删除或者终止,它将被按照原来的配置恢复。 @@ -765,12 +766,12 @@ web-0 1/1 Running 0 3s 获取 Pod 的容器。 -```shell{% raw %} +```shell for p in 0 1 2; do kubectl get po web-$p --template '{{range $i, $c := .spec.containers}}{{$c.image}}{{end}}'; echo; done k8s.gcr.io/nginx-slim:0.7 k8s.gcr.io/nginx-slim:0.7 k8s.gcr.io/nginx-slim:0.7 -{% endraw %} + ``` @@ -793,7 +794,7 @@ kubectl get pods -w -l app=nginx ``` -使用 [`kubectl delete`](/docs/user-guide/kubectl/{{page.version}}/#delete) 删 除StatefulSet。请确保提供了 `--cascade=false` 参数给命令。这个参数告诉 Kubernetes 只删除 StatefulSet 而不要删除它的任何 Pod。 +使用 [`kubectl delete`](/docs/user-guide/kubectl/{{< param "version" >}}/#delete) 删 除StatefulSet。请确保提供了 `--cascade=false` 参数给命令。这个参数告诉 Kubernetes 只删除 StatefulSet 而不要删除它的任何 Pod。 ```shell kubectl delete statefulset web --cascade=false @@ -983,7 +984,7 @@ statefulset "web" deleted `Parallel` pod 管理策略告诉 StatefulSet 控制器并行的终止所有 Pod,在启动或终止另一个 Pod 前,不必等待这些 Pod 变成 Running 和 Ready 或者完全终止状态。 -{% include code.html language="yaml" file="webp.yaml" ghlink="/docs/tutorials/stateful-application/webp.yaml" %} +{{< code file="webp.yaml" >}} 下载上面的例子并保存为 `webp.yaml`。 @@ -1097,11 +1098,11 @@ StatefulSet 控制器将并发的删除所有 Pod,在删除一个 Pod 前不 ```shell kubectl delete svc nginx ``` -{% endcapture %} +{{% /capture %}} -{% capture cleanup %} +{{% capture cleanup %}} 你需要删除本教程中用到的 PersistentVolumes 的持久化存储媒体。基于你的环境、存储配置和提供方式,按照必须的步骤保证回收所有的存储。 -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/cn/docs/tutorials/stateful-application/cassandra-service.yaml b/content/cn/docs/tutorials/stateful-application/cassandra-service.yaml similarity index 100% rename from cn/docs/tutorials/stateful-application/cassandra-service.yaml rename to content/cn/docs/tutorials/stateful-application/cassandra-service.yaml diff --git a/cn/docs/tutorials/stateful-application/cassandra-statefulset.yaml b/content/cn/docs/tutorials/stateful-application/cassandra-statefulset.yaml similarity index 100% rename from cn/docs/tutorials/stateful-application/cassandra-statefulset.yaml rename to content/cn/docs/tutorials/stateful-application/cassandra-statefulset.yaml diff --git a/cn/docs/tutorials/stateful-application/cassandra.md b/content/cn/docs/tutorials/stateful-application/cassandra.md similarity index 100% rename from cn/docs/tutorials/stateful-application/cassandra.md rename to content/cn/docs/tutorials/stateful-application/cassandra.md diff --git a/content/cn/docs/tutorials/stateful-application/dev b/content/cn/docs/tutorials/stateful-application/dev new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md b/content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md similarity index 100% rename from cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md rename to content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md diff --git a/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml b/content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml similarity index 100% rename from cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml rename to content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml diff --git a/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml b/content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml similarity index 100% rename from cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml rename to content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml diff --git a/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml b/content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml similarity index 100% rename from cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml rename to content/cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml diff --git a/cn/docs/tutorials/stateful-application/web.yaml b/content/cn/docs/tutorials/stateful-application/web.yaml similarity index 100% rename from cn/docs/tutorials/stateful-application/web.yaml rename to content/cn/docs/tutorials/stateful-application/web.yaml diff --git a/cn/docs/tutorials/stateful-application/webp.yaml b/content/cn/docs/tutorials/stateful-application/webp.yaml similarity index 100% rename from cn/docs/tutorials/stateful-application/webp.yaml rename to content/cn/docs/tutorials/stateful-application/webp.yaml diff --git a/cn/docs/tutorials/stateful-application/zookeeper.md b/content/cn/docs/tutorials/stateful-application/zookeeper.md similarity index 96% rename from cn/docs/tutorials/stateful-application/zookeeper.md rename to content/cn/docs/tutorials/stateful-application/zookeeper.md index d6578d32e137a..466e453d1e650 100644 --- a/cn/docs/tutorials/stateful-application/zookeeper.md +++ b/content/cn/docs/tutorials/stateful-application/zookeeper.md @@ -9,14 +9,15 @@ approvers: - smarterclayton title: 运行 ZooKeeper, 一个 CP 分布式系统 +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} 本教程展示了在 Kubernetes 上使用 [PodDisruptionBudgets](/docs/admin/disruptions/#specifying-a-poddisruptionbudget) 和 [PodAntiAffinity](/docs/user-guide/node-selection/#inter-pod-affinity-and-anti-affinity-beta-feature) 特性运行 [Apache Zookeeper](https://zookeeper.apache.org)。 -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} 在开始本教程前,你应该熟悉以下 Kubernetes 概念。 @@ -24,7 +25,7 @@ title: 运行 ZooKeeper, 一个 CP 分布式系统 * [Cluster DNS](/docs/concepts/services-networking/dns-pod-service/) * [Headless Services](/docs/concepts/services-networking/service/#headless-services) * [PersistentVolumes](/docs/concepts/storage/volumes/) -* [PersistentVolume Provisioning](http://releases.k8s.io/{{page.githubbranch}}/examples/persistent-volume-provisioning/) +* [PersistentVolume Provisioning](http://releases.k8s.io/{{< param "githubbranch" >}}/examples/persistent-volume-provisioning/) * [ConfigMaps](/docs/tasks/configure-pod-container/configure-pod-configmap/) * [StatefulSets](/docs/concepts/abstractions/controllers/statefulsets/) * [PodDisruptionBudgets](/docs/admin/disruptions/#specifying-a-poddisruptionbudget) @@ -37,9 +38,9 @@ title: 运行 ZooKeeper, 一个 CP 分布式系统 本教程假设你的集群配置为动态的提供 PersistentVolumes。如果你的集群没有配置成这样,在开始本教程前,你需要手动准备三个 20 GiB 的卷。 -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} 在学习本教程后,你将熟悉下列内容。 @@ -47,9 +48,9 @@ title: 运行 ZooKeeper, 一个 CP 分布式系统 * 如何使用 ConfigMaps 一致性配置 ensemble。 * 如何在 ensemble 中 分布 ZooKeeper 服务的部署。 * 如何在计划维护中使用 PodDisruptionBudgets 确保服务可用性。 -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ### ZooKeeper 基础 @@ -69,10 +70,10 @@ ZooKeeper 在内存中保存它们的整个状态机,但是每个改变都被 下面的清单包含一个 [Headless Service](/docs/user-guide/services/#headless-services),一个 [ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/),一个 [PodDisruptionBudget](/docs/admin/disruptions/#specifying-a-poddisruptionbudget) 和 一个 [StatefulSet](/docs/concepts/abstractions/controllers/statefulsets/)。 -{% include code.html language="yaml" file="zookeeper.yaml" ghlink="/docs/tutorials/stateful-application/zookeeper.yaml" %} +{{< code file="zookeeper.yaml" >}} -打开一个命令行终端,使用 [`kubectl create`](/docs/user-guide/kubectl/{{page.version}}/#create) 创建这个清单。 +打开一个命令行终端,使用 [`kubectl create`](/docs/user-guide/kubectl/{{< param "version" >}}/#create) 创建这个清单。 ```shell kubectl create -f https://k8s.io/docs/tutorials/stateful-application/zookeeper.yaml @@ -89,7 +90,7 @@ statefulset "zk" created ``` -使用 [`kubectl get`](/docs/user-guide/kubectl/{{page.version}}/#get) 查看 StatefulSet 控制器创建的 Pods。 +使用 [`kubectl get`](/docs/user-guide/kubectl/{{< param "version" >}}/#get) 查看 StatefulSet 控制器创建的 Pods。 ```shell kubectl get pods -w -l app=zk @@ -127,7 +128,7 @@ StatefulSet 控制器创建了3个 Pods,每个 Pod 包含一个 [ZooKeeper 3.4 由于在匿名网络中没有用于选举 leader 的终止算法,Zab 要求显式的进行成员关系配置,以执行 leader 选举。Ensemble 中的每个服务都需要具有一个独一无二的标识符,所有的服务均需要知道标识符的全集,并且每个标志都需要和一个网络地址相关联。 -使用 [`kubectl exec`](/docs/user-guide/kubectl/{{page.version}}/#exec) 获取 `zk` StatefulSet 中 Pods 的主机名。 +使用 [`kubectl exec`](/docs/user-guide/kubectl/{{< param "version" >}}/#exec) 获取 `zk` StatefulSet 中 Pods 的主机名。 ```shell for i in 0 1 2; do kubectl exec zk-$i -- hostname; done @@ -317,7 +318,7 @@ numChildren = 0 如同在 [ZooKeeper 基础](#zookeeper-basics) 一节所提到的,ZooKeeper 提交所有的条目到一个持久 WAL,并周期性的将内存快照写入存储介质。对于使用一致性协议实现一个复制状态机的应用来说,使用 WALs 提供持久化是一种常用的技术,对于普通的存储应用也是如此。 -使用 [`kubectl delete`](/docs/user-guide/kubectl/{{page.version}}/#delete) 删除 `zk` StatefulSet。 +使用 [`kubectl delete`](/docs/user-guide/kubectl/{{< param "version" >}}/#delete) 删除 `zk` StatefulSet。 ```shell kubectl delete statefulset zk @@ -638,7 +639,7 @@ log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %- 这是在容器里安全记录日志的最简单的方法。由于应用的日志被写入标准输出,Kubernetes 将会为你处理日志轮转。Kubernetes 还实现了一个智能保存策略,保证写入标准输出和标准错误流的应用日志不会耗尽本地存储媒介。 -使用 [`kubectl logs`](/docs/user-guide/kubectl/{{page.version}}/#logs) 从一个 Pod 中取回最后几行日志。 +使用 [`kubectl logs`](/docs/user-guide/kubectl/{{< param "version" >}}/#logs) 从一个 Pod 中取回最后几行日志。 ```shell kubectl logs zk-0 --tail 20 @@ -894,9 +895,9 @@ ZooKeeper 需要一个服务的 quorum 来成功的提交数据变动。对于 获取 `zk` Stateful Set 中的 Pods 的节点。 -```shell{% raw %} +```shell for i in 0 1 2; do kubectl get pod zk-$i --template {{.spec.nodeName}}; echo ""; done -``` {% endraw %} +``` `zk` StatefulSe 中所有的 Pods 都被部署在不同的节点。 @@ -944,11 +945,11 @@ kubectl get nodes ``` -使用 [`kubectl cordon`](/docs/user-guide/kubectl/{{page.version}}/#cordon) cordon 你的集群中除4个节点以外的所有节点。 +使用 [`kubectl cordon`](/docs/user-guide/kubectl/{{< param "version" >}}/#cordon) cordon 你的集群中除4个节点以外的所有节点。 -```shell{% raw %} +```shell kubectl cordon < node name > -```{% endraw %} +``` 获取 `zk-budget` PodDisruptionBudget。 @@ -976,23 +977,23 @@ kubectl get pods -w -l app=zk 在另一个终端获取 Pods 当前调度的节点。 -```shell{% raw %} +```shell for i in 0 1 2; do kubectl get pod zk-$i --template {{.spec.nodeName}}; echo ""; done kubernetes-minion-group-pb41 kubernetes-minion-group-ixsl kubernetes-minion-group-i4c4 -{% endraw %} + ``` -使用 [`kubectl drain`](/docs/user-guide/kubectl/{{page.version}}/#drain) 来 cordon 和 drain `zk-0` Pod 调度的节点。 +使用 [`kubectl drain`](/docs/user-guide/kubectl/{{< param "version" >}}/#drain) 来 cordon 和 drain `zk-0` Pod 调度的节点。 -```shell {% raw %} +```shell kubectl drain $(kubectl get pod zk-0 --template {{.spec.nodeName}}) --ignore-daemonsets --force --delete-local-data node "kubernetes-minion-group-pb41" cordoned WARNING: Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-minion-group-pb41, kube-proxy-kubernetes-minion-group-pb41; Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-o5elz pod "zk-0" deleted node "kubernetes-minion-group-pb41" drained -{% endraw %} + ``` @@ -1018,12 +1019,12 @@ zk-0 1/1 Running 0 1m 在第一个终端持续观察 StatefulSet 的 Pods并 drain `zk-1` 调度的节点。 -```shell{% raw %} +```shell kubectl drain $(kubectl get pod zk-1 --template {{.spec.nodeName}}) --ignore-daemonsets --force --delete-local-data "kubernetes-minion-group-ixsl" cordoned WARNING: Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-minion-group-ixsl, kube-proxy-kubernetes-minion-group-ixsl; Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-voc74 pod "zk-1" deleted node "kubernetes-minion-group-ixsl" drained -{% endraw %} + ``` @@ -1056,14 +1057,14 @@ zk-1 0/1 Pending 0 0s 继续观察 stateful set 的 Pods 并 drain `zk-2` 调度的节点。 -```shell{% raw %} +```shell kubectl drain $(kubectl get pod zk-2 --template {{.spec.nodeName}}) --ignore-daemonsets --force --delete-local-data node "kubernetes-minion-group-i4c4" cordoned WARNING: Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-minion-group-i4c4, kube-proxy-kubernetes-minion-group-i4c4; Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-dyrog WARNING: Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-dyrog; Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-minion-group-i4c4, kube-proxy-kubernetes-minion-group-i4c4 There are pending pods when an error occurred: Cannot evict pod as it would violate the pod's disruption budget. pod/zk-2 -{% endraw %} + ``` @@ -1099,7 +1100,7 @@ numChildren = 0 ``` -使用 [`kubectl uncordon`](/docs/user-guide/kubectl/{{page.version}}/#uncordon) 来取消对第一个节点的隔离。 +使用 [`kubectl uncordon`](/docs/user-guide/kubectl/{{< param "version" >}}/#uncordon) 来取消对第一个节点的隔离。 ```shell kubectl uncordon kubernetes-minion-group-pb41 @@ -1140,14 +1141,14 @@ zk-1 1/1 Running 0 13m 尝试 drain `zk-2` 调度的节点。 -```shell{% raw %} +```shell kubectl drain $(kubectl get pod zk-2 --template {{.spec.nodeName}}) --ignore-daemonsets --force --delete-local-data node "kubernetes-minion-group-i4c4" already cordoned WARNING: Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-minion-group-i4c4, kube-proxy-kubernetes-minion-group-i4c4; Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-dyrog pod "heapster-v1.2.0-2604621511-wht1r" deleted pod "zk-2" deleted node "kubernetes-minion-group-i4c4" drained -{% endraw %} + ``` @@ -1164,11 +1165,11 @@ node "kubernetes-minion-group-ixsl" uncordoned 你可以同时使用 `kubectl drain` 和 PodDisruptionBudgets 来保证你的服务在维护过程中仍然可用。如果使用 drain 来隔离节点并在此之前删除 pods 使节点进入离线维护状态,如果服务表达了 disruption budget,这个 budget 将被遵守。你应该总是为关键服务分配额外容量,这样它们的 Pods 就能够迅速的重新调度。 -{% endcapture %} +{{% /capture %}} -{% capture cleanup %} +{{% capture cleanup %}} * 使用 `kubectl uncordon` 解除你集群中所有节点的隔离。 * 你需要删除在本教程中使用的 PersistentVolumes 的持久存储媒介。请遵循必须的步骤,基于你的环境、存储配置和准备方法,保证回收所有的存储。 -{% endcapture %} -{% include templates/tutorial.md %} +{{% /capture %}} + diff --git a/cn/docs/tutorials/stateful-application/zookeeper.yaml b/content/cn/docs/tutorials/stateful-application/zookeeper.yaml similarity index 100% rename from cn/docs/tutorials/stateful-application/zookeeper.yaml rename to content/cn/docs/tutorials/stateful-application/zookeeper.yaml diff --git a/cn/docs/user-guide/bad-nginx-deployment.yaml b/content/cn/docs/user-guide/bad-nginx-deployment.yaml similarity index 100% rename from cn/docs/user-guide/bad-nginx-deployment.yaml rename to content/cn/docs/user-guide/bad-nginx-deployment.yaml diff --git a/cn/docs/user-guide/curlpod.yaml b/content/cn/docs/user-guide/curlpod.yaml similarity index 100% rename from cn/docs/user-guide/curlpod.yaml rename to content/cn/docs/user-guide/curlpod.yaml diff --git a/cn/docs/user-guide/deployment.yaml b/content/cn/docs/user-guide/deployment.yaml similarity index 100% rename from cn/docs/user-guide/deployment.yaml rename to content/cn/docs/user-guide/deployment.yaml diff --git a/cn/docs/user-guide/docker-cli-to-kubectl.md b/content/cn/docs/user-guide/docker-cli-to-kubectl.md similarity index 94% rename from cn/docs/user-guide/docker-cli-to-kubectl.md rename to content/cn/docs/user-guide/docker-cli-to-kubectl.md index 497df95059757..d7f243ce91218 100644 --- a/cn/docs/user-guide/docker-cli-to-kubectl.md +++ b/content/cn/docs/user-guide/docker-cli-to-kubectl.md @@ -8,12 +8,11 @@ title: Docker 用户使用 kubectl 命令指南 在本文中,我们将向 docker-cli 用户介绍 Kubernetes 命令行如何与 api 进行交互。该命令行工具——kubectl,被设计成 docker-cli 用户所熟悉的样子,但是它们之间又存在一些必要的差异。该文档将向您展示每个 docker 子命令和 kubectl 与其等效的命令。 -* TOC -{:toc} +{{< toc >}} #### docker run -如何运行一个 nginx Deployment 并将其暴露出来? 查看 [kubectl run](/docs/user-guide/kubectl/{{page.version}}/#run) 。 +如何运行一个 nginx Deployment 并将其暴露出来? 查看 [kubectl run](/docs/user-guide/kubectl/{{< param "version" >}}/#run) 。 使用 docker 命令: @@ -34,7 +33,7 @@ deployment "nginx-app" created ``` 在 1.2 及以上版本的 Kubernetes 集群中,使用`kubectl run` 命令将创建一个名为 "nginx-app" 的 Deployment。如果您运行的是老版本,将会创建一个 replication controller。 -如果您想沿用旧的行为,使用 `--generation=run/v1` 参数,这样就会创建 replication controller。查看 [`kubectl run`](/docs/user-guide/kubectl/{{page.version}}/#run) 获取更多详细信息。 +如果您想沿用旧的行为,使用 `--generation=run/v1` 参数,这样就会创建 replication controller。查看 [`kubectl run`](/docs/user-guide/kubectl/{{< param "version" >}}/#run) 获取更多详细信息。 ```shell # expose a port through with a service @@ -57,7 +56,7 @@ kubectl run [-i] [--tty] --attach --image= #### docker ps -如何列出哪些正在运行?查看 [kubectl get](/docs/user-guide/kubectl/{{page.version}}/#get)。 +如何列出哪些正在运行?查看 [kubectl get](/docs/user-guide/kubectl/{{< param "version" >}}/#get)。 使用 docker 命令: @@ -77,7 +76,7 @@ nginx-app-5jyvm 1/1 Running 0 1h #### docker attach -如何连接到已经运行在容器中的进程?查看 [kubectl attach](/docs/user-guide/kubectl/{{page.version}}/#attach)。 +如何连接到已经运行在容器中的进程?查看 [kubectl attach](/docs/user-guide/kubectl/{{< param "version" >}}/#attach)。 使用 docker 命令: @@ -101,7 +100,7 @@ $ kubectl attach -it nginx-app-5jyvm #### docker exec -如何在容器中执行命令?查看 [kubectl exec](/docs/user-guide/kubectl/{{page.version}}/#exec)。 +如何在容器中执行命令?查看 [kubectl exec](/docs/user-guide/kubectl/{{< param "version" >}}/#exec)。 使用 docker 命令: @@ -143,7 +142,7 @@ $ kubectl exec -ti nginx-app-5jyvm -- /bin/sh #### docker logs -如何查看运行中进程的 stdout/stderr?查看 [kubectl logs](/docs/user-guide/kubectl/{{page.version}}/#logs)。 +如何查看运行中进程的 stdout/stderr?查看 [kubectl logs](/docs/user-guide/kubectl/{{< param "version" >}}/#logs)。 使用 docker 命令: @@ -173,7 +172,7 @@ $ kubectl logs --previous nginx-app-zibvs #### docker stop 和 docker rm -如何停止和删除运行中的进程?查看 [kubectl delete](/docs/user-guide/kubectl/{{page.version}}/#delete)。 +如何停止和删除运行中的进程?查看 [kubectl delete](/docs/user-guide/kubectl/{{< param "version" >}}/#delete)。 使用 docker 命令: @@ -210,7 +209,7 @@ $ kubectl get po -l run=nginx-app #### docker version -如何查看客户端和服务端的版本?查看 [kubectl version](/docs/user-guide/kubectl/{{page.version}}/#version)。 +如何查看客户端和服务端的版本?查看 [kubectl version](/docs/user-guide/kubectl/{{< param "version" >}}/#version)。 使用 docker 命令: @@ -238,7 +237,7 @@ Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.9+a3d1dfa6f4 #### docker info -如何获取有关环境和配置的各种信息?查看 [kubectl cluster-info](/docs/user-guide/kubectl/{{page.version}}/#cluster-info)。 +如何获取有关环境和配置的各种信息?查看 [kubectl cluster-info](/docs/user-guide/kubectl/{{< param "version" >}}/#cluster-info)。 使用 docker 命令: diff --git a/cn/docs/user-guide/ingress.yaml b/content/cn/docs/user-guide/ingress.yaml similarity index 100% rename from cn/docs/user-guide/ingress.yaml rename to content/cn/docs/user-guide/ingress.yaml diff --git a/cn/docs/user-guide/job.yaml b/content/cn/docs/user-guide/job.yaml similarity index 100% rename from cn/docs/user-guide/job.yaml rename to content/cn/docs/user-guide/job.yaml diff --git a/cn/docs/user-guide/jsonpath.md b/content/cn/docs/user-guide/jsonpath.md similarity index 100% rename from cn/docs/user-guide/jsonpath.md rename to content/cn/docs/user-guide/jsonpath.md diff --git a/cn/docs/user-guide/kubectl-overview.md b/content/cn/docs/user-guide/kubectl-overview.md similarity index 100% rename from cn/docs/user-guide/kubectl-overview.md rename to content/cn/docs/user-guide/kubectl-overview.md diff --git a/cn/docs/user-guide/multi-pod.yaml b/content/cn/docs/user-guide/multi-pod.yaml similarity index 100% rename from cn/docs/user-guide/multi-pod.yaml rename to content/cn/docs/user-guide/multi-pod.yaml diff --git a/cn/docs/user-guide/new-nginx-deployment.yaml b/content/cn/docs/user-guide/new-nginx-deployment.yaml similarity index 100% rename from cn/docs/user-guide/new-nginx-deployment.yaml rename to content/cn/docs/user-guide/new-nginx-deployment.yaml diff --git a/cn/docs/user-guide/nginx-app.yaml b/content/cn/docs/user-guide/nginx-app.yaml similarity index 100% rename from cn/docs/user-guide/nginx-app.yaml rename to content/cn/docs/user-guide/nginx-app.yaml diff --git a/cn/docs/user-guide/nginx-deployment.yaml b/content/cn/docs/user-guide/nginx-deployment.yaml similarity index 100% rename from cn/docs/user-guide/nginx-deployment.yaml rename to content/cn/docs/user-guide/nginx-deployment.yaml diff --git a/cn/docs/user-guide/nginx-init-containers.yaml b/content/cn/docs/user-guide/nginx-init-containers.yaml similarity index 100% rename from cn/docs/user-guide/nginx-init-containers.yaml rename to content/cn/docs/user-guide/nginx-init-containers.yaml diff --git a/cn/docs/user-guide/nginx-lifecycle-deployment.yaml b/content/cn/docs/user-guide/nginx-lifecycle-deployment.yaml similarity index 100% rename from cn/docs/user-guide/nginx-lifecycle-deployment.yaml rename to content/cn/docs/user-guide/nginx-lifecycle-deployment.yaml diff --git a/cn/docs/user-guide/nginx-probe-deployment.yaml b/content/cn/docs/user-guide/nginx-probe-deployment.yaml similarity index 100% rename from cn/docs/user-guide/nginx-probe-deployment.yaml rename to content/cn/docs/user-guide/nginx-probe-deployment.yaml diff --git a/cn/docs/user-guide/nginx-secure-app.yaml b/content/cn/docs/user-guide/nginx-secure-app.yaml similarity index 100% rename from cn/docs/user-guide/nginx-secure-app.yaml rename to content/cn/docs/user-guide/nginx-secure-app.yaml diff --git a/cn/docs/user-guide/nginx-svc.yaml b/content/cn/docs/user-guide/nginx-svc.yaml similarity index 100% rename from cn/docs/user-guide/nginx-svc.yaml rename to content/cn/docs/user-guide/nginx-svc.yaml diff --git a/cn/docs/user-guide/pod-w-message.yaml b/content/cn/docs/user-guide/pod-w-message.yaml similarity index 100% rename from cn/docs/user-guide/pod-w-message.yaml rename to content/cn/docs/user-guide/pod-w-message.yaml diff --git a/cn/docs/user-guide/pod.yaml b/content/cn/docs/user-guide/pod.yaml similarity index 100% rename from cn/docs/user-guide/pod.yaml rename to content/cn/docs/user-guide/pod.yaml diff --git a/cn/docs/user-guide/redis-deployment.yaml b/content/cn/docs/user-guide/redis-deployment.yaml similarity index 100% rename from cn/docs/user-guide/redis-deployment.yaml rename to content/cn/docs/user-guide/redis-deployment.yaml diff --git a/cn/docs/user-guide/redis-resource-deployment.yaml b/content/cn/docs/user-guide/redis-resource-deployment.yaml similarity index 100% rename from cn/docs/user-guide/redis-resource-deployment.yaml rename to content/cn/docs/user-guide/redis-resource-deployment.yaml diff --git a/cn/docs/user-guide/redis-secret-deployment.yaml b/content/cn/docs/user-guide/redis-secret-deployment.yaml similarity index 100% rename from cn/docs/user-guide/redis-secret-deployment.yaml rename to content/cn/docs/user-guide/redis-secret-deployment.yaml diff --git a/cn/docs/user-guide/run-my-nginx.yaml b/content/cn/docs/user-guide/run-my-nginx.yaml similarity index 100% rename from cn/docs/user-guide/run-my-nginx.yaml rename to content/cn/docs/user-guide/run-my-nginx.yaml diff --git a/cn/docs/whatisk8s.md b/content/cn/docs/whatisk8s.md similarity index 74% rename from cn/docs/whatisk8s.md rename to content/cn/docs/whatisk8s.md index 6d5a93dc89546..0c49dc965a5ca 100644 --- a/cn/docs/whatisk8s.md +++ b/content/cn/docs/whatisk8s.md @@ -5,6 +5,6 @@ approvers: title: 认识 Kubernetes? --- -{% include user-guide-content-moved.md %} +{{< include "user-guide-content-moved.md" >}} [认识 Kubernetes?](/docs/concepts/overview/what-is-kubernetes/) diff --git a/_includes/default-storage-class-prereqs.md b/content/cn/includes/default-storage-class-prereqs.md similarity index 100% rename from _includes/default-storage-class-prereqs.md rename to content/cn/includes/default-storage-class-prereqs.md diff --git a/_includes/federated-task-tutorial-prereqs.md b/content/cn/includes/federated-task-tutorial-prereqs.md similarity index 100% rename from _includes/federated-task-tutorial-prereqs.md rename to content/cn/includes/federated-task-tutorial-prereqs.md diff --git a/_includes/federation-content-moved.md b/content/cn/includes/federation-content-moved.md similarity index 100% rename from _includes/federation-content-moved.md rename to content/cn/includes/federation-content-moved.md diff --git a/_includes/federation-current-state.md b/content/cn/includes/federation-current-state.md similarity index 100% rename from _includes/federation-current-state.md rename to content/cn/includes/federation-current-state.md diff --git a/content/cn/includes/index.md b/content/cn/includes/index.md new file mode 100644 index 0000000000000..ca03031f1ee91 --- /dev/null +++ b/content/cn/includes/index.md @@ -0,0 +1,3 @@ +--- +headless: true +--- diff --git a/_includes/task-tutorial-prereqs.md b/content/cn/includes/task-tutorial-prereqs.md similarity index 55% rename from _includes/task-tutorial-prereqs.md rename to content/cn/includes/task-tutorial-prereqs.md index 46ae4993a1d3f..6f1407fe45913 100644 --- a/_includes/task-tutorial-prereqs.md +++ b/content/cn/includes/task-tutorial-prereqs.md @@ -6,9 +6,3 @@ or you can use one of these Kubernetes playgrounds: * [Katacoda](https://www.katacoda.com/courses/kubernetes/playground) * [Play with Kubernetes](http://labs.play-with-k8s.com/) - -{% if page.min-kubernetes-server-version == page.version %} -Your Kubernetes server must be version {{page.min-kubernetes-server-version}}. -{% elsif page.min-kubernetes-server-version %} -Your Kubernetes server must be version {{page.min-kubernetes-server-version}} or later. -{% endif %} To check the version, enter `kubectl version`. diff --git a/_includes/user-guide-content-moved.md b/content/cn/includes/user-guide-content-moved.md similarity index 100% rename from _includes/user-guide-content-moved.md rename to content/cn/includes/user-guide-content-moved.md diff --git a/_includes/user-guide-migration-notice.md b/content/cn/includes/user-guide-migration-notice.md similarity index 100% rename from _includes/user-guide-migration-notice.md rename to content/cn/includes/user-guide-migration-notice.md diff --git a/index.html b/content/en/_index.html similarity index 91% rename from index.html rename to content/en/_index.html index f99bcac717c7a..30419aa3ca437 100644 --- a/index.html +++ b/content/en/_index.html @@ -1,27 +1,10 @@ --- -layout: basic +title: "Production-Grade Container Orchestration" +abstract: "Automated container deployment, scaling, and management" cid: home --- - -
-
-
-

Production-Grade Container Orchestration

-
Automated container deployment, scaling, and management
-
- Try Our Interactive Tutorials -
- - - - - - - -
- -{% include deprecation-warning.html %} +{{< deprecationwarning >}}
diff --git a/blog/OWNERS b/content/en/blog/OWNERS similarity index 100% rename from blog/OWNERS rename to content/en/blog/OWNERS diff --git a/content/en/blog/_index.md b/content/en/blog/_index.md new file mode 100644 index 0000000000000..9bff67d5794e4 --- /dev/null +++ b/content/en/blog/_index.md @@ -0,0 +1,3 @@ +--- +title: Blog +--- diff --git a/blog/_posts/2015-03-00-Kubernetes-Gathering-Videos.md b/content/en/blog/_posts/2015-03-00-Kubernetes-Gathering-Videos.md similarity index 76% rename from blog/_posts/2015-03-00-Kubernetes-Gathering-Videos.md rename to content/en/blog/_posts/2015-03-00-Kubernetes-Gathering-Videos.md index daf58eef64ccb..60a3852a53a88 100644 --- a/blog/_posts/2015-03-00-Kubernetes-Gathering-Videos.md +++ b/content/en/blog/_posts/2015-03-00-Kubernetes-Gathering-Videos.md @@ -1,11 +1,9 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Gathering Videos " -date: Tuesday, March 23, 2015 -pagination: - enabled: true +date: 2015-03-23 +slug: kubernetes-gathering-videos +url: /blog/2015/03/Kubernetes-Gathering-Videos --- If you missed the Kubernetes Gathering in SF last month, fear not! Here are the videos from the evening presentations organized into a playlist on YouTube diff --git a/blog/_posts/2015-03-00-Paricipate-In-Kubernetes-User.md b/content/en/blog/_posts/2015-03-00-Paricipate-In-Kubernetes-User.md similarity index 90% rename from blog/_posts/2015-03-00-Paricipate-In-Kubernetes-User.md rename to content/en/blog/_posts/2015-03-00-Paricipate-In-Kubernetes-User.md index ce32db78a7099..a6ebc9d572589 100644 --- a/blog/_posts/2015-03-00-Paricipate-In-Kubernetes-User.md +++ b/content/en/blog/_posts/2015-03-00-Paricipate-In-Kubernetes-User.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Paricipate in a Kubernetes User Experience Study " -date: Wednesday, March 31, 2015 -pagination: - enabled: true +date: 2015-03-31 +slug: paricipate-in-kubernetes-user +url: /blog/2015/03/Paricipate-In-Kubernetes-User --- We need your help in shaping the future of Kubernetes and Google Container Engine, and we'd love to have you participate in a remote UX research study to help us learn about your experiences!  If you're interested in participating, we invite you to take [this brief survey](http://goo.gl/AXFFMs) to see if you qualify. If you’re selected to participate, we’ll follow up with you directly. diff --git a/blog/_posts/2015-03-00-Weekly-Kubernetes-Community-Hangout.md b/content/en/blog/_posts/2015-03-00-Weekly-Kubernetes-Community-Hangout.md similarity index 94% rename from blog/_posts/2015-03-00-Weekly-Kubernetes-Community-Hangout.md rename to content/en/blog/_posts/2015-03-00-Weekly-Kubernetes-Community-Hangout.md index c946e7fe2ccf1..e18e9ddc47baf 100644 --- a/blog/_posts/2015-03-00-Weekly-Kubernetes-Community-Hangout.md +++ b/content/en/blog/_posts/2015-03-00-Weekly-Kubernetes-Community-Hangout.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Weekly Kubernetes Community Hangout Notes - March 27 2015 " -date: Sunday, March 28, 2015 -pagination: - enabled: true +date: 2015-03-28 +slug: weekly-kubernetes-community-hangout +url: /blog/2015/03/Weekly-Kubernetes-Community-Hangout --- Every week the Kubernetes contributing community meet virtually over Google Hangouts. We want anyone who's interested to know what's discussed in this forum. diff --git a/blog/_posts/2015-03-00-Welcome-To-Kubernetes-Blog.md b/content/en/blog/_posts/2015-03-00-Welcome-To-Kubernetes-Blog.md similarity index 95% rename from blog/_posts/2015-03-00-Welcome-To-Kubernetes-Blog.md rename to content/en/blog/_posts/2015-03-00-Welcome-To-Kubernetes-Blog.md index dbfcc0d24c897..fc00551857928 100644 --- a/blog/_posts/2015-03-00-Welcome-To-Kubernetes-Blog.md +++ b/content/en/blog/_posts/2015-03-00-Welcome-To-Kubernetes-Blog.md @@ -1,8 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: Welcome to the Kubernetes Blog! -date: Saturday, March 20, 2015 +date: 2015-03-20 +slug: welcome-to-kubernetes-blog +url: /blog/2015/03/Welcome-To-Kubernetes-Blog --- Welcome to the new Kubernetes blog. Follow this blog to learn about the Kubernetes Open Source project. We plan to post release notes, how-to articles, events, and maybe even some off topic fun here from time to time. diff --git a/blog/_posts/2015-04-00-Borg-Predecessor-To-Kubernetes.md b/content/en/blog/_posts/2015-04-00-Borg-Predecessor-To-Kubernetes.md similarity index 98% rename from blog/_posts/2015-04-00-Borg-Predecessor-To-Kubernetes.md rename to content/en/blog/_posts/2015-04-00-Borg-Predecessor-To-Kubernetes.md index 38559bcf08d41..98fd6c98fb129 100644 --- a/blog/_posts/2015-04-00-Borg-Predecessor-To-Kubernetes.md +++ b/content/en/blog/_posts/2015-04-00-Borg-Predecessor-To-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Borg: The Predecessor to Kubernetes " -date: Friday, April 23, 2015 -pagination: - enabled: true +date: 2015-04-23 +slug: borg-predecessor-to-kubernetes +url: /blog/2015/04/Borg-Predecessor-To-Kubernetes --- Google has been running containerized workloads in production for more than a decade. Whether it's service jobs like web front-ends and stateful servers, infrastructure systems like [Bigtable](http://research.google.com/archive/bigtable.html) and [Spanner](http://research.google.com/archive/spanner.html), or batch frameworks like [MapReduce](http://research.google.com/archive/mapreduce.html) and [Millwheel](http://research.google.com/pubs/pub41378.html), virtually everything at Google runs as a container. Today, we took the wraps off of Borg, Google’s long-rumored internal container-oriented cluster-management system, publishing details at the academic computer systems conference [Eurosys](http://eurosys2015.labri.fr/). You can find the paper [here](https://research.google.com/pubs/pub43438.html). diff --git a/blog/_posts/2015-04-00-Faster-Than-Speeding-Latte.md b/content/en/blog/_posts/2015-04-00-Faster-Than-Speeding-Latte.md similarity index 67% rename from blog/_posts/2015-04-00-Faster-Than-Speeding-Latte.md rename to content/en/blog/_posts/2015-04-00-Faster-Than-Speeding-Latte.md index 1287ac6304111..fd6118b1c5917 100644 --- a/blog/_posts/2015-04-00-Faster-Than-Speeding-Latte.md +++ b/content/en/blog/_posts/2015-04-00-Faster-Than-Speeding-Latte.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Faster than a speeding Latte " -date: Tuesday, April 06, 2015 -pagination: - enabled: true +date: 2015-04-06 +slug: faster-than-speeding-latte +url: /blog/2015/04/Faster-Than-Speeding-Latte --- Check out Brendan Burns racing Kubernetes. [![Check out Brendan Burns racing Kubernetes](https://img.youtube.com/vi/7vZ9dRKRMyc/0.jpg)](https://www.youtube.com/watch?v=?7vZ9dRKRMyc) diff --git a/blog/_posts/2015-04-00-Introducing-Kubernetes-V1Beta3.md b/content/en/blog/_posts/2015-04-00-Introducing-Kubernetes-V1Beta3.md similarity index 97% rename from blog/_posts/2015-04-00-Introducing-Kubernetes-V1Beta3.md rename to content/en/blog/_posts/2015-04-00-Introducing-Kubernetes-V1Beta3.md index c1308a45d9eba..d7ea120d27c64 100644 --- a/blog/_posts/2015-04-00-Introducing-Kubernetes-V1Beta3.md +++ b/content/en/blog/_posts/2015-04-00-Introducing-Kubernetes-V1Beta3.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Introducing Kubernetes API Version v1beta3 " -date: Friday, April 16, 2015 -pagination: - enabled: true +date: 2015-04-16 +slug: introducing-kubernetes-v1beta3 +url: /blog/2015/04/Introducing-Kubernetes-V1Beta3 --- We've been hard at work on cleaning up the API over the past several months (see [https://github.com/GoogleCloudPlatform/kubernetes/issues/1519](https://github.com/GoogleCloudPlatform/kubernetes/issues/1519) for details). The result is v1beta3, which is considered to be the release candidate for the v1 API. diff --git a/blog/_posts/2015-04-00-Kubernetes-And-Mesosphere-Dcos.md b/content/en/blog/_posts/2015-04-00-Kubernetes-And-Mesosphere-Dcos.md similarity index 96% rename from blog/_posts/2015-04-00-Kubernetes-And-Mesosphere-Dcos.md rename to content/en/blog/_posts/2015-04-00-Kubernetes-And-Mesosphere-Dcos.md index 3f55591ac4096..4008c7b4436d6 100644 --- a/blog/_posts/2015-04-00-Kubernetes-And-Mesosphere-Dcos.md +++ b/content/en/blog/_posts/2015-04-00-Kubernetes-And-Mesosphere-Dcos.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes and the Mesosphere DCOS " -date: Thursday, April 22, 2015 -pagination: - enabled: true +date: 2015-04-22 +slug: kubernetes-and-mesosphere-dcos +url: /blog/2015/04/Kubernetes-And-Mesosphere-Dcos --- # Kubernetes and the Mesosphere DCOS diff --git a/blog/_posts/2015-04-00-Kubernetes-Release-0150.md b/content/en/blog/_posts/2015-04-00-Kubernetes-Release-0150.md similarity index 98% rename from blog/_posts/2015-04-00-Kubernetes-Release-0150.md rename to content/en/blog/_posts/2015-04-00-Kubernetes-Release-0150.md index a86a215f443f9..0373053fa0026 100644 --- a/blog/_posts/2015-04-00-Kubernetes-Release-0150.md +++ b/content/en/blog/_posts/2015-04-00-Kubernetes-Release-0150.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Release: 0.15.0 " -date: Friday, April 16, 2015 -pagination: - enabled: true +date: 2015-04-16 +slug: kubernetes-release-0150 +url: /blog/2015/04/Kubernetes-Release-0150 --- Release Notes: diff --git a/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout.md b/content/en/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout.md similarity index 96% rename from blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout.md rename to content/en/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout.md index d2909491c7c44..25c5e7b097853 100644 --- a/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout.md +++ b/content/en/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Weekly Kubernetes Community Hangout Notes - April 3 2015 " -date: Sunday, April 04, 2015 -pagination: - enabled: true +date: 2015-04-04 +slug: weekly-kubernetes-community-hangout +url: /blog/2015/04/Weekly-Kubernetes-Community-Hangout --- # Kubernetes: Weekly Kubernetes Community Hangout Notes diff --git a/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_11.md b/content/en/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_11.md similarity index 98% rename from blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_11.md rename to content/en/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_11.md index 0a687da6906a6..12b880dc6167e 100644 --- a/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_11.md +++ b/content/en/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_11.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Weekly Kubernetes Community Hangout Notes - April 10 2015 " -date: Sunday, April 11, 2015 -pagination: - enabled: true +date: 2015-04-11 +slug: weekly-kubernetes-community-hangout_11 +url: /blog/2015/04/Weekly-Kubernetes-Community-Hangout_11 --- Every week the Kubernetes contributing community meet virtually over Google Hangouts. We want anyone who's interested to know what's discussed in this forum. diff --git a/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_17.md b/content/en/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_17.md similarity index 98% rename from blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_17.md rename to content/en/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_17.md index 4605f7ceddfa1..d0991f387249e 100644 --- a/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_17.md +++ b/content/en/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_17.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Weekly Kubernetes Community Hangout Notes - April 17 2015 " -date: Saturday, April 17, 2015 -pagination: - enabled: true +date: 2015-04-17 +slug: weekly-kubernetes-community-hangout_17 +url: /blog/2015/04/Weekly-Kubernetes-Community-Hangout_17 --- Every week the Kubernetes contributing community meet virtually over Google Hangouts. We want anyone who's interested to know what's discussed in this forum. diff --git a/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_29.md b/content/en/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_29.md similarity index 95% rename from blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_29.md rename to content/en/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_29.md index 9f1422fb8fcd3..bb9326e137c32 100644 --- a/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_29.md +++ b/content/en/blog/_posts/2015-04-00-Weekly-Kubernetes-Community-Hangout_29.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Weekly Kubernetes Community Hangout Notes - April 24 2015 " -date: Friday, April 30, 2015 -pagination: - enabled: true +date: 2015-04-30 +slug: weekly-kubernetes-community-hangout_29 +url: /blog/2015/04/Weekly-Kubernetes-Community-Hangout_29 --- Every week the Kubernetes contributing community meet virtually over Google Hangouts. We want anyone who's interested to know what's discussed in this forum. diff --git a/blog/_posts/2015-05-00-Appc-Support-For-Kubernetes-Through-Rkt.md b/content/en/blog/_posts/2015-05-00-Appc-Support-For-Kubernetes-Through-Rkt.md similarity index 95% rename from blog/_posts/2015-05-00-Appc-Support-For-Kubernetes-Through-Rkt.md rename to content/en/blog/_posts/2015-05-00-Appc-Support-For-Kubernetes-Through-Rkt.md index 06a90ffd94ccc..7aff3432c90c6 100644 --- a/blog/_posts/2015-05-00-Appc-Support-For-Kubernetes-Through-Rkt.md +++ b/content/en/blog/_posts/2015-05-00-Appc-Support-For-Kubernetes-Through-Rkt.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " AppC Support for Kubernetes through RKT " -date: Tuesday, May 04, 2015 -pagination: - enabled: true +date: 2015-05-04 +slug: appc-support-for-kubernetes-through-rkt +url: /blog/2015/05/Appc-Support-For-Kubernetes-Through-Rkt --- We very recently accepted a pull request to the Kubernetes project to add appc support for the Kubernetes community.  Appc is a new open container specification that was initiated by CoreOS, and is supported through CoreOS rkt container runtime. diff --git a/blog/_posts/2015-05-00-Docker-And-Kubernetes-And-Appc.md b/content/en/blog/_posts/2015-05-00-Docker-And-Kubernetes-And-Appc.md similarity index 96% rename from blog/_posts/2015-05-00-Docker-And-Kubernetes-And-Appc.md rename to content/en/blog/_posts/2015-05-00-Docker-And-Kubernetes-And-Appc.md index 72fd4cca993a1..b8c47e1af966b 100644 --- a/blog/_posts/2015-05-00-Docker-And-Kubernetes-And-Appc.md +++ b/content/en/blog/_posts/2015-05-00-Docker-And-Kubernetes-And-Appc.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Docker and Kubernetes and AppC " -date: Tuesday, May 18, 2015 -pagination: - enabled: true +date: 2015-05-18 +slug: docker-and-kubernetes-and-appc +url: /blog/2015/05/Docker-And-Kubernetes-And-Appc --- Recently we announced the intent in Kubernetes, our open source cluster manager, to support AppC and RKT, an alternative container format that has been driven by CoreOS with input from many companies (including Google).  This announcement has generated a surprising amount of buzz and has been construed as a move from Google to support Appc over Docker.  Many have taken it as signal that Google is moving away from supporting Docker.  I would like to take a moment to clarify Google’s position in this. diff --git a/blog/_posts/2015-05-00-Kubernetes-On-Openstack.md b/content/en/blog/_posts/2015-05-00-Kubernetes-On-Openstack.md similarity index 96% rename from blog/_posts/2015-05-00-Kubernetes-On-Openstack.md rename to content/en/blog/_posts/2015-05-00-Kubernetes-On-Openstack.md index e99c9c745d222..243678bcaae04 100644 --- a/blog/_posts/2015-05-00-Kubernetes-On-Openstack.md +++ b/content/en/blog/_posts/2015-05-00-Kubernetes-On-Openstack.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes on OpenStack " -date: Wednesday, May 19, 2015 -pagination: - enabled: true +date: 2015-05-19 +slug: kubernetes-on-openstack +url: /blog/2015/05/Kubernetes-On-Openstack --- diff --git a/blog/_posts/2015-05-00-Kubernetes-Release-0160.md b/content/en/blog/_posts/2015-05-00-Kubernetes-Release-0160.md similarity index 98% rename from blog/_posts/2015-05-00-Kubernetes-Release-0160.md rename to content/en/blog/_posts/2015-05-00-Kubernetes-Release-0160.md index 4c9f873294420..abe97435eb476 100644 --- a/blog/_posts/2015-05-00-Kubernetes-Release-0160.md +++ b/content/en/blog/_posts/2015-05-00-Kubernetes-Release-0160.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Release: 0.16.0 " -date: Tuesday, May 11, 2015 -pagination: - enabled: true +date: 2015-05-11 +slug: kubernetes-release-0160 +url: /blog/2015/05/Kubernetes-Release-0160 --- Release Notes: diff --git a/blog/_posts/2015-05-00-Kubernetes-Release-0170.md b/content/en/blog/_posts/2015-05-00-Kubernetes-Release-0170.md similarity index 99% rename from blog/_posts/2015-05-00-Kubernetes-Release-0170.md rename to content/en/blog/_posts/2015-05-00-Kubernetes-Release-0170.md index f1def26fd049e..a0801fb347055 100644 --- a/blog/_posts/2015-05-00-Kubernetes-Release-0170.md +++ b/content/en/blog/_posts/2015-05-00-Kubernetes-Release-0170.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Release: 0.17.0 " -date: Saturday, May 15, 2015 -pagination: - enabled: true +date: 2015-05-15 +slug: kubernetes-release-0170 +url: /blog/2015/05/Kubernetes-Release-0170 --- Release Notes: diff --git a/blog/_posts/2015-05-00-Resource-Usage-Monitoring-Kubernetes.md b/content/en/blog/_posts/2015-05-00-Resource-Usage-Monitoring-Kubernetes.md similarity index 98% rename from blog/_posts/2015-05-00-Resource-Usage-Monitoring-Kubernetes.md rename to content/en/blog/_posts/2015-05-00-Resource-Usage-Monitoring-Kubernetes.md index b048d234ccde0..dd38f24a0d1a0 100644 --- a/blog/_posts/2015-05-00-Resource-Usage-Monitoring-Kubernetes.md +++ b/content/en/blog/_posts/2015-05-00-Resource-Usage-Monitoring-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: Resource Usage Monitoring in Kubernetes -date: Wednesday, May 12, 2015 -pagination: - enabled: true +date: 2015-05-12 +slug: resource-usage-monitoring-kubernetes +url: /blog/2015/05/Resource-Usage-Monitoring-Kubernetes --- Understanding how an application behaves when deployed is crucial to scaling the application and providing a reliable service. In a Kubernetes cluster, application performance can be examined at many different levels: containers, [pods](http://kubernetes.io/docs/user-guide/pods), [services](http://kubernetes.io/docs/user-guide/services), and whole clusters. As part of Kubernetes we want to provide users with detailed resource usage information about their running applications at all these levels. This will give users deep insights into how their applications are performing and where possible application bottlenecks may be found. In comes [Heapster](https://github.com/kubernetes/heapster), a project meant to provide a base monitoring platform on Kubernetes. diff --git a/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md b/content/en/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md similarity index 93% rename from blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md rename to content/en/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md index 4115759896d34..6e4c1e666e0a5 100644 --- a/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md +++ b/content/en/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Weekly Kubernetes Community Hangout Notes - May 1 2015 " -date: Tuesday, May 11, 2015 -pagination: - enabled: true +date: 2015-05-11 +slug: weekly-kubernetes-community-hangout +url: /blog/2015/05/Weekly-Kubernetes-Community-Hangout --- Every week the Kubernetes contributing community meet virtually over Google Hangouts. We want anyone who's interested to know what's discussed in this forum. diff --git a/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout_18.md b/content/en/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout_18.md similarity index 95% rename from blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout_18.md rename to content/en/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout_18.md index 23ecc71f1ce21..51ec30dbf1dc4 100644 --- a/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout_18.md +++ b/content/en/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout_18.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Weekly Kubernetes Community Hangout Notes - May 15 2015 " -date: Tuesday, May 18, 2015 -pagination: - enabled: true +date: 2015-05-18 +slug: weekly-kubernetes-community-hangout_18 +url: /blog/2015/05/Weekly-Kubernetes-Community-Hangout_18 --- Every week the Kubernetes contributing community meet virtually over Google Hangouts. We want anyone who's interested to know what's discussed in this forum. @@ -74,8 +72,7 @@ Every week the Kubernetes contributing community meet virtually over Google Hang * could add resources as arguments to the porcelain commands * kubectl run is a simplified command, but it could include some common things (image, command, ports). but could add resources * Kubernetes 1.0 Launch Event - * Save the date: July 21st in Portland, OR - a part of OSCON - * Blog posts, whitepapers, etc. welcome to be published + * Save the * Blog posts, whitepapers, etc. welcome to be published * Event will be live streamed, mostly demos & customer talks, keynote * Big launch party in the evening * Kit to send more info in next couple weeks diff --git a/blog/_posts/2015-06-00-Cluster-Level-Logging-With-Kubernetes.md b/content/en/blog/_posts/2015-06-00-Cluster-Level-Logging-With-Kubernetes.md similarity index 99% rename from blog/_posts/2015-06-00-Cluster-Level-Logging-With-Kubernetes.md rename to content/en/blog/_posts/2015-06-00-Cluster-Level-Logging-With-Kubernetes.md index 96ee09755c43e..efa6b794fc967 100644 --- a/blog/_posts/2015-06-00-Cluster-Level-Logging-With-Kubernetes.md +++ b/content/en/blog/_posts/2015-06-00-Cluster-Level-Logging-With-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Cluster Level Logging with Kubernetes " -date: Friday, June 11, 2015 -pagination: - enabled: true +date: 2015-06-11 +slug: cluster-level-logging-with-kubernetes +url: /blog/2015/06/Cluster-Level-Logging-With-Kubernetes --- diff --git a/blog/_posts/2015-06-00-Slides-Cluster-Management-With.md b/content/en/blog/_posts/2015-06-00-Slides-Cluster-Management-With.md similarity index 87% rename from blog/_posts/2015-06-00-Slides-Cluster-Management-With.md rename to content/en/blog/_posts/2015-06-00-Slides-Cluster-Management-With.md index bb92c5db6e88e..0567286920969 100644 --- a/blog/_posts/2015-06-00-Slides-Cluster-Management-With.md +++ b/content/en/blog/_posts/2015-06-00-Slides-Cluster-Management-With.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Slides: Cluster Management with Kubernetes, talk given at the University of Edinburgh " -date: Saturday, June 26, 2015 -pagination: - enabled: true +date: 2015-06-26 +slug: slides-cluster-management-with +url: /blog/2015/06/Slides-Cluster-Management-With --- On Friday 5 June 2015 I gave a talk called [Cluster Management with Kubernetes](https://docs.google.com/presentation/d/1H4ywDb4vAJeg8KEjpYfhNqFSig0Q8e_X5I36kM9S6q0/pub?start=false&loop=false&delayms=3000) to a general audience at the University of Edinburgh. The talk includes an example of a music store system with a Kibana front end UI and an Elasticsearch based back end which helps to make concrete concepts like pods, replication controllers and services. diff --git a/blog/_posts/2015-06-00-The-Distributed-System-Toolkit-Patterns.md b/content/en/blog/_posts/2015-06-00-The-Distributed-System-Toolkit-Patterns.md similarity index 98% rename from blog/_posts/2015-06-00-The-Distributed-System-Toolkit-Patterns.md rename to content/en/blog/_posts/2015-06-00-The-Distributed-System-Toolkit-Patterns.md index a2eea701af0a5..6c71c3709647a 100644 --- a/blog/_posts/2015-06-00-The-Distributed-System-Toolkit-Patterns.md +++ b/content/en/blog/_posts/2015-06-00-The-Distributed-System-Toolkit-Patterns.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " The Distributed System ToolKit: Patterns for Composite Containers " -date: Tuesday, June 29, 2015 -pagination: - enabled: true +date: 2015-06-29 +slug: the-distributed-system-toolkit-patterns +url: /blog/2015/06/The-Distributed-System-Toolkit-Patterns --- Having had the privilege of presenting some ideas from Kubernetes at DockerCon 2015, I thought I would make a blog post to share some of these ideas for those of you who couldn’t be there. diff --git a/blog/_posts/2015-06-00-Weekly-Kubernetes-Community-Hangout.md b/content/en/blog/_posts/2015-06-00-Weekly-Kubernetes-Community-Hangout.md similarity index 95% rename from blog/_posts/2015-06-00-Weekly-Kubernetes-Community-Hangout.md rename to content/en/blog/_posts/2015-06-00-Weekly-Kubernetes-Community-Hangout.md index ce6912d4865f4..ec7f4ad846b4a 100644 --- a/blog/_posts/2015-06-00-Weekly-Kubernetes-Community-Hangout.md +++ b/content/en/blog/_posts/2015-06-00-Weekly-Kubernetes-Community-Hangout.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Weekly Kubernetes Community Hangout Notes - May 22 2015 " -date: Wednesday, June 02, 2015 -pagination: - enabled: true +date: 2015-06-02 +slug: weekly-kubernetes-community-hangout +url: /blog/2015/06/Weekly-Kubernetes-Community-Hangout --- Every week the Kubernetes contributing community meet virtually over Google Hangouts. We want anyone who's interested to know what's discussed in this forum. diff --git a/blog/_posts/2015-07-00-Announcing-First-Kubernetes-Enterprise.md b/content/en/blog/_posts/2015-07-00-Announcing-First-Kubernetes-Enterprise.md similarity index 93% rename from blog/_posts/2015-07-00-Announcing-First-Kubernetes-Enterprise.md rename to content/en/blog/_posts/2015-07-00-Announcing-First-Kubernetes-Enterprise.md index 5c857107f7fc4..98b4c49d67d8e 100644 --- a/blog/_posts/2015-07-00-Announcing-First-Kubernetes-Enterprise.md +++ b/content/en/blog/_posts/2015-07-00-Announcing-First-Kubernetes-Enterprise.md @@ -1,10 +1,8 @@ --- -layout: blog -permalink: /blog/:year/:month/:title title: " Announcing the First Kubernetes Enterprise Training Course " -date: Thursday, July 08, 2015 -pagination: - enabled: true +date: 2015-07-08 +slug: announcing-first-kubernetes-enterprise +url: /blog/2015/07/Announcing-First-Kubernetes-Enterprise --- At Google we rely on Linux application containers to run our core infrastructure. Everything from Search to Gmail runs in containers.  In fact, we like containers so much that even our Google Compute Engine VMs run in containers!  Because containers are critical to our business, we have been working with the community on many of the basic container technologies (from cgroups to Docker’s LibContainer) and even decided to build the next generation of Google’s container scheduling technology, Kubernetes, in the open. diff --git a/blog/_posts/2015-07-00-How-Did-Quake-Demo-From-Dockercon-Work.md b/content/en/blog/_posts/2015-07-00-How-Did-Quake-Demo-From-Dockercon-Work.md similarity index 99% rename from blog/_posts/2015-07-00-How-Did-Quake-Demo-From-Dockercon-Work.md rename to content/en/blog/_posts/2015-07-00-How-Did-Quake-Demo-From-Dockercon-Work.md index 6a1414eeec397..b5f5e8da77daf 100644 --- a/blog/_posts/2015-07-00-How-Did-Quake-Demo-From-Dockercon-Work.md +++ b/content/en/blog/_posts/2015-07-00-How-Did-Quake-Demo-From-Dockercon-Work.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " How did the Quake demo from DockerCon Work? " -date: Friday, July 02, 2015 -pagination: - enabled: true +date: 2015-07-02 +slug: how-did-quake-demo-from-dockercon-work +url: /blog/2015/07/How-Did-Quake-Demo-From-Dockercon-Work --- Shortly after its release in 2013, Docker became a very popular open source container management tool for Linux. Docker has a rich set of commands to control the execution of a container. Commands such as start, stop, restart, kill, pause, and unpause. However, what is still missing is the ability to Checkpoint and Restore (C/R) a container natively via Docker itself. diff --git a/blog/_posts/2015-07-00-Kubernetes-10-Launch-Party-At-Oscon.md b/content/en/blog/_posts/2015-07-00-Kubernetes-10-Launch-Party-At-Oscon.md similarity index 90% rename from blog/_posts/2015-07-00-Kubernetes-10-Launch-Party-At-Oscon.md rename to content/en/blog/_posts/2015-07-00-Kubernetes-10-Launch-Party-At-Oscon.md index 0a8aabf6f4fb5..efb345c7d43ef 100644 --- a/blog/_posts/2015-07-00-Kubernetes-10-Launch-Party-At-Oscon.md +++ b/content/en/blog/_posts/2015-07-00-Kubernetes-10-Launch-Party-At-Oscon.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes 1.0 Launch Event at OSCON " -date: Friday, July 02, 2015 -pagination: - enabled: true +date: 2015-07-02 +slug: kubernetes-10-launch-party-at-oscon +url: /blog/2015/07/Kubernetes-10-Launch-Party-At-Oscon --- In case you haven't heard, the Kubernetes project team & community have some awesome stuff lined up for our release event at OSCON in a few weeks. diff --git a/blog/_posts/2015-07-00-Strong-Simple-Ssl-For-Kubernetes.md b/content/en/blog/_posts/2015-07-00-Strong-Simple-Ssl-For-Kubernetes.md similarity index 98% rename from blog/_posts/2015-07-00-Strong-Simple-Ssl-For-Kubernetes.md rename to content/en/blog/_posts/2015-07-00-Strong-Simple-Ssl-For-Kubernetes.md index 52eb8b890280e..748059da26ffb 100644 --- a/blog/_posts/2015-07-00-Strong-Simple-Ssl-For-Kubernetes.md +++ b/content/en/blog/_posts/2015-07-00-Strong-Simple-Ssl-For-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Strong, Simple SSL for Kubernetes Services " -date: Wednesday, July 14, 2015 -pagination: - enabled: true +date: 2015-07-14 +slug: strong-simple-ssl-for-kubernetes +url: /blog/2015/07/Strong-Simple-Ssl-For-Kubernetes --- Hi, I’m Evan Brown [(@evandbrown](http://twitter.com/evandbrown)) and I work on the solutions architecture team for Google Cloud Platform. I recently wrote an [article](https://cloud.google.com/solutions/automated-build-images-with-jenkins-kubernetes) and [tutorial](https://github.com/GoogleCloudPlatform/kube-jenkins-imager) about using Jenkins on Kubernetes to automate the Docker and GCE image build process. Today I’m going to discuss how I used Kubernetes services and secrets to add SSL to the Jenkins web UI. After reading this, you’ll be able to add SSL termination (and HTTP-\>HTTPS redirects + basic auth) to your public HTTP Kubernetes services. diff --git a/blog/_posts/2015-07-00-The-Growing-Kubernetes-Ecosystem.md b/content/en/blog/_posts/2015-07-00-The-Growing-Kubernetes-Ecosystem.md similarity index 99% rename from blog/_posts/2015-07-00-The-Growing-Kubernetes-Ecosystem.md rename to content/en/blog/_posts/2015-07-00-The-Growing-Kubernetes-Ecosystem.md index bbff71e4d6cd8..7342f621f99bf 100644 --- a/blog/_posts/2015-07-00-The-Growing-Kubernetes-Ecosystem.md +++ b/content/en/blog/_posts/2015-07-00-The-Growing-Kubernetes-Ecosystem.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " The Growing Kubernetes Ecosystem " -date: Saturday, July 24, 2015 -pagination: - enabled: true +date: 2015-07-24 +slug: the-growing-kubernetes-ecosystem +url: /blog/2015/07/The-Growing-Kubernetes-Ecosystem --- Over the past year, we’ve seen fantastic momentum in the Kubernetes project, culminating with the release of [Kubernetes v1][4] earlier this week. We’ve also witnessed the ecosystem around Kubernetes blossom, and wanted to draw attention to some of the cooler offerings we’ve seen. diff --git a/blog/_posts/2015-07-00-Weekly-Kubernetes-Community-Hangout.md b/content/en/blog/_posts/2015-07-00-Weekly-Kubernetes-Community-Hangout.md similarity index 97% rename from blog/_posts/2015-07-00-Weekly-Kubernetes-Community-Hangout.md rename to content/en/blog/_posts/2015-07-00-Weekly-Kubernetes-Community-Hangout.md index 427ab3ef5b8f7..ea62b8322c5ae 100644 --- a/blog/_posts/2015-07-00-Weekly-Kubernetes-Community-Hangout.md +++ b/content/en/blog/_posts/2015-07-00-Weekly-Kubernetes-Community-Hangout.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Weekly Kubernetes Community Hangout Notes - July 10 2015 " -date: Tuesday, July 13, 2015 -pagination: - enabled: true +date: 2015-07-13 +slug: weekly-kubernetes-community-hangout +url: /blog/2015/07/Weekly-Kubernetes-Community-Hangout --- Every week the Kubernetes contributing community meet virtually over Google Hangouts. We want anyone who's interested to know what's discussed in this forum. diff --git a/blog/_posts/2015-07-00-Weekly-Kubernetes-Community-Hangout_23.md b/content/en/blog/_posts/2015-07-00-Weekly-Kubernetes-Community-Hangout_23.md similarity index 97% rename from blog/_posts/2015-07-00-Weekly-Kubernetes-Community-Hangout_23.md rename to content/en/blog/_posts/2015-07-00-Weekly-Kubernetes-Community-Hangout_23.md index 98b9b7ec64b86..753e2250be67b 100644 --- a/blog/_posts/2015-07-00-Weekly-Kubernetes-Community-Hangout_23.md +++ b/content/en/blog/_posts/2015-07-00-Weekly-Kubernetes-Community-Hangout_23.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Weekly Kubernetes Community Hangout Notes - July 17 2015 " -date: Friday, July 23, 2015 -pagination: - enabled: true +date: 2015-07-23 +slug: weekly-kubernetes-community-hangout_23 +url: /blog/2015/07/Weekly-Kubernetes-Community-Hangout_23 --- diff --git a/blog/_posts/2015-08-00-Using-Kubernetes-Namespaces-To-Manage.md b/content/en/blog/_posts/2015-08-00-Using-Kubernetes-Namespaces-To-Manage.md similarity index 97% rename from blog/_posts/2015-08-00-Using-Kubernetes-Namespaces-To-Manage.md rename to content/en/blog/_posts/2015-08-00-Using-Kubernetes-Namespaces-To-Manage.md index 032672926b9a5..92061a129221a 100644 --- a/blog/_posts/2015-08-00-Using-Kubernetes-Namespaces-To-Manage.md +++ b/content/en/blog/_posts/2015-08-00-Using-Kubernetes-Namespaces-To-Manage.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Using Kubernetes Namespaces to Manage Environments " -date: Saturday, August 28, 2015 -pagination: - enabled: true +date: 2015-08-28 +slug: using-kubernetes-namespaces-to-manage +url: /blog/2015/08/Using-Kubernetes-Namespaces-To-Manage --- ##### One of the advantages that Kubernetes provides is the ability to manage various environments easier and better than traditional deployment strategies. For most nontrivial applications, you have test, staging, and production environments. You can spin up a separate cluster of resources, such as VMs, with the same configuration in staging and production, but that can be costly and managing the differences between the environments can be difficult. diff --git a/blog/_posts/2015-08-00-Weekly-Kubernetes-Community-Hangout.md b/content/en/blog/_posts/2015-08-00-Weekly-Kubernetes-Community-Hangout.md similarity index 94% rename from blog/_posts/2015-08-00-Weekly-Kubernetes-Community-Hangout.md rename to content/en/blog/_posts/2015-08-00-Weekly-Kubernetes-Community-Hangout.md index 1204f6d4af10c..26146fc7e0f1a 100644 --- a/blog/_posts/2015-08-00-Weekly-Kubernetes-Community-Hangout.md +++ b/content/en/blog/_posts/2015-08-00-Weekly-Kubernetes-Community-Hangout.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Weekly Kubernetes Community Hangout Notes - July 31 2015 " -date: Wednesday, August 04, 2015 -pagination: - enabled: true +date: 2015-08-04 +slug: weekly-kubernetes-community-hangout +url: /blog/2015/08/Weekly-Kubernetes-Community-Hangout --- Every week the Kubernetes contributing community meet virtually over Google Hangouts. We want anyone who's interested to know what's discussed in this forum. diff --git a/blog/_posts/2015-09-00-Kubernetes-Performance-Measurements-And.md b/content/en/blog/_posts/2015-09-00-Kubernetes-Performance-Measurements-And.md similarity index 98% rename from blog/_posts/2015-09-00-Kubernetes-Performance-Measurements-And.md rename to content/en/blog/_posts/2015-09-00-Kubernetes-Performance-Measurements-And.md index aaaefaff4a095..c07e5db18de5a 100644 --- a/blog/_posts/2015-09-00-Kubernetes-Performance-Measurements-And.md +++ b/content/en/blog/_posts/2015-09-00-Kubernetes-Performance-Measurements-And.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Performance Measurements and Roadmap " -date: Friday, September 10, 2015 -pagination: - enabled: true +date: 2015-09-10 +slug: kubernetes-performance-measurements-and +url: /blog/2015/09/Kubernetes-Performance-Measurements-And --- No matter how flexible and reliable your container orchestration system is, ultimately, you have some work to be done, and you want it completed quickly. For big problems, a common answer is to just throw more machines at the problem. After all, more compute = faster, right? @@ -59,7 +57,7 @@ The following table contains percentiles (50th, 90th and 99th) of pod startup ti |50th percentile | .90s | 1.08s | 1.33s | 1.94s | |90th percentile | 1.29s | 1.49s | 1.72s | 2.50s | | 99th percentile | 1.59s | 1.86s | 2.56s | 4.32s | -{: .post-table} + As for api-responsiveness, the following graphs present 50th, 90th and 99th percentiles of latencies of API calls grouped by kind of operation and resource type. However, note that this also includes internal system API calls, not just those issued by users (in this case issued by the test itself). diff --git a/blog/_posts/2015-10-00-Some-Things-You-Didnt-Know-About-Kubectl_28.md b/content/en/blog/_posts/2015-10-00-Some-Things-You-Didnt-Know-About-Kubectl_28.md similarity index 98% rename from blog/_posts/2015-10-00-Some-Things-You-Didnt-Know-About-Kubectl_28.md rename to content/en/blog/_posts/2015-10-00-Some-Things-You-Didnt-Know-About-Kubectl_28.md index 68eb0780e4ce4..d5a7801de6d42 100644 --- a/blog/_posts/2015-10-00-Some-Things-You-Didnt-Know-About-Kubectl_28.md +++ b/content/en/blog/_posts/2015-10-00-Some-Things-You-Didnt-Know-About-Kubectl_28.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Some things you didn’t know about kubectl " -date: Thursday, October 28, 2015 -pagination: - enabled: true +date: 2015-10-28 +slug: some-things-you-didnt-know-about-kubectl_28 +url: /blog/2015/10/Some-Things-You-Didnt-Know-About-Kubectl_28 --- [kubectl](https://github.com/kubernetes/kubernetes/blob/master/docs/user-guide/kubectl-overview.md) is the command line tool for interacting with Kubernetes clusters. Many people use it every day to deploy their container workloads into production clusters. But there’s more to kubectl than just `kubectl create -f or kubectl rolling-update`. kubectl is a veritable multi-tool of container orchestration and management. Below we describe some of the features of kubectl that you may not have seen. diff --git a/blog/_posts/2015-11-00-Creating-A-Raspberry-Pi-Cluster-Running-Kubernetes-The-Shopping-List-Part-1.md b/content/en/blog/_posts/2015-11-00-Creating-A-Raspberry-Pi-Cluster-Running-Kubernetes-The-Shopping-List-Part-1.md similarity index 96% rename from blog/_posts/2015-11-00-Creating-A-Raspberry-Pi-Cluster-Running-Kubernetes-The-Shopping-List-Part-1.md rename to content/en/blog/_posts/2015-11-00-Creating-A-Raspberry-Pi-Cluster-Running-Kubernetes-The-Shopping-List-Part-1.md index f28a95012bc53..c6f198f4a3b09 100644 --- a/blog/_posts/2015-11-00-Creating-A-Raspberry-Pi-Cluster-Running-Kubernetes-The-Shopping-List-Part-1.md +++ b/content/en/blog/_posts/2015-11-00-Creating-A-Raspberry-Pi-Cluster-Running-Kubernetes-The-Shopping-List-Part-1.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Creating a Raspberry Pi cluster running Kubernetes, the shopping list (Part 1) " -date: Thursday, November 25, 2015 -pagination: - enabled: true +date: 2015-11-25 +slug: creating-a-raspberry-pi-cluster-running-kubernetes-the-shopping-list-part-1 +url: /blog/2015/11/Creating-A-Raspberry-Pi-Cluster-Running-Kubernetes-The-Shopping-List-Part-1 --- At Devoxx Belgium and Devoxx Morocco, Ray Tsang and I showed a Raspberry Pi cluster we built at Quintor running HypriotOS, Docker and Kubernetes. For those who did not see the talks, you can check out [an abbreviated version of the demo](https://www.youtube.com/watch?v=AAS5Mq9EktI) or the full talk by Ray on [developing and deploying Java-based microservices](https://www.youtube.com/watch?v=kT1vmK0r184) in Kubernetes. While we received many compliments on the talk, the most common question was about how to build a Pi cluster themselves! We’ll be doing just that, in two parts. This first post will cover the shopping list for the cluster, and the second will show you how to get it up and running . . . @@ -28,7 +26,7 @@ So, without further ado, let’s get to the hardware. | 1 | ModMyPi Multi-Pi Stackable Raspberry Pi Case - Bolt Pack | [~$7](http://www.modmypi.com/raspberry-pi/cases/multi-pi-stacker/multi-pi-stackable-raspberry-pi-case-bolt-pack) | | 5 | Micro USB cable (white) 1ft long | ~ $10 | | 5 | UTP cat5 cable (white) 1ft long | ~ $10 | -{: .post-table} +
For a total of approximately $380 you will have a building set to create a Raspberry Pi cluster like we built! [1](#1) diff --git a/blog/_posts/2015-11-00-Kubernetes-1-1-Performance-Upgrades-Improved-Tooling-And-A-Growing-Community.md b/content/en/blog/_posts/2015-11-00-Kubernetes-1-1-Performance-Upgrades-Improved-Tooling-And-A-Growing-Community.md similarity index 96% rename from blog/_posts/2015-11-00-Kubernetes-1-1-Performance-Upgrades-Improved-Tooling-And-A-Growing-Community.md rename to content/en/blog/_posts/2015-11-00-Kubernetes-1-1-Performance-Upgrades-Improved-Tooling-And-A-Growing-Community.md index 8cad28c97adad..e51dce311325e 100644 --- a/blog/_posts/2015-11-00-Kubernetes-1-1-Performance-Upgrades-Improved-Tooling-And-A-Growing-Community.md +++ b/content/en/blog/_posts/2015-11-00-Kubernetes-1-1-Performance-Upgrades-Improved-Tooling-And-A-Growing-Community.md @@ -1,10 +1,8 @@ --- -layout: blog -permalink: /blog/:year/:month/:title title: " Kubernetes 1.1 Performance upgrades, improved tooling and a growing community " -date: Tuesday, November 09, 2015 -pagination: - enabled: true +date: 2015-11-09 +slug: kubernetes-1-1-performance-upgrades-improved-tooling-and-a-growing-community +url: /blog/2015/11/Kubernetes-1-1-Performance-Upgrades-Improved-Tooling-And-A-Growing-Community --- Since the Kubernetes 1.0 release in July, we’ve seen tremendous adoption by companies building distributed systems to manage their container clusters. We’re also been humbled by the rapid growth of the community who help make Kubernetes better everyday. We have seen commercial offerings such as Tectonic by CoreOS and RedHat Atomic Host emerge to deliver deployment and support of Kubernetes. And a growing ecosystem has added Kubernetes support including tool vendors such as Sysdig and Project Calico. diff --git a/blog/_posts/2015-11-00-Kubernetes-As-Foundation-For-Cloud-Native-Paas.md b/content/en/blog/_posts/2015-11-00-Kubernetes-As-Foundation-For-Cloud-Native-Paas.md similarity index 98% rename from blog/_posts/2015-11-00-Kubernetes-As-Foundation-For-Cloud-Native-Paas.md rename to content/en/blog/_posts/2015-11-00-Kubernetes-As-Foundation-For-Cloud-Native-Paas.md index 0f6d65ea68084..894c58a6b186c 100644 --- a/blog/_posts/2015-11-00-Kubernetes-As-Foundation-For-Cloud-Native-Paas.md +++ b/content/en/blog/_posts/2015-11-00-Kubernetes-As-Foundation-For-Cloud-Native-Paas.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes as Foundation for Cloud Native PaaS " -date: Wednesday, November 03, 2015 -pagination: - enabled: true +date: 2015-11-03 +slug: kubernetes-as-foundation-for-cloud-native-paas +url: /blog/2015/11/Kubernetes-As-Foundation-For-Cloud-Native-Paas --- With Kubernetes continuing to gain momentum as a critical tool for building and scaling container based applications, we’ve been thrilled to see a growing number of platform as a service (PaaS) offerings adopt it as a foundation. PaaS developers have been drawn to Kubernetes by its rapid rate of maturation, the soundness of its core architectural concepts, and the strength of its contributor community. The [Kubernetes ecosystem](http://blog.kubernetes.io/2015/07/the-growing-kubernetes-ecosystem.html) continues to grow, and these PaaS projects are great additions to it. diff --git a/blog/_posts/2015-11-00-Monitoring-Kubernetes-With-Sysdig.md b/content/en/blog/_posts/2015-11-00-Monitoring-Kubernetes-With-Sysdig.md similarity index 99% rename from blog/_posts/2015-11-00-Monitoring-Kubernetes-With-Sysdig.md rename to content/en/blog/_posts/2015-11-00-Monitoring-Kubernetes-With-Sysdig.md index 8e407e4f5f8f8..87def3e54b66b 100644 --- a/blog/_posts/2015-11-00-Monitoring-Kubernetes-With-Sysdig.md +++ b/content/en/blog/_posts/2015-11-00-Monitoring-Kubernetes-With-Sysdig.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Monitoring Kubernetes with Sysdig " -date: Friday, November 19, 2015 -pagination: - enabled: true +date: 2015-11-19 +slug: monitoring-kubernetes-with-sysdig +url: /blog/2015/11/Monitoring-Kubernetes-With-Sysdig --- _Today we’re sharing a guest post by Chris Crane from Sysdig about their monitoring integration into Kubernetes. _ diff --git a/blog/_posts/2015-11-00-One-Million-Requests-Per-Second-Dependable-And-Dynamic-Distributed-Systems-At-Scale.md b/content/en/blog/_posts/2015-11-00-One-Million-Requests-Per-Second-Dependable-And-Dynamic-Distributed-Systems-At-Scale.md similarity index 94% rename from blog/_posts/2015-11-00-One-Million-Requests-Per-Second-Dependable-And-Dynamic-Distributed-Systems-At-Scale.md rename to content/en/blog/_posts/2015-11-00-One-Million-Requests-Per-Second-Dependable-And-Dynamic-Distributed-Systems-At-Scale.md index d699960282bb6..d570504c6dbf5 100644 --- a/blog/_posts/2015-11-00-One-Million-Requests-Per-Second-Dependable-And-Dynamic-Distributed-Systems-At-Scale.md +++ b/content/en/blog/_posts/2015-11-00-One-Million-Requests-Per-Second-Dependable-And-Dynamic-Distributed-Systems-At-Scale.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " One million requests per second: Dependable and dynamic distributed systems at scale " -date: Thursday, November 11, 2015 -pagination: - enabled: true +date: 2015-11-11 +slug: one-million-requests-per-second-dependable-and-dynamic-distributed-systems-at-scale +url: /blog/2015/11/One-Million-Requests-Per-Second-Dependable-And-Dynamic-Distributed-Systems-At-Scale --- Recently, I’ve gotten in the habit of telling people that building a reliable service isn’t that hard. If you give me two Compute Engine virtual machines, a Cloud Load balancer, supervisord and nginx, I can create you a static web service that will serve a static web page, effectively forever. diff --git a/blog/_posts/2015-12-00-Creating-Raspberry-Pi-Cluster-Running.md b/content/en/blog/_posts/2015-12-00-Creating-Raspberry-Pi-Cluster-Running.md similarity index 98% rename from blog/_posts/2015-12-00-Creating-Raspberry-Pi-Cluster-Running.md rename to content/en/blog/_posts/2015-12-00-Creating-Raspberry-Pi-Cluster-Running.md index 1d8ef2b3054e2..88f49642ae9fe 100644 --- a/blog/_posts/2015-12-00-Creating-Raspberry-Pi-Cluster-Running.md +++ b/content/en/blog/_posts/2015-12-00-Creating-Raspberry-Pi-Cluster-Running.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Creating a Raspberry Pi cluster running Kubernetes, the installation (Part 2) " -date: Wednesday, December 22, 2015 -pagination: - enabled: true +date: 2015-12-22 +slug: creating-raspberry-pi-cluster-running +url: /blog/2015/12/Creating-Raspberry-Pi-Cluster-Running --- At Devoxx Belgium and Devoxx Morocco, [Ray Tsang](https://twitter.com/saturnism) and I ([Arjen Wassink](https://twitter.com/ArjenWassink)) showed a Raspberry Pi cluster we built at Quintor running HypriotOS, Docker and Kubernetes. While we received many compliments on the talk, the most common question was about how to build a Pi cluster themselves! We’ll be doing just that, in two parts. The [first part covered the shopping list for the cluster](http://blog.kubernetes.io/2015/11/creating-a-Raspberry-Pi-cluster-running-Kubernetes-the-shopping-list-Part-1.html), and this second one will show you how to get kubernetes up and running . . . @@ -51,7 +49,7 @@ root 302 1 0 04:37 ? 00:00:14 /usr/bin/docker daemon -H unix:/ root 722 1 11 04:38 ? 00:16:11 /usr/bin/docker -d -bip=10.0.97.1/24 -mtu=1472 -H fd:// --storage-driver=overlay -D ``` -{: .scale-yaml} + The etcd and flannel containers must be up. @@ -81,7 +79,7 @@ db034473b334 gcr.io/google\_containers/hyperkube-arm:v1.1.2 "/hyperkube f017f405ff4b gcr.io/google\_containers/hyperkube-arm:v1.1.2 "/hyperkube proxy --m" 2 hours ago Up 2 hours k8s-master-proxy ``` -{: .scale-yaml} + ### Deploying the first pod and service on the cluster @@ -108,7 +106,7 @@ busybox-fry54 1/1 Running 1 1h 127.0.0.1 k8s-master-127.0.0.1 3/3 Running 6 1h 127.0.0.1 ``` -{: .scale-yaml} + Now the pod is running but the application is not generally accessible. That can be achieved by creating a service. The cluster IP-address is the IP-address the service is avalailable within the cluster. Use the IP-address of your master node as external IP and the service becomes available outside of the cluster (e.g. at http://192.168.192.161 in my case). ``` @@ -124,7 +122,7 @@ kubernetes 10.0.0.1 \ 443/TCP \ 2h $ curl http://10.0.0.87:90/ ``` -{: .scale-yaml} + ``` \ @@ -164,7 +162,7 @@ $ cp k8s-on-rpi-master/rootfs/etc/kubernetes/k8s.conf /etc/kubernetes/k8s.conf ``` $ k8s-on-rpi-master/install-k8s-worker.sh ``` -{: .scale-yaml} + The install script will install four services. These are the quite similar to ones on the master node, but with the difference that no etcd service is running and the kubelet service is configured as worker node. @@ -191,7 +189,7 @@ busybox-j2slu 1/1 Running 0 1h 192.168.192.160 k8s-master-127.0.0.1 3/3 Running 6 2h 127.0.0.1 ``` -{: .scale-yaml} + ### Enjoy your Kubernetes cluster! diff --git a/blog/_posts/2015-12-00-How-Weave-Built-A-Multi-Deployment-Solution-For-Scope-Using-Kubernetes.md b/content/en/blog/_posts/2015-12-00-How-Weave-Built-A-Multi-Deployment-Solution-For-Scope-Using-Kubernetes.md similarity index 98% rename from blog/_posts/2015-12-00-How-Weave-Built-A-Multi-Deployment-Solution-For-Scope-Using-Kubernetes.md rename to content/en/blog/_posts/2015-12-00-How-Weave-Built-A-Multi-Deployment-Solution-For-Scope-Using-Kubernetes.md index 6ac4cff330d28..8814190a3f220 100644 --- a/blog/_posts/2015-12-00-How-Weave-Built-A-Multi-Deployment-Solution-For-Scope-Using-Kubernetes.md +++ b/content/en/blog/_posts/2015-12-00-How-Weave-Built-A-Multi-Deployment-Solution-For-Scope-Using-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " How Weave built a multi-deployment solution for Scope using Kubernetes " -date: Sunday, December 12, 2015 -pagination: - enabled: true +date: 2015-12-12 +slug: how-weave-built-a-multi-deployment-solution-for-scope-using-kubernetes +url: /blog/2015/12/How-Weave-Built-A-Multi-Deployment-Solution-For-Scope-Using-Kubernetes --- _Today we hear from Peter Bourgon, Software Engineer at Weaveworks, a company that provides software for developers to network, monitor and control microservices-based apps in docker containers. Peter tells us what was involved in selecting and deploying Kubernetes _ diff --git a/blog/_posts/2015-12-00-Managing-Kubernetes-Pods-Services-And-Replication-Controllers-With-Puppet.md b/content/en/blog/_posts/2015-12-00-Managing-Kubernetes-Pods-Services-And-Replication-Controllers-With-Puppet.md similarity index 96% rename from blog/_posts/2015-12-00-Managing-Kubernetes-Pods-Services-And-Replication-Controllers-With-Puppet.md rename to content/en/blog/_posts/2015-12-00-Managing-Kubernetes-Pods-Services-And-Replication-Controllers-With-Puppet.md index d69029b3b54a6..a1090cc5aa715 100644 --- a/blog/_posts/2015-12-00-Managing-Kubernetes-Pods-Services-And-Replication-Controllers-With-Puppet.md +++ b/content/en/blog/_posts/2015-12-00-Managing-Kubernetes-Pods-Services-And-Replication-Controllers-With-Puppet.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Managing Kubernetes Pods, Services and Replication Controllers with Puppet " -date: Friday, December 17, 2015 -pagination: - enabled: true +date: 2015-12-17 +slug: managing-kubernetes-pods-services-and-replication-controllers-with-puppet +url: /blog/2015/12/Managing-Kubernetes-Pods-Services-And-Replication-Controllers-With-Puppet --- _Today’s guest post is written by Gareth Rushgrove, Senior Software Engineer at Puppet Labs, a leader in IT automation. Gareth tells us about a new Puppet module that helps manage resources in Kubernetes. _ diff --git a/blog/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes.md b/content/en/blog/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes.md similarity index 97% rename from blog/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes.md rename to content/en/blog/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes.md index 7aa4a9a458275..61dee7f21bbe2 100644 --- a/blog/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes.md +++ b/content/en/blog/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Community Meeting Notes - 20160114 " -date: Friday, January 28, 2016 -pagination: - enabled: true +date: 2016-01-28 +slug: kubernetes-community-meeting-notes +url: /blog/2016/01/Kubernetes-Community-Meeting-Notes --- ##### January 14 - RackN demo, testing woes, and KubeCon EU CFP. --- diff --git a/content/en/blog/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes_28.md b/content/en/blog/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes_28.md new file mode 100644 index 0000000000000..b778d8eec1a61 --- /dev/null +++ b/content/en/blog/_posts/2016-01-00-Kubernetes-Community-Meeting-Notes_28.md @@ -0,0 +1,65 @@ +--- +title: Kubernetes Community Meeting Notes - 20160121 +date: 2016-01-28 +slug: kubernetes-community-meeting-notes_28 +url: /blog/2016/01/Kubernetes-Community-Meeting-Notes_28 +--- +#### January 21 - Configuration, Federation and Testing, oh my.  + + +Note taker: Rob Hirshfeld + - Use Case (10 min): [SFDC Paul Brown](https://docs.google.com/a/google.com/presentation/d/1MEI97efplr3f-GDX1GcWGfkEuGKKV-4niu27kHOeMLk/edit?usp=sharing_eid&ts=56a114f8) + - SIG Report - SIG-config and the story of [#18215](https://github.com/kubernetes/kubernetes/pull/18215) + + - A[p](https://github.com/kubernetes/kubernetes/pull/18215)p[l](https://github.com/kubernetes/kubernetes/pull/18215)i[c](https://github.com/kubernetes/kubernetes/pull/18215)a[t](https://github.com/kubernetes/kubernetes/pull/18215)i[o](https://github.com/kubernetes/kubernetes/pull/18215)n[](https://github.com/kubernetes/kubernetes/pull/18215)c[o](https://github.com/kubernetes/kubernetes/pull/18215)n[f](https://github.com/kubernetes/kubernetes/pull/18215)i[g](https://github.com/kubernetes/kubernetes/pull/18215) [I](https://github.com/kubernetes/kubernetes/pull/18215)N[](https://github.com/kubernetes/kubernetes/pull/18215)K[8](https://github.com/kubernetes/kubernetes/pull/18215)s[,](https://github.com/kubernetes/kubernetes/pull/18215) [n](https://github.com/kubernetes/kubernetes/pull/18215)o[t](https://github.com/kubernetes/kubernetes/pull/18215) [d](https://github.com/kubernetes/kubernetes/pull/18215)e[p](https://github.com/kubernetes/kubernetes/pull/18215)l[o](https://github.com/kubernetes/kubernetes/pull/18215)y[m](https://github.com/kubernetes/kubernetes/pull/18215)e[n](https://github.com/kubernetes/kubernetes/pull/18215)t[](https://github.com/kubernetes/kubernetes/pull/18215)o[f](https://github.com/kubernetes/kubernetes/pull/18215) [K](https://github.com/kubernetes/kubernetes/pull/18215)8[s](https://github.com/kubernetes/kubernetes/pull/18215) + - [T](https://github.com/kubernetes/kubernetes/pull/18215)o[p](https://github.com/kubernetes/kubernetes/pull/18215)i[c](https://github.com/kubernetes/kubernetes/pull/18215) [h](https://github.com/kubernetes/kubernetes/pull/18215)a[s](https://github.com/kubernetes/kubernetes/pull/18215) [b](https://github.com/kubernetes/kubernetes/pull/18215)e[e](https://github.com/kubernetes/kubernetes/pull/18215)n[](https://github.com/kubernetes/kubernetes/pull/18215)r[e](https://github.com/kubernetes/kubernetes/pull/18215)u[s](https://github.com/kubernetes/kubernetes/pull/18215)e[](https://github.com/kubernetes/kubernetes/pull/18215)o[f](https://github.com/kubernetes/kubernetes/pull/18215) [c](https://github.com/kubernetes/kubernetes/pull/18215)o[n](https://github.com/kubernetes/kubernetes/pull/18215)f[i](https://github.com/kubernetes/kubernetes/pull/18215)g[u](https://github.com/kubernetes/kubernetes/pull/18215)r[a](https://github.com/kubernetes/kubernetes/pull/18215)t[i](https://github.com/kubernetes/kubernetes/pull/18215)o[n](https://github.com/kubernetes/kubernetes/pull/18215),[](https://github.com/kubernetes/kubernetes/pull/18215)s[p](https://github.com/kubernetes/kubernetes/pull/18215)e[c](https://github.com/kubernetes/kubernetes/pull/18215)i[f](https://github.com/kubernetes/kubernetes/pull/18215)i[c](https://github.com/kubernetes/kubernetes/pull/18215)a[l](https://github.com/kubernetes/kubernetes/pull/18215)l[y](https://github.com/kubernetes/kubernetes/pull/18215) [p](https://github.com/kubernetes/kubernetes/pull/18215)a[r](https://github.com/kubernetes/kubernetes/pull/18215)a[m](https://github.com/kubernetes/kubernetes/pull/18215)e[t](https://github.com/kubernetes/kubernetes/pull/18215)e[r](https://github.com/kubernetes/kubernetes/pull/18215)i[z](https://github.com/kubernetes/kubernetes/pull/18215)a[t](https://github.com/kubernetes/kubernetes/pull/18215)i[o](https://github.com/kubernetes/kubernetes/pull/18215)n[](https://github.com/kubernetes/kubernetes/pull/18215)([a](https://github.com/kubernetes/kubernetes/pull/18215)k[a](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215)e[m](https://github.com/kubernetes/kubernetes/pull/18215)p[l](https://github.com/kubernetes/kubernetes/pull/18215)a[t](https://github.com/kubernetes/kubernetes/pull/18215)e[s](https://github.com/kubernetes/kubernetes/pull/18215))[. Needs:](https://github.com/kubernetes/kubernetes/pull/18215) + + - n[e](https://github.com/kubernetes/kubernetes/pull/18215)e[d](https://github.com/kubernetes/kubernetes/pull/18215)s[](https://github.com/kubernetes/kubernetes/pull/18215)i[n](https://github.com/kubernetes/kubernetes/pull/18215)c[l](https://github.com/kubernetes/kubernetes/pull/18215)u[d](https://github.com/kubernetes/kubernetes/pull/18215)e[](https://github.com/kubernetes/kubernetes/pull/18215)s[c](https://github.com/kubernetes/kubernetes/pull/18215)o[p](https://github.com/kubernetes/kubernetes/pull/18215)i[n](https://github.com/kubernetes/kubernetes/pull/18215)g[](https://github.com/kubernetes/kubernetes/pull/18215)([c](https://github.com/kubernetes/kubernetes/pull/18215)l[u](https://github.com/kubernetes/kubernetes/pull/18215)s[t](https://github.com/kubernetes/kubernetes/pull/18215)e[r](https://github.com/kubernetes/kubernetes/pull/18215) [n](https://github.com/kubernetes/kubernetes/pull/18215)a[m](https://github.com/kubernetes/kubernetes/pull/18215)e[s](https://github.com/kubernetes/kubernetes/pull/18215)p[a](https://github.com/kubernetes/kubernetes/pull/18215)c[e](https://github.com/kubernetes/kubernetes/pull/18215)) + - s[l](https://github.com/kubernetes/kubernetes/pull/18215)i[g](https://github.com/kubernetes/kubernetes/pull/18215)h[t](https://github.com/kubernetes/kubernetes/pull/18215) [c](https://github.com/kubernetes/kubernetes/pull/18215)u[s](https://github.com/kubernetes/kubernetes/pull/18215)t[o](https://github.com/kubernetes/kubernetes/pull/18215)m[i](https://github.com/kubernetes/kubernetes/pull/18215)z[a](https://github.com/kubernetes/kubernetes/pull/18215)t[i](https://github.com/kubernetes/kubernetes/pull/18215)o[n (naming changes, but not major config)](https://github.com/kubernetes/kubernetes/pull/18215) + - [m](https://github.com/kubernetes/kubernetes/pull/18215)u[l](https://github.com/kubernetes/kubernetes/pull/18215)t[i](https://github.com/kubernetes/kubernetes/pull/18215)p[l](https://github.com/kubernetes/kubernetes/pull/18215)e[](https://github.com/kubernetes/kubernetes/pull/18215)p[o](https://github.com/kubernetes/kubernetes/pull/18215)s[i](https://github.com/kubernetes/kubernetes/pull/18215)t[i](https://github.com/kubernetes/kubernetes/pull/18215)o[n](https://github.com/kubernetes/kubernetes/pull/18215)s[](https://github.com/kubernetes/kubernetes/pull/18215)o[n](https://github.com/kubernetes/kubernetes/pull/18215) [h](https://github.com/kubernetes/kubernetes/pull/18215)o[w](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215)o[](https://github.com/kubernetes/kubernetes/pull/18215)d[o](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215)h[i](https://github.com/kubernetes/kubernetes/pull/18215)s[](https://github.com/kubernetes/kubernetes/pull/18215)i[n](https://github.com/kubernetes/kubernetes/pull/18215)c[l](https://github.com/kubernetes/kubernetes/pull/18215)u[d](https://github.com/kubernetes/kubernetes/pull/18215)i[n](https://github.com/kubernetes/kubernetes/pull/18215)g[](https://github.com/kubernetes/kubernetes/pull/18215) + + - +a[l](https://github.com/kubernetes/kubernetes/pull/18215)l[o](https://github.com/kubernetes/kubernetes/pull/18215)w[i](https://github.com/kubernetes/kubernetes/pull/18215)n[g](https://github.com/kubernetes/kubernetes/pull/18215) [e](https://github.com/kubernetes/kubernetes/pull/18215)x[t](https://github.com/kubernetes/kubernetes/pull/18215)e[r](https://github.com/kubernetes/kubernetes/pull/18215)n[a](https://github.com/kubernetes/kubernetes/pull/18215)l[](https://github.com/kubernetes/kubernetes/pull/18215)o[r](https://github.com/kubernetes/kubernetes/pull/18215) [s](https://github.com/kubernetes/kubernetes/pull/18215)i[m](https://github.com/kubernetes/kubernetes/pull/18215)p[l](https://github.com/kubernetes/kubernetes/pull/18215)e[](https://github.com/kubernetes/kubernetes/pull/18215)e[x](https://github.com/kubernetes/kubernetes/pull/18215)t[e](https://github.com/kubernetes/kubernetes/pull/18215)n[s](https://github.com/kubernetes/kubernetes/pull/18215)i[o](https://github.com/kubernetes/kubernetes/pull/18215)n[s](https://github.com/kubernetes/kubernetes/pull/18215). + - +P[e](https://github.com/kubernetes/kubernetes/pull/18215)t[S](https://github.com/kubernetes/kubernetes/pull/18215)e[t](https://github.com/kubernetes/kubernetes/pull/18215) [c](https://github.com/kubernetes/kubernetes/pull/18215)r[e](https://github.com/kubernetes/kubernetes/pull/18215)a[t](https://github.com/kubernetes/kubernetes/pull/18215)e[s](https://github.com/kubernetes/kubernetes/pull/18215) [i](https://github.com/kubernetes/kubernetes/pull/18215)n[s](https://github.com/kubernetes/kubernetes/pull/18215)t[a](https://github.com/kubernetes/kubernetes/pull/18215)n[c](https://github.com/kubernetes/kubernetes/pull/18215)e[s](https://github.com/kubernetes/kubernetes/pull/18215) [w](https://github.com/kubernetes/kubernetes/pull/18215)/[](https://github.com/kubernetes/kubernetes/pull/18215)s[t](https://github.com/kubernetes/kubernetes/pull/18215)a[b](https://github.com/kubernetes/kubernetes/pull/18215)l[e](https://github.com/kubernetes/kubernetes/pull/18215) [n](https://github.com/kubernetes/kubernetes/pull/18215)a[m](https://github.com/kubernetes/kubernetes/pull/18215)e[s](https://github.com/kubernetes/kubernetes/pull/18215)p[a](https://github.com/kubernetes/kubernetes/pull/18215)c[e](https://github.com/kubernetes/kubernetes/pull/18215) + - +[W](https://github.com/kubernetes/kubernetes/pull/18215)o[r](https://github.com/kubernetes/kubernetes/pull/18215)k[f](https://github.com/kubernetes/kubernetes/pull/18215)l[o](https://github.com/kubernetes/kubernetes/pull/18215)w[](https://github.com/kubernetes/kubernetes/pull/18215)p[r](https://github.com/kubernetes/kubernetes/pull/18215)o[p](https://github.com/kubernetes/kubernetes/pull/18215)o[s](https://github.com/kubernetes/kubernetes/pull/18215)a[l](https://github.com/kubernetes/kubernetes/pull/18215) + - +[D](https://github.com/kubernetes/kubernetes/pull/18215)i[s](https://github.com/kubernetes/kubernetes/pull/18215)t[r](https://github.com/kubernetes/kubernetes/pull/18215)i[b](https://github.com/kubernetes/kubernetes/pull/18215)u[t](https://github.com/kubernetes/kubernetes/pull/18215)e[d](https://github.com/kubernetes/kubernetes/pull/18215) [C](https://github.com/kubernetes/kubernetes/pull/18215)h[r](https://github.com/kubernetes/kubernetes/pull/18215)o[n](https://github.com/kubernetes/kubernetes/pull/18215). + - +C[h](https://github.com/kubernetes/kubernetes/pull/18215)a[l](https://github.com/kubernetes/kubernetes/pull/18215)l[e](https://github.com/kubernetes/kubernetes/pull/18215)n[g](https://github.com/kubernetes/kubernetes/pull/18215)e[](https://github.com/kubernetes/kubernetes/pull/18215)i[s](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215)h[a](https://github.com/kubernetes/kubernetes/pull/18215)t[](https://github.com/kubernetes/kubernetes/pull/18215)c[o](https://github.com/kubernetes/kubernetes/pull/18215)n[f](https://github.com/kubernetes/kubernetes/pull/18215)i[g](https://github.com/kubernetes/kubernetes/pull/18215)s[](https://github.com/kubernetes/kubernetes/pull/18215)n[e](https://github.com/kubernetes/kubernetes/pull/18215)e[d](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215)o[](https://github.com/kubernetes/kubernetes/pull/18215)c[r](https://github.com/kubernetes/kubernetes/pull/18215)e[a](https://github.com/kubernetes/kubernetes/pull/18215)t[e](https://github.com/kubernetes/kubernetes/pull/18215) [m](https://github.com/kubernetes/kubernetes/pull/18215)u[l](https://github.com/kubernetes/kubernetes/pull/18215)t[i](https://github.com/kubernetes/kubernetes/pull/18215)p[l](https://github.com/kubernetes/kubernetes/pull/18215)e[](https://github.com/kubernetes/kubernetes/pull/18215)o[b](https://github.com/kubernetes/kubernetes/pull/18215)j[e](https://github.com/kubernetes/kubernetes/pull/18215)c[t](https://github.com/kubernetes/kubernetes/pull/18215)s[](https://github.com/kubernetes/kubernetes/pull/18215)i[n](https://github.com/kubernetes/kubernetes/pull/18215) [s](https://github.com/kubernetes/kubernetes/pull/18215)e[q](https://github.com/kubernetes/kubernetes/pull/18215)u[e](https://github.com/kubernetes/kubernetes/pull/18215)n[c](https://github.com/kubernetes/kubernetes/pull/18215)e + - +T[r](https://github.com/kubernetes/kubernetes/pull/18215)y[i](https://github.com/kubernetes/kubernetes/pull/18215)n[g](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215)o[](https://github.com/kubernetes/kubernetes/pull/18215)f[i](https://github.com/kubernetes/kubernetes/pull/18215)g[u](https://github.com/kubernetes/kubernetes/pull/18215)r[e](https://github.com/kubernetes/kubernetes/pull/18215) [o](https://github.com/kubernetes/kubernetes/pull/18215)u[t](https://github.com/kubernetes/kubernetes/pull/18215) [h](https://github.com/kubernetes/kubernetes/pull/18215)o[w](https://github.com/kubernetes/kubernetes/pull/18215) [b](https://github.com/kubernetes/kubernetes/pull/18215)a[l](https://github.com/kubernetes/kubernetes/pull/18215)a[n](https://github.com/kubernetes/kubernetes/pull/18215)c[e](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215)h[e](https://github.com/kubernetes/kubernetes/pull/18215) [m](https://github.com/kubernetes/kubernetes/pull/18215)a[n](https://github.com/kubernetes/kubernetes/pull/18215)y[](https://github.com/kubernetes/kubernetes/pull/18215)c[o](https://github.com/kubernetes/kubernetes/pull/18215)n[f](https://github.com/kubernetes/kubernetes/pull/18215)i[g](https://github.com/kubernetes/kubernetes/pull/18215) [o](https://github.com/kubernetes/kubernetes/pull/18215)p[t](https://github.com/kubernetes/kubernetes/pull/18215)i[o](https://github.com/kubernetes/kubernetes/pull/18215)n[s](https://github.com/kubernetes/kubernetes/pull/18215) [o](https://github.com/kubernetes/kubernetes/pull/18215)u[t](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215)h[e](https://github.com/kubernetes/kubernetes/pull/18215)r[e](https://github.com/kubernetes/kubernetes/pull/18215) [(](https://github.com/kubernetes/kubernetes/pull/18215)c[o](https://github.com/kubernetes/kubernetes/pull/18215)m[p](https://github.com/kubernetes/kubernetes/pull/18215)o[s](https://github.com/kubernetes/kubernetes/pull/18215)e[,](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215)e[r](https://github.com/kubernetes/kubernetes/pull/18215)r[a](https://github.com/kubernetes/kubernetes/pull/18215)f[o](https://github.com/kubernetes/kubernetes/pull/18215)r[m](https://github.com/kubernetes/kubernetes/pull/18215),[](https://github.com/kubernetes/kubernetes/pull/18215)a[n](https://github.com/kubernetes/kubernetes/pull/18215)s[i](https://github.com/kubernetes/kubernetes/pull/18215)b[l](https://github.com/kubernetes/kubernetes/pull/18215)e[/](https://github.com/kubernetes/kubernetes/pull/18215)e[t](https://github.com/kubernetes/kubernetes/pull/18215)c[)](https://github.com/kubernetes/kubernetes/pull/18215) + - +[G](https://github.com/kubernetes/kubernetes/pull/18215)o[a](https://github.com/kubernetes/kubernetes/pull/18215)l[](https://github.com/kubernetes/kubernetes/pull/18215)i[s](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215)o[](https://github.com/kubernetes/kubernetes/pull/18215)“[m](https://github.com/kubernetes/kubernetes/pull/18215)e[e](https://github.com/kubernetes/kubernetes/pull/18215)t[](https://github.com/kubernetes/kubernetes/pull/18215)p[e](https://github.com/kubernetes/kubernetes/pull/18215)o[p](https://github.com/kubernetes/kubernetes/pull/18215)l[e](https://github.com/kubernetes/kubernetes/pull/18215) [w](https://github.com/kubernetes/kubernetes/pull/18215)h[e](https://github.com/kubernetes/kubernetes/pull/18215)r[e](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215)h[e](https://github.com/kubernetes/kubernetes/pull/18215)y[](https://github.com/kubernetes/kubernetes/pull/18215)a[r](https://github.com/kubernetes/kubernetes/pull/18215)e[”](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215)o[](https://github.com/kubernetes/kubernetes/pull/18215)k[e](https://github.com/kubernetes/kubernetes/pull/18215)e[p](https://github.com/kubernetes/kubernetes/pull/18215) [i](https://github.com/kubernetes/kubernetes/pull/18215)t[](https://github.com/kubernetes/kubernetes/pull/18215)s[i](https://github.com/kubernetes/kubernetes/pull/18215)m[p](https://github.com/kubernetes/kubernetes/pull/18215)l[e](https://github.com/kubernetes/kubernetes/pull/18215) + - +[Q](https://github.com/kubernetes/kubernetes/pull/18215): is there an opinion for the keystore sizing + + - +large size / data blob would not be appropriate + - +you can pull data(config) from another store for larger objects + - +[SIG Report - SIG-federation - progress on Ubernetes-Lite & Ubernetes design](https://github.com/kubernetes/kubernetes/pull/18215) + + - +[G](https://github.com/kubernetes/kubernetes/pull/18215)o[a](https://github.com/kubernetes/kubernetes/pull/18215)l[](https://github.com/kubernetes/kubernetes/pull/18215)i[t](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215)o[](https://github.com/kubernetes/kubernetes/pull/18215)b[e](https://github.com/kubernetes/kubernetes/pull/18215) [a](https://github.com/kubernetes/kubernetes/pull/18215)b[l](https://github.com/kubernetes/kubernetes/pull/18215)e[](https://github.com/kubernetes/kubernetes/pull/18215)t[o](https://github.com/kubernetes/kubernetes/pull/18215) [h](https://github.com/kubernetes/kubernetes/pull/18215)a[v](https://github.com/kubernetes/kubernetes/pull/18215)e[](https://github.com/kubernetes/kubernetes/pull/18215)a[](https://github.com/kubernetes/kubernetes/pull/18215)c[l](https://github.com/kubernetes/kubernetes/pull/18215)u[s](https://github.com/kubernetes/kubernetes/pull/18215)t[e](https://github.com/kubernetes/kubernetes/pull/18215)r[](https://github.com/kubernetes/kubernetes/pull/18215)m[a](https://github.com/kubernetes/kubernetes/pull/18215)n[a](https://github.com/kubernetes/kubernetes/pull/18215)g[e](https://github.com/kubernetes/kubernetes/pull/18215)r[,](https://github.com/kubernetes/kubernetes/pull/18215) [s](https://github.com/kubernetes/kubernetes/pull/18215)o[](https://github.com/kubernetes/kubernetes/pull/18215)y[o](https://github.com/kubernetes/kubernetes/pull/18215)u[](https://github.com/kubernetes/kubernetes/pull/18215)c[a](https://github.com/kubernetes/kubernetes/pull/18215)n[](https://github.com/kubernetes/kubernetes/pull/18215)f[e](https://github.com/kubernetes/kubernetes/pull/18215)d[e](https://github.com/kubernetes/kubernetes/pull/18215)r[a](https://github.com/kubernetes/kubernetes/pull/18215)t[e](https://github.com/kubernetes/kubernetes/pull/18215) [c](https://github.com/kubernetes/kubernetes/pull/18215)l[u](https://github.com/kubernetes/kubernetes/pull/18215)s[t](https://github.com/kubernetes/kubernetes/pull/18215)e[r](https://github.com/kubernetes/kubernetes/pull/18215)s[.  They will automatically distribute the pods.](https://github.com/kubernetes/kubernetes/pull/18215) + - +P[l](https://github.com/kubernetes/kubernetes/pull/18215)a[n](https://github.com/kubernetes/kubernetes/pull/18215) [i](https://github.com/kubernetes/kubernetes/pull/18215)s[](https://github.com/kubernetes/kubernetes/pull/18215)t[o](https://github.com/kubernetes/kubernetes/pull/18215) [u](https://github.com/kubernetes/kubernetes/pull/18215)s[e](https://github.com/kubernetes/kubernetes/pull/18215) [t](https://github.com/kubernetes/kubernetes/pull/18215)h[e](https://github.com/kubernetes/kubernetes/pull/18215) [s](https://github.com/kubernetes/kubernetes/pull/18215)a[m](https://github.com/kubernetes/kubernetes/pull/18215)e[](https://github.com/kubernetes/kubernetes/pull/18215)A[P](https://github.com/kubernetes/kubernetes/pull/18215)I[](https://github.com/kubernetes/kubernetes/pull/18215)f[o](https://github.com/kubernetes/kubernetes/pull/18215)r[](https://github.com/kubernetes/kubernetes/pull/18215)t[h](https://github.com/kubernetes/kubernetes/pull/18215)e[](https://github.com/kubernetes/kubernetes/pull/18215)m[a](https://github.com/kubernetes/kubernetes/pull/18215)s[t](https://github.com/kubernetes/kubernetes/pull/18215)e[r](https://github.com/kubernetes/kubernetes/pull/18215) [c](https://github.com/kubernetes/kubernetes/pull/18215)l[u](https://github.com/kubernetes/kubernetes/pull/18215)s[te](https://github.com/kubernetes/kubernetes/pull/18215)r + - Quinton's Ubernetes Talk:  https://youtu.be/L2ZK24JojB4 + - Design for Ubernetes: https://github.com/kubernetes/kubernetes/pull/19313 + + + - Conformance testing Q+A [Isaac Hollander McCreery] + + - status on conformance testing for release process + + - expect to be forward compatible but not backwards + - is there interest for a sig-testing meeting + - testing needs to a higher priority for the project + - lots of focus on trying to make this a higher priority +To get involved in the Kubernetes community consider joining our [Slack channel](http://slack.k8s.io/), taking a look at the [Kubernetes project](https://github.com/kubernetes/) on GitHub, or join the [Kubernetes-dev Google group](https://groups.google.com/forum/#!forum/kubernetes-dev). If you’re really excited, you can do all of the above and join us for the next community conversation -- January 27th, 2016. Please add yourself or a topic you want to know about to the [agenda](https://docs.google.com/document/d/1VQDIAB0OqiSjIHI8AWMvSdceWhnz56jNpZrLs6o7NJY/edit) and get a calendar invitation by joining [this group](https://groups.google.com/forum/#!forum/kubernetes-community-video-chat). + + + +Still want more Kubernetes? Check out the [recording](https://www.youtube.com/watch?v=izQLFx_6kwY&feature=youtu.be&list=PL69nYSiGNLP1pkHsbPjzAewvMgGUpkCnJ) of this meeting and the growing of the archive of [Kubernetes Community Meetings](https://www.youtube.com/playlist?list=PL69nYSiGNLP1pkHsbPjzAewvMgGUpkCnJ). diff --git a/blog/_posts/2016-01-00-Simple-Leader-Election-With-Kubernetes.md b/content/en/blog/_posts/2016-01-00-Simple-Leader-Election-With-Kubernetes.md similarity index 98% rename from blog/_posts/2016-01-00-Simple-Leader-Election-With-Kubernetes.md rename to content/en/blog/_posts/2016-01-00-Simple-Leader-Election-With-Kubernetes.md index d40ee4ee8d1f6..f2e059561ac5b 100644 --- a/blog/_posts/2016-01-00-Simple-Leader-Election-With-Kubernetes.md +++ b/content/en/blog/_posts/2016-01-00-Simple-Leader-Election-With-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Simple leader election with Kubernetes and Docker " -date: Tuesday, January 11, 2016 -pagination: - enabled: true +date: 2016-01-11 +slug: simple-leader-election-with-kubernetes +url: /blog/2016/01/Simple-Leader-Election-With-Kubernetes --- #### Overview diff --git a/blog/_posts/2016-01-00-Why-Kubernetes-Doesnt-Use-Libnetwork.md b/content/en/blog/_posts/2016-01-00-Why-Kubernetes-Doesnt-Use-Libnetwork.md similarity index 98% rename from blog/_posts/2016-01-00-Why-Kubernetes-Doesnt-Use-Libnetwork.md rename to content/en/blog/_posts/2016-01-00-Why-Kubernetes-Doesnt-Use-Libnetwork.md index 1bcaae88cd8b6..590548aea2d11 100644 --- a/blog/_posts/2016-01-00-Why-Kubernetes-Doesnt-Use-Libnetwork.md +++ b/content/en/blog/_posts/2016-01-00-Why-Kubernetes-Doesnt-Use-Libnetwork.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Why Kubernetes doesn’t use libnetwork " -date: Friday, January 14, 2016 -pagination: - enabled: true +date: 2016-01-14 +slug: why-kubernetes-doesnt-use-libnetwork +url: /blog/2016/01/Why-Kubernetes-Doesnt-Use-Libnetwork --- Kubernetes has had a very basic form of network plugins since before version 1.0 was released — around the same time as Docker's [libnetwork](https://github.com/docker/libnetwork) and Container Network Model ([CNM](https://github.com/docker/libnetwork/blob/master/docs/design.md)) was introduced. Unlike libnetwork, the Kubernetes plugin system still retains its "alpha" designation. Now that Docker's network plugin support is released and supported, an obvious question we get is why Kubernetes has not adopted it yet. After all, vendors will almost certainly be writing plugins for Docker — we would all be better off using the same drivers, right? diff --git a/blog/_posts/2016-02-00-Kubecon-Eu-2016-Kubernetes-Community-In.md b/content/en/blog/_posts/2016-02-00-Kubecon-Eu-2016-Kubernetes-Community-In.md similarity index 96% rename from blog/_posts/2016-02-00-Kubecon-Eu-2016-Kubernetes-Community-In.md rename to content/en/blog/_posts/2016-02-00-Kubecon-Eu-2016-Kubernetes-Community-In.md index 4161318f9c399..38ee6129fda13 100644 --- a/blog/_posts/2016-02-00-Kubecon-Eu-2016-Kubernetes-Community-In.md +++ b/content/en/blog/_posts/2016-02-00-Kubecon-Eu-2016-Kubernetes-Community-In.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " KubeCon EU 2016: Kubernetes Community in London " -date: Thursday, February 24, 2016 -pagination: - enabled: true +date: 2016-02-24 +slug: kubecon-eu-2016-kubernetes-community-in +url: /blog/2016/02/Kubecon-Eu-2016-Kubernetes-Community-In --- KubeCon EU 2016 is the inaugural [European Kubernetes](http://kubernetes.io/) community conference that follows on the American launch in November 2015. KubeCon is fully dedicated to education and community engagement for[Kubernetes](http://kubernetes.io/) enthusiasts, production users and the surrounding ecosystem. diff --git a/blog/_posts/2016-02-00-Kubernetes-Community-Meeting-Notes.md b/content/en/blog/_posts/2016-02-00-Kubernetes-Community-Meeting-Notes.md similarity index 96% rename from blog/_posts/2016-02-00-Kubernetes-Community-Meeting-Notes.md rename to content/en/blog/_posts/2016-02-00-Kubernetes-Community-Meeting-Notes.md index cfd83f62b3dd0..d4040a1db779d 100644 --- a/blog/_posts/2016-02-00-Kubernetes-Community-Meeting-Notes.md +++ b/content/en/blog/_posts/2016-02-00-Kubernetes-Community-Meeting-Notes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Community Meeting Notes - 20160204 " -date: Wednesday, February 09, 2016 -pagination: - enabled: true +date: 2016-02-09 +slug: kubernetes-community-meeting-notes +url: /blog/2016/02/Kubernetes-Community-Meeting-Notes --- #### February 4th - rkt demo (congratulations on the 1.0, CoreOS!), eBay puts k8s on Openstack and considers Openstack on k8s, SIGs, and flaky test surge makes progress. diff --git a/blog/_posts/2016-02-00-Kubernetes-community-meeting-notes-20160128.md b/content/en/blog/_posts/2016-02-00-Kubernetes-community-meeting-notes-20160128.md similarity index 97% rename from blog/_posts/2016-02-00-Kubernetes-community-meeting-notes-20160128.md rename to content/en/blog/_posts/2016-02-00-Kubernetes-community-meeting-notes-20160128.md index 3e68853a0b30f..04810ecefe771 100644 --- a/blog/_posts/2016-02-00-Kubernetes-community-meeting-notes-20160128.md +++ b/content/en/blog/_posts/2016-02-00-Kubernetes-community-meeting-notes-20160128.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Community Meeting Notes - 20160128 " -date: Wednesday, February 02, 2016 -pagination: - enabled: true +date: 2016-02-02 +slug: kubernetes-community-meeting-notes-20160128 +url: /blog/2016/02/Kubernetes-community-meeting-notes-20160128 --- ##### January 28 - 1.2 release update, Deis demo, flaky test surge and SIGs diff --git a/blog/_posts/2016-02-00-Kubernetes-community-meeting-notes-20160211.md b/content/en/blog/_posts/2016-02-00-Kubernetes-community-meeting-notes-20160211.md similarity index 94% rename from blog/_posts/2016-02-00-Kubernetes-community-meeting-notes-20160211.md rename to content/en/blog/_posts/2016-02-00-Kubernetes-community-meeting-notes-20160211.md index 418b3b94a5cae..a07a6e01202da 100644 --- a/blog/_posts/2016-02-00-Kubernetes-community-meeting-notes-20160211.md +++ b/content/en/blog/_posts/2016-02-00-Kubernetes-community-meeting-notes-20160211.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Community Meeting Notes - 20160211 " -date: Wednesday, February 16, 2016 -pagination: - enabled: true +date: 2016-02-16 +slug: kubernetes-community-meeting-notes-20160211 +url: /blog/2016/02/Kubernetes-community-meeting-notes-20160211 --- ##### February 11th - Pangaea Demo, #AWS SIG formed, release automation and documentation team introductions. 1.2 update and planning 1.3. @@ -31,8 +29,7 @@ Note taker: Rob Hirschfeld * There will be some automated checks * Next week: preview of the new website during the community meeting * [@goltermann] 1.2 Release Watch (time +34 minutes) - * code slush date: 2/9/2016 - * no major features or refactors accepted + * code slush * no major features or refactors accepted * discussion about release criteria: we will hold release date for bugs * Testing flake surge is over (one time event and then maintain test stability) * 1.3 Planning (time +40 minutes) diff --git a/blog/_posts/2016-02-00-Sharethis-Kubernetes-In-Production.md b/content/en/blog/_posts/2016-02-00-Sharethis-Kubernetes-In-Production.md similarity index 98% rename from blog/_posts/2016-02-00-Sharethis-Kubernetes-In-Production.md rename to content/en/blog/_posts/2016-02-00-Sharethis-Kubernetes-In-Production.md index 6e4f9b59564a2..13c5de2cffcaa 100644 --- a/blog/_posts/2016-02-00-Sharethis-Kubernetes-In-Production.md +++ b/content/en/blog/_posts/2016-02-00-Sharethis-Kubernetes-In-Production.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " ShareThis: Kubernetes In Production " -date: Friday, February 11, 2016 -pagination: - enabled: true +date: 2016-02-11 +slug: sharethis-kubernetes-in-production +url: /blog/2016/02/Sharethis-Kubernetes-In-Production --- Today’s guest blog post is by Juan Valencia, Technical Lead at ShareThis, a service that helps website publishers drive engagement and consumer sharing behavior across social networks. diff --git a/blog/_posts/2016-02-00-State-Of-Container-World-January-2016.md b/content/en/blog/_posts/2016-02-00-State-Of-Container-World-January-2016.md similarity index 95% rename from blog/_posts/2016-02-00-State-Of-Container-World-January-2016.md rename to content/en/blog/_posts/2016-02-00-State-Of-Container-World-January-2016.md index af9b7d9c11fd1..1a74b80c0767b 100644 --- a/blog/_posts/2016-02-00-State-Of-Container-World-January-2016.md +++ b/content/en/blog/_posts/2016-02-00-State-Of-Container-World-January-2016.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " State of the Container World, January 2016 " -date: Tuesday, February 01, 2016 -pagination: - enabled: true +date: 2016-02-01 +slug: state-of-container-world-january-2016 +url: /blog/2016/02/State-Of-Container-World-January-2016 --- At the start of the new year, we sent out a survey to gauge the state of the container world. We’re ready to send the [February edition](https://docs.google.com/forms/d/13yxxBqb5igUhwrrnDExLzZPjREiCnSs-AH-y4SSZ-5c/viewform), but before we do, let’s take a look at the January data from the 119 responses (thank you for participating!). @@ -57,6 +55,4 @@ Finally, we asked people for free-text answers about the challenges of working w _Download the full survey results [here](https://docs.google.com/spreadsheets/d/18wZe7wEDvRuT78CEifs13maXoSGem_hJvbOSmsuJtkA/pub?gid=530616014&single=true&output=csv) (CSV file)._ -_Update: 2/1/2015 - Fixed the CSV link._ - --- Brendan Burns, Software Engineer, Google +_Up-- Brendan Burns, Software Engineer, Google diff --git a/blog/_posts/2016-02-00-kubernetes-community-meeting-notes_23.md b/content/en/blog/_posts/2016-02-00-kubernetes-community-meeting-notes_23.md similarity index 95% rename from blog/_posts/2016-02-00-kubernetes-community-meeting-notes_23.md rename to content/en/blog/_posts/2016-02-00-kubernetes-community-meeting-notes_23.md index 8074d37a2c7e9..df0c4dd00ede9 100644 --- a/blog/_posts/2016-02-00-kubernetes-community-meeting-notes_23.md +++ b/content/en/blog/_posts/2016-02-00-kubernetes-community-meeting-notes_23.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Community Meeting Notes - 20160218 " -date: Wednesday, February 23, 2016 -pagination: - enabled: true +date: 2016-02-23 +slug: kubernetes-community-meeting-notes_23 +url: /blog/2016/02/kubernetes-community-meeting-notes_23 --- ##### February 18th - kmachine demo, clusterops SIG formed, new k8s.io website preview, 1.2 update and planning 1.3 The Kubernetes contributing community meets most Thursdays at 10:00PT to discuss the project's status via videoconference. Here are the notes from the latest meeting. diff --git a/blog/_posts/2016-03-00-1000-Nodes-And-Beyond-Updates-To-Kubernetes-Performance-And-Scalability-In-12.md b/content/en/blog/_posts/2016-03-00-1000-Nodes-And-Beyond-Updates-To-Kubernetes-Performance-And-Scalability-In-12.md similarity index 98% rename from blog/_posts/2016-03-00-1000-Nodes-And-Beyond-Updates-To-Kubernetes-Performance-And-Scalability-In-12.md rename to content/en/blog/_posts/2016-03-00-1000-Nodes-And-Beyond-Updates-To-Kubernetes-Performance-And-Scalability-In-12.md index bdb03e1566915..ba3b499af28cd 100644 --- a/blog/_posts/2016-03-00-1000-Nodes-And-Beyond-Updates-To-Kubernetes-Performance-And-Scalability-In-12.md +++ b/content/en/blog/_posts/2016-03-00-1000-Nodes-And-Beyond-Updates-To-Kubernetes-Performance-And-Scalability-In-12.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " 1000 nodes and beyond: updates to Kubernetes performance and scalability in 1.2 " -date: Tuesday, March 28, 2016 -pagination: - enabled: true +date: 2016-03-28 +slug: 1000-nodes-and-beyond-updates-to-kubernetes-performance-and-scalability-in-12 +url: /blog/2016/03/1000-Nodes-And-Beyond-Updates-To-Kubernetes-Performance-And-Scalability-In-12 --- _Editor's note: this is the first in a [series of in-depth posts](http://blog.kubernetes.io/2016/03/five-days-of-kubernetes-12.html) on what's new in Kubernetes 1.2_ @@ -27,7 +25,7 @@ We benchmark Kubernetes scalability against the following Service Level Objectiv We say Kubernetes scales to a certain number of nodes only if both of these SLOs are met. We continuously collect and report the measurements described above as part of the project test framework. This battery of tests breaks down into two parts: API responsiveness and Pod Startup Time. -### API responsiveness for user-level abstractions[2](https://www.blogger.com/blogger.g?blogID=112706738355446097#2) {: .sup } +### API responsiveness for user-level abstractions[2](https://www.blogger.com/blogger.g?blogID=112706738355446097#2)  Kubernetes offers high-level abstractions for users to represent their applications. For example, the ReplicationController is an abstraction representing a collection of [pods](http://kubernetes.io/docs/user-guide/pods/). Listing all ReplicationControllers or listing all pods from a given ReplicationController is a very common use case. On the other hand, there is little reason someone would want to list all pods in the system — for example, 30,000 pods (1000 nodes with 30 pods per node) represent ~150MB of data (~5kB/pod \* 30k pods). So this test uses ReplicationControllers. For this test (assuming N to be number of nodes in the cluster), we: diff --git a/blog/_posts/2016-03-00-Appformix-Helping-Enterprises.md b/content/en/blog/_posts/2016-03-00-Appformix-Helping-Enterprises.md similarity index 98% rename from blog/_posts/2016-03-00-Appformix-Helping-Enterprises.md rename to content/en/blog/_posts/2016-03-00-Appformix-Helping-Enterprises.md index acaa6dec25ac8..3c9fa5580c604 100644 --- a/blog/_posts/2016-03-00-Appformix-Helping-Enterprises.md +++ b/content/en/blog/_posts/2016-03-00-Appformix-Helping-Enterprises.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " AppFormix: Helping Enterprises Operationalize Kubernetes " -date: Wednesday, March 29, 2016 -pagination: - enabled: true +date: 2016-03-29 +slug: appformix-helping-enterprises +url: /blog/2016/03/Appformix-Helping-Enterprises --- _Today’s guest post is written Sumeet Singh, founder and CEO of [AppFormix](http://www.appformix.com/), a cloud infrastructure performance optimization service helping enterprise operators streamline their cloud operations on any OpenStack or Kubernetes cloud._ diff --git a/blog/_posts/2016-03-00-Building-Highly-Available-Applications-Using-Kubernetes-New-Multi-Zone-Clusters-A.K.A-Ubernetes-Lite.md b/content/en/blog/_posts/2016-03-00-Building-Highly-Available-Applications-Using-Kubernetes-New-Multi-Zone-Clusters-A.K.A-Ubernetes-Lite.md similarity index 98% rename from blog/_posts/2016-03-00-Building-Highly-Available-Applications-Using-Kubernetes-New-Multi-Zone-Clusters-A.K.A-Ubernetes-Lite.md rename to content/en/blog/_posts/2016-03-00-Building-Highly-Available-Applications-Using-Kubernetes-New-Multi-Zone-Clusters-A.K.A-Ubernetes-Lite.md index b6760b17406e8..d15171951208c 100644 --- a/blog/_posts/2016-03-00-Building-Highly-Available-Applications-Using-Kubernetes-New-Multi-Zone-Clusters-A.K.A-Ubernetes-Lite.md +++ b/content/en/blog/_posts/2016-03-00-Building-Highly-Available-Applications-Using-Kubernetes-New-Multi-Zone-Clusters-A.K.A-Ubernetes-Lite.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Building highly available applications using Kubernetes new multi-zone clusters (a.k.a. 'Ubernetes Lite') " -date: Wednesday, March 29, 2016 -pagination: - enabled: true +date: 2016-03-29 +slug: building-highly-available-applications-using-kubernetes-new-multi-zone-clusters-a.k.a-ubernetes-lite +url: /blog/2016/03/Building-Highly-Available-Applications-Using-Kubernetes-New-Multi-Zone-Clusters-A.K.A-Ubernetes-Lite --- _Editor's note: this is the third post in a [series of in-depth posts](http://blog.kubernetes.io/2016/03/five-days-of-kubernetes-12.html) on what's new in Kubernetes 1.2_ diff --git a/blog/_posts/2016-03-00-Elasticbox-Introduces-Elastickube-To.md b/content/en/blog/_posts/2016-03-00-Elasticbox-Introduces-Elastickube-To.md similarity index 97% rename from blog/_posts/2016-03-00-Elasticbox-Introduces-Elastickube-To.md rename to content/en/blog/_posts/2016-03-00-Elasticbox-Introduces-Elastickube-To.md index 28b49315cfaad..314bf770ab88e 100644 --- a/blog/_posts/2016-03-00-Elasticbox-Introduces-Elastickube-To.md +++ b/content/en/blog/_posts/2016-03-00-Elasticbox-Introduces-Elastickube-To.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " ElasticBox introduces ElasticKube to help manage Kubernetes within the enterprise " -date: Saturday, March 11, 2016 -pagination: - enabled: true +date: 2016-03-11 +slug: elasticbox-introduces-elastickube-to +url: /blog/2016/03/Elasticbox-Introduces-Elastickube-To --- Today’s guest post is brought to you by Brannan Matherson, from ElasticBox, who’ll discuss a new open source project to help standardize container deployment and management in enterprise environments. This highlights the advantages of authentication and user management for containerized applications diff --git a/blog/_posts/2016-03-00-Five-Days-Of-Kubernetes-12.md b/content/en/blog/_posts/2016-03-00-Five-Days-Of-Kubernetes-12.md similarity index 96% rename from blog/_posts/2016-03-00-Five-Days-Of-Kubernetes-12.md rename to content/en/blog/_posts/2016-03-00-Five-Days-Of-Kubernetes-12.md index 8c4d8128def8e..589ac66a0289b 100644 --- a/blog/_posts/2016-03-00-Five-Days-Of-Kubernetes-12.md +++ b/content/en/blog/_posts/2016-03-00-Five-Days-Of-Kubernetes-12.md @@ -1,10 +1,8 @@ --- -layout: blog title: " Five Days of Kubernetes 1.2 " -permalink: /blog/:year/:month/:title -date: Tuesday, March 28, 2016 -pagination: - enabled: true +date: 2016-03-28 +slug: five-days-of-kubernetes-12 +url: /blog/2016/03/Five-Days-Of-Kubernetes-12 --- The Kubernetes project has had some huge milestones over the past few weeks. We released [Kubernetes 1.2](http://blog.kubernetes.io/2016/03/Kubernetes-1.2-even-more-performance-upgrades-plus-easier-application-deployment-and-management-.html), had our [first conference in Europe](https://kubecon.io/), and were accepted into the [Cloud Native Computing Foundation](https://cncf.io/). While we catch our breath, we would like to take a moment to highlight some of the great work contributed by the community since our last milestone, just four months ago. diff --git a/blog/_posts/2016-03-00-How-Container-Metadata-Changes-Your-Point-Of-View.md b/content/en/blog/_posts/2016-03-00-How-Container-Metadata-Changes-Your-Point-Of-View.md similarity index 98% rename from blog/_posts/2016-03-00-How-Container-Metadata-Changes-Your-Point-Of-View.md rename to content/en/blog/_posts/2016-03-00-How-Container-Metadata-Changes-Your-Point-Of-View.md index dbf8600acfa0b..bce09cab05422 100644 --- a/blog/_posts/2016-03-00-How-Container-Metadata-Changes-Your-Point-Of-View.md +++ b/content/en/blog/_posts/2016-03-00-How-Container-Metadata-Changes-Your-Point-Of-View.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " How container metadata changes your point of view " -date: Tuesday, March 28, 2016 -pagination: - enabled: true +date: 2016-03-28 +slug: how-container-metadata-changes-your-point-of-view +url: /blog/2016/03/How-Container-Metadata-Changes-Your-Point-Of-View --- _Today’s guest post is brought to you by Apurva Davé, VP of Marketing at Sysdig, who’ll discuss using Kubernetes metadata & Sysdig to understand what’s going on in your Kubernetes cluster. _ diff --git a/blog/_posts/2016-03-00-Kubernetes-1.2-And-Simplifying-Advanced-Networking-With-Ingress.md b/content/en/blog/_posts/2016-03-00-Kubernetes-1.2-And-Simplifying-Advanced-Networking-With-Ingress.md similarity index 97% rename from blog/_posts/2016-03-00-Kubernetes-1.2-And-Simplifying-Advanced-Networking-With-Ingress.md rename to content/en/blog/_posts/2016-03-00-Kubernetes-1.2-And-Simplifying-Advanced-Networking-With-Ingress.md index cc482644e238f..74903db981510 100644 --- a/blog/_posts/2016-03-00-Kubernetes-1.2-And-Simplifying-Advanced-Networking-With-Ingress.md +++ b/content/en/blog/_posts/2016-03-00-Kubernetes-1.2-And-Simplifying-Advanced-Networking-With-Ingress.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes 1.2 and simplifying advanced networking with Ingress " -date: Friday, March 31, 2016 -pagination: - enabled: true +date: 2016-03-31 +slug: kubernetes-1.2-and-simplifying-advanced-networking-with-ingress +url: /blog/2016/03/Kubernetes-1.2-And-Simplifying-Advanced-Networking-With-Ingress --- _Editor's note: This is the sixth post in a [series of in-depth posts](http://blog.kubernetes.io/2016/03/five-days-of-kubernetes-12.html) on what's new in Kubernetes 1.2._ _Ingress is currently in beta and under active development._ diff --git a/blog/_posts/2016-03-00-Kubernetes-1.2-Even-More-Performance-Upgrades-Plus-Easier-Application-Deployment-And-Management-.md b/content/en/blog/_posts/2016-03-00-Kubernetes-1.2-Even-More-Performance-Upgrades-Plus-Easier-Application-Deployment-And-Management-.md similarity index 96% rename from blog/_posts/2016-03-00-Kubernetes-1.2-Even-More-Performance-Upgrades-Plus-Easier-Application-Deployment-And-Management-.md rename to content/en/blog/_posts/2016-03-00-Kubernetes-1.2-Even-More-Performance-Upgrades-Plus-Easier-Application-Deployment-And-Management-.md index e747cf4a8b580..8cf91e33f6616 100644 --- a/blog/_posts/2016-03-00-Kubernetes-1.2-Even-More-Performance-Upgrades-Plus-Easier-Application-Deployment-And-Management-.md +++ b/content/en/blog/_posts/2016-03-00-Kubernetes-1.2-Even-More-Performance-Upgrades-Plus-Easier-Application-Deployment-And-Management-.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes 1.2: Even more performance upgrades, plus easier application deployment and management " -date: Friday, March 17, 2016 -pagination: - enabled: true +date: 2016-03-17 +slug: kubernetes-1.2-even-more-performance-upgrades-plus-easier-application-deployment-and-management +url: /blog/2016/03/Kubernetes-1.2-Even-More-Performance-Upgrades-Plus-Easier-Application-Deployment-And-Management --- Today we released Kubernetes 1.2. This release represents significant improvements for large organizations building distributed systems. Now with over 680 unique contributors to the project, this release represents our largest yet. diff --git a/blog/_posts/2016-03-00-Kubernetes-Community-Meeting-Notes.md b/content/en/blog/_posts/2016-03-00-Kubernetes-Community-Meeting-Notes.md similarity index 96% rename from blog/_posts/2016-03-00-Kubernetes-Community-Meeting-Notes.md rename to content/en/blog/_posts/2016-03-00-Kubernetes-Community-Meeting-Notes.md index d1b47557b5f64..7aaa94c172623 100644 --- a/blog/_posts/2016-03-00-Kubernetes-Community-Meeting-Notes.md +++ b/content/en/blog/_posts/2016-03-00-Kubernetes-Community-Meeting-Notes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Community Meeting Notes - 20160225 " -date: Wednesday, March 01, 2016 -pagination: - enabled: true +date: 2016-03-01 +slug: kubernetes-community-meeting-notes +url: /blog/2016/03/Kubernetes-Community-Meeting-Notes --- ##### February 25th - Redspread demo, 1.2 update and planning 1.3, newbie introductions, SIG-networking and a shout out to CoreOS blog post. diff --git a/blog/_posts/2016-03-00-Kubernetes-In-Enterprise-With-Fujitsus.md b/content/en/blog/_posts/2016-03-00-Kubernetes-In-Enterprise-With-Fujitsus.md similarity index 98% rename from blog/_posts/2016-03-00-Kubernetes-In-Enterprise-With-Fujitsus.md rename to content/en/blog/_posts/2016-03-00-Kubernetes-In-Enterprise-With-Fujitsus.md index 74d5af3f9766b..3bfa309fd1f98 100644 --- a/blog/_posts/2016-03-00-Kubernetes-In-Enterprise-With-Fujitsus.md +++ b/content/en/blog/_posts/2016-03-00-Kubernetes-In-Enterprise-With-Fujitsus.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes in the Enterprise with Fujitsu’s Cloud Load Control " -date: Saturday, March 11, 2016 -pagination: - enabled: true +date: 2016-03-11 +slug: kubernetes-in-enterprise-with-fujitsus +url: /blog/2016/03/Kubernetes-In-Enterprise-With-Fujitsus --- Today’s guest post is by Florian Walker, Product Manager at Fujitsu and working on Cloud Load Control, an offering focused on the usage of Kubernetes in an enterprise context. Florian tells us what potential Fujitsu sees in Kubernetes, and how they make it accessible to enterprises. diff --git a/blog/_posts/2016-03-00-Scaling-Neural-Network-Image-Classification-Using-Kubernetes-With-Tensorflow-Serving.md b/content/en/blog/_posts/2016-03-00-Scaling-Neural-Network-Image-Classification-Using-Kubernetes-With-Tensorflow-Serving.md similarity index 96% rename from blog/_posts/2016-03-00-Scaling-Neural-Network-Image-Classification-Using-Kubernetes-With-Tensorflow-Serving.md rename to content/en/blog/_posts/2016-03-00-Scaling-Neural-Network-Image-Classification-Using-Kubernetes-With-Tensorflow-Serving.md index 567b2fadf6919..8454c9557971f 100644 --- a/blog/_posts/2016-03-00-Scaling-Neural-Network-Image-Classification-Using-Kubernetes-With-Tensorflow-Serving.md +++ b/content/en/blog/_posts/2016-03-00-Scaling-Neural-Network-Image-Classification-Using-Kubernetes-With-Tensorflow-Serving.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Scaling neural network image classification using Kubernetes with TensorFlow Serving " -date: Thursday, March 23, 2016 -pagination: - enabled: true +date: 2016-03-23 +slug: scaling-neural-network-image-classification-using-kubernetes-with-tensorflow-serving +url: /blog/2016/03/Scaling-Neural-Network-Image-Classification-Using-Kubernetes-With-Tensorflow-Serving --- In 2011, Google developed an internal deep learning infrastructure called [DistBelief](http://research.google.com/pubs/pub40565.html), which allowed Googlers to build ever larger [neural networks](https://en.wikipedia.org/wiki/Artificial_neural_network) and scale training to thousands of cores. Late last year, Google [introduced TensorFlow](http://googleresearch.blogspot.com/2015/11/tensorflow-googles-latest-machine_9.html), its second-generation machine learning system. TensorFlow is general, flexible, portable, easy-to-use and, most importantly, developed with the open source community. diff --git a/blog/_posts/2016-03-00-State-Of-Container-World-February-2016.md b/content/en/blog/_posts/2016-03-00-State-Of-Container-World-February-2016.md similarity index 97% rename from blog/_posts/2016-03-00-State-Of-Container-World-February-2016.md rename to content/en/blog/_posts/2016-03-00-State-Of-Container-World-February-2016.md index 0ee64d632ce9f..cec60f10113a6 100644 --- a/blog/_posts/2016-03-00-State-Of-Container-World-February-2016.md +++ b/content/en/blog/_posts/2016-03-00-State-Of-Container-World-February-2016.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " State of the Container World, February 2016 " -date: Wednesday, March 01, 2016 -pagination: - enabled: true +date: 2016-03-01 +slug: state-of-container-world-february-2016 +url: /blog/2016/03/State-Of-Container-World-February-2016 --- Hello, and welcome to the second installment of the Kubernetes state of the container world survey. At the beginning of February we sent out a survey about people’s usage of containers, and wrote about the [results from the January survey](http://blog.kubernetes.io/2016/02/state-of-container-world-january-2016.html). Here we are again, as before, while we try to reach a large and representative set of respondents, this survey was publicized across the social media account of myself and others on the Kubernetes team, so I expect some pro-container and Kubernetes bias in the data.We continue to try to get as large an audience as possible, and in that vein, please go and take the [March survey](https://docs.google.com/a/google.com/forms/d/1hlOEyjuN4roIbcAAUbDhs7xjNMoM8r-hqtixf6zUsp4/viewform) and share it with your friends and followers everywhere! Without further ado, the numbers... diff --git a/blog/_posts/2016-03-00-Using-Spark-And-Zeppelin-To-Process-Big-Data-On-Kubernetes.md b/content/en/blog/_posts/2016-03-00-Using-Spark-And-Zeppelin-To-Process-Big-Data-On-Kubernetes.md similarity index 98% rename from blog/_posts/2016-03-00-Using-Spark-And-Zeppelin-To-Process-Big-Data-On-Kubernetes.md rename to content/en/blog/_posts/2016-03-00-Using-Spark-And-Zeppelin-To-Process-Big-Data-On-Kubernetes.md index 3d930ac2e0d47..5d36c7eb823aa 100644 --- a/blog/_posts/2016-03-00-Using-Spark-And-Zeppelin-To-Process-Big-Data-On-Kubernetes.md +++ b/content/en/blog/_posts/2016-03-00-Using-Spark-And-Zeppelin-To-Process-Big-Data-On-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Using Spark and Zeppelin to process big data on Kubernetes 1.2 " -date: Thursday, March 30, 2016 -pagination: - enabled: true +date: 2016-03-30 +slug: using-spark-and-zeppelin-to-process-big-data-on-kubernetes +url: /blog/2016/03/Using-Spark-And-Zeppelin-To-Process-Big-Data-On-Kubernetes --- _Editor's note: this is the fifth post in a [series of in-depth posts](http://blog.kubernetes.io/2016/03/five-days-of-kubernetes-12.html) on what's new in Kubernetes 1.2 _ diff --git a/blog/_posts/2016-04-00-Adding-Support-For-Kubernetes-In-Rancher.md b/content/en/blog/_posts/2016-04-00-Adding-Support-For-Kubernetes-In-Rancher.md similarity index 96% rename from blog/_posts/2016-04-00-Adding-Support-For-Kubernetes-In-Rancher.md rename to content/en/blog/_posts/2016-04-00-Adding-Support-For-Kubernetes-In-Rancher.md index 8ef4dd4edbc59..85ffa722225d4 100644 --- a/blog/_posts/2016-04-00-Adding-Support-For-Kubernetes-In-Rancher.md +++ b/content/en/blog/_posts/2016-04-00-Adding-Support-For-Kubernetes-In-Rancher.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Adding Support for Kubernetes in Rancher " -date: Saturday, April 08, 2016 -pagination: - enabled: true +date: 2016-04-08 +slug: adding-support-for-kubernetes-in-rancher +url: /blog/2016/04/Adding-Support-For-Kubernetes-In-Rancher --- _Today’s guest post is written by Darren Shepherd, Chief Architect at Rancher Labs, an open-source software platform for managing containers._ @@ -19,7 +17,7 @@ Adding Kubernetes gives users access to one of the fastest growing platforms for **Bringing Kubernetes to Rancher** - ![Kubernetes deployment-3.PNG](https://lh6.googleusercontent.com/bhmC1-XO5T-itFN3ZsCQmrxUSSEcnezaL-qch6ILWvJRnbhEBZZlAMEj-RcNgkM9XVEUzsRMsvDGc7u8f-M19Jdk_J0GCoO-gZTCZDtgkokgqNkCgP98o8W29xD0kmKiMPeLN-Tt){: .big-img} + ![Kubernetes deployment-3.PNG](https://lh6.googleusercontent.com/bhmC1-XO5T-itFN3ZsCQmrxUSSEcnezaL-qch6ILWvJRnbhEBZZlAMEj-RcNgkM9XVEUzsRMsvDGc7u8f-M19Jdk_J0GCoO-gZTCZDtgkokgqNkCgP98o8W29xD0kmKiMPeLN-Tt) Our platform was already extensible for a variety of different packaging formats, so we were optimistic about embracing Kubernetes. We were right, working with the Kubernetes project has been a fantastic experience as developers. The design of the project made this incredibly easy, and we were able to utilize plugins and extensions to build a distribution of Kubernetes that leveraged our infrastructure and application services. For instance, we were able to plug in Rancher’s software defined networking, storage management, load balancing, DNS and infrastructure management functions directly into Kubernetes, without even changing the code base. diff --git a/blog/_posts/2016-04-00-Building-Awesome-User-Interfaces-For-Kubernetes.md b/content/en/blog/_posts/2016-04-00-Building-Awesome-User-Interfaces-For-Kubernetes.md similarity index 96% rename from blog/_posts/2016-04-00-Building-Awesome-User-Interfaces-For-Kubernetes.md rename to content/en/blog/_posts/2016-04-00-Building-Awesome-User-Interfaces-For-Kubernetes.md index 558bb21473419..f3f19332354b7 100644 --- a/blog/_posts/2016-04-00-Building-Awesome-User-Interfaces-For-Kubernetes.md +++ b/content/en/blog/_posts/2016-04-00-Building-Awesome-User-Interfaces-For-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " SIG-UI: the place for building awesome user interfaces for Kubernetes " -date: Thursday, April 20, 2016 -pagination: - enabled: true +date: 2016-04-20 +slug: building-awesome-user-interfaces-for-kubernetes +url: /blog/2016/04/Building-Awesome-User-Interfaces-For-Kubernetes --- _Editor’s note: This week we’re featuring [Kubernetes Special Interest Groups](https://github.com/kubernetes/kubernetes/wiki/Special-Interest-Groups-(SIGs)); Today’s post is by the SIG-UI team describing their mission and showing the cool projects they work on._ diff --git a/blog/_posts/2016-04-00-Configuration-Management-With-Containers.md b/content/en/blog/_posts/2016-04-00-Configuration-Management-With-Containers.md similarity index 98% rename from blog/_posts/2016-04-00-Configuration-Management-With-Containers.md rename to content/en/blog/_posts/2016-04-00-Configuration-Management-With-Containers.md index 27faa6feda896..64beb4e22f9b1 100644 --- a/blog/_posts/2016-04-00-Configuration-Management-With-Containers.md +++ b/content/en/blog/_posts/2016-04-00-Configuration-Management-With-Containers.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Configuration management with Containers " -date: Tuesday, April 04, 2016 -pagination: - enabled: true +date: 2016-04-04 +slug: configuration-management-with-containers +url: /blog/2016/04/Configuration-Management-With-Containers --- _Editor’s note: this is our seventh post in a [series of in-depth posts](http://blog.kubernetes.io/2016/03/five-days-of-kubernetes-12.html) on what's new in Kubernetes 1.2_ diff --git a/blog/_posts/2016-04-00-Container-Survey-Results-March-2016.md b/content/en/blog/_posts/2016-04-00-Container-Survey-Results-March-2016.md similarity index 96% rename from blog/_posts/2016-04-00-Container-Survey-Results-March-2016.md rename to content/en/blog/_posts/2016-04-00-Container-Survey-Results-March-2016.md index aa64b3fd2702b..1dabbd52907cb 100644 --- a/blog/_posts/2016-04-00-Container-Survey-Results-March-2016.md +++ b/content/en/blog/_posts/2016-04-00-Container-Survey-Results-March-2016.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Container survey results - March 2016 " -date: Saturday, April 08, 2016 -pagination: - enabled: true +date: 2016-04-08 +slug: container-survey-results-march-2016 +url: /blog/2016/04/Container-Survey-Results-March-2016 --- Last month, we had our third installment of our container survey and today we look at the results.  (raw data is available [here](https://docs.google.com/spreadsheets/d/13356w6I2xxKnmjblFSsKGVANZGGlX2yFMzb8eOIe2Oo/edit?usp=sharing)) diff --git a/blog/_posts/2016-04-00-Introducing-Kubernetes-Openstack-Sig.md b/content/en/blog/_posts/2016-04-00-Introducing-Kubernetes-Openstack-Sig.md similarity index 97% rename from blog/_posts/2016-04-00-Introducing-Kubernetes-Openstack-Sig.md rename to content/en/blog/_posts/2016-04-00-Introducing-Kubernetes-Openstack-Sig.md index c76f2ba6bfd01..b48877c9a9123 100644 --- a/blog/_posts/2016-04-00-Introducing-Kubernetes-Openstack-Sig.md +++ b/content/en/blog/_posts/2016-04-00-Introducing-Kubernetes-Openstack-Sig.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Introducing the Kubernetes OpenStack Special Interest Group " -date: Saturday, April 22, 2016 -pagination: - enabled: true +date: 2016-04-22 +slug: introducing-kubernetes-openstack-sig +url: /blog/2016/04/Introducing-Kubernetes-Openstack-Sig --- _Editor’s note: This week we’re featuring [Kubernetes Special Interest Groups](https://github.com/kubernetes/kubernetes/wiki/Special-Interest-Groups-(SIGs)); Today’s post is by the SIG-OpenStack team about their mission to facilitate ideas between the OpenStack and Kubernetes communities. _ diff --git a/blog/_posts/2016-04-00-Kubernetes-Network-Policy-APIs.md b/content/en/blog/_posts/2016-04-00-Kubernetes-Network-Policy-APIs.md similarity index 97% rename from blog/_posts/2016-04-00-Kubernetes-Network-Policy-APIs.md rename to content/en/blog/_posts/2016-04-00-Kubernetes-Network-Policy-APIs.md index e053231948faf..7289f57669681 100644 --- a/blog/_posts/2016-04-00-Kubernetes-Network-Policy-APIs.md +++ b/content/en/blog/_posts/2016-04-00-Kubernetes-Network-Policy-APIs.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " SIG-Networking: Kubernetes Network Policy APIs Coming in 1.3 " -date: Tuesday, April 18, 2016 -pagination: - enabled: true +date: 2016-04-18 +slug: kubernetes-network-policy-apis +url: /blog/2016/04/Kubernetes-Network-Policy-APIs --- _Editor’s note: This week we’re featuring [Kubernetes Special Interest Groups](https://github.com/kubernetes/kubernetes/wiki/Special-Interest-Groups-(SIGs)); Today’s post is by the Network-SIG team describing network policy APIs coming in 1.3 - policies for security, isolation and multi-tenancy._ @@ -149,7 +147,7 @@ External policy control software (specifics vary across implementations) will wa - ![controller.jpg](https://lh5.googleusercontent.com/zMEpLMYmask-B-rYWnbMyGb0M7YusPQFPS6EfpNOSLbkf-cM49V7rTDBpA6k9-Zdh2soMul39rz9rHFJfL-jnEn_mHbpg0E1WlM-wjU-qvQu9KDTQqQ9uBmdaeWynDDNhcT3UjX5){: .big-img} + ![controller.jpg](https://lh5.googleusercontent.com/zMEpLMYmask-B-rYWnbMyGb0M7YusPQFPS6EfpNOSLbkf-cM49V7rTDBpA6k9-Zdh2soMul39rz9rHFJfL-jnEn_mHbpg0E1WlM-wjU-qvQu9KDTQqQ9uBmdaeWynDDNhcT3UjX5) diff --git a/blog/_posts/2016-04-00-Kubernetes-On-Aws_15.md b/content/en/blog/_posts/2016-04-00-Kubernetes-On-Aws_15.md similarity index 97% rename from blog/_posts/2016-04-00-Kubernetes-On-Aws_15.md rename to content/en/blog/_posts/2016-04-00-Kubernetes-On-Aws_15.md index 4b9b4d99b82b9..e76784956a034 100644 --- a/blog/_posts/2016-04-00-Kubernetes-On-Aws_15.md +++ b/content/en/blog/_posts/2016-04-00-Kubernetes-On-Aws_15.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " How to deploy secure, auditable, and reproducible Kubernetes clusters on AWS " -date: Saturday, April 15, 2016 -pagination: - enabled: true +date: 2016-04-15 +slug: kubernetes-on-aws_15 +url: /blog/2016/04/Kubernetes-On-Aws_15 --- _Today’s guest post is written by Colin Hom, infrastructure engineer at [CoreOS](https://coreos.com/), the company delivering Google’s Infrastructure for Everyone Else (#GIFEE) and running the world's containers securely on CoreOS Linux, Tectonic and Quay._ diff --git a/blog/_posts/2016-04-00-Sig-Clusterops-Promote-Operability-And-Interoperability-Of-K8S-Clusters.md b/content/en/blog/_posts/2016-04-00-Sig-Clusterops-Promote-Operability-And-Interoperability-Of-K8S-Clusters.md similarity index 94% rename from blog/_posts/2016-04-00-Sig-Clusterops-Promote-Operability-And-Interoperability-Of-K8S-Clusters.md rename to content/en/blog/_posts/2016-04-00-Sig-Clusterops-Promote-Operability-And-Interoperability-Of-K8S-Clusters.md index 8ec52d31f8c41..e306fb6d101e4 100644 --- a/blog/_posts/2016-04-00-Sig-Clusterops-Promote-Operability-And-Interoperability-Of-K8S-Clusters.md +++ b/content/en/blog/_posts/2016-04-00-Sig-Clusterops-Promote-Operability-And-Interoperability-Of-K8S-Clusters.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " SIG-ClusterOps: Promote operability and interoperability of Kubernetes clusters " -date: Wednesday, April 19, 2016 -pagination: - enabled: true +date: 2016-04-19 +slug: sig-clusterops-promote-operability-and-interoperability-of-k8s-clusters +url: /blog/2016/04/Sig-Clusterops-Promote-Operability-And-Interoperability-Of-K8S-Clusters --- _Editor’s note: This week we’re featuring [Kubernetes Special Interest Groups](https://github.com/kubernetes/kubernetes/wiki/Special-Interest-Groups-(SIGs)); Today’s post is by the SIG-ClusterOps team whose mission is to promote operability and interoperability of Kubernetes clusters -- to listen, help & escalate._ diff --git a/blog/_posts/2016-04-00-Using-Deployment-Objects-With.md b/content/en/blog/_posts/2016-04-00-Using-Deployment-Objects-With.md similarity index 98% rename from blog/_posts/2016-04-00-Using-Deployment-Objects-With.md rename to content/en/blog/_posts/2016-04-00-Using-Deployment-Objects-With.md index c1b11239a6388..fd3015f9e12eb 100644 --- a/blog/_posts/2016-04-00-Using-Deployment-Objects-With.md +++ b/content/en/blog/_posts/2016-04-00-Using-Deployment-Objects-With.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Using Deployment objects with Kubernetes 1.2 " -date: Saturday, April 01, 2016 -pagination: - enabled: true +date: 2016-04-01 +slug: using-deployment-objects-with +url: /blog/2016/04/Using-Deployment-Objects-With --- _Editor's note: this is the seventh post in a [series of in-depth posts](http://blog.kubernetes.io/2016/03/five-days-of-kubernetes-12.html) on what's new in Kubernetes 1.2_ diff --git a/blog/_posts/2016-05-00-Coreosfest2016-Kubernetes-Community.md b/content/en/blog/_posts/2016-05-00-Coreosfest2016-Kubernetes-Community.md similarity index 97% rename from blog/_posts/2016-05-00-Coreosfest2016-Kubernetes-Community.md rename to content/en/blog/_posts/2016-05-00-Coreosfest2016-Kubernetes-Community.md index 4e79b46d61140..72c1ba517ab06 100644 --- a/blog/_posts/2016-05-00-Coreosfest2016-Kubernetes-Community.md +++ b/content/en/blog/_posts/2016-05-00-Coreosfest2016-Kubernetes-Community.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " CoreOS Fest 2016: CoreOS and Kubernetes Community meet in Berlin (& San Francisco) " -date: Wednesday, May 03, 2016 -pagination: - enabled: true +date: 2016-05-03 +slug: coreosfest2016-kubernetes-community +url: /blog/2016/05/Coreosfest2016-Kubernetes-Community --- [CoreOS Fest 2016](https://coreos.com/fest/) will bring together the container and open source distributed systems community, including many thought leaders in the Kubernetes space. It is the second annual CoreOS community conference, held for the first time in Berlin on May 9th and 10th. CoreOS believes Kubernetes is the container orchestration component to deliver GIFEE (Google’s Infrastructure for Everyone Else). diff --git a/blog/_posts/2016-05-00-Hypernetes-Security-And-Multi-Tenancy-In-Kubernetes.md b/content/en/blog/_posts/2016-05-00-Hypernetes-Security-And-Multi-Tenancy-In-Kubernetes.md similarity index 98% rename from blog/_posts/2016-05-00-Hypernetes-Security-And-Multi-Tenancy-In-Kubernetes.md rename to content/en/blog/_posts/2016-05-00-Hypernetes-Security-And-Multi-Tenancy-In-Kubernetes.md index 58224153bfcdd..f7f2615505be0 100644 --- a/blog/_posts/2016-05-00-Hypernetes-Security-And-Multi-Tenancy-In-Kubernetes.md +++ b/content/en/blog/_posts/2016-05-00-Hypernetes-Security-And-Multi-Tenancy-In-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Hypernetes: Bringing Security and Multi-tenancy to Kubernetes " -date: Wednesday, May 24, 2016 -pagination: - enabled: true +date: 2016-05-24 +slug: hypernetes-security-and-multi-tenancy-in-kubernetes +url: /blog/2016/05/Hypernetes-Security-And-Multi-Tenancy-In-Kubernetes --- _Today’s guest post is written by Harry Zhang and Pengfei Ni, engineers at HyperHQ, describing a new hypervisor based container called HyperContainer_ @@ -28,7 +26,7 @@ One of the most important concepts in Kubernetes is Pods. The design of Pods is - ![](https://lh6.googleusercontent.com/8DjNb9IE0HjinFxkaoGbPaaKbts5_Osbj-8NVWQMgY_8D32643Aum0SaMc2OedV2gECG3EXov8qj_f8XDe0IfpptZt61HxfJEonLo3RA5xkr5zSmd2nxqVc8yESc423nPEZTj1H3){: .big-img} + ![](https://lh6.googleusercontent.com/8DjNb9IE0HjinFxkaoGbPaaKbts5_Osbj-8NVWQMgY_8D32643Aum0SaMc2OedV2gECG3EXov8qj_f8XDe0IfpptZt61HxfJEonLo3RA5xkr5zSmd2nxqVc8yESc423nPEZTj1H3) diff --git a/blog/_posts/2016-06-00-Bringing-End-To-End-Testing-To-Azure.md b/content/en/blog/_posts/2016-06-00-Bringing-End-To-End-Testing-To-Azure.md similarity index 98% rename from blog/_posts/2016-06-00-Bringing-End-To-End-Testing-To-Azure.md rename to content/en/blog/_posts/2016-06-00-Bringing-End-To-End-Testing-To-Azure.md index 0b93c3e235a33..11d82cc6e22bc 100644 --- a/blog/_posts/2016-06-00-Bringing-End-To-End-Testing-To-Azure.md +++ b/content/en/blog/_posts/2016-06-00-Bringing-End-To-End-Testing-To-Azure.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Bringing End-to-End Kubernetes Testing to Azure (Part 1) " -date: Tuesday, June 06, 2016 -pagination: - enabled: true +date: 2016-06-06 +slug: bringing-end-to-end-testing-to-azure +url: /blog/2016/06/Bringing-End-To-End-Testing-To-Azure --- _Today’s guest post is by Travis Newhouse, Chief Architect at AppFormix, writing about their experiences bringing Kubernetes to Azure._ diff --git a/blog/_posts/2016-06-00-Container-Design-Patterns.md b/content/en/blog/_posts/2016-06-00-Container-Design-Patterns.md similarity index 97% rename from blog/_posts/2016-06-00-Container-Design-Patterns.md rename to content/en/blog/_posts/2016-06-00-Container-Design-Patterns.md index cf42a9ccd127b..bb15f72592d2c 100644 --- a/blog/_posts/2016-06-00-Container-Design-Patterns.md +++ b/content/en/blog/_posts/2016-06-00-Container-Design-Patterns.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Container Design Patterns " -date: Wednesday, June 21, 2016 -pagination: - enabled: true +date: 2016-06-21 +slug: container-design-patterns +url: /blog/2016/06/Container-Design-Patterns --- Kubernetes automates deployment, operations, and scaling of applications, but our goals in the Kubernetes project extend beyond system management -- we want Kubernetes to help developers, too. Kubernetes should make it easy for them to write the distributed applications and services that run in cloud and datacenter environments. To enable this, Kubernetes defines not only an API for administrators to perform management actions, but also an API for containerized applications to interact with the management platform. diff --git a/blog/_posts/2016-06-00-Illustrated-Childrens-Guide-To-Kubernetes.md b/content/en/blog/_posts/2016-06-00-Illustrated-Childrens-Guide-To-Kubernetes.md similarity index 95% rename from blog/_posts/2016-06-00-Illustrated-Childrens-Guide-To-Kubernetes.md rename to content/en/blog/_posts/2016-06-00-Illustrated-Childrens-Guide-To-Kubernetes.md index 904b58798657d..d4d1ddadeaafc 100644 --- a/blog/_posts/2016-06-00-Illustrated-Childrens-Guide-To-Kubernetes.md +++ b/content/en/blog/_posts/2016-06-00-Illustrated-Childrens-Guide-To-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " The Illustrated Children's Guide to Kubernetes " -date: Friday, June 09, 2016 -pagination: - enabled: true +date: 2016-06-09 +slug: illustrated-childrens-guide-to-kubernetes +url: /blog/2016/06/Illustrated-Childrens-Guide-To-Kubernetes --- _Kubernetes is an open source project with a growing community. We love seeing the ways that our community innovates inside and on top of Kubernetes. Deis is an excellent example of company who understands the strategic impact of strong container orchestration. They contribute directly to the project; in associated subprojects; and, delightfully, with a creative endeavor to help our user community understand more about what Kubernetes is. Want to contribute to Kubernetes? One way is to get involved [here](https://github.com/kubernetes/kubernetes/issues?q=is%3Aopen+is%3Aissue+label%3Ahelp-wanted) and help us with code. But, please don’t consider that the only way to contribute. This little adventure that Deis takes us is an example of how open source isn’t only code. _ diff --git a/blog/_posts/2016-07-00-Automation-Platform-At-Wercker-With-Kubernetes.md b/content/en/blog/_posts/2016-07-00-Automation-Platform-At-Wercker-With-Kubernetes.md similarity index 97% rename from blog/_posts/2016-07-00-Automation-Platform-At-Wercker-With-Kubernetes.md rename to content/en/blog/_posts/2016-07-00-Automation-Platform-At-Wercker-With-Kubernetes.md index 0c1ecdd5e6a03..f6bd15735d89f 100644 --- a/blog/_posts/2016-07-00-Automation-Platform-At-Wercker-With-Kubernetes.md +++ b/content/en/blog/_posts/2016-07-00-Automation-Platform-At-Wercker-With-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Steering an Automation Platform at Wercker with Kubernetes " -date: Saturday, July 15, 2016 -pagination: - enabled: true +date: 2016-07-15 +slug: automation-platform-at-wercker-with-kubernetes +url: /blog/2016/07/Automation-Platform-At-Wercker-With-Kubernetes --- _Editor’s note: today’s guest post is by Andy Smith, the CTO of Wercker, sharing how Kubernetes helps them save time and speed up development.  _ @@ -19,7 +17,7 @@ And of course we use Wercker to build Wercker, and deploy itself onto Kubernetes Because we are a platform for running multi-service cloud-native code we've made many design decisions around isolation. On the base level we use [CoreOS](http://coreos.com/) and [cloud-init](https://coreos.com/os/docs/latest/cloud-config.html) to bootstrap a cluster of heterogeneous nodes which I have named Patricians, Peasants, as well as controller nodes that don't have a cool name and are just called Controllers. Maybe we should switch to Constables. - ![k8s-architecture.jpg](https://lh5.googleusercontent.com/i_Gtd1J9dekCxy7jJYZDZX0XmAmGD4f8qhrYG60FdVqnM87l-si44BGHjFdEFACZcx2E-rgRZNxuvniYDninlHAl9ZHyF2-jJjKUl-QQH8Au29hwVTbnDc0tP1Rv_Yd8mvt1tfoX){: .big-img} + ![k8s-architecture.jpg](https://lh5.googleusercontent.com/i_Gtd1J9dekCxy7jJYZDZX0XmAmGD4f8qhrYG60FdVqnM87l-si44BGHjFdEFACZcx2E-rgRZNxuvniYDninlHAl9ZHyF2-jJjKUl-QQH8Au29hwVTbnDc0tP1Rv_Yd8mvt1tfoX) diff --git a/blog/_posts/2016-07-00-Autoscaling-In-Kubernetes.md b/content/en/blog/_posts/2016-07-00-Autoscaling-In-Kubernetes.md similarity index 99% rename from blog/_posts/2016-07-00-Autoscaling-In-Kubernetes.md rename to content/en/blog/_posts/2016-07-00-Autoscaling-In-Kubernetes.md index f04f27baaf59a..30c0d77130d97 100644 --- a/blog/_posts/2016-07-00-Autoscaling-In-Kubernetes.md +++ b/content/en/blog/_posts/2016-07-00-Autoscaling-In-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Autoscaling in Kubernetes " -date: Wednesday, July 12, 2016 -pagination: - enabled: true +date: 2016-07-12 +slug: autoscaling-in-kubernetes +url: /blog/2016/07/Autoscaling-In-Kubernetes --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2016/07/five-days-of-kubernetes-1.3.html) on what's new in Kubernetes 1.3_ diff --git a/blog/_posts/2016-07-00-Bringing-End-To-End-Kubernetes-Testing-To-Azure-2.md b/content/en/blog/_posts/2016-07-00-Bringing-End-To-End-Kubernetes-Testing-To-Azure-2.md similarity index 97% rename from blog/_posts/2016-07-00-Bringing-End-To-End-Kubernetes-Testing-To-Azure-2.md rename to content/en/blog/_posts/2016-07-00-Bringing-End-To-End-Kubernetes-Testing-To-Azure-2.md index 1f178a4a71c07..761b4566893be 100644 --- a/blog/_posts/2016-07-00-Bringing-End-To-End-Kubernetes-Testing-To-Azure-2.md +++ b/content/en/blog/_posts/2016-07-00-Bringing-End-To-End-Kubernetes-Testing-To-Azure-2.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Bringing End-to-End Kubernetes Testing to Azure (Part 2) " -date: Tuesday, July 18, 2016 -pagination: - enabled: true +date: 2016-07-18 +slug: bringing-end-to-end-kubernetes-testing-to-azure-2 +url: /blog/2016/07/Bringing-End-To-End-Kubernetes-Testing-To-Azure-2 --- _Editor’s Note: Today’s guest post is Part II from a [series](http://blog.kubernetes.io/2016/06/bringing-end-to-end-testing-to-azure.html) by Travis Newhouse, Chief Architect at AppFormix, writing about their contributions to Kubernetes._ @@ -19,7 +17,7 @@ After successfully implementing [“development distro” scripts to automate de We automated our workflow for executing e2e tests of Kubernetes on Azure by defining a nightly job in our private Jenkins server. Figure 2 shows the workflow that uses kube-up.sh to deploy Kubernetes on Ubuntu virtual machines running in Azure, then executes the e2e tests. On completion of the tests, the job uploads the test results and logs to a Google Cloud Storage directory, in a format that can be processed by the [scripts that produce the test history dashboard](https://github.com/kubernetes/test-infra/tree/master/jenkins/test-history). Our Jenkins job uses the hack/jenkins/e2e-runner.sh and hack/jenkins/upload-to-gcs.sh scripts to produce the results in the correct format. -| ![Kubernetes on Azure - Flow Chart - New Page.png](https://lh6.googleusercontent.com/TZiUu4sQ7G0XDvJgv9a1a4UEdxntOZDT9I3S42c8BOAyigxaysKmhJMen8vLaJ3UYaYKPIG9h-cyBOvTSI6kBgqnUQabe4xxZXhrUyVKGEaCDUnmNlBo__HNjzoYc_U7zM77_Dxe){: .big-img} | +| ![Kubernetes on Azure - Flow Chart - New Page.png](https://lh6.googleusercontent.com/TZiUu4sQ7G0XDvJgv9a1a4UEdxntOZDT9I3S42c8BOAyigxaysKmhJMen8vLaJ3UYaYKPIG9h-cyBOvTSI6kBgqnUQabe4xxZXhrUyVKGEaCDUnmNlBo__HNjzoYc_U7zM77_Dxe) | | Figure 2 - Nightly test job workflow | diff --git a/blog/_posts/2016-07-00-Citrix-Netscaler-And-Kubernetes.md b/content/en/blog/_posts/2016-07-00-Citrix-Netscaler-And-Kubernetes.md similarity index 96% rename from blog/_posts/2016-07-00-Citrix-Netscaler-And-Kubernetes.md rename to content/en/blog/_posts/2016-07-00-Citrix-Netscaler-And-Kubernetes.md index 763446f8c948a..26b92e516bf05 100644 --- a/blog/_posts/2016-07-00-Citrix-Netscaler-And-Kubernetes.md +++ b/content/en/blog/_posts/2016-07-00-Citrix-Netscaler-And-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Citrix + Kubernetes = A Home Run " -date: Friday, July 14, 2016 -pagination: - enabled: true +date: 2016-07-14 +slug: citrix-netscaler-and-kubernetes +url: /blog/2016/07/Citrix-Netscaler-And-Kubernetes --- _Editor’s note: today’s guest post is by Mikko Disini, a Director of Product Management at Citrix Systems, sharing their collaboration experience on a Kubernetes integration. _ diff --git a/blog/_posts/2016-07-00-Cross-Cluster-Services.md b/content/en/blog/_posts/2016-07-00-Cross-Cluster-Services.md similarity index 99% rename from blog/_posts/2016-07-00-Cross-Cluster-Services.md rename to content/en/blog/_posts/2016-07-00-Cross-Cluster-Services.md index d87040f92f6e3..3b2626e3400a8 100644 --- a/blog/_posts/2016-07-00-Cross-Cluster-Services.md +++ b/content/en/blog/_posts/2016-07-00-Cross-Cluster-Services.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Cross Cluster Services - Achieving Higher Availability for your Kubernetes Applications " -date: Friday, July 14, 2016 -pagination: - enabled: true +date: 2016-07-14 +slug: cross-cluster-services +url: /blog/2016/07/Cross-Cluster-Services --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2016/07/five-days-of-kubernetes-1.3.html) on what's new in Kubernetes 1.3_ diff --git a/blog/_posts/2016-07-00-Dashboard-Web-Interface-For-Kubernetes.md b/content/en/blog/_posts/2016-07-00-Dashboard-Web-Interface-For-Kubernetes.md similarity index 91% rename from blog/_posts/2016-07-00-Dashboard-Web-Interface-For-Kubernetes.md rename to content/en/blog/_posts/2016-07-00-Dashboard-Web-Interface-For-Kubernetes.md index abb04a8857f13..5a865522506c4 100644 --- a/blog/_posts/2016-07-00-Dashboard-Web-Interface-For-Kubernetes.md +++ b/content/en/blog/_posts/2016-07-00-Dashboard-Web-Interface-For-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Dashboard - Full Featured Web Interface for Kubernetes " -date: Saturday, July 15, 2016 -pagination: - enabled: true +date: 2016-07-15 +slug: dashboard-web-interface-for-kubernetes +url: /blog/2016/07/Dashboard-Web-Interface-For-Kubernetes --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2016/07/five-days-of-kubernetes-1.3.html) on what's new in Kubernetes 1.3_ @@ -19,7 +17,7 @@ The Dashboard UI now handles all workload resources. This means that no matter w - [![](https://lh3.googleusercontent.com/p9bMGxPx4jE6_Z2KB-MktmyuAxyFst-bEk29M_Bn0Bj5ul7uzinH6u5WjHsMmqhGvBwlABZt06dwQ5qkBZiLq_EM1oddCmpwChvXDNXZypaS5l8uzkKuZj3PBUmzTQT4dgDxSXgz){:.big-img} ](https://lh3.googleusercontent.com/p9bMGxPx4jE6_Z2KB-MktmyuAxyFst-bEk29M_Bn0Bj5ul7uzinH6u5WjHsMmqhGvBwlABZt06dwQ5qkBZiLq_EM1oddCmpwChvXDNXZypaS5l8uzkKuZj3PBUmzTQT4dgDxSXgz) + [![](https://lh3.googleusercontent.com/p9bMGxPx4jE6_Z2KB-MktmyuAxyFst-bEk29M_Bn0Bj5ul7uzinH6u5WjHsMmqhGvBwlABZt06dwQ5qkBZiLq_EM1oddCmpwChvXDNXZypaS5l8uzkKuZj3PBUmzTQT4dgDxSXgz) ](https://lh3.googleusercontent.com/p9bMGxPx4jE6_Z2KB-MktmyuAxyFst-bEk29M_Bn0Bj5ul7uzinH6u5WjHsMmqhGvBwlABZt06dwQ5qkBZiLq_EM1oddCmpwChvXDNXZypaS5l8uzkKuZj3PBUmzTQT4dgDxSXgz) @@ -27,7 +25,7 @@ In addition to viewing resources, you can create, edit, update, and delete them. - ![](https://lh6.googleusercontent.com/zz-qjNcGgvWXrK1LIipUdIdPyeWJ1EyPVJxRnSvI6pMcLBkxDxpQt-ObsIiZsS_X0RjVBWtXYO5TCvhsymb__CGXFzKuPUnUrB4HKnAMsxtYdWLwMmHEb8c9P9Chzlo5ePHRKf5O){: .big-img} + ![](https://lh6.googleusercontent.com/zz-qjNcGgvWXrK1LIipUdIdPyeWJ1EyPVJxRnSvI6pMcLBkxDxpQt-ObsIiZsS_X0RjVBWtXYO5TCvhsymb__CGXFzKuPUnUrB4HKnAMsxtYdWLwMmHEb8c9P9Chzlo5ePHRKf5O) @@ -35,7 +33,7 @@ The release includes a beta view of cluster nodes for administration and operati - ![](https://lh6.googleusercontent.com/3CSTUy-8Tz-yAL9tCqxNUqMcWJYKK0dwk7kidE9zy-L-sXFiD4A4Y2LKEqbJKgI6Fl6xbzYxsziI8dULVXPJbu6eU0ci7hNtqi3tTuhdbVD6CG3EXw151fvt2MQuqumHRbab6g-_){: .big-img} + ![](https://lh6.googleusercontent.com/3CSTUy-8Tz-yAL9tCqxNUqMcWJYKK0dwk7kidE9zy-L-sXFiD4A4Y2LKEqbJKgI6Fl6xbzYxsziI8dULVXPJbu6eU0ci7hNtqi3tTuhdbVD6CG3EXw151fvt2MQuqumHRbab6g-_) diff --git a/blog/_posts/2016-07-00-Five-Days-Of-Kubernetes-1.3.md b/content/en/blog/_posts/2016-07-00-Five-Days-Of-Kubernetes-1.3.md similarity index 96% rename from blog/_posts/2016-07-00-Five-Days-Of-Kubernetes-1.3.md rename to content/en/blog/_posts/2016-07-00-Five-Days-Of-Kubernetes-1.3.md index 619893c9d010e..71d61dacdf786 100644 --- a/blog/_posts/2016-07-00-Five-Days-Of-Kubernetes-1.3.md +++ b/content/en/blog/_posts/2016-07-00-Five-Days-Of-Kubernetes-1.3.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Five Days of Kubernetes 1.3 " -date: Tuesday, July 11, 2016 -pagination: - enabled: true +date: 2016-07-11 +slug: five-days-of-kubernetes-1.3 +url: /blog/2016/07/Five-Days-Of-Kubernetes-1.3 --- Last week we [released Kubernetes 1.3](http://blog.kubernetes.io/2016/07/kubernetes-1.3-bridging-cloud-native-and-enterprise-workloads.html), two years from the day when the first Kubernetes commit was pushed to GitHub. Now 30,000+ commits later from over 800 contributors, this 1.3 releases is jam packed with updates driven by feedback from users. diff --git a/blog/_posts/2016-07-00-Kubernetes-1.3-Bridging-Cloud-Native-And-Enterprise-Workloads.md b/content/en/blog/_posts/2016-07-00-Kubernetes-1.3-Bridging-Cloud-Native-And-Enterprise-Workloads.md similarity index 97% rename from blog/_posts/2016-07-00-Kubernetes-1.3-Bridging-Cloud-Native-And-Enterprise-Workloads.md rename to content/en/blog/_posts/2016-07-00-Kubernetes-1.3-Bridging-Cloud-Native-And-Enterprise-Workloads.md index b96c53060c250..277996d6f0a25 100644 --- a/blog/_posts/2016-07-00-Kubernetes-1.3-Bridging-Cloud-Native-And-Enterprise-Workloads.md +++ b/content/en/blog/_posts/2016-07-00-Kubernetes-1.3-Bridging-Cloud-Native-And-Enterprise-Workloads.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes 1.3: Bridging Cloud Native and Enterprise Workloads " -date: Thursday, July 06, 2016 -pagination: - enabled: true +date: 2016-07-06 +slug: kubernetes-1.3-bridging-cloud-native-and-enterprise-workloads +url: /blog/2016/07/Kubernetes-1.3-Bridging-Cloud-Native-And-Enterprise-Workloads --- Nearly two years ago, when we officially kicked off the Kubernetes project, we wanted to simplify distributed systems management and provide the core technology required to everyone. The community’s response to this effort has blown us away. Today, thousands of customers, partners and developers are running clusters in production using Kubernetes and have joined the cloud native revolution.  diff --git a/blog/_posts/2016-07-00-Kubernetes-In-Rancher-Further-Evolution.md b/content/en/blog/_posts/2016-07-00-Kubernetes-In-Rancher-Further-Evolution.md similarity index 98% rename from blog/_posts/2016-07-00-Kubernetes-In-Rancher-Further-Evolution.md rename to content/en/blog/_posts/2016-07-00-Kubernetes-In-Rancher-Further-Evolution.md index 32c63c9f64cd1..74690cd61e82b 100644 --- a/blog/_posts/2016-07-00-Kubernetes-In-Rancher-Further-Evolution.md +++ b/content/en/blog/_posts/2016-07-00-Kubernetes-In-Rancher-Further-Evolution.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes in Rancher: the further evolution " -date: Wednesday, July 12, 2016 -pagination: - enabled: true +date: 2016-07-12 +slug: kubernetes-in-rancher-further-evolution +url: /blog/2016/07/Kubernetes-In-Rancher-Further-Evolution --- _Editor’s note: today's guest post is from Alena Prokharchyk, Principal Software Engineer at Rancher Labs, who’ll share how they are incorporating new Kubernetes features into their platform._ diff --git a/blog/_posts/2016-07-00-Minikube-Easily-Run-Kubernetes-Locally.md b/content/en/blog/_posts/2016-07-00-Minikube-Easily-Run-Kubernetes-Locally.md similarity index 97% rename from blog/_posts/2016-07-00-Minikube-Easily-Run-Kubernetes-Locally.md rename to content/en/blog/_posts/2016-07-00-Minikube-Easily-Run-Kubernetes-Locally.md index 845d9ed9b9431..b566c688a2d91 100644 --- a/blog/_posts/2016-07-00-Minikube-Easily-Run-Kubernetes-Locally.md +++ b/content/en/blog/_posts/2016-07-00-Minikube-Easily-Run-Kubernetes-Locally.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Minikube: easily run Kubernetes locally " -date: Tuesday, July 11, 2016 -pagination: - enabled: true +date: 2016-07-11 +slug: minikube-easily-run-kubernetes-locally +url: /blog/2016/07/Minikube-Easily-Run-Kubernetes-Locally --- _Editor's note: This is the first post in a [series of in-depth articles](http://blog.kubernetes.io/2016/07/five-days-of-kubernetes-1.3.html) on what's new in Kubernetes 1.3 _ @@ -67,7 +65,7 @@ Minikube also comes with the Kubernetes Dashboard. To open this up in your brows ![](https://lh5.googleusercontent.com/PZOe7HAMTJoO_U-r6mR8bXJc7pRIaw33BSQ_SafMY-DPSJB5tiw9SooUvCbtOCJEqQqvnHqngDfFJwWy9Oj3svyo8oTQnzy5srKwZEcBh7fm44n_9YImeJEGhvfNVnx0cfjZ7mcU) - ![](https://lh3.googleusercontent.com/fshhlXr1e39gsMKWbVUGb7rrGcy4uP44ML3Jt7-Sr3ZryoMw802xpkAMaz7ayjQNGtAYl3wpKJgwfefuug1FWHbinr1usN9jwFIAJFKeVeZxaiKtalHXP322_D5otR0Asvw6MUD_){: .big-img} + ![](https://lh3.googleusercontent.com/fshhlXr1e39gsMKWbVUGb7rrGcy4uP44ML3Jt7-Sr3ZryoMw802xpkAMaz7ayjQNGtAYl3wpKJgwfefuug1FWHbinr1usN9jwFIAJFKeVeZxaiKtalHXP322_D5otR0Asvw6MUD_) diff --git a/blog/_posts/2016-07-00-Oh-The-Places-You-Will-Go.md b/content/en/blog/_posts/2016-07-00-Oh-The-Places-You-Will-Go.md similarity index 98% rename from blog/_posts/2016-07-00-Oh-The-Places-You-Will-Go.md rename to content/en/blog/_posts/2016-07-00-Oh-The-Places-You-Will-Go.md index a9fa9f52f9d29..e6834a3c039d1 100644 --- a/blog/_posts/2016-07-00-Oh-The-Places-You-Will-Go.md +++ b/content/en/blog/_posts/2016-07-00-Oh-The-Places-You-Will-Go.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Happy Birthday Kubernetes. Oh, the places you’ll go! " -date: Friday, July 21, 2016 -pagination: - enabled: true +date: 2016-07-21 +slug: oh-the-places-you-will-go +url: /blog/2016/07/Oh-The-Places-You-Will-Go --- _Editor’s note, Today’s guest post is from an independent Kubernetes contributor, Justin Santa Barbara, sharing his reflection on growth of the project from inception to its future._ diff --git a/blog/_posts/2016-07-00-Rktnetes-Brings-Rkt-Container-Engine-To-Kubernetes.md b/content/en/blog/_posts/2016-07-00-Rktnetes-Brings-Rkt-Container-Engine-To-Kubernetes.md similarity index 98% rename from blog/_posts/2016-07-00-Rktnetes-Brings-Rkt-Container-Engine-To-Kubernetes.md rename to content/en/blog/_posts/2016-07-00-Rktnetes-Brings-Rkt-Container-Engine-To-Kubernetes.md index f75015054397a..24f1a543360ff 100644 --- a/blog/_posts/2016-07-00-Rktnetes-Brings-Rkt-Container-Engine-To-Kubernetes.md +++ b/content/en/blog/_posts/2016-07-00-Rktnetes-Brings-Rkt-Container-Engine-To-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " rktnetes brings rkt container engine to Kubernetes " -date: Tuesday, July 11, 2016 -pagination: - enabled: true +date: 2016-07-11 +slug: rktnetes-brings-rkt-container-engine-to-kubernetes +url: /blog/2016/07/Rktnetes-Brings-Rkt-Container-Engine-To-Kubernetes --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2016/07/five-days-of-kubernetes-1.3.html) on what's new in Kubernetes 1.3 _ diff --git a/blog/_posts/2016-07-00-The-Bet-On-Kubernetes.md b/content/en/blog/_posts/2016-07-00-The-Bet-On-Kubernetes.md similarity index 98% rename from blog/_posts/2016-07-00-The-Bet-On-Kubernetes.md rename to content/en/blog/_posts/2016-07-00-The-Bet-On-Kubernetes.md index 888e6f19d2c68..5cbf3a94de8a5 100644 --- a/blog/_posts/2016-07-00-The-Bet-On-Kubernetes.md +++ b/content/en/blog/_posts/2016-07-00-The-Bet-On-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " The Bet on Kubernetes, a Red Hat Perspective " -date: Friday, July 21, 2016 -pagination: - enabled: true +date: 2016-07-21 +slug: the-bet-on-kubernetes +url: /blog/2016/07/The-Bet-On-Kubernetes --- _Editor’s note: Today’s guest post is from a Kubernetes contributor Clayton Coleman, Architect on OpenShift at Red Hat, sharing their adoption of the project from its beginnings._ diff --git a/blog/_posts/2016-07-00-Thousand-Instances-Of-Cassandra-Using-Kubernetes-Pet-Set.md b/content/en/blog/_posts/2016-07-00-Thousand-Instances-Of-Cassandra-Using-Kubernetes-Pet-Set.md similarity index 98% rename from blog/_posts/2016-07-00-Thousand-Instances-Of-Cassandra-Using-Kubernetes-Pet-Set.md rename to content/en/blog/_posts/2016-07-00-Thousand-Instances-Of-Cassandra-Using-Kubernetes-Pet-Set.md index 861f9d3e89294..7b495e1813057 100644 --- a/blog/_posts/2016-07-00-Thousand-Instances-Of-Cassandra-Using-Kubernetes-Pet-Set.md +++ b/content/en/blog/_posts/2016-07-00-Thousand-Instances-Of-Cassandra-Using-Kubernetes-Pet-Set.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Thousand Instances of Cassandra using Kubernetes Pet Set " -date: Thursday, July 13, 2016 -pagination: - enabled: true +date: 2016-07-13 +slug: thousand-instances-of-cassandra-using-kubernetes-pet-set +url: /blog/2016/07/Thousand-Instances-Of-Cassandra-Using-Kubernetes-Pet-Set --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2016/07/five-days-of-kubernetes-1.3.html) on what's new in Kubernetes 1.3_ diff --git a/blog/_posts/2016-07-00-Update-On-Kubernetes-For-Windows-Server-Containers.md b/content/en/blog/_posts/2016-07-00-Update-On-Kubernetes-For-Windows-Server-Containers.md similarity index 98% rename from blog/_posts/2016-07-00-Update-On-Kubernetes-For-Windows-Server-Containers.md rename to content/en/blog/_posts/2016-07-00-Update-On-Kubernetes-For-Windows-Server-Containers.md index f35c66a15460a..96b623c346bf2 100644 --- a/blog/_posts/2016-07-00-Update-On-Kubernetes-For-Windows-Server-Containers.md +++ b/content/en/blog/_posts/2016-07-00-Update-On-Kubernetes-For-Windows-Server-Containers.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Updates to Performance and Scalability in Kubernetes 1.3 -- 2,000 node 60,000 pod clusters " -date: Friday, July 07, 2016 -pagination: - enabled: true +date: 2016-07-07 +slug: update-on-kubernetes-for-windows-server-containers +url: /blog/2016/07/Update-On-Kubernetes-For-Windows-Server-Containers --- We are proud to announce that with the [release of version 1.3](http://blog.kubernetes.io/2016/07/kubernetes-1.3-bridging-cloud-native-and-enterprise-workloads.html), Kubernetes now supports 2000-node clusters with even better end-to-end pod startup time. The latency of our API calls are within our one-second [Service Level Objective (SLO)](https://en.wikipedia.org/wiki/Service_level_objective) and most of them are even an order of magnitude better than that. It is possible to run larger deployments than a 2,000 node cluster, but performance may be degraded and it may not meet our strict SLO. diff --git a/blog/_posts/2016-07-00-happy-k8sbday-1.md b/content/en/blog/_posts/2016-07-00-happy-k8sbday-1.md similarity index 97% rename from blog/_posts/2016-07-00-happy-k8sbday-1.md rename to content/en/blog/_posts/2016-07-00-happy-k8sbday-1.md index 92336c1cf38e3..012f3f35d6f1e 100644 --- a/blog/_posts/2016-07-00-happy-k8sbday-1.md +++ b/content/en/blog/_posts/2016-07-00-happy-k8sbday-1.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " A Very Happy Birthday Kubernetes " -date: Friday, July 21, 2016 -pagination: - enabled: true +date: 2016-07-21 +slug: happy-k8sbday-1 +url: /blog/2016/07/happy-k8sbday-1 --- Last year at OSCON, I got to reconnect with a bunch of friends and see what they have been working on. That turned out to be the [Kubernetes 1.0 launch event](https://www.youtube.com/playlist?list=PL69nYSiGNLP0Ljwa9J98xUd6UlM604Y-l). Even that day, it was clear the project was supported by a broad community -- a group that showed an ambitious vision for distributed computing.  diff --git a/blog/_posts/2016-07-00-openstack-kubernetes-communities.md b/content/en/blog/_posts/2016-07-00-openstack-kubernetes-communities.md similarity index 97% rename from blog/_posts/2016-07-00-openstack-kubernetes-communities.md rename to content/en/blog/_posts/2016-07-00-openstack-kubernetes-communities.md index d2cfd3a59b75e..1ca119d25bb07 100644 --- a/blog/_posts/2016-07-00-openstack-kubernetes-communities.md +++ b/content/en/blog/_posts/2016-07-00-openstack-kubernetes-communities.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Why OpenStack's embrace of Kubernetes is great for both communities " -date: Wednesday, July 26, 2016 -pagination: - enabled: true +date: 2016-07-26 +slug: openstack-kubernetes-communities +url: /blog/2016/07/openstack-kubernetes-communities --- Today, [Mirantis](https://www.mirantis.com/), the leading contributor to [OpenStack](http://stackalytics.com/?release=mitaka), [announced](https://techcrunch.com/2016/07/25/openstack-will-soon-be-able-to-run-on-top-of-kubernetes/) that it will re-write its private cloud platform to use Kubernetes as its underlying orchestration engine. We think this is a great step forward for both the OpenStack and Kubernetes communities. With Kubernetes under the hood, OpenStack users will benefit from the tremendous efficiency, manageability and resiliency that Kubernetes brings to the table, while positioning their applications to use more cloud-native patterns. The Kubernetes community, meanwhile, can feel confident in their choice of orchestration framework, while gaining the ability to manage both container- and VM-based applications from a single platform. diff --git a/blog/_posts/2016-07-00-stateful-applications-in-containers-kubernetes.md b/content/en/blog/_posts/2016-07-00-stateful-applications-in-containers-kubernetes.md similarity index 97% rename from blog/_posts/2016-07-00-stateful-applications-in-containers-kubernetes.md rename to content/en/blog/_posts/2016-07-00-stateful-applications-in-containers-kubernetes.md index 91c51041f812c..ef2f65a6ba21c 100644 --- a/blog/_posts/2016-07-00-stateful-applications-in-containers-kubernetes.md +++ b/content/en/blog/_posts/2016-07-00-stateful-applications-in-containers-kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Stateful Applications in Containers!? Kubernetes 1.3 Says “Yes!” " -date: Thursday, July 13, 2016 -pagination: - enabled: true +date: 2016-07-13 +slug: stateful-applications-in-containers-kubernetes +url: /blog/2016/07/stateful-applications-in-containers-kubernetes --- _Editor's note: today’s guest post is from Mark Balch, VP of Products at Diamanti, who’ll share more about the contributions they’ve made to Kubernetes._ diff --git a/blog/_posts/2016-08-00-Challenges-Remotely-Managed-Onpremise-Kubernetes-Cluster.md b/content/en/blog/_posts/2016-08-00-Challenges-Remotely-Managed-Onpremise-Kubernetes-Cluster.md similarity index 98% rename from blog/_posts/2016-08-00-Challenges-Remotely-Managed-Onpremise-Kubernetes-Cluster.md rename to content/en/blog/_posts/2016-08-00-Challenges-Remotely-Managed-Onpremise-Kubernetes-Cluster.md index 9c3f65a2453b5..566a6e4911612 100644 --- a/blog/_posts/2016-08-00-Challenges-Remotely-Managed-Onpremise-Kubernetes-Cluster.md +++ b/content/en/blog/_posts/2016-08-00-Challenges-Remotely-Managed-Onpremise-Kubernetes-Cluster.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Challenges of a Remotely Managed, On-Premises, Bare-Metal Kubernetes Cluster " -date: Wednesday, August 02, 2016 -pagination: - enabled: true +date: 2016-08-02 +slug: challenges-remotely-managed-onpremise-kubernetes-cluster +url: /blog/2016/08/Challenges-Remotely-Managed-Onpremise-Kubernetes-Cluster --- _Today's post is written by Bich Le, chief architect at Platform9, describing how their engineering team overcame challenges in remotely managing bare-metal Kubernetes clusters. _ @@ -25,7 +23,7 @@ Cluster creation and node attach/detach operations are exposed to administrators - ![clusters_and_containervisors_view.png](https://lh3.googleusercontent.com/Tn67P9fhhPqCNF6xYl6mfVehG8AtLcLOM0NMW3YukBkWB5cSpYofkLQo1vrqsZiDBON05GC4ZQwWgEV9YBdoNA6Hzy_loS0cvT3BzkxmLesk6UsX_xugsrGppJD-Mc8fjHIF2QrU){: .big-img} + ![clusters_and_containervisors_view.png](https://lh3.googleusercontent.com/Tn67P9fhhPqCNF6xYl6mfVehG8AtLcLOM0NMW3YukBkWB5cSpYofkLQo1vrqsZiDBON05GC4ZQwWgEV9YBdoNA6Hzy_loS0cvT3BzkxmLesk6UsX_xugsrGppJD-Mc8fjHIF2QrU) **Cluster initialization** @@ -34,7 +32,7 @@ The first time one or more nodes are attached to a cluster, PMK configures the n - ![architecture.png](https://lh6.googleusercontent.com/ZQZoFL6tDpkiberG_X1CREitwNIDCHnRajnOlJqByU-4HzRQi1RRoDlGj7pGRaqD2a7Yg4xBwQx7oHp_mR8ie96O5w_KMT84av-JMsPMHXeoBpVYn3iJKeGZkWG4q0J06OZMuLIe){: .big-img} + ![architecture.png](https://lh6.googleusercontent.com/ZQZoFL6tDpkiberG_X1CREitwNIDCHnRajnOlJqByU-4HzRQi1RRoDlGj7pGRaqD2a7Yg4xBwQx7oHp_mR8ie96O5w_KMT84av-JMsPMHXeoBpVYn3iJKeGZkWG4q0J06OZMuLIe) **Containerized kubelet?** diff --git a/blog/_posts/2016-08-00-Create-Couchbase-Cluster-Using-Kubernetes.md b/content/en/blog/_posts/2016-08-00-Create-Couchbase-Cluster-Using-Kubernetes.md similarity index 95% rename from blog/_posts/2016-08-00-Create-Couchbase-Cluster-Using-Kubernetes.md rename to content/en/blog/_posts/2016-08-00-Create-Couchbase-Cluster-Using-Kubernetes.md index 31f4053c1c07d..aaae98867b3c8 100644 --- a/blog/_posts/2016-08-00-Create-Couchbase-Cluster-Using-Kubernetes.md +++ b/content/en/blog/_posts/2016-08-00-Create-Couchbase-Cluster-Using-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Create a Couchbase cluster using Kubernetes " -date: Tuesday, August 15, 2016 -pagination: - enabled: true +date: 2016-08-15 +slug: create-couchbase-cluster-using-kubernetes +url: /blog/2016/08/Create-Couchbase-Cluster-Using-Kubernetes --- _Editor’s note: today’s guest post is by Arun Gupta, Vice President Developer Relations at Couchbase, showing how to setup a Couchbase cluster with Kubernetes._ @@ -46,7 +44,7 @@ The worker RC use the exact same image as master RC. This keeps the cluster homo - ![](https://lh6.googleusercontent.com/yS4MqPJG6hQeFa8jcLL9CKy0dD6waghxzFAccS5OIDQJwGNsRmBN531RsByypTBILdJ0yFT3HmbaXOCKgiUr836zx50uOnxa5SIeWb1VaOqo_adepGnJe4L-LATAQtlrQgte7Je1){: .big-img} + ![](https://lh6.googleusercontent.com/yS4MqPJG6hQeFa8jcLL9CKy0dD6waghxzFAccS5OIDQJwGNsRmBN531RsByypTBILdJ0yFT3HmbaXOCKgiUr836zx50uOnxa5SIeWb1VaOqo_adepGnJe4L-LATAQtlrQgte7Je1) @@ -210,25 +208,25 @@ Wait for ~3 mins for the load balancer to be ready to receive requests. Couchbas - ![](https://lh5.googleusercontent.com/LFD6JM9zdP7iriH501VipG06GYEs98aEnWJABvxkZZBZeNJpmXXd2FZFQ9C8nn8gOySQoyrzsgR0c021EGmGWobkgFEgSuYt4lfp6lLooYaX4WhisFPHF_7qqUK4TQKhS9w0G0vb){: .big-img} + ![](https://lh5.googleusercontent.com/LFD6JM9zdP7iriH501VipG06GYEs98aEnWJABvxkZZBZeNJpmXXd2FZFQ9C8nn8gOySQoyrzsgR0c021EGmGWobkgFEgSuYt4lfp6lLooYaX4WhisFPHF_7qqUK4TQKhS9w0G0vb) The image used in the configuration file is configured with the Administrator username and password password. Enter the credentials to see the console: - ![](https://lh3.googleusercontent.com/iyU_n0wfoxl3ItXmRVW6xPHMHWQV72okNvLmXxn2Cc3NR4NCtgGzkNXOB_ZuiU_dulID-wQKKsQMVgFoAuSlxItYdJrBRECWAa25Xqp9M3-f8u0KEUXx9jYQPskkv-jJagvB9Sje){: .big-img} + ![](https://lh3.googleusercontent.com/iyU_n0wfoxl3ItXmRVW6xPHMHWQV72okNvLmXxn2Cc3NR4NCtgGzkNXOB_ZuiU_dulID-wQKKsQMVgFoAuSlxItYdJrBRECWAa25Xqp9M3-f8u0KEUXx9jYQPskkv-jJagvB9Sje) Click on Server Nodes to see how many Couchbase nodes are part of the cluster. As expected, it shows only one node: - ![](https://lh5.googleusercontent.com/TPeK0R9HFs73TxGhK2y37ui1R0dtpTCTHM4ItrBxjWIHP8lhilPGpZbnOl_d9PaLu4DzUPHvbShX1IXUDgglpRskx6wAiHEM1520kyYYlgKiEZWaJBXd0Coy-tL7Zty2tdHHBSUb){: .big-img} + ![](https://lh5.googleusercontent.com/TPeK0R9HFs73TxGhK2y37ui1R0dtpTCTHM4ItrBxjWIHP8lhilPGpZbnOl_d9PaLu4DzUPHvbShX1IXUDgglpRskx6wAiHEM1520kyYYlgKiEZWaJBXd0Coy-tL7Zty2tdHHBSUb) Click on Data Buckets to see a sample bucket that was created as part of the image: - ![](https://lh5.googleusercontent.com/kj-v_sgXzeFTY_Dm6IZyTbZ6QgRKn_zIxqsCmpVqlaykOMvVejgiRvvyAs1qyqDWMJDya58XBtWBQJrd04XHp7VfQ_SdzssmfwzRvodwynIXqqJLT_NPsBbJ7soJSeswynFFUvVk){: .big-img} + ![](https://lh5.googleusercontent.com/kj-v_sgXzeFTY_Dm6IZyTbZ6QgRKn_zIxqsCmpVqlaykOMvVejgiRvvyAs1qyqDWMJDya58XBtWBQJrd04XHp7VfQ_SdzssmfwzRvodwynIXqqJLT_NPsBbJ7soJSeswynFFUvVk) This shows the travel-sample bucket is created and has 31,591 JSON documents. @@ -324,7 +322,7 @@ Couchbase Web Console gets updated to show that a new Couchbase node is added. T - ![](https://lh4.googleusercontent.com/cyrpBtTCFq3rv5YcMvgVdhQN_hQ5WXVxhJSvFdIMQY3GIFJgYVGUpCBrGAp6MBqxHSzfxyEUddF2ijoMncJxKvAgGlKkDMuLOyu0kQKaWi78OW0dmXUtiNQcs0rEEvR_akFtb4UB){: .big-img} + ![](https://lh4.googleusercontent.com/cyrpBtTCFq3rv5YcMvgVdhQN_hQ5WXVxhJSvFdIMQY3GIFJgYVGUpCBrGAp6MBqxHSzfxyEUddF2ijoMncJxKvAgGlKkDMuLOyu0kQKaWi78OW0dmXUtiNQcs0rEEvR_akFtb4UB) @@ -383,7 +381,7 @@ Pending Rebalance tab of Couchbase Web Console shows that 3 servers have now bee - ![](https://lh4.googleusercontent.com/WhruCJSzQs3HpqxcklPGe7vqHQ8Ie1XUZk88vZxrngLcgRowT3Kj_-abNPOQ3t_Jzt-pi6Gn2PGXsncAnh6TGdQr71T1pls7FfgszjTJojf72Wk-Aq-obgf1WslrEvjK0gTLmS0W){: .big-img} + ![](https://lh4.googleusercontent.com/WhruCJSzQs3HpqxcklPGe7vqHQ8Ie1XUZk88vZxrngLcgRowT3Kj_-abNPOQ3t_Jzt-pi6Gn2PGXsncAnh6TGdQr71T1pls7FfgszjTJojf72Wk-Aq-obgf1WslrEvjK0gTLmS0W) Rebalance Couchbase Cluster @@ -391,7 +389,7 @@ Finally, click on Rebalance button to rebalance the cluster. A message window sh - ![](https://lh6.googleusercontent.com/xy-hy554W3dopsGDRYPhMdmaLLh3mknBtZNOHs6U5jqX5SX46u8-pExyt5kRaLGLzaypgX8nXDt2RQd29_AXCgHbzkr3vVYe9OteDX0tUjGnsTGSwrazvk6ziBkj52OM1yNN7dea){: .big-img} + ![](https://lh6.googleusercontent.com/xy-hy554W3dopsGDRYPhMdmaLLh3mknBtZNOHs6U5jqX5SX46u8-pExyt5kRaLGLzaypgX8nXDt2RQd29_AXCgHbzkr3vVYe9OteDX0tUjGnsTGSwrazvk6ziBkj52OM1yNN7dea) @@ -399,7 +397,7 @@ Once all the nodes are rebalanced, Couchbase cluster is ready to serve your requ - ![](https://lh5.googleusercontent.com/WoxQdHde7aws5lc3g1OaG3xDwZtZA1OhLpeHJOtTJnuW4-OrT9VhyVENoWyYYfRaE-h2HDxp3mS2XIj5_P2Uyg-p7ApL8BjgtEfNQscvQd0i7HnSPBy7Ow9PiIsP1IyIlM89-f_V){: .big-img} + ![](https://lh5.googleusercontent.com/WoxQdHde7aws5lc3g1OaG3xDwZtZA1OhLpeHJOtTJnuW4-OrT9VhyVENoWyYYfRaE-h2HDxp3mS2XIj5_P2Uyg-p7ApL8BjgtEfNQscvQd0i7HnSPBy7Ow9PiIsP1IyIlM89-f_V) diff --git a/blog/_posts/2016-08-00-Kubernetes-Namespaces-Use-Cases-Insights.md b/content/en/blog/_posts/2016-08-00-Kubernetes-Namespaces-Use-Cases-Insights.md similarity index 99% rename from blog/_posts/2016-08-00-Kubernetes-Namespaces-Use-Cases-Insights.md rename to content/en/blog/_posts/2016-08-00-Kubernetes-Namespaces-Use-Cases-Insights.md index 1765fe16c6c5a..9042687ccb10c 100644 --- a/blog/_posts/2016-08-00-Kubernetes-Namespaces-Use-Cases-Insights.md +++ b/content/en/blog/_posts/2016-08-00-Kubernetes-Namespaces-Use-Cases-Insights.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Namespaces: use cases and insights " -date: Wednesday, August 16, 2016 -pagination: - enabled: true +date: 2016-08-16 +slug: kubernetes-namespaces-use-cases-insights +url: /blog/2016/08/Kubernetes-Namespaces-Use-Cases-Insights --- _“Who's on first, What's on second, I Don't Know's on third” _ diff --git a/blog/_posts/2016-08-00-Security-Best-Practices-Kubernetes-Deployment.md b/content/en/blog/_posts/2016-08-00-Security-Best-Practices-Kubernetes-Deployment.md similarity index 98% rename from blog/_posts/2016-08-00-Security-Best-Practices-Kubernetes-Deployment.md rename to content/en/blog/_posts/2016-08-00-Security-Best-Practices-Kubernetes-Deployment.md index 8c728388caf5a..10f28a14dc27b 100644 --- a/blog/_posts/2016-08-00-Security-Best-Practices-Kubernetes-Deployment.md +++ b/content/en/blog/_posts/2016-08-00-Security-Best-Practices-Kubernetes-Deployment.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Security Best Practices for Kubernetes Deployment " -date: Thursday, August 31, 2016 -pagination: - enabled: true +date: 2016-08-31 +slug: security-best-practices-kubernetes-deployment +url: /blog/2016/08/Security-Best-Practices-Kubernetes-Deployment --- _Editor’s note: today’s post is by Amir Jerbi and Michael Cherny of Aqua Security, describing security best practices for Kubernetes deployments, based on data they’ve collected from various use-cases seen in both on-premises and cloud deployments._ @@ -176,7 +174,7 @@ When designing your containers and pods, make sure that you configure the securi | SecurityContext->Capabilities |Controls the Linux capabilities assigned to the container.| | SecurityContext->readOnlyRootFilesystem |Controls whether a container will be able to write into the root filesystem.| | PodSecurityContext->runAsNonRoot |Prevents running a container with 'root' user as part of the pod| -{: .post-table} + diff --git a/blog/_posts/2016-08-00-Sig-Apps-Running-Apps-In-Kubernetes.md b/content/en/blog/_posts/2016-08-00-Sig-Apps-Running-Apps-In-Kubernetes.md similarity index 96% rename from blog/_posts/2016-08-00-Sig-Apps-Running-Apps-In-Kubernetes.md rename to content/en/blog/_posts/2016-08-00-Sig-Apps-Running-Apps-In-Kubernetes.md index 19ab9a3bb34ee..61cf1c12d3501 100644 --- a/blog/_posts/2016-08-00-Sig-Apps-Running-Apps-In-Kubernetes.md +++ b/content/en/blog/_posts/2016-08-00-Sig-Apps-Running-Apps-In-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " SIG Apps: build apps for and operate them in Kubernetes " -date: Wednesday, August 16, 2016 -pagination: - enabled: true +date: 2016-08-16 +slug: sig-apps-running-apps-in-kubernetes +url: /blog/2016/08/Sig-Apps-Running-Apps-In-Kubernetes --- _Editor’s note: This post is by the Kubernetes SIG-Apps team sharing how they focus on the developer and devops experience of running applications in Kubernetes._ diff --git a/blog/_posts/2016-08-00-Stateful-Applications-Using-Kubernetes-Datera.md b/content/en/blog/_posts/2016-08-00-Stateful-Applications-Using-Kubernetes-Datera.md similarity index 98% rename from blog/_posts/2016-08-00-Stateful-Applications-Using-Kubernetes-Datera.md rename to content/en/blog/_posts/2016-08-00-Stateful-Applications-Using-Kubernetes-Datera.md index 16201981472b3..dfb9930c3d95c 100644 --- a/blog/_posts/2016-08-00-Stateful-Applications-Using-Kubernetes-Datera.md +++ b/content/en/blog/_posts/2016-08-00-Stateful-Applications-Using-Kubernetes-Datera.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Scaling Stateful Applications using Kubernetes Pet Sets and FlexVolumes with Datera Elastic Data Fabric " -date: Tuesday, August 29, 2016 -pagination: - enabled: true +date: 2016-08-29 +slug: stateful-applications-using-kubernetes-datera +url: /blog/2016/08/Stateful-Applications-Using-Kubernetes-Datera --- _Editor’s note: today’s guest post is by Shailesh Mittal, Software Architect and Ashok Rajagopalan, Sr Director Product at Datera Inc, talking about Stateful Application provisioning with Kubernetes on Datera Elastic Data Fabric._ @@ -103,7 +101,7 @@ The Datera PersistenceVolume plugin is installed on all minion nodes. When a pod Once a volume is provisioned in the Datera Data Fabric, volumes are presented as an iSCSI block device to the minion node, and kubelet mounts this device for the containers (in the pod) to access it. - ![](https://lh4.googleusercontent.com/ILlUm1HrWhGa8uTt97dQ786Gn20FHFZkavfucz05NHv6moZWiGDG7GlELM6o4CSzANWvZckoAVug5o4jMg17a-PbrfD1FRbDPeUCIc8fKVmVBNUsUPshWanXYkBa3gIJy5BnhLmZ){: .big-img} + ![](https://lh4.googleusercontent.com/ILlUm1HrWhGa8uTt97dQ786Gn20FHFZkavfucz05NHv6moZWiGDG7GlELM6o4CSzANWvZckoAVug5o4jMg17a-PbrfD1FRbDPeUCIc8fKVmVBNUsUPshWanXYkBa3gIJy5BnhLmZ) diff --git a/blog/_posts/2016-09-00-Cloud-Native-Application-Interfaces.md b/content/en/blog/_posts/2016-09-00-Cloud-Native-Application-Interfaces.md similarity index 98% rename from blog/_posts/2016-09-00-Cloud-Native-Application-Interfaces.md rename to content/en/blog/_posts/2016-09-00-Cloud-Native-Application-Interfaces.md index 9cc4c78219869..b962fea5ddf97 100644 --- a/blog/_posts/2016-09-00-Cloud-Native-Application-Interfaces.md +++ b/content/en/blog/_posts/2016-09-00-Cloud-Native-Application-Interfaces.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Cloud Native Application Interfaces " -date: Friday, September 01, 2016 -pagination: - enabled: true +date: 2016-09-01 +slug: cloud-native-application-interfaces +url: /blog/2016/09/Cloud-Native-Application-Interfaces --- diff --git a/blog/_posts/2016-09-00-Creating-Postgresql-Cluster-Using-Helm.md b/content/en/blog/_posts/2016-09-00-Creating-Postgresql-Cluster-Using-Helm.md similarity index 97% rename from blog/_posts/2016-09-00-Creating-Postgresql-Cluster-Using-Helm.md rename to content/en/blog/_posts/2016-09-00-Creating-Postgresql-Cluster-Using-Helm.md index 1229119db8647..d895b985f8b2d 100644 --- a/blog/_posts/2016-09-00-Creating-Postgresql-Cluster-Using-Helm.md +++ b/content/en/blog/_posts/2016-09-00-Creating-Postgresql-Cluster-Using-Helm.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Creating a PostgreSQL Cluster using Helm " -date: Saturday, September 09, 2016 -pagination: - enabled: true +date: 2016-09-09 +slug: creating-postgresql-cluster-using-helm +url: /blog/2016/09/Creating-Postgresql-Cluster-Using-Helm --- _Editor’s note: Today’s guest post is by Jeff McCormick, a developer at Crunchy Data, showing how to deploy a PostgreSQL cluster using Helm, a Kubernetes package manager._ diff --git a/blog/_posts/2016-09-00-Deploying-To-Multiple-Kubernetes-With-Kit.md b/content/en/blog/_posts/2016-09-00-Deploying-To-Multiple-Kubernetes-With-Kit.md similarity index 98% rename from blog/_posts/2016-09-00-Deploying-To-Multiple-Kubernetes-With-Kit.md rename to content/en/blog/_posts/2016-09-00-Deploying-To-Multiple-Kubernetes-With-Kit.md index c7503760ea050..b2606264b69dc 100644 --- a/blog/_posts/2016-09-00-Deploying-To-Multiple-Kubernetes-With-Kit.md +++ b/content/en/blog/_posts/2016-09-00-Deploying-To-Multiple-Kubernetes-With-Kit.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Deploying to Multiple Kubernetes Clusters with kit " -date: Wednesday, September 06, 2016 -pagination: - enabled: true +date: 2016-09-06 +slug: deploying-to-multiple-kubernetes-with-kit +url: /blog/2016/09/Deploying-To-Multiple-Kubernetes-With-Kit --- _Editor’s note: today’s guest post is by Chesley Brown, Full-Stack Engineer, at InVision, talking about how they build and open sourced kit to help them to continuously deploy updates to multiple clusters._ diff --git a/blog/_posts/2016-09-00-High-Performance-Network-Policies-Kubernetes.md b/content/en/blog/_posts/2016-09-00-High-Performance-Network-Policies-Kubernetes.md similarity index 98% rename from blog/_posts/2016-09-00-High-Performance-Network-Policies-Kubernetes.md rename to content/en/blog/_posts/2016-09-00-High-Performance-Network-Policies-Kubernetes.md index c7f49433350b0..6013392f9d774 100644 --- a/blog/_posts/2016-09-00-High-Performance-Network-Policies-Kubernetes.md +++ b/content/en/blog/_posts/2016-09-00-High-Performance-Network-Policies-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " High performance network policies in Kubernetes clusters " -date: Thursday, September 21, 2016 -pagination: - enabled: true +date: 2016-09-21 +slug: high-performance-network-policies-kubernetes +url: /blog/2016/09/High-Performance-Network-Policies-Kubernetes --- _Editor's note: today’s post is by Juergen Brendel, Pritesh Kothari and Chris Marino co-founders of Pani Networks, the sponsor of the Romana project, the network policy software used for these benchmark tests._ @@ -122,13 +120,13 @@ The table below shows the results, measured in milliseconds for different reques Response Size |Policies |.5k |1k |10k |100k |1M | -|--|--|--|--|--| +|---|---|---|---|---| |0 |0.732 |0.738 |1.077 |2.532 |10.487 | |10 |0.744 |0.742 |1.084 |2.570 |10.556 | |50 |0.745 |0.755 |1.086 |2.580 |10.566 | |100 |0.762 |0.770 |1.104 |2.640 |10.597 | |200 |0.783 |0.783 |1.147 |2.652 |10.677 | -{: .post-table} + What we see here is that, as the number of policies increases, processing network policies introduces a very small delay, never more than 0.2ms, even after applying 200 policies. For all practical purposes, no meaningful delay is introduced when network policy is applied. Also worth noting is that doubling the response size from 0.5k to 1.0k had virtually no effect. This is because for very small responses, the fixed overhead of creating a new connection dominates the overall response time (i.e. the same number of packets are transferred). @@ -154,13 +152,13 @@ Even as a percentage of baseline performance, the impact is still very small. Th Response Size |Policies | .5k | 1k | 10k | 100k | 1M | -|--|--|--|--|--|---| +|---|---|---|---|---|----| | 0 | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | | 10 | -1.6% | -0.5% | -0.6% | -1.5% | -0.7% | | 50 | -1.8% | -2.3% | -0.8% | -1.9% | -0.8% | | 100 | -4.1% | -4.3% | -2.5% | -4.3% | -1.0% | | 200 | -7.0% | -6.1% | -6.5% | -4.7% | -1.8% | -{: .post-table} + ![](https://lh6.googleusercontent.com/Bwpuko0UBaTQrL0h9_wDtnmsa0ijk6KD82BDVtHCCMuM4zATPppHKLv9lDoWBYvTbO89nPqIIA5jLYMfdxv7O6jIwRqHg_chVvBOz0-yZ_j2YhXop5Tg2a-a86swu_tBQhEPVGH3) diff --git a/blog/_posts/2016-09-00-How-Qbox-Saved-50-Percent-On-Aws-Bills.md b/content/en/blog/_posts/2016-09-00-How-Qbox-Saved-50-Percent-On-Aws-Bills.md similarity index 97% rename from blog/_posts/2016-09-00-How-Qbox-Saved-50-Percent-On-Aws-Bills.md rename to content/en/blog/_posts/2016-09-00-How-Qbox-Saved-50-Percent-On-Aws-Bills.md index 21d3adf1acd02..917144f835ee7 100644 --- a/blog/_posts/2016-09-00-How-Qbox-Saved-50-Percent-On-Aws-Bills.md +++ b/content/en/blog/_posts/2016-09-00-How-Qbox-Saved-50-Percent-On-Aws-Bills.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " How Qbox Saved 50% per Month on AWS Bills Using Kubernetes and Supergiant " -date: Wednesday, September 27, 2016 -pagination: - enabled: true +date: 2016-09-27 +slug: how-qbox-saved-50-percent-on-aws-bills +url: /blog/2016/09/How-Qbox-Saved-50-Percent-On-Aws-Bills --- _Editor’s Note: Today’s post is by the team at Qbox, a hosted Elasticsearch provider sharing their experience with Kubernetes and how it helped save them fifty-percent off their cloud bill. _ @@ -31,7 +29,7 @@ We built [Supergiant](https://supergiant.io/) originally for our own Elasticsear For Qbox, we went from needing 1:1 nodes to approximately 1:11 nodes. Sure, the nodes were larger, but the utilization made a substantial difference. As in the picture below, we could cram a whole bunch of little instances onto one big instance and not lose any performance. Smaller users would get the added benefit of higher network throughput by virtue of being on bigger resources, and they would also get greater CPU and RAM bursting. - ![sg-example.png](https://lh6.googleusercontent.com/vV7vzgS8fl-wJSTVbtE7aveWwBf2kXH348ItU0uvakWa-TeO9sJQxr9IuccNa1L9NOLqIBWEDg1ASgChjoBdeDgkiazJ0z9x4r439YukgVz3yOXcouCZXaPjMQOXjmWTm8tBBOqh){:.big-img} + ![sg-example.png](https://lh6.googleusercontent.com/vV7vzgS8fl-wJSTVbtE7aveWwBf2kXH348ItU0uvakWa-TeO9sJQxr9IuccNa1L9NOLqIBWEDg1ASgChjoBdeDgkiazJ0z9x4r439YukgVz3yOXcouCZXaPjMQOXjmWTm8tBBOqh) **Adding Up the Cost Savings** The [packing algorithm](https://supergiant.io/blog/supergiant-packing-algorithm-unique-save-money) in Supergiant, with its increased utilization, resulted in an immediate 25% drop in our infrastructure footprint. Remember, this came with better performance and fewer support tickets. We could dial up the packing algorithm and probably save even more money. Meanwhile, because our nodes were larger and far more predictable, we could much more fully leverage the economic goodness that is AWS Reserved Instances. We went with 1-year partial RI’s, which cut the remaining costs by 40%, give or take. Our customers still had the flexibility to spin up, down, and out their Elasticsearch nodes, without forcing us to constantly juggle, combine, split, and recombine our reservations. At the end of the day, we saved 50%. That is $600k per year that can go towards engineering salaries instead of enriching our IaaS provider.  diff --git a/blog/_posts/2016-09-00-How-We-Made-Kubernetes-Easy-To-Install.md b/content/en/blog/_posts/2016-09-00-How-We-Made-Kubernetes-Easy-To-Install.md similarity index 97% rename from blog/_posts/2016-09-00-How-We-Made-Kubernetes-Easy-To-Install.md rename to content/en/blog/_posts/2016-09-00-How-We-Made-Kubernetes-Easy-To-Install.md index 841ccc4907263..1e46d6ace10aa 100644 --- a/blog/_posts/2016-09-00-How-We-Made-Kubernetes-Easy-To-Install.md +++ b/content/en/blog/_posts/2016-09-00-How-We-Made-Kubernetes-Easy-To-Install.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " How we made Kubernetes insanely easy to install " -date: Thursday, September 28, 2016 -pagination: - enabled: true +date: 2016-09-28 +slug: how-we-made-kubernetes-easy-to-install +url: /blog/2016/09/How-We-Made-Kubernetes-Easy-To-Install --- _Editor's note: Today’s post is by [Luke Marsden](https://twitter.com/lmarsden), Head of Developer Experience, at Weaveworks, showing the Special Interest Group Cluster-Lifecycle’s recent work on kubeadm, a tool to make installing Kubernetes much simpler._ diff --git a/blog/_posts/2016-09-00-Kubernetes-1.4-Making-It-Easy-To-Run-On-Kuberentes-Anywhere.md b/content/en/blog/_posts/2016-09-00-Kubernetes-1.4-Making-It-Easy-To-Run-On-Kuberentes-Anywhere.md similarity index 98% rename from blog/_posts/2016-09-00-Kubernetes-1.4-Making-It-Easy-To-Run-On-Kuberentes-Anywhere.md rename to content/en/blog/_posts/2016-09-00-Kubernetes-1.4-Making-It-Easy-To-Run-On-Kuberentes-Anywhere.md index 936226e19a118..c40a925872a43 100644 --- a/blog/_posts/2016-09-00-Kubernetes-1.4-Making-It-Easy-To-Run-On-Kuberentes-Anywhere.md +++ b/content/en/blog/_posts/2016-09-00-Kubernetes-1.4-Making-It-Easy-To-Run-On-Kuberentes-Anywhere.md @@ -1,9 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes 1.4: Making it easy to run on Kubernetes anywhere " -date: Tuesday, September 26, 2016 - +date: 2016-09-26 +slug: kubernetes-1.4-making-it-easy-to-run-on-kuberentes-anywhere +url: /blog/2016/09/Kubernetes-1.4-Making-It-Easy-To-Run-On-Kuberentes-Anywhere --- Today we’re happy to announce the release of Kubernetes 1.4. diff --git a/blog/_posts/2016-10-00-Dynamic-Provisioning-And-Storage-In-Kubernetes.md b/content/en/blog/_posts/2016-10-00-Dynamic-Provisioning-And-Storage-In-Kubernetes.md similarity index 98% rename from blog/_posts/2016-10-00-Dynamic-Provisioning-And-Storage-In-Kubernetes.md rename to content/en/blog/_posts/2016-10-00-Dynamic-Provisioning-And-Storage-In-Kubernetes.md index 7789ac06d50bf..3c1d628b32884 100644 --- a/blog/_posts/2016-10-00-Dynamic-Provisioning-And-Storage-In-Kubernetes.md +++ b/content/en/blog/_posts/2016-10-00-Dynamic-Provisioning-And-Storage-In-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Dynamic Provisioning and Storage Classes in Kubernetes " -date: Saturday, October 07, 2016 -pagination: - enabled: true +date: 2016-10-07 +slug: dynamic-provisioning-and-storage-in-kubernetes +url: /blog/2016/10/Dynamic-Provisioning-And-Storage-In-Kubernetes --- Storage is a critical part of running containers, and Kubernetes offers some powerful primitives for managing it. Dynamic volume provisioning, a feature unique to Kubernetes, allows storage volumes to be created on-demand. Without dynamic provisioning, cluster administrators have to manually make calls to their cloud or storage provider to create new storage volumes, and then create PersistentVolume objects to represent them in Kubernetes. The dynamic provisioning feature eliminates the need for cluster administrators to pre-provision storage. Instead, it automatically provisions storage when it is requested by users. This feature was introduced as alpha in Kubernetes 1.2, and has been improved and promoted to beta in the [latest release, 1.4](http://blog.kubernetes.io/2016/09/kubernetes-1.4-making-it-easy-to-run-on-kuberentes-anywhere.html). This release makes dynamic provisioning far more flexible and useful. diff --git a/blog/_posts/2016-10-00-Globally-Distributed-Services-Kubernetes-Cluster-Federation.md b/content/en/blog/_posts/2016-10-00-Globally-Distributed-Services-Kubernetes-Cluster-Federation.md similarity index 99% rename from blog/_posts/2016-10-00-Globally-Distributed-Services-Kubernetes-Cluster-Federation.md rename to content/en/blog/_posts/2016-10-00-Globally-Distributed-Services-Kubernetes-Cluster-Federation.md index 31dd69b5805bb..d62c3e1e3a4d7 100644 --- a/blog/_posts/2016-10-00-Globally-Distributed-Services-Kubernetes-Cluster-Federation.md +++ b/content/en/blog/_posts/2016-10-00-Globally-Distributed-Services-Kubernetes-Cluster-Federation.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Building Globally Distributed Services using Kubernetes Cluster Federation " -date: Saturday, October 14, 2016 -pagination: - enabled: true +date: 2016-10-14 +slug: globally-distributed-services-kubernetes-cluster-federation +url: /blog/2016/10/Globally-Distributed-Services-Kubernetes-Cluster-Federation --- _Editor's note: Today’s post is by Allan Naim, Product Manager, and Quinton Hoole, Staff Engineer at Google, showing how to deploy a multi-homed service behind a global load balancer and have requests sent to the closest cluster._ @@ -61,12 +59,12 @@ gce-us-central1-c Ready 39s |You can download the source used in this blog post [here](https://github.com/allannaim/federated-ingress-sample). The source consists of the following files:| -|--|--| +|---|---| |configmaps/zonefetch.yaml| retrieves the zone from the instance metadata server and concatenates into volume mount path| |replicasets/nginx-rs.yaml | deploys a Pod consisting of an nginx and busybox container| |ingress/ingress.yaml | creates a load balancer with a global VIP that distributes requests to the closest nginx backend| |services/nginx.yaml| exposes the nginx backend as an external service| -{: .post-table} + diff --git a/blog/_posts/2016-10-00-Helm-Charts-Making-It-Simple-To-Package-And-Deploy-Apps-On-Kubernetes.md b/content/en/blog/_posts/2016-10-00-Helm-Charts-Making-It-Simple-To-Package-And-Deploy-Apps-On-Kubernetes.md similarity index 98% rename from blog/_posts/2016-10-00-Helm-Charts-Making-It-Simple-To-Package-And-Deploy-Apps-On-Kubernetes.md rename to content/en/blog/_posts/2016-10-00-Helm-Charts-Making-It-Simple-To-Package-And-Deploy-Apps-On-Kubernetes.md index f8e471003a531..71aa3eabf5509 100644 --- a/blog/_posts/2016-10-00-Helm-Charts-Making-It-Simple-To-Package-And-Deploy-Apps-On-Kubernetes.md +++ b/content/en/blog/_posts/2016-10-00-Helm-Charts-Making-It-Simple-To-Package-And-Deploy-Apps-On-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Helm Charts: making it simple to package and deploy common applications on Kubernetes " -date: Tuesday, October 10, 2016 -pagination: - enabled: true +date: 2016-10-10 +slug: helm-charts-making-it-simple-to-package-and-deploy-apps-on-kubernetes +url: /blog/2016/10/Helm-Charts-Making-It-Simple-To-Package-And-Deploy-Apps-On-Kubernetes --- There are thousands of people and companies packaging their applications for deployment on Kubernetes. This usually involves crafting a few different Kubernetes resource definitions that configure the application runtime, as well as defining the mechanism that users and other apps leverage to communicate with the application. There are some very common applications that users regularly look for guidance on deploying, such as databases, CI tools, and content management systems. These types of applications are usually not ones that are developed and iterated on by end users, but rather their configuration is customized to fit a specific use case. Once that application is deployed users can link it to their existing systems or leverage their functionality to solve their pain points. @@ -32,7 +30,7 @@ The following applications are now available: |Stable repository | Incubating repository | -|--|--| +|---|---| |[Drupal](https://github.com/kubernetes/charts/tree/master/stable/drupal) | [Consul](https://github.com/kubernetes/charts/tree/master/incubator/consul) | |[Jenkins](https://github.com/kubernetes/charts/tree/master/stable/jenkins)|[Elasticsearch](https://github.com/kubernetes/charts/tree/master/incubator/elasticsearch) | | [MariaDB](https://github.com/kubernetes/charts/tree/master/stable/mariadb) | [etcd](https://github.com/kubernetes/charts/tree/master/incubator/etcd) | @@ -42,7 +40,7 @@ The following applications are now available: ||[Prometheus](https://github.com/kubernetes/charts/tree/master/incubator/prometheus)| | | [Spark](https://github.com/kubernetes/charts/tree/master/incubator/spark)| | | [ZooKeeper](https://github.com/kubernetes/charts/tree/master/incubator/zookeeper) | -{: .post-table} + **Example workflow for a Chart developer** diff --git a/blog/_posts/2016-10-00-Kubernetes-And-Openstack-At-Yahoo-Japan.md b/content/en/blog/_posts/2016-10-00-Kubernetes-And-Openstack-At-Yahoo-Japan.md similarity index 98% rename from blog/_posts/2016-10-00-Kubernetes-And-Openstack-At-Yahoo-Japan.md rename to content/en/blog/_posts/2016-10-00-Kubernetes-And-Openstack-At-Yahoo-Japan.md index 38210aae85e9d..7c79af4f31be9 100644 --- a/blog/_posts/2016-10-00-Kubernetes-And-Openstack-At-Yahoo-Japan.md +++ b/content/en/blog/_posts/2016-10-00-Kubernetes-And-Openstack-At-Yahoo-Japan.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " How We Architected and Run Kubernetes on OpenStack at Scale at Yahoo! JAPAN " -date: Tuesday, October 24, 2016 -pagination: - enabled: true +date: 2016-10-24 +slug: kubernetes-and-openstack-at-yahoo-japan +url: /blog/2016/10/Kubernetes-And-Openstack-At-Yahoo-Japan --- _Editor’s note: today’s post is by the Infrastructure Engineering team at Yahoo! JAPAN, talking about how they run OpenStack on Kubernetes. This post has been translated and edited for context with permission -- originally published on the [Yahoo! JAPAN engineering blog](http://techblog.yahoo.co.jp/infrastructure/os_n_k8s/). _ @@ -35,7 +33,7 @@ We use following products in our CICD pipeline: | Function | Product | -|--|--| +|---|---| | Code registry | GitHub Enterprise | | CI tools | Jenkins | | Image registry | Artifactory | @@ -43,7 +41,7 @@ We use following products in our CICD pipeline: | deploying Bare metal platform | OpenStack Ironic | | deploying VM platform |OpenStack | | deploying container platform | Kubernetes | -{: .post-table} + Image Creation. Each image creation workflow is shown in the next diagram. @@ -122,7 +120,7 @@ Let’s focus on the container workflow to walk through how we use Kubernetes as |Function |Product | -|--|--| +|---|---| |Infrastructure Services |OpenStack | |Container Host |CentOS | |Container Cluster Manager |Kubernetes | @@ -136,7 +134,7 @@ Let’s focus on the container workflow to walk through how we use Kubernetes as |Logging |Fluentd, Elasticsearch, Kibana | |Metrics |Heapster, Influxdb, Grafana | |Service Monitoring |Prometheus | -{: .post-table} + We use CentOS for Container Host (OpenStack instances) and install Docker, Kubernetes, Calico, etcd and so on. Of course, it is possible to run various container applications on Kubernetes. In fact, we run OpenStack as one of those applications. That's right, OpenStack on Kubernetes on OpenStack. We currently have more than 30 OpenStack clusters, that quickly become hard to manage and operate. As such, we wanted to create a simple, base OpenStack cluster to provide the basic functionality needed for Kubernetes and make our OpenStack environment easier to manage. @@ -168,7 +166,7 @@ Let me explain Kubernetes architecture in some more detail. The architecture dia |kube-proxy |Configure iptable NAT tables to configure IP and load balance (ClusterIP) | |etcd |Distribute KVS to store Kubernetes and Calico information | |etcd-proxy |Run on each node and transfer client request to etcd clusters| -{: .post-table} + **Tenant Isolation** To enable multi-tenant usage like OpenStack, we utilize OpenStack Keystone for authentication and authorization. diff --git a/blog/_posts/2016-10-00-Kubernetes-Service-Technology-Partners-Program.md b/content/en/blog/_posts/2016-10-00-Kubernetes-Service-Technology-Partners-Program.md similarity index 94% rename from blog/_posts/2016-10-00-Kubernetes-Service-Technology-Partners-Program.md rename to content/en/blog/_posts/2016-10-00-Kubernetes-Service-Technology-Partners-Program.md index a2f23d0fdfb6b..f56119001e64c 100644 --- a/blog/_posts/2016-10-00-Kubernetes-Service-Technology-Partners-Program.md +++ b/content/en/blog/_posts/2016-10-00-Kubernetes-Service-Technology-Partners-Program.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Introducing Kubernetes Service Partners program and a redesigned Partners page " -date: Tuesday, October 31, 2016 -pagination: - enabled: true +date: 2016-10-31 +slug: kubernetes-service-technology-partners-program +url: /blog/2016/10/Kubernetes-Service-Technology-Partners-Program --- Kubernetes has become a leading container orchestration system by being a powerful and flexible way to run distributed systems at scale. Through our very active open source community, equating to hundreds of person years of work, Kubernetes achieved four major releases in just one year to become a critical part of thousands of companies infrastructures. However, even with all that momentum, adopting cloud native computing is a significant transition for many organizations. It can be challenging to adopt a new methodology, and many teams are looking for advice and support through that journey. diff --git a/blog/_posts/2016-10-00-Production-Kubernetes-Dashboard-UI-1.4-improvements_3.md b/content/en/blog/_posts/2016-10-00-Production-Kubernetes-Dashboard-UI-1.4-improvements_3.md similarity index 93% rename from blog/_posts/2016-10-00-Production-Kubernetes-Dashboard-UI-1.4-improvements_3.md rename to content/en/blog/_posts/2016-10-00-Production-Kubernetes-Dashboard-UI-1.4-improvements_3.md index 5400f78a8fd09..9d059b58b7348 100644 --- a/blog/_posts/2016-10-00-Production-Kubernetes-Dashboard-UI-1.4-improvements_3.md +++ b/content/en/blog/_posts/2016-10-00-Production-Kubernetes-Dashboard-UI-1.4-improvements_3.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " How we improved Kubernetes Dashboard UI in 1.4 for your production needs​ " -date: Tuesday, October 03, 2016 -pagination: - enabled: true +date: 2016-10-03 +slug: production-kubernetes-dashboard-ui-1.4-improvements_3 +url: /blog/2016/10/Production-Kubernetes-Dashboard-UI-1.4-improvements_3 --- With the release of [Kubernetes 1.4](http://blog.kubernetes.io/2016/09/kubernetes-1.4-making-it-easy-to-run-on-kuberentes-anywhere.html) last week, Dashboard – the official web UI for Kubernetes – has a number of exciting updates and improvements of its own. The past three months have been busy ones for the Dashboard team, and we’re excited to share the resulting features of that effort here. If you’re not familiar with Dashboard, the [GitHub repo](https://github.com/kubernetes/dashboard#kubernetes-dashboard) is a great place to get started. @@ -14,7 +12,7 @@ A quick recap before unwrapping our shiny new features: Dashboard was initially Real time visualization is a strength that UI’s have over CLI’s, and with 1.4 we’re happy to capitalize on that capability with the introduction of real-time CPU and memory usage graphs for all workloads running on your cluster. Even with the numerous third-party solutions for monitoring, Dashboard should include at least some basic out-of-the box functionality in this area. Next up on the roadmap for graphs is extending the timespan the graph represents, adding drill-down capabilities to reveal more details, and improving the UX of correlating data between different graphs. -[![](https://lh5.googleusercontent.com/q2xNqiQkdcaAY9UdAlxXJkhofpb-AwMKoxE8Jdd3qRB0v8qffi4_s8GUaszmYGclNemAWCrEmbTqegKPfRoUgYHy9aRAYILXqRX1BCdLBQCUGHd-Euv0PuT5VI9viT3iSXBRHshv)](https://lh5.googleusercontent.com/q2xNqiQkdcaAY9UdAlxXJkhofpb-AwMKoxE8Jdd3qRB0v8qffi4_s8GUaszmYGclNemAWCrEmbTqegKPfRoUgYHy9aRAYILXqRX1BCdLBQCUGHd-Euv0PuT5VI9viT3iSXBRHshv){:.big-img} +[![](https://lh5.googleusercontent.com/q2xNqiQkdcaAY9UdAlxXJkhofpb-AwMKoxE8Jdd3qRB0v8qffi4_s8GUaszmYGclNemAWCrEmbTqegKPfRoUgYHy9aRAYILXqRX1BCdLBQCUGHd-Euv0PuT5VI9viT3iSXBRHshv)](https://lh5.googleusercontent.com/q2xNqiQkdcaAY9UdAlxXJkhofpb-AwMKoxE8Jdd3qRB0v8qffi4_s8GUaszmYGclNemAWCrEmbTqegKPfRoUgYHy9aRAYILXqRX1BCdLBQCUGHd-Euv0PuT5VI9viT3iSXBRHshv) @@ -31,7 +29,7 @@ In 1.1, all resources were simply stacked on top of each other in a single page. -[![](https://lh4.googleusercontent.com/wam1i4Y3GGLwNFxynWYK17me9UDCaw3yo0dDqqTt7Y79bJ5YK7uHd3yreRnftPOtRkOvo-CjlWNPEx2raBdCN5JTxG2fU3fwqeIPsDaeuqhnWl0IrSYQ32uC7cVt2q51LQNhialX){:.big-img}](https://lh4.googleusercontent.com/wam1i4Y3GGLwNFxynWYK17me9UDCaw3yo0dDqqTt7Y79bJ5YK7uHd3yreRnftPOtRkOvo-CjlWNPEx2raBdCN5JTxG2fU3fwqeIPsDaeuqhnWl0IrSYQ32uC7cVt2q51LQNhialX) +[![](https://lh4.googleusercontent.com/wam1i4Y3GGLwNFxynWYK17me9UDCaw3yo0dDqqTt7Y79bJ5YK7uHd3yreRnftPOtRkOvo-CjlWNPEx2raBdCN5JTxG2fU3fwqeIPsDaeuqhnWl0IrSYQ32uC7cVt2q51LQNhialX)](https://lh4.googleusercontent.com/wam1i4Y3GGLwNFxynWYK17me9UDCaw3yo0dDqqTt7Y79bJ5YK7uHd3yreRnftPOtRkOvo-CjlWNPEx2raBdCN5JTxG2fU3fwqeIPsDaeuqhnWl0IrSYQ32uC7cVt2q51LQNhialX) @@ -45,23 +43,23 @@ I am a cluster operator and a customer pings me warning that their app, Kubernet - ![](https://lh5.googleusercontent.com/R95VuEQ8GkjTTeJXX-4EE-f-oD4UXYCPGZ5et4YYLuUiB0K3hXSndyFPYHmrKeySBc2t3tMy4B9mT-dr8rIr0WRQLq4Bhe6ygA4GqNLSYvvZcsmdGxeozw3jr8fSDCinG0NSsAjp){:.big-img} + ![](https://lh5.googleusercontent.com/R95VuEQ8GkjTTeJXX-4EE-f-oD4UXYCPGZ5et4YYLuUiB0K3hXSndyFPYHmrKeySBc2t3tMy4B9mT-dr8rIr0WRQLq4Bhe6ygA4GqNLSYvvZcsmdGxeozw3jr8fSDCinG0NSsAjp) Once in the relevant Namespace, I check out my Deployments to see if anything seems awry. Sure enough, I notice a spike in CPU usage. - ![](https://lh5.googleusercontent.com/rViAg6xFe219i7qxeBRU62-1SFBLI6VIg3pbU5HBmvIKsb3KJFr5RldP0vziVXao3u-hWM3EMvzTNnSFRQWCTViaQiVbAv_PTjd87s7GOZelroeL4gjcfFU3JljrOKKnWL3Wzy5c){:.big-img} + ![](https://lh5.googleusercontent.com/rViAg6xFe219i7qxeBRU62-1SFBLI6VIg3pbU5HBmvIKsb3KJFr5RldP0vziVXao3u-hWM3EMvzTNnSFRQWCTViaQiVbAv_PTjd87s7GOZelroeL4gjcfFU3JljrOKKnWL3Wzy5c) I realize we need to perform a rolling update to a newer version of that app that can handle the increased requests it’s evidently getting, so I update this Deployment’s image, which in turn creates a new [Replica Set](http://kubernetes.io/docs/user-guide/replicasets/). - ![](https://lh4.googleusercontent.com/RdA8N8LPDwnAb-RDX4MHNmHvxc8YRlID79-5WmGJQb7NYuz8oZseVorzATQZWOTTQ_-yp8roniNKuBqmQewzYzyvBRdHcQf_VENm2Qqde0v6LW9-L1FLmqsUx8h9Z5RYfpD_alXx){:.big-img} + ![](https://lh4.googleusercontent.com/RdA8N8LPDwnAb-RDX4MHNmHvxc8YRlID79-5WmGJQb7NYuz8oZseVorzATQZWOTTQ_-yp8roniNKuBqmQewzYzyvBRdHcQf_VENm2Qqde0v6LW9-L1FLmqsUx8h9Z5RYfpD_alXx) Now that Replica Set’s been created, I can open the logs for one of its pods to confirm that it’s been successfully connected to the API server. - ![](https://lh3.googleusercontent.com/zg_lrCL0kH7ai6ZUGz4YKwIfQpwLXnF-mvK9UUL3TZ4ryNLSCSW7Anha5VjoEdwlkSp8-Fhgz16srzPTpoHzguwrGllPp10m2O_rFAfm2W1tq_5ow4FzfAwYVM4Sm1-HuMtcDY34){:.big-img} + ![](https://lh3.googleusercontent.com/zg_lrCL0kH7ai6ZUGz4YKwIfQpwLXnF-mvK9UUL3TZ4ryNLSCSW7Anha5VjoEdwlkSp8-Fhgz16srzPTpoHzguwrGllPp10m2O_rFAfm2W1tq_5ow4FzfAwYVM4Sm1-HuMtcDY34) Easy as that, we’ve debugged our issue. Dashboard provided us a centralized location to scan for the origin of the problem, and once we had that identified we were able to drill down and address the root of the problem. diff --git a/blog/_posts/2016-10-00-Tail-Kubernetes-With-Stern.md b/content/en/blog/_posts/2016-10-00-Tail-Kubernetes-With-Stern.md similarity index 98% rename from blog/_posts/2016-10-00-Tail-Kubernetes-With-Stern.md rename to content/en/blog/_posts/2016-10-00-Tail-Kubernetes-With-Stern.md index 32a126ad15554..066c816002c00 100644 --- a/blog/_posts/2016-10-00-Tail-Kubernetes-With-Stern.md +++ b/content/en/blog/_posts/2016-10-00-Tail-Kubernetes-With-Stern.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Tail Kubernetes with Stern " -date: Tuesday, October 31, 2016 -pagination: - enabled: true +date: 2016-10-31 +slug: tail-kubernetes-with-stern +url: /blog/2016/10/Tail-Kubernetes-With-Stern --- _Editor’s note: today’s post is by Antti Kupila, Software Engineer, at Wercker, about building a tool to tail multiple pods and containers on Kubernetes._ diff --git a/blog/_posts/2016-11-00-Bringing-Kubernetes-Support-To-Azure.md b/content/en/blog/_posts/2016-11-00-Bringing-Kubernetes-Support-To-Azure.md similarity index 97% rename from blog/_posts/2016-11-00-Bringing-Kubernetes-Support-To-Azure.md rename to content/en/blog/_posts/2016-11-00-Bringing-Kubernetes-Support-To-Azure.md index 6dd03b73b0542..af923e3f62a28 100644 --- a/blog/_posts/2016-11-00-Bringing-Kubernetes-Support-To-Azure.md +++ b/content/en/blog/_posts/2016-11-00-Bringing-Kubernetes-Support-To-Azure.md @@ -1,9 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Bringing Kubernetes Support to Azure Container Service " -date: Tuesday, November 07, 2016 - +date: 2016-11-07 +slug: bringing-kubernetes-support-to-azure +url: /blog/2016/11/Bringing-Kubernetes-Support-To-Azure --- _Editor's note: Today’s post is by Brendan Burns, Partner Architect, at Microsoft & Kubernetes co-founder talking about bringing Kubernetes to Azure Container Service._ diff --git a/blog/_posts/2016-11-00-Kompose-Tool-Go-From-Docker-Compose-To-Kubernetes.md b/content/en/blog/_posts/2016-11-00-Kompose-Tool-Go-From-Docker-Compose-To-Kubernetes.md similarity index 98% rename from blog/_posts/2016-11-00-Kompose-Tool-Go-From-Docker-Compose-To-Kubernetes.md rename to content/en/blog/_posts/2016-11-00-Kompose-Tool-Go-From-Docker-Compose-To-Kubernetes.md index 9f361998ace19..167a4aa4b6e62 100644 --- a/blog/_posts/2016-11-00-Kompose-Tool-Go-From-Docker-Compose-To-Kubernetes.md +++ b/content/en/blog/_posts/2016-11-00-Kompose-Tool-Go-From-Docker-Compose-To-Kubernetes.md @@ -1,9 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kompose: a tool to go from Docker-compose to Kubernetes " -date: Wednesday, November 22, 2016 - +date: 2016-11-22 +slug: kompose-tool-go-from-docker-compose-to-kubernetes +url: /blog/2016/11/Kompose-Tool-Go-From-Docker-Compose-To-Kubernetes --- _Editor's note: Today’s post is by Sebastien Goasguen, Founder of Skippbox, showing a new tool to move from ‘docker-compose’ to Kubernetes._ diff --git a/blog/_posts/2016-11-00-Kubernetes-Certification-Training-And-Managed-Service-Provider-Program.md b/content/en/blog/_posts/2016-11-00-Kubernetes-Certification-Training-And-Managed-Service-Provider-Program.md similarity index 93% rename from blog/_posts/2016-11-00-Kubernetes-Certification-Training-And-Managed-Service-Provider-Program.md rename to content/en/blog/_posts/2016-11-00-Kubernetes-Certification-Training-And-Managed-Service-Provider-Program.md index 3fcfb3d8fe5b9..4734b38d53d1b 100644 --- a/blog/_posts/2016-11-00-Kubernetes-Certification-Training-And-Managed-Service-Provider-Program.md +++ b/content/en/blog/_posts/2016-11-00-Kubernetes-Certification-Training-And-Managed-Service-Provider-Program.md @@ -1,9 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " CNCF Partners With The Linux Foundation To Launch New Kubernetes Certification, Training and Managed Service Provider Program " -date: Wednesday, November 08, 2016 - +date: 2016-11-08 +slug: kubernetes-certification-training-and-managed-service-provider-program +url: /blog/2016/11/Kubernetes-Certification-Training-And-Managed-Service-Provider-Program --- Today the CNCF is pleased to launch a new training, certification and Kubernetes Managed Service Provider (KMSP) program.  diff --git a/blog/_posts/2016-11-00-Kubernetes-Containers-Logging-Monitoring-With-Sematext.md b/content/en/blog/_posts/2016-11-00-Kubernetes-Containers-Logging-Monitoring-With-Sematext.md similarity index 97% rename from blog/_posts/2016-11-00-Kubernetes-Containers-Logging-Monitoring-With-Sematext.md rename to content/en/blog/_posts/2016-11-00-Kubernetes-Containers-Logging-Monitoring-With-Sematext.md index 073cbbe110c55..cc83f0c4d0eb3 100644 --- a/blog/_posts/2016-11-00-Kubernetes-Containers-Logging-Monitoring-With-Sematext.md +++ b/content/en/blog/_posts/2016-11-00-Kubernetes-Containers-Logging-Monitoring-With-Sematext.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Containers Logging and Monitoring with Sematext " -date: Saturday, November 18, 2016 -pagination: - enabled: true +date: 2016-11-18 +slug: kubernetes-containers-logging-monitoring-with-sematext +url: /blog/2016/11/Kubernetes-Containers-Logging-Monitoring-With-Sematext --- _Editor's note: Today’s post is by Stefan Thies, Developer Evangelist, at Sematext, showing key Kubernetes metrics and log elements to help you troubleshoot and tune Docker and Kubernetes._ @@ -138,7 +136,7 @@ The metrics from all Kubernetes nodes are collected in a single SPM App, which a -| ![](https://lh3.googleusercontent.com/THk0zW4Q2YUxPF7pcdcg8WVbut4_BZPFsHuqtBet3AnijJ84w8TYGmNQ5F_CCmOz3W7_DWuacFOZWtJQDGR7I_jRJIf6LIxT8uxuLr4DSPbFC2BOUHgGncgXqIaBGo-L-zrQnDVa){: .big-img} | +| ![](https://lh3.googleusercontent.com/THk0zW4Q2YUxPF7pcdcg8WVbut4_BZPFsHuqtBet3AnijJ84w8TYGmNQ5F_CCmOz3W7_DWuacFOZWtJQDGR7I_jRJIf6LIxT8uxuLr4DSPbFC2BOUHgGncgXqIaBGo-L-zrQnDVa) | | Host and Container Metrics from the Kubernetes Cluster | @@ -155,7 +153,7 @@ Host Metrics such as CPU, Memory and Disk space usage. Docker images and contain - ![](https://lh5.googleusercontent.com/CJ7BYLNV0dx6CSWpmFSFgDteCjzQYcVOEz5W5gUOa6rK_H1Z6ozImfRJLIWH3X5YCOOSH-EfFuMo4Tdj0EaC7XTZ0bpmCmIsw7hWrB_1ctxkdI7JC5dhBA3umCmr1QG0SqovIDa6){:.big-img} + ![](https://lh5.googleusercontent.com/CJ7BYLNV0dx6CSWpmFSFgDteCjzQYcVOEz5W5gUOa6rK_H1Z6ozImfRJLIWH3X5YCOOSH-EfFuMo4Tdj0EaC7XTZ0bpmCmIsw7hWrB_1ctxkdI7JC5dhBA3umCmr1QG0SqovIDa6) @@ -174,7 +172,7 @@ Container Memory and Memory Fail Counters. These metrics are important to watch - Set memory limits according to the observations - Continue monitoring of memory, memory fail counters, and Out-Of-Memory events. If OOM events happen, the container memory limits may need to be increased, or debugging is required to find the reason for the high memory consumptions. -| ![](https://lh6.googleusercontent.com/Qq1_FhJRC72H0fvc71Oy_RqxbmBe8IZ4L4JTtADxBfLAjopRv2tJW5Fvc8DstD6iOj9JKfNt8U2gWAxzedx9tdnHuld-k1agDMAXDyWM-AuLOs7IDi-KNxEj_p-Kwef12SjeAiVc){: .big-img} | +| ![](https://lh6.googleusercontent.com/Qq1_FhJRC72H0fvc71Oy_RqxbmBe8IZ4L4JTtADxBfLAjopRv2tJW5Fvc8DstD6iOj9JKfNt8U2gWAxzedx9tdnHuld-k1agDMAXDyWM-AuLOs7IDi-KNxEj_p-Kwef12SjeAiVc) | | Container memory usage, limits and fail counters | @@ -182,7 +180,7 @@ Container CPU usage and throttled CPU time. The CPU usage can be limited by CPU - ![](https://lh5.googleusercontent.com/iSMZcZROnz6jovMg9XVlHSYFSiOgpgbrcJ0dVK7aXRaXq0psyAHE_Y4mN3aD0k2yRjH-Lgr-X3prNtBexFNmaNdWNXFd0MNnDSwjo8hbgNXydgRWjaT1X-_xbD6f_U92z9VMf4C7){: .big-img} + ![](https://lh5.googleusercontent.com/iSMZcZROnz6jovMg9XVlHSYFSiOgpgbrcJ0dVK7aXRaXq0psyAHE_Y4mN3aD0k2yRjH-Lgr-X3prNtBexFNmaNdWNXFd0MNnDSwjo8hbgNXydgRWjaT1X-_xbD6f_U92z9VMf4C7) diff --git a/blog/_posts/2016-11-00-Skytap-Modernizing-Microservice-Architecture-With-Kubernetes.md b/content/en/blog/_posts/2016-11-00-Skytap-Modernizing-Microservice-Architecture-With-Kubernetes.md similarity index 98% rename from blog/_posts/2016-11-00-Skytap-Modernizing-Microservice-Architecture-With-Kubernetes.md rename to content/en/blog/_posts/2016-11-00-Skytap-Modernizing-Microservice-Architecture-With-Kubernetes.md index ce3f5920928c6..65798f065b364 100644 --- a/blog/_posts/2016-11-00-Skytap-Modernizing-Microservice-Architecture-With-Kubernetes.md +++ b/content/en/blog/_posts/2016-11-00-Skytap-Modernizing-Microservice-Architecture-With-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Modernizing the Skytap Cloud Micro-Service Architecture with Kubernetes " -date: Tuesday, November 07, 2016 -pagination: - enabled: true +date: 2016-11-07 +slug: skytap-modernizing-microservice-architecture-with-kubernetes +url: /blog/2016/11/Skytap-Modernizing-Microservice-Architecture-With-Kubernetes --- _Editor's note: Today’s guest post is by the Tools and Infrastructure Engineering team at Skytap, a public cloud provider focused on empowering DevOps workflows, sharing their experience on adopting Kubernetes. _ @@ -31,7 +29,7 @@ _____ \ ^__^ \ (oo)\_______ (__)\ )\/\ - ||----w | + ||-----w | || || ``` @@ -116,7 +114,7 @@ F5s also need to have their [load balancing pool](https://support.f5.com/kb/en-u - ![kubernetes_f5_messaging.png](https://lh4.googleusercontent.com/2wfBbW3zxYLPg8Xgl6GIAE9Xt9afjZfTAyfR0H6EzfdHAJyDjg7N1RCpZLoLG9N9wVAnsczXUBicJ4QUydCOJ1uZ6A1SP44ki-XAnpDYTiL5cLaXFoi2YtKjKYxC5hFoCoOs7nWM){:.big-img} + ![kubernetes_f5_messaging.png](https://lh4.googleusercontent.com/2wfBbW3zxYLPg8Xgl6GIAE9Xt9afjZfTAyfR0H6EzfdHAJyDjg7N1RCpZLoLG9N9wVAnsczXUBicJ4QUydCOJ1uZ6A1SP44ki-XAnpDYTiL5cLaXFoi2YtKjKYxC5hFoCoOs7nWM) diff --git a/blog/_posts/2016-11-00-Visualize-Kubelet-Performance-With-Node-Dashboard.md b/content/en/blog/_posts/2016-11-00-Visualize-Kubelet-Performance-With-Node-Dashboard.md similarity index 98% rename from blog/_posts/2016-11-00-Visualize-Kubelet-Performance-With-Node-Dashboard.md rename to content/en/blog/_posts/2016-11-00-Visualize-Kubelet-Performance-With-Node-Dashboard.md index 34b81daad773b..9d263a8ad6b76 100644 --- a/blog/_posts/2016-11-00-Visualize-Kubelet-Performance-With-Node-Dashboard.md +++ b/content/en/blog/_posts/2016-11-00-Visualize-Kubelet-Performance-With-Node-Dashboard.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Visualize Kubelet Performance with Node Dashboard " -date: Friday, November 17, 2016 -pagination: - enabled: true +date: 2016-11-17 +slug: visualize-kubelet-performance-with-node-dashboard +url: /blog/2016/11/Visualize-Kubelet-Performance-With-Node-Dashboard --- In Kubernetes 1.4, we introduced a new node performance analysis tool, called the _node performance dashboard_, to visualize and explore the behavior of the Kubelet in much richer details. This new feature will make it easy to understand and improve code performance for Kubelet developers, and lets cluster maintainer set configuration according to provided Service Level Objectives (SLOs). diff --git a/blog/_posts/2016-12-00-Cluster-Federation-In-Kubernetes-1.5.md b/content/en/blog/_posts/2016-12-00-Cluster-Federation-In-Kubernetes-1.5.md similarity index 99% rename from blog/_posts/2016-12-00-Cluster-Federation-In-Kubernetes-1.5.md rename to content/en/blog/_posts/2016-12-00-Cluster-Federation-In-Kubernetes-1.5.md index f7e9e91e33228..3020f315c3fd7 100644 --- a/blog/_posts/2016-12-00-Cluster-Federation-In-Kubernetes-1.5.md +++ b/content/en/blog/_posts/2016-12-00-Cluster-Federation-In-Kubernetes-1.5.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Cluster Federation in Kubernetes 1.5 " -date: Friday, December 22, 2016 -pagination: - enabled: true +date: 2016-12-22 +slug: cluster-federation-in-kubernetes-1.5 +url: /blog/2016/12/Cluster-Federation-In-Kubernetes-1.5 --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2016/12/five-days-of-kubernetes-1.5.html) on what's new in Kubernetes 1.5_ diff --git a/blog/_posts/2016-12-00-Container-Runtime-Interface-Cri-In-Kubernetes.md b/content/en/blog/_posts/2016-12-00-Container-Runtime-Interface-Cri-In-Kubernetes.md similarity index 99% rename from blog/_posts/2016-12-00-Container-Runtime-Interface-Cri-In-Kubernetes.md rename to content/en/blog/_posts/2016-12-00-Container-Runtime-Interface-Cri-In-Kubernetes.md index 6e90fe5e2885d..164e314c97ed8 100644 --- a/blog/_posts/2016-12-00-Container-Runtime-Interface-Cri-In-Kubernetes.md +++ b/content/en/blog/_posts/2016-12-00-Container-Runtime-Interface-Cri-In-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Introducing Container Runtime Interface (CRI) in Kubernetes " -date: Tuesday, December 19, 2016 -pagination: - enabled: true +date: 2016-12-19 +slug: container-runtime-interface-cri-in-kubernetes +url: /blog/2016/12/Container-Runtime-Interface-Cri-In-Kubernetes --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2016/12/five-days-of-kubernetes-1.5.html) on what's new in Kubernetes 1.5_ diff --git a/blog/_posts/2016-12-00-Five-Days-Of-Kubernetes-1.5.md b/content/en/blog/_posts/2016-12-00-Five-Days-Of-Kubernetes-1.5.md similarity index 92% rename from blog/_posts/2016-12-00-Five-Days-Of-Kubernetes-1.5.md rename to content/en/blog/_posts/2016-12-00-Five-Days-Of-Kubernetes-1.5.md index 78541e58ee8b7..0e8f3af974581 100644 --- a/blog/_posts/2016-12-00-Five-Days-Of-Kubernetes-1.5.md +++ b/content/en/blog/_posts/2016-12-00-Five-Days-Of-Kubernetes-1.5.md @@ -1,23 +1,21 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Five Days of Kubernetes 1.5 " -date: Tuesday, December 19, 2016 -pagination: - enabled: true +date: 2016-12-19 +slug: five-days-of-kubernetes-1.5 +url: /blog/2016/12/Five-Days-Of-Kubernetes-1.5 --- With the help of our growing community of 1,000 contributors, we pushed some 5,000 commits to extend support for production workloads and deliver [Kubernetes 1.5](http://blog.kubernetes.io/2016/12/kubernetes-1.5-supporting-production-workloads.html). While many improvements and new features have been added, we selected few to highlight in a series of in-depths posts listed below.  This progress is our commitment in continuing to make Kubernetes best way to manage your production workloads at scale. | | Five Days of Kubernetes 1.5 | -|--|--| +|---|---| | Day 1 | [Introducing Container Runtime Interface (CRI) in Kubernetes](http://blog.kubernetes.io/2016/12/container-runtime-interface-cri-in-kubernetes.html) | | Day 2 | [StatefulSet: Run and Scale Stateful Applications Easily in Kubernetes](http://blog.kubernetes.io/2016/12/statefulset-run-scale-stateful-applications-in-kubernetes.html) | | Day 3 | [Windows Server Support Comes to Kubernetes](http://blog.kubernetes.io/2016/12/windows-server-support-kubernetes.html) | | Day 4 | [Cluster Federation in Kubernetes 1.5](http://blog.kubernetes.io/2016/12/cluster-federation-in-kubernetes-1.5.html) | | Day 5 | [Kubernetes supports OpenAPI](http://blog.kubernetes.io/2016/12/kubernetes-supports-openapi.html) | -{: .post-table } + Connect diff --git a/blog/_posts/2016-12-00-From-Network-Policies-To-Security-Policies.md b/content/en/blog/_posts/2016-12-00-From-Network-Policies-To-Security-Policies.md similarity index 97% rename from blog/_posts/2016-12-00-From-Network-Policies-To-Security-Policies.md rename to content/en/blog/_posts/2016-12-00-From-Network-Policies-To-Security-Policies.md index 2709783d451af..6d4ed2f7456e0 100644 --- a/blog/_posts/2016-12-00-From-Network-Policies-To-Security-Policies.md +++ b/content/en/blog/_posts/2016-12-00-From-Network-Policies-To-Security-Policies.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " From Network Policies to Security Policies " -date: Friday, December 08, 2016 -pagination: - enabled: true +date: 2016-12-08 +slug: from-network-policies-to-security-policies +url: /blog/2016/12/From-Network-Policies-To-Security-Policies --- _Editor's note: Today’s post is by Bernard Van De Walle, Kubernetes Lead Engineer, at Aporeto, showing how they took a new approach to the Kubernetes network policy enforcement._ diff --git a/blog/_posts/2016-12-00-Kubernetes-1.5-Supporting-Production-Workloads.md b/content/en/blog/_posts/2016-12-00-Kubernetes-1.5-Supporting-Production-Workloads.md similarity index 98% rename from blog/_posts/2016-12-00-Kubernetes-1.5-Supporting-Production-Workloads.md rename to content/en/blog/_posts/2016-12-00-Kubernetes-1.5-Supporting-Production-Workloads.md index bf67cd48c62b1..68528595968ec 100644 --- a/blog/_posts/2016-12-00-Kubernetes-1.5-Supporting-Production-Workloads.md +++ b/content/en/blog/_posts/2016-12-00-Kubernetes-1.5-Supporting-Production-Workloads.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes 1.5: Supporting Production Workloads " -date: Wednesday, December 13, 2016 -pagination: - enabled: true +date: 2016-12-13 +slug: kubernetes-1.5-supporting-production-workloads +url: /blog/2016/12/Kubernetes-1.5-Supporting-Production-Workloads --- Today we’re announcing the release of Kubernetes 1.5. This release follows close on the heels of KubeCon/CloundNativeCon, where users gathered to share how they’re running their applications on Kubernetes. Many of you expressed interest in running stateful applications in containers with the eventual goal of running all applications on Kubernetes. If you have been waiting to try running a distributed database on Kubernetes, or for ways to guarantee application disruption SLOs for stateful and stateless apps, this release has solutions for you.  diff --git a/blog/_posts/2016-12-00-Kubernetes-Supports-Openapi.md b/content/en/blog/_posts/2016-12-00-Kubernetes-Supports-Openapi.md similarity index 98% rename from blog/_posts/2016-12-00-Kubernetes-Supports-Openapi.md rename to content/en/blog/_posts/2016-12-00-Kubernetes-Supports-Openapi.md index c062236a27a25..7ac3ab007916a 100644 --- a/blog/_posts/2016-12-00-Kubernetes-Supports-Openapi.md +++ b/content/en/blog/_posts/2016-12-00-Kubernetes-Supports-Openapi.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes supports OpenAPI " -date: Saturday, December 23, 2016 -pagination: - enabled: true +date: 2016-12-23 +slug: kubernetes-supports-openapi +url: /blog/2016/12/Kubernetes-Supports-Openapi --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2016/12/five-days-of-kubernetes-1.5.html) on what's new in Kubernetes 1.5_ diff --git a/blog/_posts/2016-12-00-Statefulset-Run-Scale-Stateful-Applications-In-Kubernetes.md b/content/en/blog/_posts/2016-12-00-Statefulset-Run-Scale-Stateful-Applications-In-Kubernetes.md similarity index 99% rename from blog/_posts/2016-12-00-Statefulset-Run-Scale-Stateful-Applications-In-Kubernetes.md rename to content/en/blog/_posts/2016-12-00-Statefulset-Run-Scale-Stateful-Applications-In-Kubernetes.md index 549dc6aa0c284..3a583854783ed 100644 --- a/blog/_posts/2016-12-00-Statefulset-Run-Scale-Stateful-Applications-In-Kubernetes.md +++ b/content/en/blog/_posts/2016-12-00-Statefulset-Run-Scale-Stateful-Applications-In-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " StatefulSet: Run and Scale Stateful Applications Easily in Kubernetes " -date: Wednesday, December 20, 2016 -pagination: - enabled: true +date: 2016-12-20 +slug: statefulset-run-scale-stateful-applications-in-kubernetes +url: /blog/2016/12/Statefulset-Run-Scale-Stateful-Applications-In-Kubernetes --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2016/12/five-days-of-kubernetes-1.5.html) on what's new in Kubernetes 1.5_ diff --git a/blog/_posts/2016-12-00-Windows-Server-Support-Kubernetes.md b/content/en/blog/_posts/2016-12-00-Windows-Server-Support-Kubernetes.md similarity index 98% rename from blog/_posts/2016-12-00-Windows-Server-Support-Kubernetes.md rename to content/en/blog/_posts/2016-12-00-Windows-Server-Support-Kubernetes.md index 5f35f7448428a..88e9d0ddf9ada 100644 --- a/blog/_posts/2016-12-00-Windows-Server-Support-Kubernetes.md +++ b/content/en/blog/_posts/2016-12-00-Windows-Server-Support-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Windows Server Support Comes to Kubernetes " -date: Thursday, December 21, 2016 -pagination: - enabled: true +date: 2016-12-21 +slug: windows-server-support-kubernetes +url: /blog/2016/12/Windows-Server-Support-Kubernetes --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2016/12/five-days-of-kubernetes-1.5.html) on what's new in Kubernetes 1.5_ diff --git a/blog/_posts/2017-01-00-Fission-Serverless-Functions-As-Service-For-Kubernetes.md b/content/en/blog/_posts/2017-01-00-Fission-Serverless-Functions-As-Service-For-Kubernetes.md similarity index 98% rename from blog/_posts/2017-01-00-Fission-Serverless-Functions-As-Service-For-Kubernetes.md rename to content/en/blog/_posts/2017-01-00-Fission-Serverless-Functions-As-Service-For-Kubernetes.md index e25221e03819a..fb86e683c08d4 100644 --- a/blog/_posts/2017-01-00-Fission-Serverless-Functions-As-Service-For-Kubernetes.md +++ b/content/en/blog/_posts/2017-01-00-Fission-Serverless-Functions-As-Service-For-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Fission: Serverless Functions as a Service for Kubernetes " -date: Tuesday, January 30, 2017 -pagination: - enabled: true +date: 2017-01-30 +slug: fission-serverless-functions-as-service-for-kubernetes +url: /blog/2017/01/Fission-Serverless-Functions-As-Service-For-Kubernetes --- _Editor's note: Today’s post is by Soam Vasani, Software Engineer at Platform9 Systems, talking about a new open source Serverless Function (FaaS) framework for Kubernetes._  diff --git a/blog/_posts/2017-01-00-How-We-Run-Kubernetes-In-Kubernetes-Kubeception.md b/content/en/blog/_posts/2017-01-00-How-We-Run-Kubernetes-In-Kubernetes-Kubeception.md similarity index 97% rename from blog/_posts/2017-01-00-How-We-Run-Kubernetes-In-Kubernetes-Kubeception.md rename to content/en/blog/_posts/2017-01-00-How-We-Run-Kubernetes-In-Kubernetes-Kubeception.md index fd2d1c9195fdb..2b5567663bc4d 100644 --- a/blog/_posts/2017-01-00-How-We-Run-Kubernetes-In-Kubernetes-Kubeception.md +++ b/content/en/blog/_posts/2017-01-00-How-We-Run-Kubernetes-In-Kubernetes-Kubeception.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " How we run Kubernetes in Kubernetes aka Kubeception " -date: Saturday, January 20, 2017 -pagination: - enabled: true +date: 2017-01-20 +slug: how-we-run-kubernetes-in-kubernetes-kubeception +url: /blog/2017/01/How-We-Run-Kubernetes-In-Kubernetes-Kubeception --- _Editor's note: Today’s post is by the team at Giant Swarm, showing how they run Kubernetes in Kubernetes._ @@ -46,7 +44,7 @@ And wouldn’t it be nice to have an API and frontend for that? Based on the above requirements we set out to build what we call Giantnetes - or if you’re into movies, Kubeception. At the most basic abstraction it is an outer Kubernetes cluster (the actual Giantnetes), which is used to run and manage multiple completely isolated user Kubernetes clusters. - ![](https://lh6.googleusercontent.com/jWRQBd96sPwtiG6vE_4DPAvEWrRnXTWVfWE3O4_JeCXYzSaAZPpVQA-s5K8W-GTZdQBYeC-g3rS3LMB_vgz6h8-EVQps0JIcaxoeXI8T6aVOowWtWdxRB78b_K3bxzfvVWGb5cWM){: .big-img} + ![](https://lh6.googleusercontent.com/jWRQBd96sPwtiG6vE_4DPAvEWrRnXTWVfWE3O4_JeCXYzSaAZPpVQA-s5K8W-GTZdQBYeC-g3rS3LMB_vgz6h8-EVQps0JIcaxoeXI8T6aVOowWtWdxRB78b_K3bxzfvVWGb5cWM) @@ -69,7 +67,7 @@ Then, to create the inner Kubernetes clusters, we initiate a few pods, which con Currently this means we are starting Pods with Docker containers that in turn start VMs with KVM and qemu. However, we are looking into doing this with [rkt qemu-kvm](https://github.com/coreos/rkt/blob/master/Documentation/running-kvm-stage1.md), which would result in using a rktnetes setup for our Giantnetes. - ![](https://lh3.googleusercontent.com/fl8PIu5NgS4vRmUDuAGzni3uW-5RTYD0U22rF6fXr_UBfta4cLhQa2CsRNvDrmc2TiIZDRairTDYpn8QiU3Cjf6m8v74vFENCy9MHa3MgvNNEvvcwrwOxhvMe-pNITCDpV41bWBc){:.big-img} + ![](https://lh3.googleusercontent.com/fl8PIu5NgS4vRmUDuAGzni3uW-5RTYD0U22rF6fXr_UBfta4cLhQa2CsRNvDrmc2TiIZDRairTDYpn8QiU3Cjf6m8v74vFENCy9MHa3MgvNNEvvcwrwOxhvMe-pNITCDpV41bWBc) diff --git a/blog/_posts/2017-01-00-Kubernetes-Ux-Survey-Infographic.md b/content/en/blog/_posts/2017-01-00-Kubernetes-Ux-Survey-Infographic.md similarity index 97% rename from blog/_posts/2017-01-00-Kubernetes-Ux-Survey-Infographic.md rename to content/en/blog/_posts/2017-01-00-Kubernetes-Ux-Survey-Infographic.md index 4b75d374b5b15..ddea9bbe91a8a 100644 --- a/blog/_posts/2017-01-00-Kubernetes-Ux-Survey-Infographic.md +++ b/content/en/blog/_posts/2017-01-00-Kubernetes-Ux-Survey-Infographic.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes UX Survey Infographic " -date: Tuesday, January 09, 2017 -pagination: - enabled: true +date: 2017-01-09 +slug: kubernetes-ux-survey-infographic +url: /blog/2017/01/Kubernetes-Ux-Survey-Infographic --- _Editor's note: Today’s post is by Dan Romlein, UX Designer at Apprenda and member of the SIG-UI, sharing UX survey results from the Kubernetes community. _ diff --git a/blog/_posts/2017-01-00-Running-Mongodb-On-Kubernetes-With-Statefulsets.md b/content/en/blog/_posts/2017-01-00-Running-Mongodb-On-Kubernetes-With-Statefulsets.md similarity index 98% rename from blog/_posts/2017-01-00-Running-Mongodb-On-Kubernetes-With-Statefulsets.md rename to content/en/blog/_posts/2017-01-00-Running-Mongodb-On-Kubernetes-With-Statefulsets.md index 89658a731b08e..d8b02dc67b122 100644 --- a/blog/_posts/2017-01-00-Running-Mongodb-On-Kubernetes-With-Statefulsets.md +++ b/content/en/blog/_posts/2017-01-00-Running-Mongodb-On-Kubernetes-With-Statefulsets.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Running MongoDB on Kubernetes with StatefulSets " -date: Tuesday, January 30, 2017 -pagination: - enabled: true +date: 2017-01-30 +slug: running-mongodb-on-kubernetes-with-statefulsets +url: /blog/2017/01/Running-Mongodb-On-Kubernetes-With-Statefulsets --- _Editor's note: Today’s post is by Sandeep Dinesh, Developer Advocate, Google Cloud Platform, showing how to run a database in a container._ @@ -98,7 +96,7 @@ At an high level, it looks something like this: - ![](https://lh4.googleusercontent.com/ohALxLD4Ugj5FCwWqgqZ4xP9al4lTgrPDc9HsgPWYRZRz_buuYK6LKSC7A5n98DdOO-Po3Zq77Yt43-QhTWdIaXqltHI7PX0zMXAXbpiilYgdowGZapG0lJ9lgubwBj1CwNHHtXA){:.big-img} + ![](https://lh4.googleusercontent.com/ohALxLD4Ugj5FCwWqgqZ4xP9al4lTgrPDc9HsgPWYRZRz_buuYK6LKSC7A5n98DdOO-Po3Zq77Yt43-QhTWdIaXqltHI7PX0zMXAXbpiilYgdowGZapG0lJ9lgubwBj1CwNHHtXA) diff --git a/blog/_posts/2017-01-00-Scaling-Kubernetes-Deployments-With-Policy-Base-Networking.md b/content/en/blog/_posts/2017-01-00-Scaling-Kubernetes-Deployments-With-Policy-Base-Networking.md similarity index 97% rename from blog/_posts/2017-01-00-Scaling-Kubernetes-Deployments-With-Policy-Base-Networking.md rename to content/en/blog/_posts/2017-01-00-Scaling-Kubernetes-Deployments-With-Policy-Base-Networking.md index 6261e32ce6812..5516f4779dd47 100644 --- a/blog/_posts/2017-01-00-Scaling-Kubernetes-Deployments-With-Policy-Base-Networking.md +++ b/content/en/blog/_posts/2017-01-00-Scaling-Kubernetes-Deployments-With-Policy-Base-Networking.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Scaling Kubernetes deployments with Policy-Based Networking " -date: Friday, January 19, 2017 -pagination: - enabled: true +date: 2017-01-19 +slug: scaling-kubernetes-deployments-with-policy-base-networking +url: /blog/2017/01/Scaling-Kubernetes-Deployments-With-Policy-Base-Networking --- _Editor's note: Today’s post is by Harmeet Sahni, Director of Product Management, at Nuage Networks, writing about their contributions to Kubernetes and insights on policy-based networking.  _ diff --git a/blog/_posts/2017-01-00-Stronger-Foundation-For-Creating-And-Managing-Kubernetes-Clusters.md b/content/en/blog/_posts/2017-01-00-Stronger-Foundation-For-Creating-And-Managing-Kubernetes-Clusters.md similarity index 98% rename from blog/_posts/2017-01-00-Stronger-Foundation-For-Creating-And-Managing-Kubernetes-Clusters.md rename to content/en/blog/_posts/2017-01-00-Stronger-Foundation-For-Creating-And-Managing-Kubernetes-Clusters.md index a3e57491aba4a..5fdf3d4ccace2 100644 --- a/blog/_posts/2017-01-00-Stronger-Foundation-For-Creating-And-Managing-Kubernetes-Clusters.md +++ b/content/en/blog/_posts/2017-01-00-Stronger-Foundation-For-Creating-And-Managing-Kubernetes-Clusters.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " A Stronger Foundation for Creating and Managing Kubernetes Clusters " -date: Friday, January 12, 2017 -pagination: - enabled: true +date: 2017-01-12 +slug: stronger-foundation-for-creating-and-managing-kubernetes-clusters +url: /blog/2017/01/Stronger-Foundation-For-Creating-And-Managing-Kubernetes-Clusters --- _Editor's note: Today’s post is by Lucas Käldström an independent Kubernetes maintainer and SIG-Cluster-Lifecycle member, sharing what the group has been building and what’s upcoming. _ diff --git a/blog/_posts/2017-02-00-Caas-The-Foundation-For-Next-Gen-Paas.md b/content/en/blog/_posts/2017-02-00-Caas-The-Foundation-For-Next-Gen-Paas.md similarity index 98% rename from blog/_posts/2017-02-00-Caas-The-Foundation-For-Next-Gen-Paas.md rename to content/en/blog/_posts/2017-02-00-Caas-The-Foundation-For-Next-Gen-Paas.md index 9067293be8912..c3d029af9331a 100644 --- a/blog/_posts/2017-02-00-Caas-The-Foundation-For-Next-Gen-Paas.md +++ b/content/en/blog/_posts/2017-02-00-Caas-The-Foundation-For-Next-Gen-Paas.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Containers as a Service, the foundation for next generation PaaS " -date: Wednesday, February 21, 2017 -pagination: - enabled: true +date: 2017-02-21 +slug: caas-the-foundation-for-next-gen-paas +url: /blog/2017/02/Caas-The-Foundation-For-Next-Gen-Paas --- _Today’s post is by Brendan Burns, Partner Architect, at Microsoft & Kubernetes co-founder._ diff --git a/blog/_posts/2017-02-00-Highly-Available-Kubernetes-Clusters.md b/content/en/blog/_posts/2017-02-00-Highly-Available-Kubernetes-Clusters.md similarity index 98% rename from blog/_posts/2017-02-00-Highly-Available-Kubernetes-Clusters.md rename to content/en/blog/_posts/2017-02-00-Highly-Available-Kubernetes-Clusters.md index b30c1231b135d..7bb4ea4ffb9fa 100644 --- a/blog/_posts/2017-02-00-Highly-Available-Kubernetes-Clusters.md +++ b/content/en/blog/_posts/2017-02-00-Highly-Available-Kubernetes-Clusters.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Highly Available Kubernetes Clusters " -date: Friday, February 02, 2017 -pagination: - enabled: true +date: 2017-02-02 +slug: highly-available-kubernetes-clusters +url: /blog/2017/02/Highly-Available-Kubernetes-Clusters --- Today’s post shows how to set-up a reliable, highly available distributed Kubernetes cluster. The support for running such clusters on Google Compute Engine (GCE) was added as an alpha feature in [Kubernetes 1.5 release](http://blog.kubernetes.io/2016/12/kubernetes-1.5-supporting-production-workloads.html). diff --git a/blog/_posts/2017-02-00-Inside-Jd-Com-Shift-To-Kubernetes-From-Openstack.md b/content/en/blog/_posts/2017-02-00-Inside-Jd-Com-Shift-To-Kubernetes-From-Openstack.md similarity index 98% rename from blog/_posts/2017-02-00-Inside-Jd-Com-Shift-To-Kubernetes-From-Openstack.md rename to content/en/blog/_posts/2017-02-00-Inside-Jd-Com-Shift-To-Kubernetes-From-Openstack.md index a928b771279d1..7c82b0fde4c53 100644 --- a/blog/_posts/2017-02-00-Inside-Jd-Com-Shift-To-Kubernetes-From-Openstack.md +++ b/content/en/blog/_posts/2017-02-00-Inside-Jd-Com-Shift-To-Kubernetes-From-Openstack.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Inside JD.com's Shift to Kubernetes from OpenStack " -date: Saturday, February 10, 2017 -pagination: - enabled: true +date: 2017-02-10 +slug: inside-jd-com-shift-to-kubernetes-from-openstack +url: /blog/2017/02/Inside-Jd-Com-Shift-To-Kubernetes-From-Openstack --- _Editor's note: Today’s post is by the Infrastructure Platform Department team at JD.com about their transition from OpenStack to Kubernetes. JD.com is one of China’s largest companies and the first Chinese Internet company to make the Global Fortune 500 list._ @@ -38,11 +36,11 @@ When JDOS 1.0 grew from 2,000 containers to 100,000, we launched a new container - ![D:\百度云同步盘\徐新坤-新人培训计划\docker\MAE\分享\arc.png](https://lh3.googleusercontent.com/Hs2DAPmZIbqGrWK8oZvBGBJzZbSwLHry7_go0PmCQFCoB_nEjidMOwD8pHlLjqXHqGXXu140RT4EXQq7OX-qgNHQci1G-0-nEavRxha-L02RFmR9WyKp3sHCuxY2qFWmnz0UIVfpfGL_ZLsQAA){:big-img} + ![D:\百度云同步盘\徐新坤-新人培训计划\docker\MAE\分享\arc.png](https://lh3.googleusercontent.com/Hs2DAPmZIbqGrWK8oZvBGBJzZbSwLHry7_go0PmCQFCoB_nEjidMOwD8pHlLjqXHqGXXu140RT4EXQq7OX-qgNHQci1G-0-nEavRxha-L02RFmR9WyKp3sHCuxY2qFWmnz0UIVfpfGL_ZLsQAA) |Function |Product | -|--|--| +|---|---| |Source Code Management |Gitlab | |Container Tool |Docker | |Container Networking |Cane | @@ -51,7 +49,7 @@ When JDOS 1.0 grew from 2,000 containers to 100,000, we launched a new container |CI Tool |Jenkins | |Log Management |Logstash + Elastic Search | |Monitor |Prometheus | -{:.post-table} + In JDOS 2.0, we define two levels, system and application. A system consists of several applications and an application consists of several Pods which provide the same service. In general, a department can apply for one or more systems which directly corresponds to the namespace of Kubernetes. This means that the Pods of the same system will be in the same namespace. @@ -61,7 +59,7 @@ Most of the JDOS 2.0 components (GitLab / Jenkins / Harbor / Logstash / Elastic - ![D:\百度云同步盘\徐新坤-新人培训计划\docker\MAE\分享\cicd.png](https://lh4.googleusercontent.com/s3hP_s27l4FiV1rR0dcJEg4dAZL9caJbk-kiDnZyfykt5ldXdcsfxlDEdneZJA9L8sPzOvxJI8WyZV0Cm1CI_b_oABKzBwazoEe86yCd9E75Dm0UBfRU2AgzYYzJ5ukxBIME977-mT9GA6XTGw){:.big-img} + ![D:\百度云同步盘\徐新坤-新人培训计划\docker\MAE\分享\cicd.png](https://lh4.googleusercontent.com/s3hP_s27l4FiV1rR0dcJEg4dAZL9caJbk-kiDnZyfykt5ldXdcsfxlDEdneZJA9L8sPzOvxJI8WyZV0Cm1CI_b_oABKzBwazoEe86yCd9E75Dm0UBfRU2AgzYYzJ5ukxBIME977-mT9GA6XTGw) diff --git a/blog/_posts/2017-02-00-Postgresql-Clusters-Kubernetes-Statefulsets.md b/content/en/blog/_posts/2017-02-00-Postgresql-Clusters-Kubernetes-Statefulsets.md similarity index 98% rename from blog/_posts/2017-02-00-Postgresql-Clusters-Kubernetes-Statefulsets.md rename to content/en/blog/_posts/2017-02-00-Postgresql-Clusters-Kubernetes-Statefulsets.md index e4386ee7c6aa4..d377ef2c62bf8 100644 --- a/blog/_posts/2017-02-00-Postgresql-Clusters-Kubernetes-Statefulsets.md +++ b/content/en/blog/_posts/2017-02-00-Postgresql-Clusters-Kubernetes-Statefulsets.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Deploying PostgreSQL Clusters using StatefulSets " -date: Saturday, February 24, 2017 -pagination: - enabled: true +date: 2017-02-24 +slug: postgresql-clusters-kubernetes-statefulsets +url: /blog/2017/02/Postgresql-Clusters-Kubernetes-Statefulsets --- _Editor’s note: Today’s guest post is by Jeff McCormick, a developer at Crunchy Data, showing how to build a PostgreSQL cluster using the new Kubernetes StatefulSet feature._ diff --git a/blog/_posts/2017-02-00-Run-Deep-Learning-With-Paddlepaddle-On-Kubernetes.md b/content/en/blog/_posts/2017-02-00-Run-Deep-Learning-With-Paddlepaddle-On-Kubernetes.md similarity index 98% rename from blog/_posts/2017-02-00-Run-Deep-Learning-With-Paddlepaddle-On-Kubernetes.md rename to content/en/blog/_posts/2017-02-00-Run-Deep-Learning-With-Paddlepaddle-On-Kubernetes.md index 4fe9a6898ff68..90dcb447d0ec6 100644 --- a/blog/_posts/2017-02-00-Run-Deep-Learning-With-Paddlepaddle-On-Kubernetes.md +++ b/content/en/blog/_posts/2017-02-00-Run-Deep-Learning-With-Paddlepaddle-On-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Run Deep Learning with PaddlePaddle on Kubernetes " -date: Thursday, February 08, 2017 -pagination: - enabled: true +date: 2017-02-08 +slug: run-deep-learning-with-paddlepaddle-on-kubernetes +url: /blog/2017/02/Run-Deep-Learning-With-Paddlepaddle-On-Kubernetes --- _Editor's note: Today's post is a joint post from the deep learning team at Baidu and the etcd team at CoreOS._ @@ -55,7 +53,7 @@ PaddlePaddle supports distributed training natively. There are two roles in a Pa -| ![](https://lh5.googleusercontent.com/e7udXH-Vv2SZ7YSo3YLtQEQI6VvWfPJMsYAkdad5ZJJ9mYBJ-Du3soR1pgwD80tD9ZMrUliuQU1UhnposxFsCJaKI4grRlFSTJFS0xi9HQXHsU-5-qkghOn0IRYy6cy-YzuHF6Eq){:big-img} | +| ![](https://lh5.googleusercontent.com/e7udXH-Vv2SZ7YSo3YLtQEQI6VvWfPJMsYAkdad5ZJJ9mYBJ-Du3soR1pgwD80tD9ZMrUliuQU1UhnposxFsCJaKI4grRlFSTJFS0xi9HQXHsU-5-qkghOn0IRYy6cy-YzuHF6Eq) | | Figure 1: Model is partitioned into two shards. Managed by two parameter servers respectively. | @@ -132,7 +130,7 @@ spec: We can see from the config that parallelism, completions are both set to 3. So this job will simultaneously start up 3 PaddlePaddle pods, and this job will be finished when all 3 pods finishes. -| [![](https://lh5.googleusercontent.com/cKVFdtLUnX7mtE76xRCAFaylVilAX6E0mBy17XTKOJwJQy6_rqF33v5lgeUjIpfN-2pT00OpD13mByawgOrjHpwGwJ8y99Vgoqridu1GklIkMnKysOE8jIUwvwfSySUgUDGkTkpz)](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/usage/k8s/src/start_paddle.py){:big-img} | +| [![](https://lh5.googleusercontent.com/cKVFdtLUnX7mtE76xRCAFaylVilAX6E0mBy17XTKOJwJQy6_rqF33v5lgeUjIpfN-2pT00OpD13mByawgOrjHpwGwJ8y99Vgoqridu1GklIkMnKysOE8jIUwvwfSySUgUDGkTkpz)](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/usage/k8s/src/start_paddle.py) | | Figure 2: Job A of three pods and Job B of one pod running on two nodes. diff --git a/blog/_posts/2017-03-00-Advanced-Scheduling-In-Kubernetes.md b/content/en/blog/_posts/2017-03-00-Advanced-Scheduling-In-Kubernetes.md similarity index 99% rename from blog/_posts/2017-03-00-Advanced-Scheduling-In-Kubernetes.md rename to content/en/blog/_posts/2017-03-00-Advanced-Scheduling-In-Kubernetes.md index cda2cb3ab2ff5..fa23a3cc9281a 100644 --- a/blog/_posts/2017-03-00-Advanced-Scheduling-In-Kubernetes.md +++ b/content/en/blog/_posts/2017-03-00-Advanced-Scheduling-In-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Advanced Scheduling in Kubernetes " -date: Saturday, March 31, 2017 -pagination: - enabled: true +date: 2017-03-31 +slug: advanced-scheduling-in-kubernetes +url: /blog/2017/03/Advanced-Scheduling-In-Kubernetes --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2017/03/five-days-of-kubernetes-1.6.html) on what's new in Kubernetes 1.6_ diff --git a/blog/_posts/2017-03-00-Dynamic-Provisioning-And-Storage-Classes-Kubernetes.md b/content/en/blog/_posts/2017-03-00-Dynamic-Provisioning-And-Storage-Classes-Kubernetes.md similarity index 98% rename from blog/_posts/2017-03-00-Dynamic-Provisioning-And-Storage-Classes-Kubernetes.md rename to content/en/blog/_posts/2017-03-00-Dynamic-Provisioning-And-Storage-Classes-Kubernetes.md index 42032f934be52..db5bc16d59e1b 100644 --- a/blog/_posts/2017-03-00-Dynamic-Provisioning-And-Storage-Classes-Kubernetes.md +++ b/content/en/blog/_posts/2017-03-00-Dynamic-Provisioning-And-Storage-Classes-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Dynamic Provisioning and Storage Classes in Kubernetes " -date: Thursday, March 29, 2017 -pagination: - enabled: true +date: 2017-03-29 +slug: dynamic-provisioning-and-storage-classes-kubernetes +url: /blog/2017/03/Dynamic-Provisioning-And-Storage-Classes-Kubernetes --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2017/03/five-days-of-kubernetes-1.6.html) on what's new in Kubernetes 1.6_ @@ -72,13 +70,13 @@ The following table provides more detail on default storage classes pre-installe | Cloud Provider | Default StorageClass Name | Default Provisioner | -|--|--|--| +|---|---|---| | Amazon Web Services | gp2 | aws-ebs | | Microsoft Azure | standard | azure-disk | | Google Cloud Platform | standard | gce-pd | | OpenStack | standard | cinder | | VMware vSphere | thin | vsphere-volume | -{:.post-table} + While these pre-installed default storage classes are chosen to be “reasonable” for most storage users, [this guide](https://kubernetes.io/docs/tasks/administer-cluster/change-default-storage-class) provides instructions on how to specify your own default. diff --git a/blog/_posts/2017-03-00-Five-Days-Of-Kubernetes-1.6.md b/content/en/blog/_posts/2017-03-00-Five-Days-Of-Kubernetes-1.6.md similarity index 93% rename from blog/_posts/2017-03-00-Five-Days-Of-Kubernetes-1.6.md rename to content/en/blog/_posts/2017-03-00-Five-Days-Of-Kubernetes-1.6.md index 82b226df47ce0..7efcb00e44ccb 100644 --- a/blog/_posts/2017-03-00-Five-Days-Of-Kubernetes-1.6.md +++ b/content/en/blog/_posts/2017-03-00-Five-Days-Of-Kubernetes-1.6.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Five Days of Kubernetes 1.6 " -date: Thursday, March 29, 2017 -pagination: - enabled: true +date: 2017-03-29 +slug: five-days-of-kubernetes-1.6 +url: /blog/2017/03/Five-Days-Of-Kubernetes-1.6 --- With the help of our growing community of 1,110 plus contributors, we pushed around 5,000 commits to deliver [Kubernetes 1.6](http://blog.kubernetes.io/2017/03/kubernetes-1.6-multi-user-multi-workloads-at-scale.html), bringing focus on multi-user, multi-workloads at scale. While many improvements have been contributed, we selected few features to highlight in a series of in-depths posts listed below.  @@ -18,7 +16,7 @@ Follow along and read what’s new: | Day 3 | [Advanced Scheduling in Kubernetes 1.6](http://blog.kubernetes.io/2017/03/advanced-scheduling-in-kubernetes.html) | | Day 4 | [Configuring Private DNS Zones and Upstream Nameservers in Kubernetes](http://blog.kubernetes.io/2017/04/configuring-private-dns-zones-upstream-nameservers-kubernetes.html) | |Day 5 | [RBAC support in Kubernetes](http://blog.kubernetes.io/2017/04/rbac-support-in-kubernetes.html) | -{:.post-table} + **Connect** diff --git a/blog/_posts/2017-03-00-K8Sport-Engaging-The-Kubernetes-Community.md b/content/en/blog/_posts/2017-03-00-K8Sport-Engaging-The-Kubernetes-Community.md similarity index 96% rename from blog/_posts/2017-03-00-K8Sport-Engaging-The-Kubernetes-Community.md rename to content/en/blog/_posts/2017-03-00-K8Sport-Engaging-The-Kubernetes-Community.md index 8971ce3c76122..721d1363c824d 100644 --- a/blog/_posts/2017-03-00-K8Sport-Engaging-The-Kubernetes-Community.md +++ b/content/en/blog/_posts/2017-03-00-K8Sport-Engaging-The-Kubernetes-Community.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " The K8sPort: Engaging Kubernetes Community One Activity at a Time " -date: Saturday, March 24, 2017 -pagination: - enabled: true +date: 2017-03-24 +slug: k8sport-engaging-the-kubernetes-community +url: /blog/2017/03/K8Sport-Engaging-The-Kubernetes-Community --- _Editor's note: Today’s post is by Ryan Quackenbush, Advocacy Programs Manager at Apprenda, showing a new community portal for Kubernetes advocates: the K8sPort._ @@ -31,7 +29,7 @@ Today I am pleased to announce that the [Cloud Native Computing Foundation](http - ![Screen Shot 2017-03-22 at 10.59.04 AM.png](https://lh4.googleusercontent.com/h9D3-poSxGMelrhvKE2PBX-_pXRJJZF4NfW8ShyxzOrQekZvgZuIlaphkg_35QPKGG-Z22dTcFymj48qO5nXQjuVussmThewiceMQ9Hr7bUm5YRaJhTpDuCU2kJKQjTyZXcslreH){:.big-img} + ![Screen Shot 2017-03-22 at 10.59.04 AM.png](https://lh4.googleusercontent.com/h9D3-poSxGMelrhvKE2PBX-_pXRJJZF4NfW8ShyxzOrQekZvgZuIlaphkg_35QPKGG-Z22dTcFymj48qO5nXQjuVussmThewiceMQ9Hr7bUm5YRaJhTpDuCU2kJKQjTyZXcslreH) diff --git a/blog/_posts/2017-03-00-Kubernetes-1.6-Multi-User-Multi-Workloads-At-Scale.md b/content/en/blog/_posts/2017-03-00-Kubernetes-1.6-Multi-User-Multi-Workloads-At-Scale.md similarity index 99% rename from blog/_posts/2017-03-00-Kubernetes-1.6-Multi-User-Multi-Workloads-At-Scale.md rename to content/en/blog/_posts/2017-03-00-Kubernetes-1.6-Multi-User-Multi-Workloads-At-Scale.md index 3cac1058ba201..32ad668569fa6 100644 --- a/blog/_posts/2017-03-00-Kubernetes-1.6-Multi-User-Multi-Workloads-At-Scale.md +++ b/content/en/blog/_posts/2017-03-00-Kubernetes-1.6-Multi-User-Multi-Workloads-At-Scale.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes 1.6: Multi-user, Multi-workloads at Scale " -date: Wednesday, March 28, 2017 -pagination: - enabled: true +date: 2017-03-28 +slug: kubernetes-1.6-multi-user-multi-workloads-at-scale +url: /blog/2017/03/Kubernetes-1.6-Multi-User-Multi-Workloads-At-Scale --- Today we’re announcing the release of Kubernetes 1.6. diff --git a/blog/_posts/2017-03-00-Scalability-Updates-In-Kubernetes-1.6.md b/content/en/blog/_posts/2017-03-00-Scalability-Updates-In-Kubernetes-1.6.md similarity index 98% rename from blog/_posts/2017-03-00-Scalability-Updates-In-Kubernetes-1.6.md rename to content/en/blog/_posts/2017-03-00-Scalability-Updates-In-Kubernetes-1.6.md index 090ecf884363e..268bd9bed1a18 100644 --- a/blog/_posts/2017-03-00-Scalability-Updates-In-Kubernetes-1.6.md +++ b/content/en/blog/_posts/2017-03-00-Scalability-Updates-In-Kubernetes-1.6.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Scalability updates in Kubernetes 1.6: 5,000 node and 150,000 pod clusters " -date: Friday, March 30, 2017 -pagination: - enabled: true +date: 2017-03-30 +slug: scalability-updates-in-kubernetes-1.6 +url: /blog/2017/03/Scalability-Updates-In-Kubernetes-1.6 --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2017/03/five-days-of-kubernetes-1.6.html) on what's new in Kubernetes 1.6_ diff --git a/blog/_posts/2017-04-00-Configuring-Private-Dns-Zones-Upstream-Nameservers-Kubernetes.md b/content/en/blog/_posts/2017-04-00-Configuring-Private-Dns-Zones-Upstream-Nameservers-Kubernetes.md similarity index 97% rename from blog/_posts/2017-04-00-Configuring-Private-Dns-Zones-Upstream-Nameservers-Kubernetes.md rename to content/en/blog/_posts/2017-04-00-Configuring-Private-Dns-Zones-Upstream-Nameservers-Kubernetes.md index 1821a3e032968..fcd0d63d4c6c5 100644 --- a/blog/_posts/2017-04-00-Configuring-Private-Dns-Zones-Upstream-Nameservers-Kubernetes.md +++ b/content/en/blog/_posts/2017-04-00-Configuring-Private-Dns-Zones-Upstream-Nameservers-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Configuring Private DNS Zones and Upstream Nameservers in Kubernetes " -date: Wednesday, April 04, 2017 -pagination: - enabled: true +date: 2017-04-04 +slug: configuring-private-dns-zones-upstream-nameservers-kubernetes +url: /blog/2017/04/Configuring-Private-Dns-Zones-Upstream-Nameservers-Kubernetes --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2017/03/five-days-of-kubernetes-1.6.html) on what's new in Kubernetes 1.6_ @@ -57,12 +55,12 @@ The diagram below shows the flow of DNS queries specified in the configuration a Below is a table of example domain names and the destination of the queries for those domain names: | | | -|--|--| +|---|---| | Domain name | Server answering the query | | kubernetes.default.svc.cluster.local | kube-dns | | foo.acme.local | custom DNS (1.2.3.4) | | widget.com | upstream DNS (one of 8.8.8.8, 8.8.4.4) | -{:.post-table} + **ConfigMap Configuration Notes** diff --git a/blog/_posts/2017-04-00-Multi-Stage-Canary-Deployments-With-Kubernetes-In-The-Cloud-Onprem.md b/content/en/blog/_posts/2017-04-00-Multi-Stage-Canary-Deployments-With-Kubernetes-In-The-Cloud-Onprem.md similarity index 98% rename from blog/_posts/2017-04-00-Multi-Stage-Canary-Deployments-With-Kubernetes-In-The-Cloud-Onprem.md rename to content/en/blog/_posts/2017-04-00-Multi-Stage-Canary-Deployments-With-Kubernetes-In-The-Cloud-Onprem.md index 5f23324654ed8..4ae0683ba2454 100644 --- a/blog/_posts/2017-04-00-Multi-Stage-Canary-Deployments-With-Kubernetes-In-The-Cloud-Onprem.md +++ b/content/en/blog/_posts/2017-04-00-Multi-Stage-Canary-Deployments-With-Kubernetes-In-The-Cloud-Onprem.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " How Bitmovin is Doing Multi-Stage Canary Deployments with Kubernetes in the Cloud and On-Prem " -date: Saturday, April 21, 2017 -pagination: - enabled: true +date: 2017-04-21 +slug: multi-stage-canary-deployments-with-kubernetes-in-the-cloud-onprem +url: /blog/2017/04/Multi-Stage-Canary-Deployments-With-Kubernetes-In-The-Cloud-Onprem --- _Editor's Note: Today’s post is by Daniel Hoelbling-Inzko, Infrastructure Architect at Bitmovin, a company that provides services that transcode digital video and audio to streaming formats, sharing insights about their use of Kubernetes._ @@ -42,7 +40,7 @@ To overcome this oxymoron, we came up with a four-stage canary pipeline for each Once a new build is pushed, we deploy it to an internal stage that’s only accessible for our internal tests and the integration test suite. Once the internal test suite passes, QA reports no issues, and we don’t detect any abnormal behavior, we push the new build to our free stage. This means that 5% of our free users would get randomly assigned to this new build. After some time in this stage the build gets promoted to the next stage that gets 5% of our paid users routed to it. Only once the build has successfully passed all 3 of these hurdles, does it get deployed to the production tier, where it will receive all traffic from our remaining users as well as our enterprise customers, which are not part of the paid bucket and never see their traffic routed to a canary track. - ![](https://lh3.googleusercontent.com/4iiw1O-Ik8KeLSMh8Ubk9j4wh3Npelqon-ZJ8joGeXqpFoZvi6won9vLOBLyAEuHcFkigKYXH_twCVKWvjxL-YEJRAFbLbLP7Ry8DTMIAVKmrlp7pBIEnM5bE-22I7eZD3NBoMeB){:.big-image} + ![](https://lh3.googleusercontent.com/4iiw1O-Ik8KeLSMh8Ubk9j4wh3Npelqon-ZJ8joGeXqpFoZvi6won9vLOBLyAEuHcFkigKYXH_twCVKWvjxL-YEJRAFbLbLP7Ry8DTMIAVKmrlp7pBIEnM5bE-22I7eZD3NBoMeB) This setup makes us a pretty big Kubernetes installation by default, since all of our canary tiers are available at a minimum replication of 2. Since we are currently deploying around 30 microservices (and growing) to our clusters, it adds up to a minimum of 10 pods per service (8 application pods + minimum 2 HAProxy pods that do the canary routing). Although, in reality our preferred standard configuration is usually running 2 internal, 4 free, 4 others and 10 production pods alongside 4 HAProxy pods - totalling around 700 pods in total. This also means that we are running at least 150 services that provide a static ClusterIP to their underlying microservice canary tier. @@ -55,7 +53,7 @@ A typical deployment looks like this: | account-service-canary | account-service-canary-v1.17.0 | 4 | | account-service-paid | account-service-paid-v1.15.0 | 4 | | account-service-production | account-service-production-v1.15.0 | 10 | -{: .post-table} + An example service definition the production track will have the following label selectors: diff --git a/blog/_posts/2017-04-00-Rbac-Support-In-Kubernetes.md b/content/en/blog/_posts/2017-04-00-Rbac-Support-In-Kubernetes.md similarity index 98% rename from blog/_posts/2017-04-00-Rbac-Support-In-Kubernetes.md rename to content/en/blog/_posts/2017-04-00-Rbac-Support-In-Kubernetes.md index 913c4facf1c2a..f587c423e0953 100644 --- a/blog/_posts/2017-04-00-Rbac-Support-In-Kubernetes.md +++ b/content/en/blog/_posts/2017-04-00-Rbac-Support-In-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " RBAC Support in Kubernetes " -date: Friday, April 06, 2017 -pagination: - enabled: true +date: 2017-04-06 +slug: rbac-support-in-kubernetes +url: /blog/2017/04/Rbac-Support-In-Kubernetes --- _Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2017/03/five-days-of-kubernetes-1.6.html) on what's new in Kubernetes 1.6_ diff --git a/blog/_posts/2017-05-00-Draft-Kubernetes-Container-Development.md b/content/en/blog/_posts/2017-05-00-Draft-Kubernetes-Container-Development.md similarity index 98% rename from blog/_posts/2017-05-00-Draft-Kubernetes-Container-Development.md rename to content/en/blog/_posts/2017-05-00-Draft-Kubernetes-Container-Development.md index f1cfb32f2be52..c14c9f5d2aee0 100644 --- a/blog/_posts/2017-05-00-Draft-Kubernetes-Container-Development.md +++ b/content/en/blog/_posts/2017-05-00-Draft-Kubernetes-Container-Development.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Draft: Kubernetes container development made easy " -date: Thursday, May 31, 2017 -pagination: - enabled: true +date: 2017-05-31 +slug: draft-kubernetes-container-development +url: /blog/2017/05/Draft-Kubernetes-Container-Development --- _Today's post is by __Brendan Burns, Director of Engineering at Microsoft Azure and Kubernetes co-founder._ diff --git a/blog/_posts/2017-05-00-Kubernetes-Monitoring-Guide.md b/content/en/blog/_posts/2017-05-00-Kubernetes-Monitoring-Guide.md similarity index 98% rename from blog/_posts/2017-05-00-Kubernetes-Monitoring-Guide.md rename to content/en/blog/_posts/2017-05-00-Kubernetes-Monitoring-Guide.md index 8aefc809eadbd..53dbe146753d5 100644 --- a/blog/_posts/2017-05-00-Kubernetes-Monitoring-Guide.md +++ b/content/en/blog/_posts/2017-05-00-Kubernetes-Monitoring-Guide.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes: a monitoring guide " -date: Saturday, May 19, 2017 -pagination: - enabled: true +date: 2017-05-19 +slug: kubernetes-monitoring-guide +url: /blog/2017/05/Kubernetes-Monitoring-Guide --- _Today’s post is by Jean-Mathieu Saponaro, Research & Analytics Engineer at Datadog, discussing what Kubernetes changes for monitoring, and how you can prepare to properly monitor a containerized infrastructure orchestrated by Kubernetes._ diff --git a/blog/_posts/2017-05-00-Kubernetes-Security-Process-Explained.md b/content/en/blog/_posts/2017-05-00-Kubernetes-Security-Process-Explained.md similarity index 97% rename from blog/_posts/2017-05-00-Kubernetes-Security-Process-Explained.md rename to content/en/blog/_posts/2017-05-00-Kubernetes-Security-Process-Explained.md index b2bc7bc8937b1..34062d5ac6eca 100644 --- a/blog/_posts/2017-05-00-Kubernetes-Security-Process-Explained.md +++ b/content/en/blog/_posts/2017-05-00-Kubernetes-Security-Process-Explained.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Dancing at the Lip of a Volcano: The Kubernetes Security Process - Explained " -date: Friday, May 18, 2017 -pagination: - enabled: true +date: 2017-05-18 +slug: kubernetes-security-process-explained +url: /blog/2017/05/Kubernetes-Security-Process-Explained --- _Editor's note: Today’s post is by  __Jess Frazelle of Google and Brandon Philips of CoreOS about the Kubernetes security disclosures and response policy.__  _ diff --git a/blog/_posts/2017-05-00-Kubespray-Ansible-Collaborative-Kubernetes-Ops.md b/content/en/blog/_posts/2017-05-00-Kubespray-Ansible-Collaborative-Kubernetes-Ops.md similarity index 97% rename from blog/_posts/2017-05-00-Kubespray-Ansible-Collaborative-Kubernetes-Ops.md rename to content/en/blog/_posts/2017-05-00-Kubespray-Ansible-Collaborative-Kubernetes-Ops.md index 679daa692b5d8..d2ef9f39853b0 100644 --- a/blog/_posts/2017-05-00-Kubespray-Ansible-Collaborative-Kubernetes-Ops.md +++ b/content/en/blog/_posts/2017-05-00-Kubespray-Ansible-Collaborative-Kubernetes-Ops.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubespray Ansible Playbooks foster Collaborative Kubernetes Ops " -date: Saturday, May 19, 2017 -pagination: - enabled: true +date: 2017-05-19 +slug: kubespray-ansible-collaborative-kubernetes-ops +url: /blog/2017/05/Kubespray-Ansible-Collaborative-Kubernetes-Ops --- _Today’s guest post is by Rob Hirschfeld, co-founder of open infrastructure automation project, Digital Rebar and co-chair of the SIG Cluster Ops.  _ diff --git a/blog/_posts/2017-05-00-Managing-Microservices-With-Istio-Service-Mesh.md b/content/en/blog/_posts/2017-05-00-Managing-Microservices-With-Istio-Service-Mesh.md similarity index 98% rename from blog/_posts/2017-05-00-Managing-Microservices-With-Istio-Service-Mesh.md rename to content/en/blog/_posts/2017-05-00-Managing-Microservices-With-Istio-Service-Mesh.md index 3defa658857f9..16fe833aaa33e 100644 --- a/blog/_posts/2017-05-00-Managing-Microservices-With-Istio-Service-Mesh.md +++ b/content/en/blog/_posts/2017-05-00-Managing-Microservices-With-Istio-Service-Mesh.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Managing microservices with the Istio service mesh " -date: Thursday, May 31, 2017 -pagination: - enabled: true +date: 2017-05-31 +slug: managing-microservices-with-istio-service-mesh +url: /blog/2017/05/Managing-Microservices-With-Istio-Service-Mesh --- _Today’s post is by the Istio team showing how you can get visibility, resiliency, security and control for your microservices in Kubernetes._ @@ -142,7 +140,7 @@ We can now point the browser to http://$BOOKINFO\_URL/productpage, and see: - ![](https://lh3.googleusercontent.com/AP3bEJR9uqsXufk5kZqD4DaRUs9ynuybfM8KBJlv_sF0g6A8LRO606jr_Z8xL71TrKWt_OfTXDJCcISZGy6ucj4KVZVFPFT8NCOOf6PpEZ0XVKlw-fgRP0iJvaBKuZaH-dySdJZ-){: .big-img} + ![](https://lh3.googleusercontent.com/AP3bEJR9uqsXufk5kZqD4DaRUs9ynuybfM8KBJlv_sF0g6A8LRO606jr_Z8xL71TrKWt_OfTXDJCcISZGy6ucj4KVZVFPFT8NCOOf6PpEZ0XVKlw-fgRP0iJvaBKuZaH-dySdJZ-) @@ -273,7 +271,7 @@ We can now open a browser at http://$GRAFANA\_URL/dashboard/db/istio-dashboard a - ![istio-dashboard-k8s-blog.png](https://lh5.googleusercontent.com/yFBKYWEmNxs-8VLtlJIG4BV0dUzqrvCfhWLh2CrGHyTtH5dArQy-owua3vdMCSjkdjtk8E3ZmEz32EupRL28WHALLm9MqJwCJrs1N5yv8typUJiLS_ExsO-uleaZ3bgbPraC8lgi){:.big-img} + ![istio-dashboard-k8s-blog.png](https://lh5.googleusercontent.com/yFBKYWEmNxs-8VLtlJIG4BV0dUzqrvCfhWLh2CrGHyTtH5dArQy-owua3vdMCSjkdjtk8E3ZmEz32EupRL28WHALLm9MqJwCJrs1N5yv8typUJiLS_ExsO-uleaZ3bgbPraC8lgi) diff --git a/blog/_posts/2017-06-00-Kubernetes-1.7-Security-Hardening-Stateful-Application-Extensibility-Updates.md b/content/en/blog/_posts/2017-06-00-Kubernetes-1.7-Security-Hardening-Stateful-Application-Extensibility-Updates.md similarity index 97% rename from blog/_posts/2017-06-00-Kubernetes-1.7-Security-Hardening-Stateful-Application-Extensibility-Updates.md rename to content/en/blog/_posts/2017-06-00-Kubernetes-1.7-Security-Hardening-Stateful-Application-Extensibility-Updates.md index addd9e49cfdff..ceafcbb65e2bf 100644 --- a/blog/_posts/2017-06-00-Kubernetes-1.7-Security-Hardening-Stateful-Application-Extensibility-Updates.md +++ b/content/en/blog/_posts/2017-06-00-Kubernetes-1.7-Security-Hardening-Stateful-Application-Extensibility-Updates.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes 1.7: Security Hardening, Stateful Application Updates and Extensibility " -date: Saturday, June 30, 2017 -pagination: - enabled: true +date: 2017-06-30 +slug: kubernetes-1.7-security-hardening-stateful-application-extensibility-updates +url: /blog/2017/06/Kubernetes-1.7-Security-Hardening-Stateful-Application-Extensibility-Updates --- Today we’re announcing Kubernetes 1.7, a milestone release that adds security, storage and extensibility features motivated by widespread production use of Kubernetes in the most demanding enterprise environments.  diff --git a/blog/_posts/2017-07-00-Happy-Second-Birthday-Kubernetes.md b/content/en/blog/_posts/2017-07-00-Happy-Second-Birthday-Kubernetes.md similarity index 91% rename from blog/_posts/2017-07-00-Happy-Second-Birthday-Kubernetes.md rename to content/en/blog/_posts/2017-07-00-Happy-Second-Birthday-Kubernetes.md index 126f003dbbea8..010d21af00cfb 100644 --- a/blog/_posts/2017-07-00-Happy-Second-Birthday-Kubernetes.md +++ b/content/en/blog/_posts/2017-07-00-Happy-Second-Birthday-Kubernetes.md @@ -1,14 +1,12 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Happy Second Birthday: A Kubernetes Retrospective " -date: Saturday, July 28, 2017 -pagination: - enabled: true +date: 2017-07-28 +slug: happy-second-birthday-kubernetes +url: /blog/2017/07/Happy-Second-Birthday-Kubernetes --- As we do every July, we’re excited to celebrate Kubernetes 2nd birthday! In the two years since GA 1.0 launched as an open source project, [Kubernetes](http://kubernetes.io/docs/whatisk8s/) (abbreviated as K8s) has grown to become the highest velocity cloud-related project. With more than 2,611 diverse contributors, from independents to leading global companies, the project has had 50,685 commits in the last 12 months. Of the 54 million projects on GitHub, Kubernetes is in the top 5 for number of unique developers contributing code. It also has [more pull requests and issue comments](https://www.cncf.io/blog/2017/02/27/measuring-popularity-kubernetes-using-bigquery/) than any other project on GitHub.   - ![Screen Shot 2017-07-18 at 9.39.42 AM.png](https://lh3.googleusercontent.com/ldb4PfuqammWmcPiFpMa48ALxD0kGrSre0WGMpuXKqAqnKhyWEmIcJXnQcAK2sdVCiE5cvw0H2FXtLt_dVihAk4b-XTA2HIQba3A0irnRaIHup4bhFUwPLSSFmw3zFk9ZOt61TKc){:.big-img} + ![Screen Shot 2017-07-18 at 9.39.42 AM.png](https://lh3.googleusercontent.com/ldb4PfuqammWmcPiFpMa48ALxD0kGrSre0WGMpuXKqAqnKhyWEmIcJXnQcAK2sdVCiE5cvw0H2FXtLt_dVihAk4b-XTA2HIQba3A0irnRaIHup4bhFUwPLSSFmw3zFk9ZOt61TKc) Figure 1: Kubernetes [Rankings](https://www.cncf.io/blog/2017/02/27/measuring-popularity-kubernetes-using-bigquery) @@ -18,7 +16,7 @@ At the center of the community are [Special Interest Groups](https://github.com/ - ![Screen Shot 2017-07-18 at 11.32.07 AM.png](https://lh3.googleusercontent.com/XkN1qNDVOvRTCnY1kGVadCl6IqtI-MzSBVjEDduUpqYgScn9VN5xvlp2EPfqhmJzZbqZv40vlxkV7y9DfU4Fq4CCwYJvbF17bJKM4UB59JR8lELWyLvkrsuI4rB51sw_omXqoAq-){:.big-img} + ![Screen Shot 2017-07-18 at 11.32.07 AM.png](https://lh3.googleusercontent.com/XkN1qNDVOvRTCnY1kGVadCl6IqtI-MzSBVjEDduUpqYgScn9VN5xvlp2EPfqhmJzZbqZv40vlxkV7y9DfU4Fq4CCwYJvbF17bJKM4UB59JR8lELWyLvkrsuI4rB51sw_omXqoAq-) @@ -127,37 +125,37 @@ At the one year anniversary of the Kubernetes 1.0 launch, there were 130 Kuberne - ![](https://lh5.googleusercontent.com/xTwKqYyvb-f7a_OYFhoNTdxh65zX8Q02u172jqLrif0VYm1KdKOGuK-HgIfO3I4o7VZeATa3E5TBLJbbM70xzxOzXFcy34p3OSWTnH_m5LliZKU134FAHMECqYZxDofOwD-h2CMR){:.big-img} + ![](https://lh5.googleusercontent.com/xTwKqYyvb-f7a_OYFhoNTdxh65zX8Q02u172jqLrif0VYm1KdKOGuK-HgIfO3I4o7VZeATa3E5TBLJbbM70xzxOzXFcy34p3OSWTnH_m5LliZKU134FAHMECqYZxDofOwD-h2CMR) Celebrating at the K8s birthday party in San Francisco - ![k8sbday-rtp.jpg-large](https://lh3.googleusercontent.com/YBqyvEtkND8hHlflmGq7wNUQquk0le13TfRO7eFMiN9ecDPModhCCe6pBvP_BrjrLFRPsn9RpMiR4bal2PazNbqO_KlkKBEB6L2EaOU1LhJuv6bIsWW-mkr3ffGqTPfbJKjaqCQK){:.big-img} + ![k8sbday-rtp.jpg-large](https://lh3.googleusercontent.com/YBqyvEtkND8hHlflmGq7wNUQquk0le13TfRO7eFMiN9ecDPModhCCe6pBvP_BrjrLFRPsn9RpMiR4bal2PazNbqO_KlkKBEB6L2EaOU1LhJuv6bIsWW-mkr3ffGqTPfbJKjaqCQK) Celebrating in RTP, NC with a presentation from Jason McGee, VP and CTO, IBM Cloud Platform. Photo courtesy of [@FranklyBriana](https://twitter.com/FranklyBriana) - ![k8sbday-sg.jpg-large](https://lh6.googleusercontent.com/KtleeU4vkSvalQqiCj4tiDcDjAStZ17Ttxx_KTuKR-Mm2Og35bsZLYTttu_HoJyJxF5wAFTDrXOowGtfXiplCaZjh8_YKnO8gUDhtib79o3kf80VWmL0tV8nHrn_MMBOFLOS_8XZ){:.big-img} + ![k8sbday-sg.jpg-large](https://lh6.googleusercontent.com/KtleeU4vkSvalQqiCj4tiDcDjAStZ17Ttxx_KTuKR-Mm2Og35bsZLYTttu_HoJyJxF5wAFTDrXOowGtfXiplCaZjh8_YKnO8gUDhtib79o3kf80VWmL0tV8nHrn_MMBOFLOS_8XZ) The Kubernetes Singapore meetup celebrating with an intro to GKE. Photo courtesy of [@hunternield](https://twitter.com/hunternield) - ![](https://lh6.googleusercontent.com/JZ_moLy996JVn-ajABO0-T7g4B8IHDnhI4chHAp6so_9gyQsbApDWyk0SOMUWPeLSbNph50YQFjZcqQaWth5QckbMln6Jz3lpk1EjKRvba6rR_OZUgdU3fW6FNG-guiCTvixMOMV){:.big-img} ![](https://lh3.googleusercontent.com/62TuMsCRMOXk8ly-MEy0yYmNY09zRBSWM6IgmU5BmcDnLvx2lEqsBdtEYsK_QV7GCGYF5XoY-mhLruxiBz0UZbq9CFzJ_twg5NuX5CoHHYEOzjTw3sp57NnS2eM-iMQLBC5dRdiC){:.big-img} + ![](https://lh6.googleusercontent.com/JZ_moLy996JVn-ajABO0-T7g4B8IHDnhI4chHAp6so_9gyQsbApDWyk0SOMUWPeLSbNph50YQFjZcqQaWth5QckbMln6Jz3lpk1EjKRvba6rR_OZUgdU3fW6FNG-guiCTvixMOMV) ![](https://lh3.googleusercontent.com/62TuMsCRMOXk8ly-MEy0yYmNY09zRBSWM6IgmU5BmcDnLvx2lEqsBdtEYsK_QV7GCGYF5XoY-mhLruxiBz0UZbq9CFzJ_twg5NuX5CoHHYEOzjTw3sp57NnS2eM-iMQLBC5dRdiC) New York celebrated with mini k8s cupcakes and a presentation on the history of cloud native from CNCF Executive Director, Dan Kohn. Photo courtesy of [@arieljatib](https://twitter.com/arieljatib) and [@coreos](https://twitter.com/coreos?lang=en) - ![](https://lh6.googleusercontent.com/XomXc8LI79M1M5XLmZmXUpRYSOBj5HUwYTxOlgBKwoC00P8jWr-Aqam_c_IS9S69RWGt6hFc50BLHPQN41ZEV8Wsx4QRhym4hWGjlgDbLYMKJpsZ4CfGkLPh_rInZy5PrttqPmQJ){:.big-img} ![](https://lh4.googleusercontent.com/HlNGI5bwJBNFf9q5UkqM2l0--ieJegbbnF5lqiVas6Rp5PzKJ-XHnEjUxWQnvE21WUKrp5HiKLi3VoiG-QFZFSPPTQ74rV9nGxC-d4xFwZzENGdOWUSCwSdzd4XcgGjyAGNgqi72){:.big-img} + ![](https://lh6.googleusercontent.com/XomXc8LI79M1M5XLmZmXUpRYSOBj5HUwYTxOlgBKwoC00P8jWr-Aqam_c_IS9S69RWGt6hFc50BLHPQN41ZEV8Wsx4QRhym4hWGjlgDbLYMKJpsZ4CfGkLPh_rInZy5PrttqPmQJ) ![](https://lh4.googleusercontent.com/HlNGI5bwJBNFf9q5UkqM2l0--ieJegbbnF5lqiVas6Rp5PzKJ-XHnEjUxWQnvE21WUKrp5HiKLi3VoiG-QFZFSPPTQ74rV9nGxC-d4xFwZzENGdOWUSCwSdzd4XcgGjyAGNgqi72) Quebec City had custom k8s cupcakes too! Photo courtesy of [@zig\_max](https://twitter.com/zig_max)[](https://twitter.com/zig_max) - ![](https://lh6.googleusercontent.com/4JzZ0zCe98tfL5pMgTKDWPQo4HPfGq6WvArQgOU7FbwtjoiRIQiJWZmke7KDlL0m22jpEFmzYg92dJx6aXySiM37VKaOuf7sybdplRvw4F5gJlL9lP-lEO87m735Gd4QZYMiYB2Y){:.big-img} + ![](https://lh6.googleusercontent.com/4JzZ0zCe98tfL5pMgTKDWPQo4HPfGq6WvArQgOU7FbwtjoiRIQiJWZmke7KDlL0m22jpEFmzYg92dJx6aXySiM37VKaOuf7sybdplRvw4F5gJlL9lP-lEO87m735Gd4QZYMiYB2Y) Beijing celebrated with custom k8s lollipops. Photo courtesy of [@maxwell9215](https://twitter.com/maxwell9215) diff --git a/blog/_posts/2017-07-00-How-Watson-Health-Cloud-Deploys.md b/content/en/blog/_posts/2017-07-00-How-Watson-Health-Cloud-Deploys.md similarity index 94% rename from blog/_posts/2017-07-00-How-Watson-Health-Cloud-Deploys.md rename to content/en/blog/_posts/2017-07-00-How-Watson-Health-Cloud-Deploys.md index 0c7615c1449db..2917f55e79394 100644 --- a/blog/_posts/2017-07-00-How-Watson-Health-Cloud-Deploys.md +++ b/content/en/blog/_posts/2017-07-00-How-Watson-Health-Cloud-Deploys.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " How Watson Health Cloud Deploys Applications with Kubernetes " -date: Saturday, July 14, 2017 -pagination: - enabled: true +date: 2017-07-14 +slug: how-watson-health-cloud-deploys +url: /blog/2017/07/How-Watson-Health-Cloud-Deploys --- Today’s post is by [Sandhya Kapoor](https://www.linkedin.com/in/sandhyakapoor/), Senior Technologist, Watson Platform for Health, IBM @@ -33,11 +31,11 @@ Here is a snapshot of Watson Care Manager, running inside a Kubernetes cluster: - ![](https://lh4.googleusercontent.com/LeKfLOkNldqReFh47f2AuFU42dhvKDwDxac_Psil_bdZWldKY80ZZi4Rv3n0--jq8Mqq9qRFVa1AbLIt9TIPLLRVmon4DaBsltFYbUJikrOp0qcavJQ9XHjRL-A1yvWR6mTNayBP){:.big-img} + ![](https://lh4.googleusercontent.com/LeKfLOkNldqReFh47f2AuFU42dhvKDwDxac_Psil_bdZWldKY80ZZi4Rv3n0--jq8Mqq9qRFVa1AbLIt9TIPLLRVmon4DaBsltFYbUJikrOp0qcavJQ9XHjRL-A1yvWR6mTNayBP) - ![](https://lh3.googleusercontent.com/EU3DgtFKagWp5S0UpKj-wRgx8WK2nvQ2BG-4dGio57pGNj42A7Lip9IARBba34hIm84-_7zwWt6iImQE8beSqLxpzXm-2w_84M_X2IHQ7jvpWtIDMF81hmq6N4hGSxp6DQoFW5qX){:.big-img} + ![](https://lh3.googleusercontent.com/EU3DgtFKagWp5S0UpKj-wRgx8WK2nvQ2BG-4dGio57pGNj42A7Lip9IARBba34hIm84-_7zwWt6iImQE8beSqLxpzXm-2w_84M_X2IHQ7jvpWtIDMF81hmq6N4hGSxp6DQoFW5qX) @@ -59,7 +57,7 @@ Kubelet running in each worker node regularly polls the kube API server. If ther Process Flow: -| ![](https://lh6.googleusercontent.com/jckmDLJIsy6m8Dxj6GZ6yv5vmQqrZXAi42eJz8iIefl2A87LXoRJUubCkSh05Ptaojt_faEFq4G6UMfZZYVOUiaEzt8Erp51xbyRWW_08qn9vvz-WvztBNlrG431YgI6880-ZULO){:.big-img} | +| ![](https://lh6.googleusercontent.com/jckmDLJIsy6m8Dxj6GZ6yv5vmQqrZXAi42eJz8iIefl2A87LXoRJUubCkSh05Ptaojt_faEFq4G6UMfZZYVOUiaEzt8Erp51xbyRWW_08qn9vvz-WvztBNlrG431YgI6880-ZULO) | | UCD – IBM UrbanCode Deploy is a tool for automating application deployments through your environments. WH Cluster – Kubernetes worker node. | @@ -105,7 +103,7 @@ If needed, run a rolling update to update the existing pod. - ![](https://lh4.googleusercontent.com/laBRZK_ifwLXGkLL8fl0fZbUmm-HI4nC-tUNIFAy2wg4UHQT97reKyNOrNydYS8PmnhgqsBQctYCLTjJF12KR_uuVUdqiNx-B1OP1YrBwL2vi5SlEO9RSFQEbs-X6FoMHw0QK53A){:.big-img} + ![](https://lh4.googleusercontent.com/laBRZK_ifwLXGkLL8fl0fZbUmm-HI4nC-tUNIFAy2wg4UHQT97reKyNOrNydYS8PmnhgqsBQctYCLTjJF12KR_uuVUdqiNx-B1OP1YrBwL2vi5SlEO9RSFQEbs-X6FoMHw0QK53A) @@ -117,7 +115,7 @@ Provision a cluster in Armada with \ worker nodes. Create Kubernetes control -| ![](https://lh6.googleusercontent.com/iFKlbBX8rjWTuygIfjImdxP8R7xXuvaaoDwldEIC3VRL03XIehxagz8uePpXllYMSxoyai5a6N-0NB4aTGK9fwwd8leFyfypxtbmaWBK-b2Kh9awcA76-_82F7ZZl7lgbf0gyFN7){:.big-img} | +| ![](https://lh6.googleusercontent.com/iFKlbBX8rjWTuygIfjImdxP8R7xXuvaaoDwldEIC3VRL03XIehxagz8uePpXllYMSxoyai5a6N-0NB4aTGK9fwwd8leFyfypxtbmaWBK-b2Kh9awcA76-_82F7ZZl7lgbf0gyFN7) | | UCD: IBM UrbanCode Deploy is a tool for automating application deployments through your environments. Armada: Kubernetes implementation of IBM. WH Docker Registry: Docker Private image registry. Common agent containers: We expect to configure our services to use the WHC mandatory agents. We deployed all ion containers. | @@ -132,7 +130,7 @@ Logmet is a cloud logging service that helps to collect, store, and analyze an a The application pod mounts the application logging directory to the storage space, which is created by persistent volume claim, and stores the logs, which are not lost even when the pod dies. Kibana is an open source data visualization plugin for Elasticsearch. It provides visualization capabilities on top of the content indexed on an Elasticsearch cluster. - ![](https://lh3.googleusercontent.com/Fat60VoOQ6CBxHgAdva9Xwcu1X4coZFlld1eS7ZrB4MbTR9HbwyuXgQ6CncXxeZ_mWqWzpTatB7bOB199QCcCaY8905yAqzMO0-Rx4NNnYj94uXHEy_dwLbLVFQJvQTu8cGW8HSz){:.big-img} + ![](https://lh3.googleusercontent.com/Fat60VoOQ6CBxHgAdva9Xwcu1X4coZFlld1eS7ZrB4MbTR9HbwyuXgQ6CncXxeZ_mWqWzpTatB7bOB199QCcCaY8905yAqzMO0-Rx4NNnYj94uXHEy_dwLbLVFQJvQTu8cGW8HSz) diff --git a/blog/_posts/2017-08-00-High-Performance-Networking-With-Ec2.md b/content/en/blog/_posts/2017-08-00-High-Performance-Networking-With-Ec2.md similarity index 98% rename from blog/_posts/2017-08-00-High-Performance-Networking-With-Ec2.md rename to content/en/blog/_posts/2017-08-00-High-Performance-Networking-With-Ec2.md index 35a4a3e9431b7..367914e4e7115 100644 --- a/blog/_posts/2017-08-00-High-Performance-Networking-With-Ec2.md +++ b/content/en/blog/_posts/2017-08-00-High-Performance-Networking-With-Ec2.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " High Performance Networking with EC2 Virtual Private Clouds " -date: Saturday, August 11, 2017 -pagination: - enabled: true +date: 2017-08-11 +slug: high-performance-networking-with-ec2 +url: /blog/2017/08/High-Performance-Networking-With-Ec2 --- diff --git a/blog/_posts/2017-08-00-Kompose-Helps-Developers-Move-Docker.md b/content/en/blog/_posts/2017-08-00-Kompose-Helps-Developers-Move-Docker.md similarity index 98% rename from blog/_posts/2017-08-00-Kompose-Helps-Developers-Move-Docker.md rename to content/en/blog/_posts/2017-08-00-Kompose-Helps-Developers-Move-Docker.md index 13a086f0b641c..b266497707823 100644 --- a/blog/_posts/2017-08-00-Kompose-Helps-Developers-Move-Docker.md +++ b/content/en/blog/_posts/2017-08-00-Kompose-Helps-Developers-Move-Docker.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kompose Helps Developers Move Docker Compose Files to Kubernetes " -date: Friday, August 10, 2017 -pagination: - enabled: true +date: 2017-08-10 +slug: kompose-helps-developers-move-docker +url: /blog/2017/08/Kompose-Helps-Developers-Move-Docker --- _Editor's note: today's post is by Charlie Drage, Software Engineer at Red Hat giving an update about the Kubernetes project Kompose._ diff --git a/blog/_posts/2017-08-00-Kubernetes-Meets-High-Performance.md b/content/en/blog/_posts/2017-08-00-Kubernetes-Meets-High-Performance.md similarity index 98% rename from blog/_posts/2017-08-00-Kubernetes-Meets-High-Performance.md rename to content/en/blog/_posts/2017-08-00-Kubernetes-Meets-High-Performance.md index db12fb63b42ef..a8bbac6f73f12 100644 --- a/blog/_posts/2017-08-00-Kubernetes-Meets-High-Performance.md +++ b/content/en/blog/_posts/2017-08-00-Kubernetes-Meets-High-Performance.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Meets High-Performance Computing " -date: Wednesday, August 22, 2017 -pagination: - enabled: true +date: 2017-08-22 +slug: kubernetes-meets-high-performance +url: /blog/2017/08/Kubernetes-Meets-High-Performance --- Editor's note: today's post is by Robert Lalonde, general manager at Univa, on supporting mixed HPC and containerized applications   @@ -67,7 +65,7 @@ Another approach is to use a peer scheduler that coordinates with the Kubernetes With this approach, Kubernetes acts as a resource manager, making resources available to a separate HPC scheduler. Cluster administrators can use a visual interface to allocate resources based on policy or simply drag sliders via a web UI to allocate different proportions of the Kubernetes environment to non-container (HPC) workloads, and native Kubernetes applications and services. - ![](https://lh6.googleusercontent.com/wSBBl5d-YL4_UCYgvHpE_XzijtqftSi6PTHJLGfHr5nAxmTj945jQB-pMNIGLovWwKWGnEsPjCkCPrUMWZEs9UHnQPPDSWPEl-Gl76Yczd-Yn65pEE8mKC-Asj3zP5xyfZc-r2qU-YmmOyBhLQ){:.big-img} + ![](https://lh6.googleusercontent.com/wSBBl5d-YL4_UCYgvHpE_XzijtqftSi6PTHJLGfHr5nAxmTj945jQB-pMNIGLovWwKWGnEsPjCkCPrUMWZEs9UHnQPPDSWPEl-Gl76Yczd-Yn65pEE8mKC-Asj3zP5xyfZc-r2qU-YmmOyBhLQ) From a client perspective, the HPC scheduler runs as a service deployed in Kubernetes pods, operating just as it would on a bare metal cluster. Navops Command provides additional scheduling features including things like resource reservation, run-time quotas, workload preemption and more. This environment works equally well for on-premise, cloud-based or hybrid deployments. diff --git a/blog/_posts/2017-09-00-Introducing-Resource-Management-Working.md b/content/en/blog/_posts/2017-09-00-Introducing-Resource-Management-Working.md similarity index 98% rename from blog/_posts/2017-09-00-Introducing-Resource-Management-Working.md rename to content/en/blog/_posts/2017-09-00-Introducing-Resource-Management-Working.md index 301553a3fb414..4c1ff8183ab32 100644 --- a/blog/_posts/2017-09-00-Introducing-Resource-Management-Working.md +++ b/content/en/blog/_posts/2017-09-00-Introducing-Resource-Management-Working.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Introducing the Resource Management Working Group " -date: Friday, September 21, 2017 -pagination: - enabled: true +date: 2017-09-21 +slug: introducing-resource-management-working +url: /blog/2017/09/Introducing-Resource-Management-Working --- _**Editor's note: today's post is by Jeremy Eder, Senior Principal Software Engineer at Red Hat, on the formation of the Resource Management Working Group**_ @@ -49,7 +47,7 @@ After extensive development/feature [discussions](https://docs.google.com/docume To help bootstrap this effort, the Resource Management Working Group had its first face-to-face kickoff meeting in May 2017. Thanks to Google for hosting! - ![20170502_100834.jpg](https://lh3.googleusercontent.com/eL16-GnX335XcVta2u8nt3UgtoJMGuo2Xfqj3SJ34slepm_xzl6G4WmcBtFIIiaw_gYi-h5FsMnXA8GCl3xqhZGy44Gt6GmB5Ajy4McCdANkFQUy26z02e5rZU88lN-NFO774GgE){:.big-img} + ![20170502_100834.jpg](https://lh3.googleusercontent.com/eL16-GnX335XcVta2u8nt3UgtoJMGuo2Xfqj3SJ34slepm_xzl6G4WmcBtFIIiaw_gYi-h5FsMnXA8GCl3xqhZGy44Gt6GmB5Ajy4McCdANkFQUy26z02e5rZU88lN-NFO774GgE) Folks from Intel, NVIDIA, Google, IBM, Red Hat. and Microsoft (among others) participated.  You can read the outcomes of that 3-day meeting [here](https://docs.google.com/document/d/13_nk75eItkpbgZOt62In3jj0YuPbGPC_NnvSCHpgvUM/edit). diff --git a/blog/_posts/2017-09-00-Kubernetes-18-Security-Workloads-And.md b/content/en/blog/_posts/2017-09-00-Kubernetes-18-Security-Workloads-And.md similarity index 98% rename from blog/_posts/2017-09-00-Kubernetes-18-Security-Workloads-And.md rename to content/en/blog/_posts/2017-09-00-Kubernetes-18-Security-Workloads-And.md index a88f12a702048..ad3f50249b023 100644 --- a/blog/_posts/2017-09-00-Kubernetes-18-Security-Workloads-And.md +++ b/content/en/blog/_posts/2017-09-00-Kubernetes-18-Security-Workloads-And.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes 1.8: Security, Workloads and Feature Depth " -date: Saturday, September 29, 2017 -pagination: - enabled: true +date: 2017-09-29 +slug: kubernetes-18-security-workloads-and +url: /blog/2017/09/Kubernetes-18-Security-Workloads-And --- _Editor's note: today's post is by Aparna Sinha, Group Product Manager, Kubernetes, Google; Ihor Dvoretskyi, Developer Advocate, CNCF; Jaice Singer DuMars, Kubernetes Ambassador, Microsoft; and Caleb Miles, Technical Program Manager, CoreOS on the latest release of Kubernetes 1.8._ diff --git a/blog/_posts/2017-09-00-Kubernetes-Statefulsets-Daemonsets.md b/content/en/blog/_posts/2017-09-00-Kubernetes-Statefulsets-Daemonsets.md similarity index 99% rename from blog/_posts/2017-09-00-Kubernetes-Statefulsets-Daemonsets.md rename to content/en/blog/_posts/2017-09-00-Kubernetes-Statefulsets-Daemonsets.md index 5259970d21bae..d014efc295cf3 100644 --- a/blog/_posts/2017-09-00-Kubernetes-Statefulsets-Daemonsets.md +++ b/content/en/blog/_posts/2017-09-00-Kubernetes-Statefulsets-Daemonsets.md @@ -1,11 +1,9 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes StatefulSets & DaemonSets Updates " -date: Thursday, September 27, 2017 -pagination: - enabled: true +date: 2017-09-27 +slug: kubernetes-statefulsets-daemonsets +url: /blog/2017/09/Kubernetes-Statefulsets-Daemonsets --- Editor's note: today's post is by Janet Kuo and Kenneth Owens, Software Engineers at Google. @@ -635,9 +633,7 @@ In this section, we’re going to show you how to perform a rolling update on a To follow along with this section of the blog, you need a working Kubernetes 1.7 cluster and kubectl version 1.7 or later. If you followed along with the first section, you can use the same cluster. -## DaemonSet rolling update: Prometheus node exporters - -First, prepare the node exporter DaemonSet manifest to run a v0.13 Prometheus node exporter on every node in the cluster: +## DaemonSet rolling upFirst, prepare the node exporter DaemonSet manifest to run a v0.13 Prometheus node exporter on every node in the cluster: diff --git a/blog/_posts/2017-09-00-Windows-Networking-At-Parity-With-Linux.md b/content/en/blog/_posts/2017-09-00-Windows-Networking-At-Parity-With-Linux.md similarity index 98% rename from blog/_posts/2017-09-00-Windows-Networking-At-Parity-With-Linux.md rename to content/en/blog/_posts/2017-09-00-Windows-Networking-At-Parity-With-Linux.md index c89050dfce6b2..6f99cc5d953d5 100644 --- a/blog/_posts/2017-09-00-Windows-Networking-At-Parity-With-Linux.md +++ b/content/en/blog/_posts/2017-09-00-Windows-Networking-At-Parity-With-Linux.md @@ -1,9 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Windows Networking at Parity with Linux for Kubernetes " -date: Saturday, September 08, 2017 - +date: 2017-09-08 +slug: windows-networking-at-parity-with-linux +url: /blog/2017/09/Windows-Networking-At-Parity-With-Linux --- _**Editor's note: today's post is by Jason Messer, Principal PM Manager at Microsoft, on improvements to the Windows network stack to support the Kubernetes CNI model.**_ @@ -55,6 +54,6 @@ Kubernetes worker nodes rely on the kube-proxy to load-balance ingress network t | Kernel-Mode, Load Balancing | Not Supported | ✔ | ✔ | | Support for DNS search suffixes per Pod (Docker update) | Kube-Proxy  added multiple DNS suffixes to each request | ✔ | ✔ | | CNI Plugin Support | Not Supported | ✔ | ✔ | - {:.post-table} + The Kubernetes SIG Windows group meets bi-weekly on Tuesdays at 12:30 PM ET. To join or view notes from previous meetings, check out this [document](https://docs.google.com/document/d/1Tjxzjjuy4SQsFSUVXZbvqVb64hjNAG5CQX8bK7Yda9w/edit#heading=h.kbz22d1yc431). diff --git a/blog/_posts/2017-10-00-Enforcing-Network-Policies-In-Kubernetes.md b/content/en/blog/_posts/2017-10-00-Enforcing-Network-Policies-In-Kubernetes.md similarity index 97% rename from blog/_posts/2017-10-00-Enforcing-Network-Policies-In-Kubernetes.md rename to content/en/blog/_posts/2017-10-00-Enforcing-Network-Policies-In-Kubernetes.md index a7492e9be4774..ac981efba1095 100644 --- a/blog/_posts/2017-10-00-Enforcing-Network-Policies-In-Kubernetes.md +++ b/content/en/blog/_posts/2017-10-00-Enforcing-Network-Policies-In-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Enforcing Network Policies in Kubernetes " -date: Tuesday, October 30, 2017 -pagination: - enabled: true +date: 2017-10-30 +slug: enforcing-network-policies-in-kubernetes +url: /blog/2017/10/Enforcing-Network-Policies-In-Kubernetes --- _**Editor's note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2017/10/five-days-of-kubernetes-18.html) on what's new in Kubernetes 1.8. Today’s post comes from Ahmet Alp Balkan, Software Engineer, Google.**_ @@ -38,7 +36,7 @@ Once you install a networking plugin that implements Network Policies, you need ## Example: restricting traffic to a pod The following example of a network policy blocks all in-cluster traffic to a set of web server pods, except the pods allowed by the policy configuration. - ![](https://lh4.googleusercontent.com/e8JzhKYICOzh44sHcedjt4IRRpw2zpFNbJ2UY83fBdWYCIvFVSlHJNmIwLzIHVxrScc2eNCyv37mm903TVT9VkMuHPxe_5Hk8CvJTqGsSK7WtEDCbn1Q25S-o_kHcEiKUUl1NV9g){:.big-img} + ![](https://lh4.googleusercontent.com/e8JzhKYICOzh44sHcedjt4IRRpw2zpFNbJ2UY83fBdWYCIvFVSlHJNmIwLzIHVxrScc2eNCyv37mm903TVT9VkMuHPxe_5Hk8CvJTqGsSK7WtEDCbn1Q25S-o_kHcEiKUUl1NV9g) To achieve this setup, create a NetworkPolicy with the following manifest: diff --git a/blog/_posts/2017-10-00-Five-Days-Of-Kubernetes-18.md b/content/en/blog/_posts/2017-10-00-Five-Days-Of-Kubernetes-18.md similarity index 95% rename from blog/_posts/2017-10-00-Five-Days-Of-Kubernetes-18.md rename to content/en/blog/_posts/2017-10-00-Five-Days-Of-Kubernetes-18.md index ac875440860e4..b81582f487d50 100644 --- a/blog/_posts/2017-10-00-Five-Days-Of-Kubernetes-18.md +++ b/content/en/blog/_posts/2017-10-00-Five-Days-Of-Kubernetes-18.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Five Days of Kubernetes 1.8 " -date: Wednesday, October 24, 2017 -pagination: - enabled: true +date: 2017-10-24 +slug: five-days-of-kubernetes-18 +url: /blog/2017/10/Five-Days-Of-Kubernetes-18 --- Kubernetes 1.8 is live, made possible by hundreds of contributors pushing thousands of commits in this latest releases. diff --git a/blog/_posts/2017-10-00-It-Takes-Village-To-Raise-Kubernetes.md b/content/en/blog/_posts/2017-10-00-It-Takes-Village-To-Raise-Kubernetes.md similarity index 98% rename from blog/_posts/2017-10-00-It-Takes-Village-To-Raise-Kubernetes.md rename to content/en/blog/_posts/2017-10-00-It-Takes-Village-To-Raise-Kubernetes.md index deac67c0f756e..0883fc7547197 100644 --- a/blog/_posts/2017-10-00-It-Takes-Village-To-Raise-Kubernetes.md +++ b/content/en/blog/_posts/2017-10-00-It-Takes-Village-To-Raise-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " It Takes a Village to Raise a Kubernetes " -date: Friday, October 26, 2017 -pagination: - enabled: true +date: 2017-10-26 +slug: it-takes-village-to-raise-kubernetes +url: /blog/2017/10/It-Takes-Village-To-Raise-Kubernetes --- **_Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2017/10/five-days-of-kubernetes-18.html) on what's new in Kubernetes 1.8, written by Jaice Singer DuMars from Microsoft._** diff --git a/blog/_posts/2017-10-00-Kubeadm-V18-Released.md b/content/en/blog/_posts/2017-10-00-Kubeadm-V18-Released.md similarity index 99% rename from blog/_posts/2017-10-00-Kubeadm-V18-Released.md rename to content/en/blog/_posts/2017-10-00-Kubeadm-V18-Released.md index 07c41339b1e80..d8e24b147a492 100644 --- a/blog/_posts/2017-10-00-Kubeadm-V18-Released.md +++ b/content/en/blog/_posts/2017-10-00-Kubeadm-V18-Released.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " kubeadm v1.8 Released: Introducing Easy Upgrades for Kubernetes Clusters " -date: Thursday, October 25, 2017 -pagination: - enabled: true +date: 2017-10-25 +slug: kubeadm-v18-released +url: /blog/2017/10/Kubeadm-V18-Released --- **_Editor’s note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2017/10/five-days-of-kubernetes-18.html) on what's new in Kubernetes 1.8_** diff --git a/blog/_posts/2017-10-00-Kubernetes-Community-Steering-Committee-Election-Results.md b/content/en/blog/_posts/2017-10-00-Kubernetes-Community-Steering-Committee-Election-Results.md similarity index 94% rename from blog/_posts/2017-10-00-Kubernetes-Community-Steering-Committee-Election-Results.md rename to content/en/blog/_posts/2017-10-00-Kubernetes-Community-Steering-Committee-Election-Results.md index bbe3f7f825920..3f2573ffb126d 100644 --- a/blog/_posts/2017-10-00-Kubernetes-Community-Steering-Committee-Election-Results.md +++ b/content/en/blog/_posts/2017-10-00-Kubernetes-Community-Steering-Committee-Election-Results.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes Community Steering Committee Election Results " -date: Friday, October 05, 2017 -pagination: - enabled: true +date: 2017-10-05 +slug: kubernetes-community-steering-committee-election-results +url: /blog/2017/10/Kubernetes-Community-Steering-Committee-Election-Results --- Beginning with the announcement of Kubernetes 1.0 at OSCON in 2015, there has been a concerted effort to share the power and burden of leadership across the Kubernetes community. diff --git a/blog/_posts/2017-10-00-Request-Routing-And-Policy-Management.md b/content/en/blog/_posts/2017-10-00-Request-Routing-And-Policy-Management.md similarity index 99% rename from blog/_posts/2017-10-00-Request-Routing-And-Policy-Management.md rename to content/en/blog/_posts/2017-10-00-Request-Routing-And-Policy-Management.md index de32100f0ca7a..96003138eb48e 100644 --- a/blog/_posts/2017-10-00-Request-Routing-And-Policy-Management.md +++ b/content/en/blog/_posts/2017-10-00-Request-Routing-And-Policy-Management.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Request Routing and Policy Management with the Istio Service Mesh " -date: Wednesday, October 10, 2017 -pagination: - enabled: true +date: 2017-10-10 +slug: request-routing-and-policy-management +url: /blog/2017/10/Request-Routing-And-Policy-Management --- **_Editor's note: Today’s post by Frank Budinsky, Software Engineer, IBM, Andra Cismaru, Software Engineer, Google, and Israel Shalom, Product Manager, Google, is the second post in a three-part series on Istio. It offers a closer look at request routing and policy management._** diff --git a/blog/_posts/2017-10-00-Software-Conformance-Certification.md b/content/en/blog/_posts/2017-10-00-Software-Conformance-Certification.md similarity index 97% rename from blog/_posts/2017-10-00-Software-Conformance-Certification.md rename to content/en/blog/_posts/2017-10-00-Software-Conformance-Certification.md index a093ae28e06d3..a9f31724ff49d 100644 --- a/blog/_posts/2017-10-00-Software-Conformance-Certification.md +++ b/content/en/blog/_posts/2017-10-00-Software-Conformance-Certification.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Introducing Software Certification for Kubernetes " -date: Friday, October 19, 2017 -pagination: - enabled: true +date: 2017-10-19 +slug: software-conformance-certification +url: /blog/2017/10/Software-Conformance-Certification --- _**Editor's Note: Today's post is by William Denniss, Product Manager, Google Cloud on the new Certified Kubernetes Conformance Program.**_ diff --git a/blog/_posts/2017-10-00-Using-Rbac-Generally-Available-18.md b/content/en/blog/_posts/2017-10-00-Using-Rbac-Generally-Available-18.md similarity index 98% rename from blog/_posts/2017-10-00-Using-Rbac-Generally-Available-18.md rename to content/en/blog/_posts/2017-10-00-Using-Rbac-Generally-Available-18.md index 40f45008d9dfa..4f3f7d2b78109 100644 --- a/blog/_posts/2017-10-00-Using-Rbac-Generally-Available-18.md +++ b/content/en/blog/_posts/2017-10-00-Using-Rbac-Generally-Available-18.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Using RBAC, Generally Available in Kubernetes v1.8 " -date: Sunday, October 28, 2017 -pagination: - enabled: true +date: 2017-10-28 +slug: using-rbac-generally-available-18 +url: /blog/2017/10/Using-Rbac-Generally-Available-18 --- **_Editor's note: this post is part of a [series of in-depth articles](http://blog.kubernetes.io/2017/10/five-days-of-kubernetes-18.html) on what's new in Kubernetes 1.8. Today’s post comes from Eric Chiang, software engineer, CoreOS, and SIG-Auth co-lead._** diff --git a/blog/_posts/2017-11-00-Autoscaling-In-Kubernetes.md b/content/en/blog/_posts/2017-11-00-Autoscaling-In-Kubernetes.md similarity index 89% rename from blog/_posts/2017-11-00-Autoscaling-In-Kubernetes.md rename to content/en/blog/_posts/2017-11-00-Autoscaling-In-Kubernetes.md index 5e7dcfba06be7..9dff599f021e5 100644 --- a/blog/_posts/2017-11-00-Autoscaling-In-Kubernetes.md +++ b/content/en/blog/_posts/2017-11-00-Autoscaling-In-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Autoscaling in Kubernetes " -date: Saturday, November 17, 2017 -pagination: - enabled: true +date: 2017-11-17 +slug: autoscaling-in-kubernetes +url: /blog/2017/11/Autoscaling-In-Kubernetes --- diff --git a/blog/_posts/2017-11-00-Certified-Kubernetes-Conformance.md b/content/en/blog/_posts/2017-11-00-Certified-Kubernetes-Conformance.md similarity index 83% rename from blog/_posts/2017-11-00-Certified-Kubernetes-Conformance.md rename to content/en/blog/_posts/2017-11-00-Certified-Kubernetes-Conformance.md index 55e9e7405387b..6ae79ef267dae 100644 --- a/blog/_posts/2017-11-00-Certified-Kubernetes-Conformance.md +++ b/content/en/blog/_posts/2017-11-00-Certified-Kubernetes-Conformance.md @@ -1,13 +1,11 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Certified Kubernetes Conformance Program: Launch Celebration Round Up " -date: Friday, November 16, 2017 -pagination: - enabled: true +date: 2017-11-16 +slug: certified-kubernetes-conformance +url: /blog/2017/11/Certified-Kubernetes-Conformance --- -[![](https://1.bp.blogspot.com/-YasPeoIh8tA/Wg28rH4dzXI/AAAAAAAAAHg/Hfk2dnUoav4XMefGyjzMWdJMZbu1QJFagCK4BGAYYCw/s200/certified_kubernetes_color.png){:style="float: left;margin-left: 7px;margin-top: 7px;"}](http://1.bp.blogspot.com/-YasPeoIh8tA/Wg28rH4dzXI/AAAAAAAAAHg/Hfk2dnUoav4XMefGyjzMWdJMZbu1QJFagCK4BGAYYCw/s1600/certified_kubernetes_color.png)This week the CNCFⓇ [certified the first group](https://www.cncf.io/announcement/2017/11/13/cloud-native-computing-foundation-launches-certified-kubernetes-program-32-conformant-distributions-platforms/) of KubernetesⓇ offerings under the [Certified Kubernetes Conformance Program](https://www.cncf.io/certification/software-conformance/). These first certifications follow a [beta phase](http://blog.kubernetes.io/2017/10/software-conformance-certification.html) during which we invited participants to submit conformance results. The community response was overwhelming: CNCF certified offerings from 32 vendors! +[![](https://1.bp.blogspot.com/-YasPeoIh8tA/Wg28rH4dzXI/AAAAAAAAAHg/Hfk2dnUoav4XMefGyjzMWdJMZbu1QJFagCK4BGAYYCw/s200/certified_kubernetes_color.png)](http://1.bp.blogspot.com/-YasPeoIh8tA/Wg28rH4dzXI/AAAAAAAAAHg/Hfk2dnUoav4XMefGyjzMWdJMZbu1QJFagCK4BGAYYCw/s1600/certified_kubernetes_color.png)This week the CNCFⓇ [certified the first group](https://www.cncf.io/announcement/2017/11/13/cloud-native-computing-foundation-launches-certified-kubernetes-program-32-conformant-distributions-platforms/) of KubernetesⓇ offerings under the [Certified Kubernetes Conformance Program](https://www.cncf.io/certification/software-conformance/). These first certifications follow a [beta phase](http://blog.kubernetes.io/2017/10/software-conformance-certification.html) during which we invited participants to submit conformance results. The community response was overwhelming: CNCF certified offerings from 32 vendors! The new Certified Kubernetes Conformance Program gives enterprise organizations the confidence that workloads running on any Certified Kubernetes distribution or platform will work correctly on other Certified Kubernetes distributions or platforms. A Certified Kubernetes product guarantees that the complete Kubernetes API functions as specified, so users can rely on a seamless, stable experience. diff --git a/blog/_posts/2017-11-00-Containerd-Container-Runtime-Options-Kubernetes.md b/content/en/blog/_posts/2017-11-00-Containerd-Container-Runtime-Options-Kubernetes.md similarity index 97% rename from blog/_posts/2017-11-00-Containerd-Container-Runtime-Options-Kubernetes.md rename to content/en/blog/_posts/2017-11-00-Containerd-Container-Runtime-Options-Kubernetes.md index a890ab2d0af55..82069ed1880f9 100644 --- a/blog/_posts/2017-11-00-Containerd-Container-Runtime-Options-Kubernetes.md +++ b/content/en/blog/_posts/2017-11-00-Containerd-Container-Runtime-Options-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Containerd Brings More Container Runtime Options for Kubernetes " -date: Friday, November 02, 2017 -pagination: - enabled: true +date: 2017-11-02 +slug: containerd-container-runtime-options-kubernetes +url: /blog/2017/11/Containerd-Container-Runtime-Options-Kubernetes --- **_Editor's note: Today's post is by Lantao Liu, Software Engineer at Google, and Mike Brown, Open Source Developer Advocate at IBM._** @@ -36,7 +34,7 @@ Containerd has a much smaller scope than Docker, provides a golang client API, a | Persistent Container Logging | Out, No persistent container log. Container STDIO is provided as FIFOs, which can be redirected/decorated as is required. | Kubernetes has specific requirements for persistent container logs, such as format and path etc. Container runtimes should not  persist an unmanageable container log. (✔️) | | Metrics | In Containerd provides container and snapshot metrics as part of the API. | Kubernetes expects container runtime to provide container metrics (CPU, Memory, writable layer size, etc.) and image filesystem usage (disk, inode usage, etc.). (✔️) | Overall, from a technical perspective, containerd is a very good alternative container runtime for Kubernetes.| -{:.post-table} + @@ -45,7 +43,7 @@ Overall, from a technical perspective, containerd is a very good alternative con [Cri-containerd](https://github.com/kubernetes-incubator/cri-containerd) is exactly that: an implementation of CRI for containerd. It operates on the same node as the Kubelet and containerd. Layered between Kubernetes and containerd, cri-containerd handles all CRI service requests from the Kubelet and uses containerd to manage containers and container images. Cri-containerd manages these service requests in part by forming containerd service requests while adding sufficient additional function to support the CRI requirements. - ![](https://lh6.googleusercontent.com/4NGAPzwhkL0GTNjkAEFN9iWX_Wc0ZE-AZxAxEw4E5aOntuGmv764b3ZYQUyapSnP9BrlUs2rUyo5kiCrj5QuiMHw3-dz2vPUDma029Qt3tej9QABEHFSsOBsq6LjLfFhTBgMhAAc){:.big-img} + ![](https://lh6.googleusercontent.com/4NGAPzwhkL0GTNjkAEFN9iWX_Wc0ZE-AZxAxEw4E5aOntuGmv764b3ZYQUyapSnP9BrlUs2rUyo5kiCrj5QuiMHw3-dz2vPUDma029Qt3tej9QABEHFSsOBsq6LjLfFhTBgMhAAc) Compared with the current Docker CRI implementation ([dockershim](https://github.com/kubernetes/kubernetes/tree/master/pkg/kubelet/dockershim)), cri-containerd eliminates an extra hop in the stack, making the stack more stable and efficient. @@ -54,7 +52,7 @@ Compared with the current Docker CRI implementation ([dockershim](https://github ## Architecture Cri-containerd uses containerd to manage the full container lifecycle and all container images. As also shown below, cri-containerd manages pod networking via [CNI](https://github.com/containernetworking/cni) (another CNCF project). - ![](https://lh5.googleusercontent.com/sfkhKO3jiLZ9_TtPpxTsKxkbe1KHg1nrfqkbJYrjN2DbNQE_y31NJVSyDIXe0oQjSwVcQ4gFCyr1MZ9_V4GZuuiHwuU3Pq6ldpRhcRiiuTJaRVuezPK9KFLKovP8mQ6sXTYF_eru){:.big-img} + ![](https://lh5.googleusercontent.com/sfkhKO3jiLZ9_TtPpxTsKxkbe1KHg1nrfqkbJYrjN2DbNQE_y31NJVSyDIXe0oQjSwVcQ4gFCyr1MZ9_V4GZuuiHwuU3Pq6ldpRhcRiiuTJaRVuezPK9KFLKovP8mQ6sXTYF_eru) Let’s use an example to demonstrate how cri-containerd works for the case when Kubelet creates a single-container pod: diff --git a/blog/_posts/2017-11-00-Kubernetes-Easy-Way.md b/content/en/blog/_posts/2017-11-00-Kubernetes-Easy-Way.md similarity index 98% rename from blog/_posts/2017-11-00-Kubernetes-Easy-Way.md rename to content/en/blog/_posts/2017-11-00-Kubernetes-Easy-Way.md index 0c0ee88077fec..6a718be92f085 100644 --- a/blog/_posts/2017-11-00-Kubernetes-Easy-Way.md +++ b/content/en/blog/_posts/2017-11-00-Kubernetes-Easy-Way.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes the Easy Way " -date: Thursday, November 01, 2017 -pagination: - enabled: true +date: 2017-11-01 +slug: kubernetes-easy-way +url: /blog/2017/11/Kubernetes-Easy-Way --- **_Editor's note: Today's post is by Dan Garfield, VP of Marketing at Codefresh, on how to set up and easily deploy a Kubernetes cluster._** @@ -98,7 +96,7 @@ Think of namespaces as acting a bit like VLANs on a Kubernetes cluster. Each nam You can use the [demo application I mentioned earlier](https://github.com/containers101/demochat) that has a Node.js frontend with a MongoDB. - ![](https://lh4.googleusercontent.com/YzQzEdIMwWt3lGR9Q4RTELvaB_fYYo2QKqkeXhfTCDnIVX4FBx_quYNgAbo6Wc_wpk0anl7Co3RDwDWnrOyibog9V9DISOZYQqiFE9T4ErlDYuqOGWiRw3-zk4p4WcURaOVg3Dkn){: .big-img} + ![](https://lh4.googleusercontent.com/YzQzEdIMwWt3lGR9Q4RTELvaB_fYYo2QKqkeXhfTCDnIVX4FBx_quYNgAbo6Wc_wpk0anl7Co3RDwDWnrOyibog9V9DISOZYQqiFE9T4ErlDYuqOGWiRw3-zk4p4WcURaOVg3Dkn) Here’s the info we need to pass: diff --git a/blog/_posts/2017-11-00-Kubernetes-Is-Still-Hard-For-Developers.md b/content/en/blog/_posts/2017-11-00-Kubernetes-Is-Still-Hard-For-Developers.md similarity index 72% rename from blog/_posts/2017-11-00-Kubernetes-Is-Still-Hard-For-Developers.md rename to content/en/blog/_posts/2017-11-00-Kubernetes-Is-Still-Hard-For-Developers.md index d5086b6173649..618e30208b21e 100644 --- a/blog/_posts/2017-11-00-Kubernetes-Is-Still-Hard-For-Developers.md +++ b/content/en/blog/_posts/2017-11-00-Kubernetes-Is-Still-Hard-For-Developers.md @@ -1,16 +1,14 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes is Still Hard (for Developers) " -date: Thursday, November 15, 2017 -pagination: - enabled: true +date: 2017-11-15 +slug: kubernetes-is-still-hard-for-developers +url: /blog/2017/11/Kubernetes-Is-Still-Hard-For-Developers --- Kubernetes has made the Ops experience much easier, but how does the developer experience compare? Ops teams can deploy a Kubernetes cluster in a matter of minutes. But developers need to understand a host of new concepts before beginning to work with Kubernetes. This can be a tedious and manual process, but it doesn’t have to be. In this talk, [Michelle Noorali](https://twitter.com/michellenoorali), co-lead of SIG-Apps, reimagines the Kubernetes developer experience. She shares her top 3 tips for building a successful developer experience including: -1. {:.blog-content} A framework for thinking about cloud native applications -2. {:.blog-content} An integrated experience for debugging and fine-tuning cloud native applicationsA way to get a cloud native application out the door quickly +1. A framework for thinking about cloud native applications +2. An integrated experience for debugging and fine-tuning cloud native applicationsA way to get a cloud native application out the door quickly Interested in learning how far the Kubernetes developer experience has come? Join us at KubeCon in Austin on December 6-8. [Register Now \>\>](https://goo.gl/TK9ET3) [Check out Michelle’s keynote](http://sched.co/CUCC) to learn about exciting new updates from CNCF projects. diff --git a/blog/_posts/2017-11-00-Securing-Software-Supply-Chain-Grafeas.md b/content/en/blog/_posts/2017-11-00-Securing-Software-Supply-Chain-Grafeas.md similarity index 98% rename from blog/_posts/2017-11-00-Securing-Software-Supply-Chain-Grafeas.md rename to content/en/blog/_posts/2017-11-00-Securing-Software-Supply-Chain-Grafeas.md index 84f1f29144e7f..aa657b2f3cc99 100644 --- a/blog/_posts/2017-11-00-Securing-Software-Supply-Chain-Grafeas.md +++ b/content/en/blog/_posts/2017-11-00-Securing-Software-Supply-Chain-Grafeas.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Securing Software Supply Chain with Grafeas " -date: Saturday, November 03, 2017 -pagination: - enabled: true +date: 2017-11-03 +slug: securing-software-supply-chain-grafeas +url: /blog/2017/11/Securing-Software-Supply-Chain-Grafeas --- **_Editor's note: This post is written by Kelsey Hightower, Staff Developer Advocate at Google, and Sandra Guo, Product Manager at Google._** diff --git a/blog/_posts/2017-12-00-Introducing-Kubeflow-Composable.md b/content/en/blog/_posts/2017-12-00-Introducing-Kubeflow-Composable.md similarity index 98% rename from blog/_posts/2017-12-00-Introducing-Kubeflow-Composable.md rename to content/en/blog/_posts/2017-12-00-Introducing-Kubeflow-Composable.md index 94f335908af97..95a1cda4d4b0a 100644 --- a/blog/_posts/2017-12-00-Introducing-Kubeflow-Composable.md +++ b/content/en/blog/_posts/2017-12-00-Introducing-Kubeflow-Composable.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Introducing Kubeflow - A Composable, Portable, Scalable ML Stack Built for Kubernetes " -date: Friday, December 21, 2017 -pagination: - enabled: true +date: 2017-12-21 +slug: introducing-kubeflow-composable +url: /blog/2017/12/Introducing-Kubeflow-Composable --- **_Today’s post is by David Aronchick and Jeremy Lewi, a PM and Engineer on the Kubeflow project, a new open source Github repo dedicated to making using machine learning (ML) stacks on Kubernetes easy, fast and extensible._** diff --git a/blog/_posts/2017-12-00-Kubernetes-19-Workloads-Expanded-Ecosystem.md b/content/en/blog/_posts/2017-12-00-Kubernetes-19-Workloads-Expanded-Ecosystem.md similarity index 98% rename from blog/_posts/2017-12-00-Kubernetes-19-Workloads-Expanded-Ecosystem.md rename to content/en/blog/_posts/2017-12-00-Kubernetes-19-Workloads-Expanded-Ecosystem.md index e7ce90c779ee4..77a5b24bee0f6 100644 --- a/blog/_posts/2017-12-00-Kubernetes-19-Workloads-Expanded-Ecosystem.md +++ b/content/en/blog/_posts/2017-12-00-Kubernetes-19-Workloads-Expanded-Ecosystem.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Kubernetes 1.9: Apps Workloads GA and Expanded Ecosystem " -date: Saturday, December 15, 2017 -pagination: - enabled: true +date: 2017-12-15 +slug: kubernetes-19-workloads-expanded-ecosystem +url: /blog/2017/12/Kubernetes-19-Workloads-Expanded-Ecosystem --- We’re pleased to announce the delivery of Kubernetes 1.9, our fourth and final release this year. diff --git a/blog/_posts/2017-12-00-Paddle-Paddle-Fluid-Elastic-Learning.md b/content/en/blog/_posts/2017-12-00-Paddle-Paddle-Fluid-Elastic-Learning.md similarity index 98% rename from blog/_posts/2017-12-00-Paddle-Paddle-Fluid-Elastic-Learning.md rename to content/en/blog/_posts/2017-12-00-Paddle-Paddle-Fluid-Elastic-Learning.md index 74e331d1fd358..bc7925da24b74 100644 --- a/blog/_posts/2017-12-00-Paddle-Paddle-Fluid-Elastic-Learning.md +++ b/content/en/blog/_posts/2017-12-00-Paddle-Paddle-Fluid-Elastic-Learning.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " PaddlePaddle Fluid: Elastic Deep Learning on Kubernetes " -date: Thursday, December 06, 2017 -pagination: - enabled: true +date: 2017-12-06 +slug: paddle-paddle-fluid-elastic-learning +url: /blog/2017/12/Paddle-Paddle-Fluid-Elastic-Learning --- _Editor's note: Today's post is a joint post from the deep learning team at Baidu and the etcd team at CoreOS._ diff --git a/blog/_posts/2017-12-00-Using-Ebpf-In-Kubernetes.md b/content/en/blog/_posts/2017-12-00-Using-Ebpf-In-Kubernetes.md similarity index 98% rename from blog/_posts/2017-12-00-Using-Ebpf-In-Kubernetes.md rename to content/en/blog/_posts/2017-12-00-Using-Ebpf-In-Kubernetes.md index f17a87bacfa59..4d73ff001aa93 100644 --- a/blog/_posts/2017-12-00-Using-Ebpf-In-Kubernetes.md +++ b/content/en/blog/_posts/2017-12-00-Using-Ebpf-In-Kubernetes.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: Using eBPF in Kubernetes -date: Friday, December 07, 2017 -pagination: - enabled: true +date: 2017-12-07 +slug: using-ebpf-in-kubernetes +url: /blog/2017/12/Using-Ebpf-In-Kubernetes --- ## Introduction @@ -43,7 +41,7 @@ The Cilium Agent runs on each host. Instead of managing IP tables, it translates This diagram shows how the Cilium project works: - ![](https://lh4.googleusercontent.com/Xe8qee5yYsJton2NHFLOhHevxdbpCHHPPgttOLP18ZWtoUJp9ChFKtKJiTxqNFn8zQPRJu4BdtG7xc24vlGkD2gtfbkCuHq_eU3Tx6z2m6ld4iYGEZv-MsSCcJ3jAcJO2HkMc_d_){:.big-img} + ![](https://lh4.googleusercontent.com/Xe8qee5yYsJton2NHFLOhHevxdbpCHHPPgttOLP18ZWtoUJp9ChFKtKJiTxqNFn8zQPRJu4BdtG7xc24vlGkD2gtfbkCuHq_eU3Tx6z2m6ld4iYGEZv-MsSCcJ3jAcJO2HkMc_d_) Depending on what network rules are applied, BPF programs may be attached with [tc](http://man7.org/linux/man-pages/man8/tc.8.html) or [XDP](https://www.iovisor.org/technology/xdp). By using XDP, Cilium can attach the BPF programs at the lowest possible point, which is also the most performant point in the networking software stack. diff --git a/blog/_posts/2018-01-00-Core-Workloads-Api-Ga.md b/content/en/blog/_posts/2018-01-00-Core-Workloads-Api-Ga.md similarity index 99% rename from blog/_posts/2018-01-00-Core-Workloads-Api-Ga.md rename to content/en/blog/_posts/2018-01-00-Core-Workloads-Api-Ga.md index c8519b54327d1..d7402f56469cd 100644 --- a/blog/_posts/2018-01-00-Core-Workloads-Api-Ga.md +++ b/content/en/blog/_posts/2018-01-00-Core-Workloads-Api-Ga.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: "Core Workloads API GA" -date: Tuesday, January 15, 2018 -pagination: - enabled: true +date: 2018-01-15 +slug: core-workloads-api-ga +url: /blog/2018/01/Core-Workloads-Api-Ga --- ## DaemonSet, Deployment, ReplicaSet, and StatefulSet are GA diff --git a/blog/_posts/2018-01-00-Extensible-Admission-Is-Beta.md b/content/en/blog/_posts/2018-01-00-Extensible-Admission-Is-Beta.md similarity index 98% rename from blog/_posts/2018-01-00-Extensible-Admission-Is-Beta.md rename to content/en/blog/_posts/2018-01-00-Extensible-Admission-Is-Beta.md index e64a340975a2b..0a05159e68766 100644 --- a/blog/_posts/2018-01-00-Extensible-Admission-Is-Beta.md +++ b/content/en/blog/_posts/2018-01-00-Extensible-Admission-Is-Beta.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: "Extensible Admission is Beta" -date: Friday, January 11, 2018 -pagination: - enabled: true +date: 2018-01-11 +slug: extensible-admission-is-beta +url: /blog/2018/01/Extensible-Admission-Is-Beta --- In this post we review a feature, available in the Kubernetes API server, that allows you to implement arbitrary control decisions and which has matured considerably in Kubernetes 1.9. @@ -118,7 +116,7 @@ If you build your webhook admission server to also be an extension API server, i - Your extension API servers and kube-apiserver automatically (without any config) make use of their in-cluster credentials to communicate with the webhook. - Extension API servers do not leak their service account token to your webhook because they go through kube-apiserver, which is a secure front proxy. - ![](https://lh6.googleusercontent.com/FeXoJLmbhf5exSBQu6Wxd2sIEqzkKPbRA_iv6T2QmJbhRsO4FyPtgAAbHdAmuTrE0jVEUzftfxcPndN8ACzstfsX9XTFdQFrioS1srvYgVP3l99R6x-vvd3RfBA4eWttaKRWj6iA){:.big-img} + ![](https://lh6.googleusercontent.com/FeXoJLmbhf5exSBQu6Wxd2sIEqzkKPbRA_iv6T2QmJbhRsO4FyPtgAAbHdAmuTrE0jVEUzftfxcPndN8ACzstfsX9XTFdQFrioS1srvYgVP3l99R6x-vvd3RfBA4eWttaKRWj6iA) _Source: [https://drive.google.com/a/redhat.com/file/d/12nC9S2fWCbeX\_P8nrmL6NgOSIha4HDNp](https://drive.google.com/a/redhat.com/file/d/12nC9S2fWCbeX_P8nrmL6NgOSIha4HDNp)_ In short: a secure topology makes use of all security mechanisms of API server aggregation and additionally requires no additional configuration. diff --git a/blog/_posts/2018-01-00-Five-Days-Of-Kubernetes-19.md b/content/en/blog/_posts/2018-01-00-Five-Days-Of-Kubernetes-19.md similarity index 94% rename from blog/_posts/2018-01-00-Five-Days-Of-Kubernetes-19.md rename to content/en/blog/_posts/2018-01-00-Five-Days-Of-Kubernetes-19.md index 388caa93ac1a2..1da5e44b6ffc7 100644 --- a/blog/_posts/2018-01-00-Five-Days-Of-Kubernetes-19.md +++ b/content/en/blog/_posts/2018-01-00-Five-Days-Of-Kubernetes-19.md @@ -1,10 +1,8 @@ --- -layout: blog -permalink: /blog/:year/:month/:title title: " Five Days of Kubernetes 1.9 " -date: Tuesday, January 08, 2018 -pagination: - enabled: true +date: 2018-01-08 +slug: five-days-of-kubernetes-19 +url: /blog/2018/01/Five-Days-Of-Kubernetes-19 --- Kubernetes 1.9 is live, made possible by hundreds of contributors pushing thousands of commits in this latest releases. diff --git a/blog/_posts/2018-01-00-Introducing-Client-Go-Version-6.md b/content/en/blog/_posts/2018-01-00-Introducing-Client-Go-Version-6.md similarity index 99% rename from blog/_posts/2018-01-00-Introducing-Client-Go-Version-6.md rename to content/en/blog/_posts/2018-01-00-Introducing-Client-Go-Version-6.md index 36ebb8c6daa04..66f37dfffb88b 100644 --- a/blog/_posts/2018-01-00-Introducing-Client-Go-Version-6.md +++ b/content/en/blog/_posts/2018-01-00-Introducing-Client-Go-Version-6.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: "Introducing client-go version 6" -date: Saturday, January 12, 2018 -pagination: - enabled: true +date: 2018-01-12 +slug: introducing-client-go-version-6 +url: /blog/2018/01/Introducing-Client-Go-Version-6 --- The Kubernetes API server [exposes a REST interface](https://blog.openshift.com/tag/api-server/) consumable by any client. [client-go](https://github.com/kubernetes/client-go) is the official client library for the Go programming language. It is used both internally by Kubernetes itself (for example, inside kubectl) as well as by [numerous external consumers](https://github.com/search?q=k8s.io%2Fclient-go&type=Code&utf8=%E2%9C%93):operators like the [etcd-operator](https://github.com/coreos/etcd-operator) or [prometheus-operator;](https://github.com/coreos/prometheus-operator)higher level frameworks like [KubeLess](https://github.com/kubeless/kubeless) and [OpenShift](https://openshift.io/); and many more. diff --git a/blog/_posts/2018-01-00-Introducing-Container-Storage-Interface.md b/content/en/blog/_posts/2018-01-00-Introducing-Container-Storage-Interface.md similarity index 99% rename from blog/_posts/2018-01-00-Introducing-Container-Storage-Interface.md rename to content/en/blog/_posts/2018-01-00-Introducing-Container-Storage-Interface.md index b69c33061353f..a50e30ac46055 100644 --- a/blog/_posts/2018-01-00-Introducing-Container-Storage-Interface.md +++ b/content/en/blog/_posts/2018-01-00-Introducing-Container-Storage-Interface.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: " Introducing Container Storage Interface (CSI) Alpha for Kubernetes " -date: Thursday, January 10, 2018 -pagination: - enabled: true +date: 2018-01-10 +slug: introducing-container-storage-interface +url: /blog/2018/01/Introducing-Container-Storage-Interface --- One of the key differentiators for Kubernetes has been a powerful [volume plugin system](https://kubernetes.io/docs/concepts/storage/volumes/) that enables many different types of storage systems to: diff --git a/blog/_posts/2018-01-00-Kubernetes-V19-Beta-Windows-Support.md b/content/en/blog/_posts/2018-01-00-Kubernetes-V19-Beta-Windows-Support.md similarity index 98% rename from blog/_posts/2018-01-00-Kubernetes-V19-Beta-Windows-Support.md rename to content/en/blog/_posts/2018-01-00-Kubernetes-V19-Beta-Windows-Support.md index dde9cb8c91272..537f434c947fc 100644 --- a/blog/_posts/2018-01-00-Kubernetes-V19-Beta-Windows-Support.md +++ b/content/en/blog/_posts/2018-01-00-Kubernetes-V19-Beta-Windows-Support.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: Kubernetes v1.9 releases beta support for Windows Server Containers -date: Wednesday, January 09, 2018 -pagination: - enabled: true +date: 2018-01-09 +slug: kubernetes-v19-beta-windows-support +url: /blog/2018/01/Kubernetes-V19-Beta-Windows-Support --- With the release of Kubernetes v1.9, our mission of ensuring Kubernetes works well everywhere and for everyone takes a great step forward. We’ve advanced support for Windows Server to beta along with continued feature and functional advancements on both the Kubernetes and Windows platforms. SIG-Windows has been working since March of 2016 to open the door for many Windows-specific applications and workloads to run on Kubernetes, significantly expanding the implementation scenarios and the enterprise reach of Kubernetes. diff --git a/blog/_posts/2018-01-00-Reporting-Errors-Using-Kubernetes-Events.md b/content/en/blog/_posts/2018-01-00-Reporting-Errors-Using-Kubernetes-Events.md similarity index 97% rename from blog/_posts/2018-01-00-Reporting-Errors-Using-Kubernetes-Events.md rename to content/en/blog/_posts/2018-01-00-Reporting-Errors-Using-Kubernetes-Events.md index d73c161ad88ce..213bf4cc290cf 100644 --- a/blog/_posts/2018-01-00-Reporting-Errors-Using-Kubernetes-Events.md +++ b/content/en/blog/_posts/2018-01-00-Reporting-Errors-Using-Kubernetes-Events.md @@ -1,11 +1,9 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: "Reporting Errors from Control Plane to Applications Using Kubernetes Events" -date: Friday, January 25, 2018 +date: 2018-01-25 published: true -pagination: - enabled: true +slug: reporting-errors-using-kubernetes-events +url: /blog/2018/01/Reporting-Errors-Using-Kubernetes-Events --- At [Box](https://www.box.com/), we manage several large scale Kubernetes clusters that serve as an internal platform as a service (PaaS) for hundreds of deployed microservices. The majority of those microservices are applications that power box.com for over 80,000 customers. The PaaS team also deploys several services affiliated with the platform infrastructure as the _control plane_. @@ -13,7 +11,7 @@ At [Box](https://www.box.com/), we manage several large scale Kubernetes cluster One use case of Box’s control plane is [public key infrastructure](https://en.wikipedia.org/wiki/Public_key_infrastructure) (_PKI_) processing. In our infrastructure, applications needing a new SSL certificate also need to trigger some processing in the control plane. The majority of our applications are not allowed to generate new SSL certificates due to security reasons. The control plane has a different security boundary and network access, and is therefore allowed to generate certificates. -| ![](https://docs.google.com/a/linuxfoundation.org/drawings/d/snd-Vdn8h65V5wEBwU0KIqg/image?w=624&h=554&rev=303&ac=1){: .big-img} | +| ![](https://docs.google.com/a/linuxfoundation.org/drawings/d/snd-Vdn8h65V5wEBwU0KIqg/image?w=624&h=554&rev=303&ac=1) | | Figure1: Block Diagram of the PKI flow | diff --git a/blog/_posts/2018-03-00-Apache-Spark-23-With-Native-Kubernetes.md b/content/en/blog/_posts/2018-03-00-Apache-Spark-23-With-Native-Kubernetes.md similarity index 98% rename from blog/_posts/2018-03-00-Apache-Spark-23-With-Native-Kubernetes.md rename to content/en/blog/_posts/2018-03-00-Apache-Spark-23-With-Native-Kubernetes.md index df73314fa00d7..091c40316c72c 100644 --- a/blog/_posts/2018-03-00-Apache-Spark-23-With-Native-Kubernetes.md +++ b/content/en/blog/_posts/2018-03-00-Apache-Spark-23-With-Native-Kubernetes.md @@ -1,8 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: "Apache Spark 2.3 with Native Kubernetes Support" -date: Tuesday, March 6, 2018 +date: 2018-03-06 +slug: apache-spark-23-with-native-kubernetes +url: /blog/2018/03/Apache-Spark-23-With-Native-Kubernetes --- ### Kubernetes and Big Data diff --git a/blog/_posts/2018-03-00-Expanding-User-Support-With-Office-Hours.md b/content/en/blog/_posts/2018-03-00-Expanding-User-Support-With-Office-Hours.md similarity index 97% rename from blog/_posts/2018-03-00-Expanding-User-Support-With-Office-Hours.md rename to content/en/blog/_posts/2018-03-00-Expanding-User-Support-With-Office-Hours.md index 1a696ef743355..2373eaa237404 100644 --- a/blog/_posts/2018-03-00-Expanding-User-Support-With-Office-Hours.md +++ b/content/en/blog/_posts/2018-03-00-Expanding-User-Support-With-Office-Hours.md @@ -1,10 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: "Expanding User Support with Office Hours" -date: Wednesday, March 14, 2018 -pagination: - enabled: true +date: 2018-03-14 +slug: expanding-user-support-with-office-hours +url: /blog/2018/03/Expanding-User-Support-With-Office-Hours --- **Today's post is by [Jorge Castro](https://twitter.com/castrojo) and [Ilya Dmitichenko](https://twitter.com/errordeveloper) on Kubernetes office hours.** diff --git a/blog/_posts/2018-03-00-First-Beta-Version-Of-Kubernetes-1-10.md b/content/en/blog/_posts/2018-03-00-First-Beta-Version-Of-Kubernetes-1-10.md similarity index 99% rename from blog/_posts/2018-03-00-First-Beta-Version-Of-Kubernetes-1-10.md rename to content/en/blog/_posts/2018-03-00-First-Beta-Version-Of-Kubernetes-1-10.md index febc7541a2dd8..a2df08a6ba9b8 100644 --- a/blog/_posts/2018-03-00-First-Beta-Version-Of-Kubernetes-1-10.md +++ b/content/en/blog/_posts/2018-03-00-First-Beta-Version-Of-Kubernetes-1-10.md @@ -1,8 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: "Kubernetes: First Beta Version of Kubernetes 1.10 is Here" -date: Friday, March 2, 2018 +date: 2018-03-02 +slug: first-beta-version-of-kubernetes-1-10 +url: /blog/2018/03/First-Beta-Version-Of-Kubernetes-1-10 --- **Editor's note: Today's post is by Nick Chase. Nick is Head of Content at [Mirantis][1].** diff --git a/blog/_posts/2018-03-00-How-To-Integrate-Rollingupdate-Strategy.md b/content/en/blog/_posts/2018-03-00-How-To-Integrate-Rollingupdate-Strategy.md similarity index 96% rename from blog/_posts/2018-03-00-How-To-Integrate-Rollingupdate-Strategy.md rename to content/en/blog/_posts/2018-03-00-How-To-Integrate-Rollingupdate-Strategy.md index be3beaf35980f..fa2279ec70c08 100644 --- a/blog/_posts/2018-03-00-How-To-Integrate-Rollingupdate-Strategy.md +++ b/content/en/blog/_posts/2018-03-00-How-To-Integrate-Rollingupdate-Strategy.md @@ -1,8 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: "How to Integrate RollingUpdate Strategy for TPR in Kubernetes" -date: Tuesday, March 13, 2018 +date: 2018-03-13 +slug: how-to-integrate-rollingupdate-strategy +url: /blog/2018/03/How-To-Integrate-Rollingupdate-Strategy --- With Kubernetes, it's easy to manage and scale stateless applications like web apps and API services right out of the box. To date, almost all of the talks about Kubernetes has been about microservices and stateless applications. @@ -22,7 +22,7 @@ Let's demonstrate how to manage a MySQL sharding cluster. MySQL Sharding Cluster is a scale-out database architecture. Based on the hash algorithm, the architecture distributes data across all the shards of the cluster. Sharding is entirely transparent to clients: Proxy is able to connect to any Shards in the cluster and issue queries to the correct shards directly. | ----- | -| ![][1]{: .big-img} | +| ![][1] | | Note: Each shard corresponds to a single MySQL instance. Currently, WQ-RDS supports a maximum of 64 shards. @@ -91,11 +91,11 @@ WQ-RDS handles MySQL instance crashes while protecting against data loss. When killing clustershard-c0, WQ-RDS will detect that clustershard-c0 is unavailable and replace clustershard-c0 on failed machine, taking about 35 seconds on average. -![][2]{:.big-img} +![][2] zero data loss at same time. -![][3]{:.big-img} +![][3] ### Feature : RollingUpdate Strategy @@ -130,7 +130,7 @@ Because TPR (currently CRD) does not support the rolling upgrade strategy, we ne * **MySQL Sharding Cluster has ****changed**: Each StatefulSet has its corresponding ControllerRevision, which records all the revision data and order (like git). Whenever StatefulSet is syncing, StatefulSet Controller will firstly compare it's spec to the latest corresponding ControllerRevision data (similar to git diff). If changed, a new ControllerrRevision will be generated, and the revision number will be incremented by 1. WQ-RDS borrows the process, MySQL Sharding Cluster object will record all the revision and order in ControllerRevision. * **How to initialize MySQL Sharding Cluster to meet request ****replicas**: Statefulset supports two [Pod management policies][4]: Parallel and OrderedReady. Because MySQL Sharding Cluster doesn't require ordered creation for its initial processes, we use the Parallel policy to accelerate the initialization of the cluster. * **How to perform a Rolling ****Upgrade**: Statefulset recreates pods in strictly decreasing order. The difference is that WQ-RDS updates shards instead of recreating them, as shown below: -![][6]{: .big-img} +![][6] * **When RollingUpdate ends**: Kubernetes signals termination clearly. A rolling update completes when all of a set's Pods have been updated to the updateRevision. The status's currentRevision is set to updateRevision and its updateRevision is set to the empty string. The status's currentReplicas is set to updateReplicas and its updateReplicas are set to 0. @@ -208,25 +208,25 @@ Finally, We can now update "clustershard-c" to update configuration "innodb_buff The process takes 480 seconds. -![][7]{: .big-img} +![][7] The upgrade is in monotonically decreasing manner: -![][8]{: .big-img} +![][8] -![][9]{: .big-img} +![][9] -![][10]{: .big-img} +![][10] -![][11]{: .big-img} +![][11] -![][12]{: .big-img} +![][12] -![][13]{: .big-img} +![][13] -![][14]{: .big-img} +![][14] -![][15]{: .big-img} +![][15] ### Conclusion diff --git a/blog/_posts/2018-03-00-Principles-Of-Container-App-Design.md b/content/en/blog/_posts/2018-03-00-Principles-Of-Container-App-Design.md similarity index 96% rename from blog/_posts/2018-03-00-Principles-Of-Container-App-Design.md rename to content/en/blog/_posts/2018-03-00-Principles-Of-Container-App-Design.md index 54ec6aad78304..ef5ea7b9b3194 100644 --- a/blog/_posts/2018-03-00-Principles-Of-Container-App-Design.md +++ b/content/en/blog/_posts/2018-03-00-Principles-Of-Container-App-Design.md @@ -1,8 +1,8 @@ --- -permalink: /blog/:year/:month/:title -layout: blog title: "Principles of Container-based Application Design" -date: Thursday, March 15, 2018 +date: 2018-03-15 +slug: principles-of-container-app-design +url: /blog/2018/03/Principles-Of-Container-App-Design --- It's possible nowadays to put almost any application in a container and run it. Creating cloud-native applications, however—containerized applications that are automated and orchestrated effectively by a cloud-native platform such as Kubernetes—requires additional effort. Cloud-native applications anticipate failure; they run and scale reliably even when their infrastructure experiences outages. To offer such capabilities, cloud-native platforms like Kubernetes impose a set of contracts and constraints on applications. These contracts ensure that applications they run conform to certain constraints and allow the platform to automate application management. @@ -10,7 +10,7 @@ It's possible nowadays to put almost any application in a container and run it. I've outlined [seven principles][1]for containerized applications to follow in order to be fully cloud-native. | ----- | -| ![][2]{: .big-img} | +| ![][2] | | Container Design Principles | diff --git a/blog/_posts/2018-03-26-kubernetes-1.10-stabilizing-storage-security-networking.md b/content/en/blog/_posts/2018-03-26-kubernetes-1.10-stabilizing-storage-security-networking.md similarity index 99% rename from blog/_posts/2018-03-26-kubernetes-1.10-stabilizing-storage-security-networking.md rename to content/en/blog/_posts/2018-03-26-kubernetes-1.10-stabilizing-storage-security-networking.md index eca9fa9ee0a2c..0611b4406e0e4 100644 --- a/blog/_posts/2018-03-26-kubernetes-1.10-stabilizing-storage-security-networking.md +++ b/content/en/blog/_posts/2018-03-26-kubernetes-1.10-stabilizing-storage-security-networking.md @@ -1,12 +1,11 @@ --- -layout: blog title: 'Kubernetes 1.10: Stabilizing Storage, Security, and Networking ' -date: '2018-03-26T17:20:00.000-07:00' author: kbarnard tags: modified_time: '2018-03-27T11:01:39.569-07:00' blogger_id: tag:blogger.com,1999:blog-112706738355446097.post-6519705795358457586 blogger_orig_url: http://blog.kubernetes.io/2018/03/kubernetes-1.10-stabilizing-storage-security-networking.html +slug: kubernetes-1.10-stabilizing-storage-security-networking --- ***Editor's note: today's post is by the [1.10 Release diff --git a/blog/_posts/2018-04-04-fixing-subpath-volume-vulnerability.md b/content/en/blog/_posts/2018-04-04-fixing-subpath-volume-vulnerability.md similarity index 99% rename from blog/_posts/2018-04-04-fixing-subpath-volume-vulnerability.md rename to content/en/blog/_posts/2018-04-04-fixing-subpath-volume-vulnerability.md index 5bb3eb9066fb4..9dd1a4759cbc6 100644 --- a/blog/_posts/2018-04-04-fixing-subpath-volume-vulnerability.md +++ b/content/en/blog/_posts/2018-04-04-fixing-subpath-volume-vulnerability.md @@ -1,7 +1,7 @@ --- -layout: blog title: Fixing the Subpath Volume Vulnerability in Kubernetes -date: Wednesday, April 4, 2018 +date: 2018-04-04 +slug: fixing-subpath-volume-vulnerability --- On March 12, 2018, the Kubernetes Product Security team disclosed [CVE-2017-1002101](https://issue.k8s.io/60813), which allowed containers using [subpath](https://kubernetes.io/docs/concepts/storage/volumes/#using-subpath) volume mounts to access files outside of the volume. This means that a container could access any file available on the host, including volumes for other containers that it should not have access to. diff --git a/blog/_posts/2018-04-10-container-storage-interface-beta.md b/content/en/blog/_posts/2018-04-10-container-storage-interface-beta.md similarity index 99% rename from blog/_posts/2018-04-10-container-storage-interface-beta.md rename to content/en/blog/_posts/2018-04-10-container-storage-interface-beta.md index 6636d5e90d14b..00ca84654c684 100644 --- a/blog/_posts/2018-04-10-container-storage-interface-beta.md +++ b/content/en/blog/_posts/2018-04-10-container-storage-interface-beta.md @@ -1,7 +1,7 @@ --- -layout: blog title: Container Storage Interface (CSI) for Kubernetes Goes Beta -date: Tuesday, April 10, 2018 +date: 2018-04-10 +slug: container-storage-interface-beta --- ![Kubernetes Logo](/images/blog-logging/2018-04-10-container-storage-interface-beta/csi-kubernetes.png) diff --git a/blog/_posts/2018-04-11-migrating-the-kubernetes-blog.md b/content/en/blog/_posts/2018-04-11-migrating-the-kubernetes-blog.md similarity index 97% rename from blog/_posts/2018-04-11-migrating-the-kubernetes-blog.md rename to content/en/blog/_posts/2018-04-11-migrating-the-kubernetes-blog.md index 9253e9570e0e1..7862fbb5676cc 100644 --- a/blog/_posts/2018-04-11-migrating-the-kubernetes-blog.md +++ b/content/en/blog/_posts/2018-04-11-migrating-the-kubernetes-blog.md @@ -1,8 +1,7 @@ --- -layout: blog title: 'Migrating the Kubernetes blog' -date: '2018-04-10T22:20:00.000-07:00' author: zcorleissen +slug: migrating-the-kubernetes-blog --- We recently migrated the Kubernetes blog from the Blogger platform to GitHub. With the change in platform comes a change in URL: formerly at [http://blog.kubernetes.io](http://blog.kubernetes.io), the blog now resides at [https://kubernetes.io/blog](https://kubernetes.io/blog). @@ -28,8 +27,9 @@ You can submit a blog post for consideration one of two ways: If you have a post that you want to remain confidential until your publish date, please submit your post via the Google form. Otherwise, you can choose your submission process based on your comfort level and preferred workflow. +{{< note >}} **Note:** Our workflow hasn't changed for confidential advance drafts. Additionally, we'll coordinate publishing for time sensitive posts to ensure that information isn't released prematurely through an open pull request. -{: .note} +{{< /note >}} ### Call for reviewers diff --git a/blog/_posts/2018-04-13-local-persistent-volumes-beta.md b/content/en/blog/_posts/2018-04-13-local-persistent-volumes-beta.md similarity index 99% rename from blog/_posts/2018-04-13-local-persistent-volumes-beta.md rename to content/en/blog/_posts/2018-04-13-local-persistent-volumes-beta.md index de495e0c14cb3..dd89200b8b7f8 100644 --- a/blog/_posts/2018-04-13-local-persistent-volumes-beta.md +++ b/content/en/blog/_posts/2018-04-13-local-persistent-volumes-beta.md @@ -1,7 +1,7 @@ --- -layout: blog title: Local Persistent Volumes for Kubernetes Goes Beta -date: Friday, April 13, 2018 +date: 2018-04-13 +slug: local-persistent-volumes-beta --- The [Local Persistent Volumes](https://kubernetes.io/docs/concepts/storage/volumes/#local) beta feature in Kubernetes 1.10 makes it possible to leverage local disks in your StatefulSets. You can specify directly-attached local disks as PersistentVolumes, and use them in StatefulSets with the same PersistentVolumeClaim objects that previously only supported remote volume types. diff --git a/blog/_posts/2018-04-24-kubernetes-application-survey-results-2018.md b/content/en/blog/_posts/2018-04-24-kubernetes-application-survey-results-2018.md similarity index 98% rename from blog/_posts/2018-04-24-kubernetes-application-survey-results-2018.md rename to content/en/blog/_posts/2018-04-24-kubernetes-application-survey-results-2018.md index fea9a7383f291..26dae7cae2fec 100644 --- a/blog/_posts/2018-04-24-kubernetes-application-survey-results-2018.md +++ b/content/en/blog/_posts/2018-04-24-kubernetes-application-survey-results-2018.md @@ -1,8 +1,7 @@ --- -layout: blog title: 'Kubernetes Application Survey 2018 Results' -date: '2018-04-24T09:00:00.000-04:00' author: mattfarina +slug: kubernetes-application-survey-results-2018 --- Understanding how people use or want to use Kubernetes can help us shape everything from what we build to how we do it. To help us understand how application developers, application operators, and ecosystem tool developers are using and want to use Kubernetes, the Application Definition Working Group recently performed a survey. The survey focused in on these types of user roles and the features and sub-projects owned by the Kubernetes organization. That included kubectl, Dashboard, Minikube, Helm, the Workloads API, etc. diff --git a/blog/_posts/2018-04-25-open-source-charts-2017.md b/content/en/blog/_posts/2018-04-25-open-source-charts-2017.md similarity index 98% rename from blog/_posts/2018-04-25-open-source-charts-2017.md rename to content/en/blog/_posts/2018-04-25-open-source-charts-2017.md index 2375fa498358b..b485964c33df1 100644 --- a/blog/_posts/2018-04-25-open-source-charts-2017.md +++ b/content/en/blog/_posts/2018-04-25-open-source-charts-2017.md @@ -1,7 +1,7 @@ --- -layout: blog title: Kubernetes Community - Top of the Open Source Charts in 2017 -date: Wednesday, April 25, 2018 +date: 2018-04-25 +slug: open-source-charts-2017 --- 2017 was a huge year for Kubernetes, and GitHub’s latest [Octoverse report](https://octoverse.github.com) illustrates just how much attention this project has been getting. diff --git a/blog/_posts/2018-04-30-zero-downtime-deployment-kubernetes-jenkins.md b/content/en/blog/_posts/2018-04-30-zero-downtime-deployment-kubernetes-jenkins.md similarity index 97% rename from blog/_posts/2018-04-30-zero-downtime-deployment-kubernetes-jenkins.md rename to content/en/blog/_posts/2018-04-30-zero-downtime-deployment-kubernetes-jenkins.md index 3414403b22f6c..e61b74cd2d396 100644 --- a/blog/_posts/2018-04-30-zero-downtime-deployment-kubernetes-jenkins.md +++ b/content/en/blog/_posts/2018-04-30-zero-downtime-deployment-kubernetes-jenkins.md @@ -1,8 +1,8 @@ --- -layout: blog title: 'Zero-downtime Deployment in Kubernetes with Jenkins' -date: Monday, April 30, 2018 +date: 2018-04-30 author: kbarnard +slug: zero-downtime-deployment-kubernetes-jenkins --- Ever since we added the [Kubernetes Continuous Deploy](https://aka.ms/azjenkinsk8s) and [Azure Container Service](https://aka.ms/azjenkinsacs) plugins to the Jenkins update center, "How do I create zero-downtime deployments" is one of our most frequently-asked questions. We created a quickstart template on Azure to demonstrate what zero-downtime deployments can look like. Although our example uses Azure, the concept easily applies to all Kubernetes installations. @@ -42,9 +42,7 @@ spec: port: 8080 strategy: type: RollingUpdate - rollingUpdate: - maxUnavailable: 1 - maxSurge: 50% + rollingUp maxSurge: 50% ``` If the Tomcat running in the current deployments is version 7, we can replace `${TOMCAT_VERSION}` with 8 and apply this to the Kubernetes cluster. With the [Kubernetes Continuous Deploy](https://aka.ms/azjenkinsk8s) or the [Azure Container Service](https://aka.ms/azjenkinsacs) plugin, the value can be fetched from an environment variable which eases the deployment process. @@ -155,9 +153,7 @@ spec: ![Resources](/images/blog/2018-04-30-zero-downtime-deployment-kubernetes-jenkins/resources.png) -As compared to Rolling Update, the blue/green update: -* Does not rely on the update strategy of a specific backend environment, either `RollingUpdate` or `Recreate` will do. -* The public service is either routed to the old applications, or new applications, but never both at the same time. +As compared to Rolling Update, the blue/green up* The public service is either routed to the old applications, or new applications, but never both at the same time. * The time it takes for the new pods to be ready does not affect the public service quality, as the traffic will only be routed to the new pods when all of them are tested to be ready. * We can do comprehensive tests on the new environment before it serves any public traffic. Just keep in mind this is in production, and the tests should not pollute live application data. diff --git a/blog/_posts/2018-05-01-developing-on-kubernetes.md b/content/en/blog/_posts/2018-05-01-developing-on-kubernetes.md similarity index 99% rename from blog/_posts/2018-05-01-developing-on-kubernetes.md rename to content/en/blog/_posts/2018-05-01-developing-on-kubernetes.md index 83c63518cb214..d15904c5399a4 100644 --- a/blog/_posts/2018-05-01-developing-on-kubernetes.md +++ b/content/en/blog/_posts/2018-05-01-developing-on-kubernetes.md @@ -1,7 +1,7 @@ --- -layout: blog title: Developing on Kubernetes -date: Tuesday, May 1, 2018 +date: 2018-05-01 +slug: developing-on-kubernetes --- **Authors**: [Michael Hausenblas](https://twitter.com/mhausenblas) (Red Hat), [Ilya Dmitrichenko](https://twitter.com/errordeveloper) (Weaveworks) diff --git a/blog/_posts/2018-05-02-policy-in-kubernetes.md b/content/en/blog/_posts/2018-05-02-policy-in-kubernetes.md similarity index 99% rename from blog/_posts/2018-05-02-policy-in-kubernetes.md rename to content/en/blog/_posts/2018-05-02-policy-in-kubernetes.md index 7e3fce7d98cd5..8ce6c2e26150c 100644 --- a/blog/_posts/2018-05-02-policy-in-kubernetes.md +++ b/content/en/blog/_posts/2018-05-02-policy-in-kubernetes.md @@ -1,7 +1,7 @@ --- -layout: blog title: Current State of Policy in Kubernetes -date: Wednesday, May 2, 2018 +date: 2018-05-02 +slug: policy-in-kubernetes --- Kubernetes has grown dramatically in its impact to the industry; and with rapid growth, we are beginning to see variations across components in how they define and apply policies. diff --git a/blog/_posts/http/2018-05-04-Announcing-Kubeflow-0.1.md b/content/en/blog/_posts/http/2018-05-04-Announcing-Kubeflow-0.1.md similarity index 99% rename from blog/_posts/http/2018-05-04-Announcing-Kubeflow-0.1.md rename to content/en/blog/_posts/http/2018-05-04-Announcing-Kubeflow-0.1.md index c4302158ee4da..d7483c2318449 100644 --- a/blog/_posts/http/2018-05-04-Announcing-Kubeflow-0.1.md +++ b/content/en/blog/_posts/http/2018-05-04-Announcing-Kubeflow-0.1.md @@ -1,8 +1,8 @@ --- -layout: blog title: 'Announcing Kubeflow 0.1' -date: Friday, May 4, 2018 +date: 2018-05-04 author: aronchick +slug: announcing-kubeflow-0.1 --- # Since Last We Met diff --git a/case-studies/OWNERS b/content/en/case-studies/OWNERS similarity index 100% rename from case-studies/OWNERS rename to content/en/case-studies/OWNERS diff --git a/case-studies/index.html b/content/en/case-studies/_index.html similarity index 98% rename from case-studies/index.html rename to content/en/case-studies/_index.html index ddadbb58ec31f..c92f8b602dd32 100644 --- a/case-studies/index.html +++ b/content/en/case-studies/_index.html @@ -1,15 +1,12 @@ --- title: Case Studies +bigheader: Kubernetes User Case Studies +abstract: A collection of users running Kubernetes in production. layout: basic class: gridPage cid: caseStudies --- -
-

Kubernetes User Case Studies

-
A collection of users running Kubernetes in production.
-
-
diff --git a/case-studies/amadeus.html b/content/en/case-studies/amadeus.html similarity index 99% rename from case-studies/amadeus.html rename to content/en/case-studies/amadeus.html index 0e3b0726d3a2c..8b6294d4f9afa 100644 --- a/case-studies/amadeus.html +++ b/content/en/case-studies/amadeus.html @@ -1,6 +1,6 @@ --- title: Amadeus Case Study -layout: basic + case_study_styles: true cid: caseStudies css: /css/style_amadeus.css diff --git a/case-studies/ancestry.html b/content/en/case-studies/ancestry.html similarity index 99% rename from case-studies/ancestry.html rename to content/en/case-studies/ancestry.html index e15f25d193b32..93c84c0286b16 100644 --- a/case-studies/ancestry.html +++ b/content/en/case-studies/ancestry.html @@ -1,6 +1,6 @@ --- title: Ancestry Case Study -layout: basic + case_study_styles: true cid: caseStudies css: /css/style_ancestry.css diff --git a/case-studies/blablacar.html b/content/en/case-studies/blablacar.html old mode 100755 new mode 100644 similarity index 99% rename from case-studies/blablacar.html rename to content/en/case-studies/blablacar.html index f326e268e1578..84da33c347bd9 --- a/case-studies/blablacar.html +++ b/content/en/case-studies/blablacar.html @@ -1,6 +1,6 @@ --- title: BlaBlaCar Case Study -layout: basic + case_study_styles: true cid: caseStudies css: /css/style_blablacar.css diff --git a/case-studies/blackrock.html b/content/en/case-studies/blackrock.html similarity index 99% rename from case-studies/blackrock.html rename to content/en/case-studies/blackrock.html index 670c990c3a347..96b66334d9ec3 100644 --- a/case-studies/blackrock.html +++ b/content/en/case-studies/blackrock.html @@ -1,6 +1,6 @@ --- title: BlackRock Case Study -layout: basic + case_study_styles: true cid: caseStudies css: /css/style_blackrock.css diff --git a/case-studies/box.html b/content/en/case-studies/box.html similarity index 99% rename from case-studies/box.html rename to content/en/case-studies/box.html index 6b816631bf0b2..7392557462f99 100644 --- a/case-studies/box.html +++ b/content/en/case-studies/box.html @@ -1,6 +1,6 @@ --- title: Box Case Study -layout: basic + case_study_styles: true cid: caseStudies css: /css/style_box.css diff --git a/case-studies/buffer.html b/content/en/case-studies/buffer.html old mode 100755 new mode 100644 similarity index 99% rename from case-studies/buffer.html rename to content/en/case-studies/buffer.html index 3336e42f96942..333db6a74eb32 --- a/case-studies/buffer.html +++ b/content/en/case-studies/buffer.html @@ -1,6 +1,6 @@ --- title: Buffer Case Study -layout: basic + case_study_styles: true cid: caseStudies css: /css/style_buffer.css diff --git a/case-studies/crowdfire.html b/content/en/case-studies/crowdfire.html similarity index 99% rename from case-studies/crowdfire.html rename to content/en/case-studies/crowdfire.html index 0c1ec93782eb9..227a5c08394bd 100644 --- a/case-studies/crowdfire.html +++ b/content/en/case-studies/crowdfire.html @@ -1,6 +1,6 @@ --- title: Crowdfire Case Study -layout: basic + case_study_styles: true cid: caseStudies css: /css/style_crowdfire.css diff --git a/case-studies/golfnow.html b/content/en/case-studies/golfnow.html similarity index 99% rename from case-studies/golfnow.html rename to content/en/case-studies/golfnow.html index d2e3eb0beeae6..f4bf4d4f278c2 100644 --- a/case-studies/golfnow.html +++ b/content/en/case-studies/golfnow.html @@ -1,6 +1,6 @@ --- title: GolfNow Case Study -layout: basic + case_study_styles: true cid: caseStudies css: /css/style_golfnow.css diff --git a/case-studies/haufegroup.html b/content/en/case-studies/haufegroup.html similarity index 99% rename from case-studies/haufegroup.html rename to content/en/case-studies/haufegroup.html index c7db9b4703b2f..f4256ff569b4a 100644 --- a/case-studies/haufegroup.html +++ b/content/en/case-studies/haufegroup.html @@ -1,6 +1,6 @@ --- title: Haufe Group Case Study -layout: basic + case_study_styles: true cid: caseStudies css: /css/style_haufegroup.css diff --git a/case-studies/huawei.html b/content/en/case-studies/huawei.html similarity index 99% rename from case-studies/huawei.html rename to content/en/case-studies/huawei.html index d298f2753eae8..29de86f5c4ef4 100644 --- a/case-studies/huawei.html +++ b/content/en/case-studies/huawei.html @@ -1,6 +1,6 @@ --- title: Huawei Case Study -layout: basic + case_study_styles: true cid: caseStudies css: /css/style_huawei.css diff --git a/case-studies/peardeck.html b/content/en/case-studies/peardeck.html similarity index 99% rename from case-studies/peardeck.html rename to content/en/case-studies/peardeck.html index e19925c0248d7..615c17376b7a2 100644 --- a/case-studies/peardeck.html +++ b/content/en/case-studies/peardeck.html @@ -1,6 +1,6 @@ --- title: Pear Deck Case Study -layout: basic + case_study_styles: true cid: caseStudies css: /css/style_peardeck.css diff --git a/case-studies/pearson.html b/content/en/case-studies/pearson.html similarity index 99% rename from case-studies/pearson.html rename to content/en/case-studies/pearson.html index bdc25a97653ea..683405cdbb87b 100644 --- a/case-studies/pearson.html +++ b/content/en/case-studies/pearson.html @@ -1,6 +1,6 @@ --- title: Pearson Case Study -layout: basic + class: gridPage cid: caseStudies --- diff --git a/case-studies/squarespace.html b/content/en/case-studies/squarespace.html similarity index 99% rename from case-studies/squarespace.html rename to content/en/case-studies/squarespace.html index 97942aa02acc4..95e04e6b9ccf0 100644 --- a/case-studies/squarespace.html +++ b/content/en/case-studies/squarespace.html @@ -1,6 +1,6 @@ --- title: Squarespace Case Study -layout: basic + case_study_styles: true cid: caseStudies css: /css/style_case_studies.css diff --git a/case-studies/wikimedia.html b/content/en/case-studies/wikimedia.html similarity index 99% rename from case-studies/wikimedia.html rename to content/en/case-studies/wikimedia.html index ba913ec664e3d..c58cb94104860 100644 --- a/case-studies/wikimedia.html +++ b/content/en/case-studies/wikimedia.html @@ -1,6 +1,6 @@ --- title: Wikimedia Case Study -layout: basic + class: gridPage cid: caseStudies --- diff --git a/case-studies/wink.html b/content/en/case-studies/wink.html old mode 100755 new mode 100644 similarity index 99% rename from case-studies/wink.html rename to content/en/case-studies/wink.html index 4317e6096221b..124f1511f8400 --- a/case-studies/wink.html +++ b/content/en/case-studies/wink.html @@ -1,6 +1,6 @@ --- title: Wink Case Study -layout: basic + case_study_styles: true cid: caseStudies css: /css/style_wink.css diff --git a/case-studies/zalando.html b/content/en/case-studies/zalando.html similarity index 99% rename from case-studies/zalando.html rename to content/en/case-studies/zalando.html index 29d651d415823..49bad6ff9e596 100644 --- a/case-studies/zalando.html +++ b/content/en/case-studies/zalando.html @@ -1,6 +1,6 @@ --- title: Zalando Case Study -layout: basic + case_study_styles: true cid: caseStudies css: /css/style_zalando.css diff --git a/code-of-conduct.md b/content/en/code-of-conduct.md similarity index 100% rename from code-of-conduct.md rename to content/en/code-of-conduct.md diff --git a/community/index.html b/content/en/community/_index.html similarity index 93% rename from community/index.html rename to content/en/community/_index.html index 8e901a2374bc8..d94e28fda2c8e 100644 --- a/community/index.html +++ b/content/en/community/_index.html @@ -4,10 +4,6 @@ cid: community --- -
-

Community

-
-KubeConEU
diff --git a/content/en/docs/_index.md b/content/en/docs/_index.md new file mode 100644 index 0000000000000..e144d399352c3 --- /dev/null +++ b/content/en/docs/_index.md @@ -0,0 +1,3 @@ +--- +title: Home +--- diff --git a/docs/admin/OWNERS b/content/en/docs/admin/OWNERS similarity index 100% rename from docs/admin/OWNERS rename to content/en/docs/admin/OWNERS diff --git a/content/en/docs/admin/_index.md b/content/en/docs/admin/_index.md new file mode 100755 index 0000000000000..13ec1e2e10387 --- /dev/null +++ b/content/en/docs/admin/_index.md @@ -0,0 +1,5 @@ +--- +title: "Accessing the API" +weight: 30 +--- + diff --git a/docs/admin/accessing-the-api.md b/content/en/docs/admin/accessing-the-api.md similarity index 100% rename from docs/admin/accessing-the-api.md rename to content/en/docs/admin/accessing-the-api.md diff --git a/docs/admin/admission-controllers.md b/content/en/docs/admin/admission-controllers.md similarity index 94% rename from docs/admin/admission-controllers.md rename to content/en/docs/admin/admission-controllers.md index 23800ad581b2d..969fbff1e1bac 100644 --- a/docs/admin/admission-controllers.md +++ b/content/en/docs/admin/admission-controllers.md @@ -9,8 +9,7 @@ reviewers: title: Using Admission Controllers --- -* TOC -{:toc} +{{< toc >}} ## What are they? @@ -61,12 +60,13 @@ admission control plugins: kube-apiserver --enable-admission-plugins=NamespaceLifecyle,LimitRanger ... ``` +{{< note >}} **Note**: Depending on the way your Kubernetes cluster is deployed and how the API server is started, you may need to apply the settings in different ways. For example, you may have to modify the systemd unit file if the API server is deployed as a systemd service, you may modify the manifest file for the API server if Kubernetes is deployed in a self-hosted way. -{: .note} +{{< /note >}} ## How do I turn off an admission controller? @@ -474,17 +474,19 @@ This admission controller has the following behavior: 1. Evaluate the pod's node selector against the namespace-specific whitelist defined the plugin configuration file. Conflicts result in rejection. +{{< note >}} **Note:** PodNodeSelector allows forcing pods to run on specifically labeled nodes. Also see the PodTolerationRestriction admission plugin, which allows preventing pods from running on specifically tainted nodes. -{: .note} +{{< /note >}} ### PersistentVolumeClaimResize This admission controller implements additional validations for checking incoming `PersistentVolumeClaim` resize requests. +{{< note >}} **Note:** Support for volume resizing is available as an alpha feature. Admins must set the feature gate `ExpandPersistentVolumes` to `true` to enable resizing. -{: .note} +{{< /note >}} After enabling the `ExpandPersistentVolumes` feature gate, enabling the `PersistentVolumeClaimResize` admission controller is recommended, too. This admission controller prevents resizing of all claims by default unless a claim's `StorageClass` @@ -567,7 +569,7 @@ This admission controller implements automation for [serviceAccounts](/docs/user We strongly recommend using this admission controller if you intend to make use of Kubernetes `ServiceAccount` objects. ### Storage Object in Use Protection (beta) -{% assign for_k8s_version="v1.10" %}{% include feature-state-beta.md %} +{{< feature-state for_k8s_version="v1.10" state="beta" >}} The `StorageObjectInUseProtection` plugin adds the `kubernetes.io/pvc-protection` or `kubernetes.io/pv-protection` finalizers to newly created Persistent Volume Claims (PVCs) or Persistent Volumes (PV). In case a user deletes a PVC or PV the PVC or PV is not removed until the finalizer is removed from the PVC or PV by PVC or PV Protection Controller. Refer to the [Storage Object in Use Protection](/docs/concepts/storage/persistent-volumes/#storage-object-in-use-protection) for more detailed information. ### ValidatingAdmissionWebhook (alpha in 1.8; beta in 1.9) @@ -584,58 +586,47 @@ webhooks or other validating admission controllers will permit the request to fi If you disable the ValidatingAdmissionWebhook, you must also disable the `ValidatingWebhookConfiguration` object in the `admissionregistration.k8s.io/v1beta1` group/version via the `--runtime-config` flag (both are on by default in -versions 1.9 and later). +versions >= 1.9). ## Is there a recommended set of admission controllers to use? Yes. - -For Kubernetes version 1.10 and later, we recommend running the following set of admission controllers using the ```--enable-admission-plugins``` flag (**order doesn't matter**). - -Note: ```--admission-control``` was deprecated in 1.10 and replaced with ```--enable-admission-plugins```. +For Kubernetes >= 1.9.0, we strongly recommend running the following set of admission controllers (order matters for 1.9 but not >1.10): ```shell ---enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota +--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota ``` -For Kubernetes 1.9 and earlier, we recommend running the following set of admission controllers using the ```--admission-control``` flag (**order matters**). - -* v1.9 - - ```shell - --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota - ``` - - * It's worth reiterating that in 1.9, these happen in a mutating phase +It's worth reiterating that in 1.9 and up, these happen in a mutating phase and a validating phase, and that e.g. `ResourceQuota` runs in the validating phase, and therefore is the last admission controller to run. `MutatingAdmissionWebhook` appears before it in this list, because it runs in the mutating phase. - For earlier versions, there was no concept of validating vs mutating and the +For earlier versions, there was no concept of validating vs mutating and the admission controllers ran in the exact order specified. -* v1.6 - v1.8 +For Kubernetes >= 1.6.0, we strongly recommend running the following set of admission controllers (order matters): - ```shell - --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds - ``` +```shell +--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds +``` -* v1.4 - v1.5 +For Kubernetes >= 1.4.0, we strongly recommend running the following set of admission controllers (order matters): - ```shell - --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota - ``` +```shell +--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota +``` -* v1.2 - v1.3 +For Kubernetes >= 1.2.0, we strongly recommend running the following set of admission controllers (order matters): - ```shell - --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota - ``` +```shell +--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota +``` -* v1.0 - v1.1 +For Kubernetes >= 1.0.0, we strongly recommend running the following set of admission controllers (order matters): - ```shell - --admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,PersistentVolumeLabel,ResourceQuota - ``` +```shell +--admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,PersistentVolumeLabel,ResourceQuota +``` diff --git a/docs/admin/authentication.md b/content/en/docs/admin/authentication.md similarity index 99% rename from docs/admin/authentication.md rename to content/en/docs/admin/authentication.md index 6fe7039643ded..8a9bdc61e6211 100644 --- a/docs/admin/authentication.md +++ b/content/en/docs/admin/authentication.md @@ -8,8 +8,7 @@ reviewers: title: Authenticating --- -* TOC -{:toc} +{{< toc >}} ## Users in Kubernetes @@ -687,7 +686,7 @@ rules: ## client-go credential plugins -{% assign for_k8s_version="v1.10" %}{% include feature-state-alpha.md %} +{{< feature-state for_k8s_version="v1.10" state="alpha" >}} `k8s.io/client-go` and tools using it such as `kubectl` and `kubelet` are able to execute an external command to receive user credentials. diff --git a/docs/admin/authorization/index.md b/content/en/docs/admin/authorization/_index.md similarity index 98% rename from docs/admin/authorization/index.md rename to content/en/docs/admin/authorization/_index.md index 63ef843a34f15..fecefa84fda60 100644 --- a/docs/admin/authorization/index.md +++ b/content/en/docs/admin/authorization/_index.md @@ -5,14 +5,15 @@ reviewers: - deads2k - liggitt title: Overview +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} Learn more about Kubernetes authorization, including details about creating policies using the supported authorization modules. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} In Kubernetes, you must be authenticated (logged in) before your request can be authorized (granted permission to access). For information about authentication, see [Accessing Control Overview](/docs/admin/accessing-the-api/). @@ -157,13 +158,13 @@ The following flags can be used: You can choose more than one authorization module. Modules are checked in order so an earlier module has higher priority to allow or deny a request. -{% endcapture %} -{% capture whatsnext %} +{{% /capture %}} +{{% capture whatsnext %}} * To learn more about Authentication, see **Authentication** in [Controlling Access to the Kubernetes API](/docs/admin/accessing-the-api/). * To learn more about Admission Control, see [Using Admission Controllers](/docs/admin/admission-controllers/). -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} ## Privilege escalation via pod creation @@ -173,10 +174,11 @@ access their privileges within that namespace. They can create pods that access secrets the user cannot themselves read, or that run under a service account with different/greater permissions. +{{< caution >}} **Caution:** System administrators, use care when granting access to pod creation. A user granted permission to create pods (or controllers that create pods) in the namespace can: read all secrets in the namespace; read all config maps in the namespace; and impersonate any service account in the namespace and take any action the account could take. This applies regardless of authorization mode. -{: .caution} +{{< /caution >}} diff --git a/docs/admin/authorization/abac.md b/content/en/docs/admin/authorization/abac.md similarity index 96% rename from docs/admin/authorization/abac.md rename to content/en/docs/admin/authorization/abac.md index 31d47041cf873..bac6a27c1200d 100644 --- a/docs/admin/authorization/abac.md +++ b/content/en/docs/admin/authorization/abac.md @@ -5,13 +5,14 @@ reviewers: - deads2k - liggitt title: ABAC Mode +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} Attribute-based access control (ABAC) defines an access control paradigm whereby access rights are granted to users through the use of policies which combine attributes together. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Policy File Format For mode `ABAC`, also specify `--authorization-policy-file=SOME_FILENAME`. @@ -124,7 +125,7 @@ up the verbosity: {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:unauthenticated", "readonly": true, "nonResourcePath": "*"}} ``` -[Complete file example](http://releases.k8s.io/{{page.githubbranch}}/pkg/auth/authorizer/abac/example_policy_file.jsonl) +[Complete file example](http://releases.k8s.io/{{< param "githubbranch" >}}/pkg/auth/authorizer/abac/example_policy_file.jsonl) ## A quick note on service accounts @@ -151,5 +152,5 @@ file: The apiserver will need to be restarted to pickup the new policy lines. -{% endcapture %} -{% include templates/concept.md %} +{{% /capture %}} + diff --git a/docs/admin/authorization/node.md b/content/en/docs/admin/authorization/node.md similarity index 99% rename from docs/admin/authorization/node.md rename to content/en/docs/admin/authorization/node.md index 00c848928abba..32e768f097236 100644 --- a/docs/admin/authorization/node.md +++ b/content/en/docs/admin/authorization/node.md @@ -7,8 +7,7 @@ reviewers: title: Using Node Authorization --- -* TOC -{:toc} +{{< toc >}} Node authorization is a special-purpose authorization mode that specifically authorizes API requests made by kubelets. diff --git a/docs/admin/authorization/rbac.md b/content/en/docs/admin/authorization/rbac.md similarity index 99% rename from docs/admin/authorization/rbac.md rename to content/en/docs/admin/authorization/rbac.md index 00ea9879fa2a7..d8b61789cdacf 100644 --- a/docs/admin/authorization/rbac.md +++ b/content/en/docs/admin/authorization/rbac.md @@ -6,8 +6,7 @@ reviewers: title: Using RBAC Authorization --- -* TOC -{:toc} +{{< toc >}} Role-Based Access Control ("RBAC") uses the "rbac.authorization.k8s.io" API group to drive authorization decisions, allowing admins to dynamically configure policies @@ -857,11 +856,12 @@ in the server logs, you can remove the ABAC authorizer. You can replicate a permissive policy using RBAC role bindings. +{{< warning >}} **WARNING:** The following policy allows **ALL** service accounts to act as cluster administrators. Any application running in a container receives service account credentials automatically, and could perform any action against the API, including viewing secrets and modifying permissions. This is not a recommended policy. -{: .warning} +{{< /warning >}} ``` kubectl create clusterrolebinding permissive-binding \ diff --git a/docs/admin/authorization/webhook.md b/content/en/docs/admin/authorization/webhook.md similarity index 93% rename from docs/admin/authorization/webhook.md rename to content/en/docs/admin/authorization/webhook.md index 99ed39557dcf0..4ce650e0901fd 100644 --- a/docs/admin/authorization/webhook.md +++ b/content/en/docs/admin/authorization/webhook.md @@ -5,13 +5,14 @@ reviewers: - deads2k - liggitt title: Webhook Mode +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} A WebHook is an HTTP callback: an HTTP POST that occurs when something happens; a simple event-notification via HTTP POST. A web application implementing WebHooks will POST a message to a URL when certain things happen. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} When specified, mode `Webhook` causes Kubernetes to query an outside REST service when determining user privileges. @@ -143,8 +144,8 @@ Access to other non-resource paths can be disallowed without restricting access to the REST api. For further documentation refer to the authorization.v1beta1 API objects and -[webhook.go](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/webhook/webhook.go). +[webhook.go](https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/webhook/webhook.go). + +{{% /capture %}} -{% endcapture %} -{% include templates/concept.md %} diff --git a/docs/admin/bootstrap-tokens.md b/content/en/docs/admin/bootstrap-tokens.md similarity index 96% rename from docs/admin/bootstrap-tokens.md rename to content/en/docs/admin/bootstrap-tokens.md index d998504679ac5..99f28579efbca 100644 --- a/docs/admin/bootstrap-tokens.md +++ b/content/en/docs/admin/bootstrap-tokens.md @@ -4,8 +4,7 @@ reviewers: title: Authenticating with Bootstrap Tokens --- -* TOC -{:toc} +{{< toc >}} ## Overview @@ -24,7 +23,7 @@ Controller Manager. The tokens are also used to create a signature for a specific ConfigMap used in a "discovery" process through a BootstrapSigner controller. -{% include feature-state-beta.md %} +{{< feature-state state="beta" >}} ## Token Format @@ -67,7 +66,7 @@ controller on the controller manager. Each valid token is backed by a secret in the `kube-system` namespace. You can find the full design doc -[here](https://github.com/kubernetes/community/blob/{{page.githubbranch}}/contributors/design-proposals/cluster-lifecycle/bootstrap-discovery.md). +[here](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/design-proposals/cluster-lifecycle/bootstrap-discovery.md). Here is what the secret looks like. diff --git a/docs/admin/cluster-large.md b/content/en/docs/admin/cluster-large.md similarity index 81% rename from docs/admin/cluster-large.md rename to content/en/docs/admin/cluster-large.md index 19b3e58e95223..b5a130267bb4a 100644 --- a/docs/admin/cluster-large.md +++ b/content/en/docs/admin/cluster-large.md @@ -7,7 +7,7 @@ title: Building Large Clusters ## Support -At {{page.version}}, Kubernetes supports clusters with up to 5000 nodes. More specifically, we support configurations that meet *all* of the following criteria: +At {{< param "version" >}}, Kubernetes supports clusters with up to 5000 nodes. More specifically, we support configurations that meet *all* of the following criteria: * No more than 5000 nodes * No more than 150000 total pods @@ -16,14 +16,13 @@ At {{page.version}}, Kubernetes supports clusters with up to 5000 nodes. More sp
-* TOC -{:toc} +{{< toc >}} ## 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 value `NUM_NODES` in the platform-specific `config-default.sh` file (for example, see [GCE's `config-default.sh`](http://releases.k8s.io/{{page.githubbranch}}/cluster/gce/config-default.sh)). +Normally the number of nodes in a cluster is controlled by the value `NUM_NODES` in the platform-specific `config-default.sh` file (for example, see [GCE's `config-default.sh`](http://releases.k8s.io/{{< param "githubbranch" >}}/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. @@ -79,7 +78,7 @@ Note that these master node sizes are currently only set at cluster startup time ### Addon Resources -To prevent memory leaks or other resource issues in [cluster addons](https://releases.k8s.io/{{page.githubbranch}}/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)). +To prevent memory leaks or other resource issues in [cluster addons](https://releases.k8s.io/{{< param "githubbranch" >}}/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: @@ -98,14 +97,14 @@ Except for Heapster, these limits are static and are based on data we collected 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, as you scale up 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): - * [InfluxDB and Grafana](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/cluster-monitoring/influxdb/influxdb-grafana-controller.yaml) - * [kubedns, dnsmasq, and sidecar](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/dns/kube-dns.yaml.in) - * [Kibana](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/fluentd-elasticsearch/kibana-deployment.yaml) + * [InfluxDB and Grafana](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/cluster-monitoring/influxdb/influxdb-grafana-controller.yaml) + * [kubedns, dnsmasq, and sidecar](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/dns/kube-dns.yaml.in) + * [Kibana](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/fluentd-elasticsearch/kibana-deployment.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/{{page.githubbranch}}/cluster/addons/fluentd-elasticsearch/es-statefulset.yaml) + * [elasticsearch](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/fluentd-elasticsearch/es-statefulset.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/{{page.githubbranch}}/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml) - * [FluentD with GCP Plugin](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/fluentd-gcp/fluentd-gcp-ds.yaml) + * [FluentD with ElasticSearch Plugin](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml) + * [FluentD with GCP Plugin](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/fluentd-gcp/fluentd-gcp-ds.yaml) Heapster's resource limits are set dynamically based on the initial size of your cluster (see [#16185](http://issue.k8s.io/16185) and [#22940](http://issue.k8s.io/22940)). If you find that Heapster is running diff --git a/docs/admin/extensible-admission-controllers.md b/content/en/docs/admin/extensible-admission-controllers.md similarity index 98% rename from docs/admin/extensible-admission-controllers.md rename to content/en/docs/admin/extensible-admission-controllers.md index 84946877c7140..70fa3e3665f71 100644 --- a/docs/admin/extensible-admission-controllers.md +++ b/content/en/docs/admin/extensible-admission-controllers.md @@ -8,8 +8,7 @@ reviewers: title: Dynamic Admission Control --- -* TOC -{:toc} +{{< toc >}} ## Overview @@ -77,8 +76,8 @@ how to [authenticate apiservers](#authenticate-apiservers). ### Deploy the admission webhook service The webhook server in the e2e test is deployed in the Kubernetes cluster, via -the [deployment API](/docs/reference/generated/kubernetes-api/{{page.version}}/#deployment-v1beta1-apps). -The test also creates a [service](/docs/reference/generated/kubernetes-api/{{page.version}}/#service-v1-core) +the [deployment API](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#deployment-v1beta1-apps). +The test also creates a [service](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#service-v1-core) as the front-end of the webhook server. See [code](https://github.com/kubernetes/kubernetes/blob/v1.10.0-beta.1/test/e2e/apimachinery/webhook.go#L196). @@ -129,11 +128,12 @@ apiserver sends an `admissionReview` request to webhook as specified in the After you create the webhook configuration, the system will take a few seconds to honor the new configuration. +{{< note >}} **Note** When the webhook plugin is deployed into the Kubernetes cluster as a service, it has to expose its service on the 443 port. The communication between the API server and the webhook service may fail if a different port is used. -{: .note} +{{< /note >}} ### Authenticate apiservers @@ -262,7 +262,7 @@ you need to: ### Deploy an initializer controller You should deploy an initializer controller via the [deployment -API](/docs/reference/generated/kubernetes-api/{{page.version}}/#deployment-v1beta1-apps). +API](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#deployment-v1beta1-apps). ### Configure initializers on the fly diff --git a/docs/admin/federation/OWNERS b/content/en/docs/admin/federation/OWNERS similarity index 100% rename from docs/admin/federation/OWNERS rename to content/en/docs/admin/federation/OWNERS diff --git a/docs/admin/federation/index.md b/content/en/docs/admin/federation/_index.md similarity index 99% rename from docs/admin/federation/index.md rename to content/en/docs/admin/federation/_index.md index e435fcbd7ec57..73e8963e38049 100644 --- a/docs/admin/federation/index.md +++ b/content/en/docs/admin/federation/_index.md @@ -4,6 +4,7 @@ reviewers: - mml - nikhiljindal title: (Deprecated) Using `federation-up` and `deploy.sh` +toc_hide: true --- ## The mechanisms explained in this doc to setup federation are deprecated. [`kubefed`](/docs/tasks/federation/set-up-cluster-federation-kubefed/) is now the recommended way to deploy federation. @@ -11,8 +12,7 @@ title: (Deprecated) Using `federation-up` and `deploy.sh` This guide explains how to set up cluster federation that lets us control multiple Kubernetes clusters. -* TOC -{:toc} +{{< toc >}} ## Prerequisites diff --git a/docs/admin/high-availability/OWNERS b/content/en/docs/admin/high-availability/OWNERS similarity index 100% rename from docs/admin/high-availability/OWNERS rename to content/en/docs/admin/high-availability/OWNERS diff --git a/docs/admin/high-availability/building.md b/content/en/docs/admin/high-availability/building.md similarity index 97% rename from docs/admin/high-availability/building.md rename to content/en/docs/admin/high-availability/building.md index fde5b3946939e..607fc8f84773a 100644 --- a/docs/admin/high-availability/building.md +++ b/content/en/docs/admin/high-availability/building.md @@ -13,7 +13,7 @@ Also, at this time high availability support for Kubernetes is not continuously be working to add this continuous testing, but for now the single-node master installations are more heavily tested. * TOC -{:toc} +{{< toc >}} ## Overview @@ -216,7 +216,7 @@ replicas notice that the lease expired and remove it from the list of endpoints. You can switch to the new reconciler by adding the flag `--endpoint-reconciler-type=lease` when starting your apiserver replicas. -{% include feature-state-alpha.md %} +{{< feature-state state="alpha" >}} If you want to know more, you can check the following resources: - [issue kubernetes/kubernetes#22609](https://github.com/kubernetes/kubernetes/issues/22609), diff --git a/docs/admin/high-availability/default-kubelet b/content/en/docs/admin/high-availability/default-kubelet similarity index 100% rename from docs/admin/high-availability/default-kubelet rename to content/en/docs/admin/high-availability/default-kubelet diff --git a/docs/admin/high-availability/etcd.yaml b/content/en/docs/admin/high-availability/etcd.yaml similarity index 100% rename from docs/admin/high-availability/etcd.yaml rename to content/en/docs/admin/high-availability/etcd.yaml diff --git a/docs/admin/high-availability/kube-apiserver.yaml b/content/en/docs/admin/high-availability/kube-apiserver.yaml similarity index 100% rename from docs/admin/high-availability/kube-apiserver.yaml rename to content/en/docs/admin/high-availability/kube-apiserver.yaml diff --git a/docs/admin/high-availability/kube-controller-manager.yaml b/content/en/docs/admin/high-availability/kube-controller-manager.yaml similarity index 100% rename from docs/admin/high-availability/kube-controller-manager.yaml rename to content/en/docs/admin/high-availability/kube-controller-manager.yaml diff --git a/docs/admin/high-availability/kube-scheduler.yaml b/content/en/docs/admin/high-availability/kube-scheduler.yaml similarity index 100% rename from docs/admin/high-availability/kube-scheduler.yaml rename to content/en/docs/admin/high-availability/kube-scheduler.yaml diff --git a/docs/admin/high-availability/monit-docker b/content/en/docs/admin/high-availability/monit-docker similarity index 100% rename from docs/admin/high-availability/monit-docker rename to content/en/docs/admin/high-availability/monit-docker diff --git a/docs/admin/high-availability/monit-kubelet b/content/en/docs/admin/high-availability/monit-kubelet similarity index 100% rename from docs/admin/high-availability/monit-kubelet rename to content/en/docs/admin/high-availability/monit-kubelet diff --git a/docs/admin/high-availability/podmaster.yaml b/content/en/docs/admin/high-availability/podmaster.yaml similarity index 100% rename from docs/admin/high-availability/podmaster.yaml rename to content/en/docs/admin/high-availability/podmaster.yaml diff --git a/docs/admin/kubelet-authentication-authorization.md b/content/en/docs/admin/kubelet-authentication-authorization.md similarity index 99% rename from docs/admin/kubelet-authentication-authorization.md rename to content/en/docs/admin/kubelet-authentication-authorization.md index 9af6514c30aa9..b1b31ffed94a4 100644 --- a/docs/admin/kubelet-authentication-authorization.md +++ b/content/en/docs/admin/kubelet-authentication-authorization.md @@ -4,8 +4,7 @@ reviewers: title: Kubelet authentication/authorization --- -* TOC -{:toc} +{{< toc >}} ## Overview diff --git a/docs/admin/kubelet-tls-bootstrapping.md b/content/en/docs/admin/kubelet-tls-bootstrapping.md similarity index 99% rename from docs/admin/kubelet-tls-bootstrapping.md rename to content/en/docs/admin/kubelet-tls-bootstrapping.md index 880aba692ba35..d51e26afb8610 100644 --- a/docs/admin/kubelet-tls-bootstrapping.md +++ b/content/en/docs/admin/kubelet-tls-bootstrapping.md @@ -6,8 +6,7 @@ reviewers: title: TLS bootstrapping --- -* TOC -{:toc} +{{< toc >}} ## Overview diff --git a/docs/admin/limitrange/OWNERS b/content/en/docs/admin/limitrange/OWNERS similarity index 100% rename from docs/admin/limitrange/OWNERS rename to content/en/docs/admin/limitrange/OWNERS diff --git a/docs/admin/limitrange/invalid-pod.yaml b/content/en/docs/admin/limitrange/invalid-pod.yaml similarity index 100% rename from docs/admin/limitrange/invalid-pod.yaml rename to content/en/docs/admin/limitrange/invalid-pod.yaml diff --git a/docs/admin/limitrange/limits.yaml b/content/en/docs/admin/limitrange/limits.yaml similarity index 100% rename from docs/admin/limitrange/limits.yaml rename to content/en/docs/admin/limitrange/limits.yaml diff --git a/docs/admin/limitrange/namespace.yaml b/content/en/docs/admin/limitrange/namespace.yaml similarity index 100% rename from docs/admin/limitrange/namespace.yaml rename to content/en/docs/admin/limitrange/namespace.yaml diff --git a/docs/admin/limitrange/valid-pod.yaml b/content/en/docs/admin/limitrange/valid-pod.yaml similarity index 100% rename from docs/admin/limitrange/valid-pod.yaml rename to content/en/docs/admin/limitrange/valid-pod.yaml diff --git a/docs/admin/multiple-schedulers/OWNERS b/content/en/docs/admin/multiple-schedulers/OWNERS similarity index 100% rename from docs/admin/multiple-schedulers/OWNERS rename to content/en/docs/admin/multiple-schedulers/OWNERS diff --git a/docs/admin/multiple-schedulers/pod1.yaml b/content/en/docs/admin/multiple-schedulers/pod1.yaml similarity index 100% rename from docs/admin/multiple-schedulers/pod1.yaml rename to content/en/docs/admin/multiple-schedulers/pod1.yaml diff --git a/docs/admin/multiple-schedulers/pod2.yaml b/content/en/docs/admin/multiple-schedulers/pod2.yaml similarity index 100% rename from docs/admin/multiple-schedulers/pod2.yaml rename to content/en/docs/admin/multiple-schedulers/pod2.yaml diff --git a/docs/admin/multiple-schedulers/pod3.yaml b/content/en/docs/admin/multiple-schedulers/pod3.yaml similarity index 100% rename from docs/admin/multiple-schedulers/pod3.yaml rename to content/en/docs/admin/multiple-schedulers/pod3.yaml diff --git a/docs/admin/multiple-zones.md b/content/en/docs/admin/multiple-zones.md similarity index 99% rename from docs/admin/multiple-zones.md rename to content/en/docs/admin/multiple-zones.md index 2bb6c818f7af2..bf5bcb1952308 100644 --- a/docs/admin/multiple-zones.md +++ b/content/en/docs/admin/multiple-zones.md @@ -11,7 +11,7 @@ title: Running in Multiple Zones Kubernetes 1.2 adds support for running a single cluster in multiple failure zones (GCE calls them simply "zones", AWS calls them "availability zones", here we'll refer to them as "zones"). This is a lightweight version of a broader Cluster Federation feature (previously referred to by the affectionate -nickname ["Ubernetes"](https://github.com/kubernetes/community/blob/{{page.githubbranch}}/contributors/design-proposals/multicluster/federation.md)). +nickname ["Ubernetes"](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/design-proposals/multicluster/federation.md)). Full Cluster Federation allows combining separate Kubernetes clusters running in different regions or cloud providers (or on-premises data centers). However, many @@ -26,8 +26,7 @@ add similar support for other clouds or even bare metal, by simply arranging for the appropriate labels to be added to nodes and volumes). -* TOC -{:toc} +{{< toc >}} ## Functionality diff --git a/docs/admin/node-conformance.md b/content/en/docs/admin/node-conformance.md similarity index 96% rename from docs/admin/node-conformance.md rename to content/en/docs/admin/node-conformance.md index 318c65d68885e..78ad07271950e 100644 --- a/docs/admin/node-conformance.md +++ b/content/en/docs/admin/node-conformance.md @@ -4,8 +4,7 @@ reviewers: title: Validate Node Setup --- -* TOC -{:toc} +{{< toc >}} ## Node Conformance Test @@ -84,7 +83,7 @@ sudo docker run -it --rm --privileged --net=host \ k8s.gcr.io/node-test:0.2 ``` -Node conformance test is a containerized version of [node e2e test](https://github.com/kubernetes/community/blob/{{page.githubbranch}}/contributors/devel/e2e-node-tests.md). +Node conformance test is a containerized version of [node e2e test](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/devel/e2e-node-tests.md). By default, it runs all conformance tests. Theoretically, you can run any node e2e test if you configure the container and diff --git a/docs/admin/resourcequota/OWNERS b/content/en/docs/admin/resourcequota/OWNERS similarity index 100% rename from docs/admin/resourcequota/OWNERS rename to content/en/docs/admin/resourcequota/OWNERS diff --git a/docs/admin/resourcequota/best-effort.yaml b/content/en/docs/admin/resourcequota/best-effort.yaml similarity index 100% rename from docs/admin/resourcequota/best-effort.yaml rename to content/en/docs/admin/resourcequota/best-effort.yaml diff --git a/docs/admin/resourcequota/compute-resources.yaml b/content/en/docs/admin/resourcequota/compute-resources.yaml similarity index 100% rename from docs/admin/resourcequota/compute-resources.yaml rename to content/en/docs/admin/resourcequota/compute-resources.yaml diff --git a/docs/admin/resourcequota/limits.yaml b/content/en/docs/admin/resourcequota/limits.yaml old mode 100755 new mode 100644 similarity index 100% rename from docs/admin/resourcequota/limits.yaml rename to content/en/docs/admin/resourcequota/limits.yaml diff --git a/docs/admin/resourcequota/namespace.yaml b/content/en/docs/admin/resourcequota/namespace.yaml similarity index 100% rename from docs/admin/resourcequota/namespace.yaml rename to content/en/docs/admin/resourcequota/namespace.yaml diff --git a/docs/admin/resourcequota/not-best-effort.yaml b/content/en/docs/admin/resourcequota/not-best-effort.yaml similarity index 100% rename from docs/admin/resourcequota/not-best-effort.yaml rename to content/en/docs/admin/resourcequota/not-best-effort.yaml diff --git a/docs/admin/resourcequota/object-counts.yaml b/content/en/docs/admin/resourcequota/object-counts.yaml similarity index 100% rename from docs/admin/resourcequota/object-counts.yaml rename to content/en/docs/admin/resourcequota/object-counts.yaml diff --git a/docs/admin/salt.md b/content/en/docs/admin/salt.md similarity index 99% rename from docs/admin/salt.md rename to content/en/docs/admin/salt.md index e9659e38e4a39..1fbedacba3318 100644 --- a/docs/admin/salt.md +++ b/content/en/docs/admin/salt.md @@ -81,13 +81,13 @@ 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. ```liquid -{% 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 %} + ``` ## Best Practices diff --git a/docs/admin/service-accounts-admin.md b/content/en/docs/admin/service-accounts-admin.md similarity index 100% rename from docs/admin/service-accounts-admin.md rename to content/en/docs/admin/service-accounts-admin.md diff --git a/docs/concepts/index.md b/content/en/docs/concepts/_index.md similarity index 99% rename from docs/concepts/index.md rename to content/en/docs/concepts/_index.md index 6ce8c3a9b98b2..9103fe70d8265 100644 --- a/docs/concepts/index.md +++ b/content/en/docs/concepts/_index.md @@ -1,5 +1,7 @@ --- title: Concepts +main_menu: true +weight: 40 --- The Concepts section helps you learn about the parts of the Kubernetes system and the abstractions Kubernetes uses to represent your cluster, and helps you obtain a deeper understanding of how Kubernetes works. diff --git a/content/en/docs/concepts/api-extension/_index.md b/content/en/docs/concepts/api-extension/_index.md new file mode 100755 index 0000000000000..f35a33dd70abd --- /dev/null +++ b/content/en/docs/concepts/api-extension/_index.md @@ -0,0 +1,5 @@ +--- +title: "Extending the Kubernetes API" +weight: 20 +--- + diff --git a/docs/concepts/api-extension/apiserver-aggregation.md b/content/en/docs/concepts/api-extension/apiserver-aggregation.md similarity index 92% rename from docs/concepts/api-extension/apiserver-aggregation.md rename to content/en/docs/concepts/api-extension/apiserver-aggregation.md index c36744b345b5a..1262c2f039bd6 100644 --- a/docs/concepts/api-extension/apiserver-aggregation.md +++ b/content/en/docs/concepts/api-extension/apiserver-aggregation.md @@ -4,15 +4,16 @@ reviewers: - lavalamp - cheftako - chenopis +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} The aggregation layer allows Kubernetes to be extended with additional APIs, beyond what is offered by the core Kubernetes APIs. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Overview @@ -22,14 +23,14 @@ In 1.7 the aggregation layer runs in-process with the kube-apiserver. Until an e Ordinarily, the APIService will be implemented by an *extension-apiserver* in a pod running in the cluster. This extension-apiserver will normally need to be paired with one or more controllers if active management of the added resources is needed. As a result, the apiserver-builder will actually provide a skeleton for both. As another example, when the service-catalog is installed, it provides both the extension-apiserver and controller for the services it provides. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * To get the aggregator working in your environment, [configure the aggregation layer](/docs/tasks/access-kubernetes-api/configure-aggregation-layer/). * Then, [setup an extension api-server](/docs/tasks/access-kubernetes-api/setup-extension-api-server/) to work with the aggregation layer. * Also, learn how to [extend the Kubernetes API using Custom Resource Definitions](/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/). -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/api-extension/custom-resources.md b/content/en/docs/concepts/api-extension/custom-resources.md similarity index 98% rename from docs/concepts/api-extension/custom-resources.md rename to content/en/docs/concepts/api-extension/custom-resources.md index 4e22ccc635b1f..44efe01a716d4 100644 --- a/docs/concepts/api-extension/custom-resources.md +++ b/content/en/docs/concepts/api-extension/custom-resources.md @@ -3,14 +3,15 @@ title: Custom Resources reviewers: - enisoc - deads2k +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page explains [*custom resources*](/docs/concepts/api-extension/custom-resources/), which are extensions of the Kubernetes API. This page explains when to add a custom resource to your Kubernetes cluster and when to use a standalone service. It describes the two methods for adding custom resources and how to choose between them. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Custom resources A *resource* is an endpoint in the [Kubernetes API](/docs/reference/api-overview/) that stores a collection of [API objects](/docs/concepts/overview/working-with-objects/kubernetes-objects/) of a certain kind. For example, the built-in *pods* resource contains a collection of Pod objects. @@ -77,8 +78,9 @@ Use a ConfigMap if any of the following apply: * Consumers of the file prefer to consume via file in a Pod or environment variable in a pod, rather than the Kubernetes API. * You want to perform rolling updates via Deployment, etc, when the file is updated. +{{< note >}} **Note:** Use a [secret](/docs/concepts/configuration/secret/) for sensitive data, which is similar to a configMap but more secure. -{: .note} +{{< /note >}} Use a custom resource (CRD or Aggregated API) if most of the following apply: @@ -116,8 +118,9 @@ Refer to the [Custom Controller example, which uses Custom Resources](https://gi for a demonstration of how to register a new custom resource, work with instances of your new resource type, and setup a controller to handle events. +{{< note >}} **Note:** CRD is the successor to the deprecated *ThirdPartyResource* (TPR) API, and is available as of Kubernetes 1.7. -{: .note} +{{< /note >}} ## API server aggregation @@ -219,12 +222,12 @@ When you add a custom resource, you can access it using: - A REST client that you write. - A client generated using [Kubernetes client generation tools](https://github.com/kubernetes/code-generator) (generating one is an advanced undertaking, but some projects may provide a client along with the CRD or AA). -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn how to [Extend the Kubernetes API with the aggregation layer](/docs/concepts/api-extension/apiserver-aggregation/). * Learn how to [Extend the Kubernetes API with CustomResourceDefinition](/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/). * Learn how to [Migrate a ThirdPartyResource to CustomResourceDefinition](/docs/tasks/access-kubernetes-api/migrate-third-party-resource/). -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/content/en/docs/concepts/architecture/_index.md b/content/en/docs/concepts/architecture/_index.md new file mode 100755 index 0000000000000..9f8973d13d835 --- /dev/null +++ b/content/en/docs/concepts/architecture/_index.md @@ -0,0 +1,5 @@ +--- +title: "Kubernetes Architecture" +weight: 30 +--- + diff --git a/docs/concepts/architecture/cloud-controller.md b/content/en/docs/concepts/architecture/cloud-controller.md similarity index 98% rename from docs/concepts/architecture/cloud-controller.md rename to content/en/docs/concepts/architecture/cloud-controller.md index d639767fc2e24..9f6600e2cfb65 100644 --- a/docs/concepts/architecture/cloud-controller.md +++ b/content/en/docs/concepts/architecture/cloud-controller.md @@ -43,8 +43,9 @@ In version 1.9, the CCM runs the following controllers from the preceding list: Additionally, it runs another controller called the PersistentVolumeLabels controller. This controller is responsible for setting the zone and region labels on PersistentVolumes created in GCP and AWS clouds. +{{< note >}} **Note:** Volume controller was deliberately chosen to not be a part of CCM. Due to the complexity involved and due to the existing efforts to abstract away vendor specific volume logic, it was decided that volume controller will not be moved to CCM. -{: .note} +{{< /note >}} The original plan to support volumes using CCM was to use Flex volumes to support pluggable volumes. However, a competing effort known as CSI is being planned to replace Flex. @@ -75,7 +76,7 @@ If the node has been deleted from the cloud, delete the Kubernetes Node object. #### Route controller -The Route controller is responsible for configuring routes in the cloud appropriately so that containers on different nodes in the Kubernetes cluster can communicate with each other. +The Route controller is responsible for configuring routes in the cloud appropriately so that containers on different nodes in the Kubernetes cluster can communicate with each other. The route controller is only applicable for Google Compute Engine clusters. #### Service Controller diff --git a/docs/concepts/architecture/master-node-communication.md b/content/en/docs/concepts/architecture/master-node-communication.md similarity index 99% rename from docs/concepts/architecture/master-node-communication.md rename to content/en/docs/concepts/architecture/master-node-communication.md index 4a1906ad7d1cc..22ffac37bf96f 100644 --- a/docs/concepts/architecture/master-node-communication.md +++ b/content/en/docs/concepts/architecture/master-node-communication.md @@ -6,8 +6,7 @@ reviewers: title: Master-Node communication --- -* TOC -{:toc} +{{< toc >}} ## Overview diff --git a/docs/concepts/architecture/nodes.md b/content/en/docs/concepts/architecture/nodes.md similarity index 99% rename from docs/concepts/architecture/nodes.md rename to content/en/docs/concepts/architecture/nodes.md index 63d41ac16389d..4ee78a7fa4de5 100644 --- a/docs/concepts/architecture/nodes.md +++ b/content/en/docs/concepts/architecture/nodes.md @@ -5,8 +5,7 @@ reviewers: title: Nodes --- -* TOC -{:toc} +{{< toc >}} ## What is a node? @@ -278,4 +277,4 @@ on each kubelet where you want to reserve resources. Node is a top-level resource in the Kubernetes REST API. More details about the API object can be found at: -[Node API object](/docs/reference/generated/kubernetes-api/{{page.version}}/#node-v1-core). +[Node API object](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#node-v1-core). diff --git a/content/en/docs/concepts/cluster-administration/_index.md b/content/en/docs/concepts/cluster-administration/_index.md new file mode 100755 index 0000000000000..cdef77a4ddc4a --- /dev/null +++ b/content/en/docs/concepts/cluster-administration/_index.md @@ -0,0 +1,5 @@ +--- +title: "Compute, Storage, and Networking Extensions" +weight: 30 +--- + diff --git a/docs/concepts/cluster-administration/addons.md b/content/en/docs/concepts/cluster-administration/addons.md similarity index 100% rename from docs/concepts/cluster-administration/addons.md rename to content/en/docs/concepts/cluster-administration/addons.md diff --git a/docs/concepts/cluster-administration/certificates.md b/content/en/docs/concepts/cluster-administration/certificates.md similarity index 99% rename from docs/concepts/cluster-administration/certificates.md rename to content/en/docs/concepts/cluster-administration/certificates.md index 6180735b75334..eba43a105aba8 100644 --- a/docs/concepts/cluster-administration/certificates.md +++ b/content/en/docs/concepts/cluster-administration/certificates.md @@ -2,8 +2,7 @@ title: Certificates --- -* TOC -{:toc} +{{< toc >}} ## Creating Certificates diff --git a/docs/concepts/cluster-administration/cloud-providers.md b/content/en/docs/concepts/cluster-administration/cloud-providers.md similarity index 99% rename from docs/concepts/cluster-administration/cloud-providers.md rename to content/en/docs/concepts/cluster-administration/cloud-providers.md index 683900452ebe3..481225aa3d165 100644 --- a/docs/concepts/cluster-administration/cloud-providers.md +++ b/content/en/docs/concepts/cluster-administration/cloud-providers.md @@ -1,13 +1,14 @@ --- title: Cloud Providers +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page explains how to manage Kubernetes running on a specific cloud provider. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} # AWS This section describes all the possible configurations which can be used when running Kubernetes on Amazon Web Services. @@ -263,6 +264,6 @@ Kubernetes network plugin and should appear in the `[Router]` section of the [kubenet]: https://kubernetes.io/docs/concepts/cluster-administration/network-plugins/#kubenet -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/cluster-administration/cluster-administration-overview.md b/content/en/docs/concepts/cluster-administration/cluster-administration-overview.md similarity index 97% rename from docs/concepts/cluster-administration/cluster-administration-overview.md rename to content/en/docs/concepts/cluster-administration/cluster-administration-overview.md index f6b183a14cd67..5f6c7e167a644 100644 --- a/docs/concepts/cluster-administration/cluster-administration-overview.md +++ b/content/en/docs/concepts/cluster-administration/cluster-administration-overview.md @@ -3,14 +3,15 @@ reviewers: - davidopp - lavalamp title: Cluster Administration Overview +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} The cluster administration overview is for anyone creating or administering a Kubernetes cluster. It assumes some familiarity with core Kubernetes [concepts](/docs/concepts/). -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Planning a cluster See the guides in [Picking the Right Solution](/docs/setup/pick-right-solution/) for examples of how to plan, set up, and configure Kubernetes clusters. The solutions listed in this article are called *distros*. @@ -69,6 +70,6 @@ If you are using a guide involving Salt, see [Configuring Kubernetes with Salt]( * [Logging and Monitoring Cluster Activity](/docs/concepts/cluster-administration/logging/) explains how logging in Kubernetes works and how to implement it. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/cluster-administration/controller-metrics.md b/content/en/docs/concepts/cluster-administration/controller-metrics.md similarity index 93% rename from docs/concepts/cluster-administration/controller-metrics.md rename to content/en/docs/concepts/cluster-administration/controller-metrics.md index 2f1c71e34a05d..e36313e4cc6b3 100644 --- a/docs/concepts/cluster-administration/controller-metrics.md +++ b/content/en/docs/concepts/cluster-administration/controller-metrics.md @@ -1,14 +1,15 @@ --- title: Controller manager metrics +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} Controller manager metrics provide important insight into the performance and health of the controller manager. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## What are controller manager metrics Controller manager metrics provide important insight into the performance and health of the controller manager. @@ -43,6 +44,6 @@ The metrics are emitted in [prometheus format](https://prometheus.io/docs/instru In a production environment you may want to configure prometheus or some other metrics scraper to periodically gather these metrics and make them available in some kind of time series database. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/cluster-administration/counter-pod.yaml b/content/en/docs/concepts/cluster-administration/counter-pod.yaml similarity index 100% rename from docs/concepts/cluster-administration/counter-pod.yaml rename to content/en/docs/concepts/cluster-administration/counter-pod.yaml diff --git a/docs/concepts/cluster-administration/device-plugins.md b/content/en/docs/concepts/cluster-administration/device-plugins.md similarity index 93% rename from docs/concepts/cluster-administration/device-plugins.md rename to content/en/docs/concepts/cluster-administration/device-plugins.md index c8e9993e7ce2f..4fe3a72ca0801 100644 --- a/docs/concepts/cluster-administration/device-plugins.md +++ b/content/en/docs/concepts/cluster-administration/device-plugins.md @@ -2,11 +2,12 @@ reviewers: title: Device Plugins description: Use the Kubernetes device plugin framework to implement plugins for GPUs, NICs, FPGAs, InfiniBand, and similar resources that require vendor-specific setup. +content_template: templates/concept --- -{% include feature-state-beta.md %} +{{< feature-state state="beta" >}} -{% capture overview %} +{{% capture overview %}} Starting in version 1.8, Kubernetes provides a [device plugin framework](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/resource-management/device-plugin.md) for vendors to advertise their resources to the kubelet without changing Kubernetes core code. @@ -14,9 +15,9 @@ Instead of writing custom Kubernetes code, vendors can implement a device plugin be deployed manually or as a DaemonSet. The targeted devices include GPUs, High-performance NICs, FPGAs, InfiniBand, and other similar computing resources that may require vendor specific initialization and setup. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Device plugin registration @@ -47,7 +48,7 @@ and reports two healthy devices on a node, the node status is updated to advertise 2 `vendor-domain/foo`. Then, users can request devices in a -[Container](/docs/reference/generated/kubernetes-api/{{page.version}}/#container-v1-core) +[Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core) specification as they request other types of resources, with the following limitations: * Extended resources are only supported as integer resources and cannot be overcommitted. * Devices cannot be shared among Containers. @@ -118,9 +119,9 @@ The canonical directory `/var/lib/kubelet/device-plugins` requires privileged ac so a device plugin must run in a privileged security context. If a device plugin is running as a DaemonSet, `/var/lib/kubelet/device-plugins` must be mounted as a -[Volume](/docs/reference/generated/kubernetes-api/{{page.version}}/#volume-v1-core) +[Volume](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core) in the plugin's -[PodSpec](/docs/reference/generated/kubernetes-api/{{page.version}}/#podspec-v1-core). +[PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core). Kubernetes device plugin support is still in alpha. As development continues, its API version can change in incompatible ways. We recommend that device plugin developers do the following: @@ -141,6 +142,6 @@ For examples of device plugin implementations, see: * The [RDMA device plugin](https://github.com/hustcat/k8s-rdma-device-plugin) * The [Solarflare device plugin](https://github.com/vikaschoudhary16/sfc-device-plugin) * The [AMD GPU device plugin](https://github.com/RadeonOpenCompute/k8s-device-plugin) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/cluster-administration/federation.md b/content/en/docs/concepts/cluster-administration/federation.md similarity index 96% rename from docs/concepts/cluster-administration/federation.md rename to content/en/docs/concepts/cluster-administration/federation.md index 4c8b7441f3723..92467f70c6adf 100644 --- a/docs/concepts/cluster-administration/federation.md +++ b/content/en/docs/concepts/cluster-administration/federation.md @@ -1,13 +1,14 @@ --- title: Federation +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page explains why and how to manage multiple Kubernetes clusters using federation. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Why federation Federation makes it easy to manage multiple clusters. It does so by providing 2 @@ -165,14 +166,14 @@ Finally, if any of your clusters would need more than the maximum recommended nu you may need even more clusters. Kubernetes v1.3 supports clusters up to 1000 nodes in size. Kubernetes v1.8 supports clusters up to 5000 nodes. See [Building Large Clusters](/docs/admin/cluster-large/) for more guidance. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about the [Federation - proposal](https://github.com/kubernetes/community/blob/{{page.githubbranch}}/contributors/design-proposals/multicluster/federation.md). + proposal](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/design-proposals/multicluster/federation.md). * See this [setup guide](/docs/tutorials/federation/set-up-cluster-federation-kubefed/) for cluster federation. * See this [Kubecon2016 talk on federation](https://www.youtube.com/watch?v=pq9lbkmxpS8) * See this [Kubecon2017 Europe update on federation](https://www.youtube.com/watch?v=kwOvOLnFYck) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/cluster-administration/fluentd-sidecar-config.yaml b/content/en/docs/concepts/cluster-administration/fluentd-sidecar-config.yaml similarity index 100% rename from docs/concepts/cluster-administration/fluentd-sidecar-config.yaml rename to content/en/docs/concepts/cluster-administration/fluentd-sidecar-config.yaml diff --git a/docs/concepts/cluster-administration/kubelet-garbage-collection.md b/content/en/docs/concepts/cluster-administration/kubelet-garbage-collection.md similarity index 99% rename from docs/concepts/cluster-administration/kubelet-garbage-collection.md rename to content/en/docs/concepts/cluster-administration/kubelet-garbage-collection.md index f65f6e06523ab..6e457377f34f1 100644 --- a/docs/concepts/cluster-administration/kubelet-garbage-collection.md +++ b/content/en/docs/concepts/cluster-administration/kubelet-garbage-collection.md @@ -4,8 +4,7 @@ reviewers: title: Configuring kubelet Garbage Collection --- -* TOC -{:toc} +{{< toc >}} Garbage collection is a helpful function of kubelet that will clean up unused images and unused containers. Kubelet will perform garbage collection for containers every minute and garbage collection for images every five minutes. diff --git a/docs/concepts/cluster-administration/logging.md b/content/en/docs/concepts/cluster-administration/logging.md similarity index 93% rename from docs/concepts/cluster-administration/logging.md rename to content/en/docs/concepts/cluster-administration/logging.md index 499fc43a24651..e9581b46c8125 100644 --- a/docs/concepts/cluster-administration/logging.md +++ b/content/en/docs/concepts/cluster-administration/logging.md @@ -9,8 +9,7 @@ Application and systems logs can help you understand what is happening inside yo However, the native functionality provided by a container engine or runtime is usually not enough for a complete logging solution. For example, if a container crashes, a pod is evicted, or a node dies, you'll usually still want to access your application's logs. As such, logs should have a separate storage and lifecycle independent of nodes, pods, or containers. This concept is called _cluster-level-logging_. Cluster-level logging requires a separate backend to store, analyze, and query logs. Kubernetes provides no native storage solution for log data, but you can integrate many existing logging solutions into your Kubernetes cluster. -* TOC -{:toc} +{{< toc >}} Cluster-level logging architectures are described in assumption that a logging backend is present inside or outside of your cluster. If you're @@ -24,7 +23,7 @@ outputs data to the standard output stream. This demonstration uses a [pod specification](/docs/concepts/cluster-administration/counter-pod.yaml) with a container that writes some text to standard output once per second. -{% include code.html language="yaml" file="counter-pod.yaml" ghlink="/docs/tasks/debug-application-cluster/counter-pod.yaml" %} +{{< code file="counter-pod.yaml" >}} To run this pod, use the following command: @@ -81,7 +80,7 @@ only the contents of the latest log file will be available through the rotation and there are two files, one 10MB in size and one empty, `kubectl logs` will return an empty response. -[cosConfigureHelper]: https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/cluster/gce/gci/configure-helper.sh +[cosConfigureHelper]: https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/cluster/gce/gci/configure-helper.sh ### System component logs @@ -153,7 +152,7 @@ Consider the following example. A pod runs a single container, and the container writes to two different log files, using two different formats. Here's a configuration file for the Pod: -{% include code.html language="yaml" file="two-files-counter-pod.yaml" ghlink="/docs/concepts/cluster-administration/two-files-counter-pod.yaml" %} +{{< code file="two-files-counter-pod.yaml" >}} It would be a mess to have log entries of different formats in the same log stream, even if you managed to redirect both components to the `stdout` stream of @@ -163,7 +162,7 @@ the logs to its own `stdout` stream. Here's a configuration file for a pod that has two sidecar containers: -{% include code.html language="yaml" file="two-files-counter-pod-streaming-sidecar.yaml" ghlink="/docs/concepts/cluster-administration/two-files-counter-pod-streaming-sidecar.yaml" %} +{{< code file="two-files-counter-pod-streaming-sidecar.yaml" >}} Now when you run this pod, you can access each log stream separately by running the following commands: @@ -219,7 +218,7 @@ which uses fluentd as a logging agent. Here are two configuration files that you can use to implement this approach. The first file contains a [ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/) to configure fluentd. -{% include code.html language="yaml" file="fluentd-sidecar-config.yaml" ghlink="/docs/concepts/cluster-administration/fluentd-sidecar-config.yaml" %} +{{< code file="fluentd-sidecar-config.yaml" >}} **Note**: The configuration of fluentd is beyond the scope of this article. For information about configuring fluentd, see the @@ -228,7 +227,7 @@ information about configuring fluentd, see the The second file describes a pod that has a sidecar container running fluentd. The pod mounts a volume where fluentd can pick up its configuration data. -{% include code.html language="yaml" file="two-files-counter-pod-agent-sidecar.yaml" ghlink="/docs/concepts/cluster-administration/two-files-counter-pod-agent-sidecar.yaml" %} +{{< code file="two-files-counter-pod-agent-sidecar.yaml" >}} After some time you can find log messages in the Stackdriver interface. diff --git a/docs/concepts/cluster-administration/manage-deployment.md b/content/en/docs/concepts/cluster-administration/manage-deployment.md similarity index 98% rename from docs/concepts/cluster-administration/manage-deployment.md rename to content/en/docs/concepts/cluster-administration/manage-deployment.md index 864a95a24a09c..2bdd54aa63e62 100644 --- a/docs/concepts/cluster-administration/manage-deployment.md +++ b/content/en/docs/concepts/cluster-administration/manage-deployment.md @@ -8,14 +8,13 @@ title: Managing Resources You've deployed your application and exposed it via a service. Now what? Kubernetes provides a number of tools to help you manage your application deployment, including scaling and updating. Among the features that we will discuss in more depth are [configuration files](/docs/concepts/configuration/overview/) and [labels](/docs/concepts/overview/working-with-objects/labels/). -* TOC -{:toc} +{{< toc >}} ## Organizing resource configurations Many applications require multiple resources to be created, such as a Deployment and a Service. Management of multiple resources can be simplified by grouping them together in the same file (separated by `---` in YAML). For example: -{% include code.html language="yaml" file="nginx-app.yaml" ghlink="/docs/concepts/cluster-administration/nginx-app.yaml" %} +{{< code file="nginx-app.yaml" >}} Multiple resources can be created the same way as a single resource: @@ -134,7 +133,7 @@ If you're interested in learning more about `kubectl`, go ahead and read [kubect The examples we've used so far apply at most a single label to any resource. There are many scenarios where multiple labels should be used to distinguish sets from one another. -For instance, different applications would use different values for the `app` label, but a multi-tier application, such as the [guestbook example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/guestbook/), would additionally need to distinguish each tier. The frontend could carry the following labels: +For instance, different applications would use different values for the `app` label, but a multi-tier application, such as the [guestbook example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/guestbook/), would additionally need to distinguish each tier. The frontend could carry the following labels: ```yaml labels: @@ -324,8 +323,9 @@ Currently, resources are created without this annotation, so the first invocatio All subsequent calls to `kubectl apply`, and other commands that modify the configuration, such as `kubectl replace` and `kubectl edit`, will update the annotation, allowing subsequent calls to `kubectl apply` to detect and perform deletions using a three-way diff. +{{< note >}} **Note:** To use apply, always create resource initially with either `kubectl apply` or `kubectl create --save-config`. -{: .note} +{{< /note >}} ### kubectl edit diff --git a/docs/concepts/cluster-administration/network-plugins.md b/content/en/docs/concepts/cluster-administration/network-plugins.md similarity index 88% rename from docs/concepts/cluster-administration/network-plugins.md rename to content/en/docs/concepts/cluster-administration/network-plugins.md index 852f32740e3ed..1290deacb558e 100644 --- a/docs/concepts/cluster-administration/network-plugins.md +++ b/content/en/docs/concepts/cluster-administration/network-plugins.md @@ -6,8 +6,7 @@ reviewers: title: Network Plugins --- -* TOC -{:toc} +{{< toc >}} __Disclaimer__: Network plugins are in alpha. Its contents will change rapidly. @@ -25,7 +24,7 @@ The kubelet has a single default network plugin, and a default network common to ## Network Plugin Requirements -Besides providing the [`NetworkPlugin` interface](https://github.com/kubernetes/kubernetes/tree/{{page.fullversion}}/pkg/kubelet/network/plugins.go) to configure and clean up pod networking, the plugin may also need specific support for kube-proxy. The iptables proxy obviously depends on iptables, and the plugin may need to ensure that container traffic is made available to iptables. For example, if the plugin connects containers to a Linux bridge, the plugin must set the `net/bridge/bridge-nf-call-iptables` sysctl to `1` to ensure that the iptables proxy functions correctly. If the plugin does not use a Linux bridge (but instead something like Open vSwitch or some other mechanism) it should ensure container traffic is appropriately routed for the proxy. +Besides providing the [`NetworkPlugin` interface](https://github.com/kubernetes/kubernetes/tree/{{< param "fullversion" >}}/pkg/kubelet/network/plugins.go) to configure and clean up pod networking, the plugin may also need specific support for kube-proxy. The iptables proxy obviously depends on iptables, and the plugin may need to ensure that container traffic is made available to iptables. For example, if the plugin connects containers to a Linux bridge, the plugin must set the `net/bridge/bridge-nf-call-iptables` sysctl to `1` to ensure that the iptables proxy functions correctly. If the plugin does not use a Linux bridge (but instead something like Open vSwitch or some other mechanism) it should ensure container traffic is appropriately routed for the proxy. By default if no kubelet network plugin is specified, the `noop` plugin is used, which sets `net/bridge/bridge-nf-call-iptables=1` to ensure simple configurations (like Docker with a bridge) work correctly with the iptables proxy. diff --git a/docs/concepts/cluster-administration/networking.md b/content/en/docs/concepts/cluster-administration/networking.md similarity index 99% rename from docs/concepts/cluster-administration/networking.md rename to content/en/docs/concepts/cluster-administration/networking.md index da28b5ddfe61c..607716b68e783 100644 --- a/docs/concepts/cluster-administration/networking.md +++ b/content/en/docs/concepts/cluster-administration/networking.md @@ -13,8 +13,7 @@ default. There are 4 distinct networking problems to solve: 3. Pod-to-Service communications: this is covered by [services](/docs/concepts/services-networking/service/). 4. External-to-Service communications: this is covered by [services](/docs/concepts/services-networking/service/). -* TOC -{:toc} +{{< toc >}} ## Summary diff --git a/docs/concepts/cluster-administration/nginx-app.yaml b/content/en/docs/concepts/cluster-administration/nginx-app.yaml similarity index 100% rename from docs/concepts/cluster-administration/nginx-app.yaml rename to content/en/docs/concepts/cluster-administration/nginx-app.yaml diff --git a/docs/concepts/cluster-administration/nginx-deployment.yaml b/content/en/docs/concepts/cluster-administration/nginx-deployment.yaml similarity index 100% rename from docs/concepts/cluster-administration/nginx-deployment.yaml rename to content/en/docs/concepts/cluster-administration/nginx-deployment.yaml diff --git a/docs/concepts/cluster-administration/nginx/nginx-deployment.yaml b/content/en/docs/concepts/cluster-administration/nginx/nginx-deployment.yaml similarity index 100% rename from docs/concepts/cluster-administration/nginx/nginx-deployment.yaml rename to content/en/docs/concepts/cluster-administration/nginx/nginx-deployment.yaml diff --git a/docs/concepts/cluster-administration/nginx/nginx-svc.yaml b/content/en/docs/concepts/cluster-administration/nginx/nginx-svc.yaml similarity index 100% rename from docs/concepts/cluster-administration/nginx/nginx-svc.yaml rename to content/en/docs/concepts/cluster-administration/nginx/nginx-svc.yaml diff --git a/docs/concepts/cluster-administration/proxies.md b/content/en/docs/concepts/cluster-administration/proxies.md similarity index 94% rename from docs/concepts/cluster-administration/proxies.md rename to content/en/docs/concepts/cluster-administration/proxies.md index 33ccf35fd5a2a..4d9133d178f53 100644 --- a/docs/concepts/cluster-administration/proxies.md +++ b/content/en/docs/concepts/cluster-administration/proxies.md @@ -1,12 +1,13 @@ --- title: Proxies in Kubernetes +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page explains proxies used with Kubernetes. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Proxies @@ -59,6 +60,6 @@ will typically ensure that the latter types are setup correctly. Proxies have replaced redirect capabilities. Redirects have been deprecated. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/cluster-administration/two-files-counter-pod-agent-sidecar.yaml b/content/en/docs/concepts/cluster-administration/two-files-counter-pod-agent-sidecar.yaml similarity index 100% rename from docs/concepts/cluster-administration/two-files-counter-pod-agent-sidecar.yaml rename to content/en/docs/concepts/cluster-administration/two-files-counter-pod-agent-sidecar.yaml diff --git a/docs/concepts/cluster-administration/two-files-counter-pod-streaming-sidecar.yaml b/content/en/docs/concepts/cluster-administration/two-files-counter-pod-streaming-sidecar.yaml similarity index 100% rename from docs/concepts/cluster-administration/two-files-counter-pod-streaming-sidecar.yaml rename to content/en/docs/concepts/cluster-administration/two-files-counter-pod-streaming-sidecar.yaml diff --git a/docs/concepts/cluster-administration/two-files-counter-pod.yaml b/content/en/docs/concepts/cluster-administration/two-files-counter-pod.yaml similarity index 100% rename from docs/concepts/cluster-administration/two-files-counter-pod.yaml rename to content/en/docs/concepts/cluster-administration/two-files-counter-pod.yaml diff --git a/content/en/docs/concepts/configuration/_index.md b/content/en/docs/concepts/configuration/_index.md new file mode 100755 index 0000000000000..00cf8e8c0fab1 --- /dev/null +++ b/content/en/docs/concepts/configuration/_index.md @@ -0,0 +1,5 @@ +--- +title: "Configuration" +weight: 70 +--- + diff --git a/docs/concepts/configuration/assign-pod-node.md b/content/en/docs/concepts/configuration/assign-pod-node.md similarity index 97% rename from docs/concepts/configuration/assign-pod-node.md rename to content/en/docs/concepts/configuration/assign-pod-node.md index af975ea633aae..2e21fb59cc46c 100644 --- a/docs/concepts/configuration/assign-pod-node.md +++ b/content/en/docs/concepts/configuration/assign-pod-node.md @@ -16,10 +16,9 @@ that a pod ends up on a machine with an SSD attached to it, or to co-locate pods services that communicate a lot into the same availability zone. You can find all the files for these examples [in our docs -repo here](https://github.com/kubernetes/website/tree/{{page.docsbranch}}/docs/user-guide/node-selection). +repo here](https://github.com/kubernetes/website/tree/{{< param "docsbranch" >}}/docs/user-guide/node-selection). -* TOC -{:toc} +{{< toc >}} ## nodeSelector @@ -61,7 +60,7 @@ spec: Then add a nodeSelector like so: -{% include code.html language="yaml" file="pod.yaml" ghlink="/docs/concepts/configuration/pod.yaml" %} +{{< code file="pod.yaml" >}} When you then run `kubectl create -f pod.yaml`, the pod will get scheduled on the node that you attached the label to! You can verify that it worked by running `kubectl get pods -o wide` and looking at the "NODE" that the pod was assigned to. @@ -77,10 +76,11 @@ with a standard set of labels. As of Kubernetes v1.4 these labels are * `beta.kubernetes.io/os` * `beta.kubernetes.io/arch` +{{< note >}} **Note:** The value of these labels is cloud provider specific and is not guaranteed to be reliable. For example, the value of `kubernetes.io/hostname` may be the same as the Node name in some environments and a different value in other environments. -{: .note} +{{< /note >}} ## Affinity and anti-affinity @@ -125,7 +125,7 @@ Node affinity is specified as field `nodeAffinity` of field `affinity` in the Po Here's an example of a pod that uses node affinity: -{% include code.html language="yaml" file="pod-with-node-affinity.yaml" ghlink="/docs/concepts/configuration/pod-with-node-affinity.yaml" %} +{{< code file="pod-with-node-affinity.yaml" >}} This node affinity rule says the pod can only be placed on a node with a label whose key is `kubernetes.io/e2e-az-name` and whose value is either `e2e-az1` or `e2e-az2`. In addition, @@ -180,7 +180,7 @@ And inter-pod anti-affinity is specified as field `podAntiAffinity` of field `af #### An example of a pod that uses pod affinity: -{% include code.html language="yaml" file="pod-with-pod-affinity.yaml" ghlink="/docs/concepts/configuration/pod-with-pod-affinity.yaml" %} +{{< code file="pod-with-pod-affinity.yaml" >}} The affinity on this pod defines one pod affinity rule and one pod anti-affinity rule. In this example, the `podAffinity` is `requiredDuringSchedulingIgnoredDuringExecution` diff --git a/docs/concepts/configuration/commands.yaml b/content/en/docs/concepts/configuration/commands.yaml similarity index 100% rename from docs/concepts/configuration/commands.yaml rename to content/en/docs/concepts/configuration/commands.yaml diff --git a/docs/concepts/configuration/manage-compute-resources-container.md b/content/en/docs/concepts/configuration/manage-compute-resources-container.md similarity index 96% rename from docs/concepts/configuration/manage-compute-resources-container.md rename to content/en/docs/concepts/configuration/manage-compute-resources-container.md index 58d8d1422d1dc..decd1f6e60eba 100644 --- a/docs/concepts/configuration/manage-compute-resources-container.md +++ b/content/en/docs/concepts/configuration/manage-compute-resources-container.md @@ -1,8 +1,9 @@ --- title: Managing Compute Resources for Containers +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} When you specify a [Pod](/docs/concepts/workloads/pods/pod/), you can optionally specify how much CPU and memory (RAM) each Container needs. When Containers have resource @@ -12,10 +13,10 @@ resources on a node can be handled in a specified manner. For more details about the difference between requests and limits, see [Resource QoS](https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md). -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Resource types @@ -142,8 +143,9 @@ When using Docker: multiplied by 100. The resulting value is the total amount of CPU time that a container can use every 100ms. A container cannot use more than its share of CPU time during this interval. + {{< note >}} **Note**: The default quota period is 100ms. The minimum resolution of CPU quota is 1ms. - {: .note} + {{< /note >}} - The `spec.containers[].resources.limits.memory` is converted to an integer, and used as the value of the @@ -168,7 +170,7 @@ resource limits, see the The resource usage of a Pod is reported as part of the Pod status. -If [optional monitoring](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/cluster-monitoring/README.md) +If [optional monitoring](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/cluster-monitoring/README.md) is configured for your cluster, then Pod resource usage can be retrieved from the monitoring system. @@ -239,7 +241,7 @@ the node. The amount of resources available to Pods is less than the node capacity, because system daemons use a portion of the available resources. The `allocatable` field -[NodeStatus](/docs/reference/generated/kubernetes-api/{{page.version}}/#nodestatus-v1-core) +[NodeStatus](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#nodestatus-v1-core) gives the amount of resources that are available to Pods. For more information, see [Node Allocatable Resources](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md). @@ -297,24 +299,25 @@ Container in the Pod was terminated and restarted five times. You can call `kubectl get pod` with the `-o go-template=...` option to fetch the status of previously terminated Containers: -```shell{% raw %} +```shell [13:59:01] $ kubectl get pod -o go-template='{{range.status.containerStatuses}}{{"Container Name: "}}{{.name}}{{"\r\nLastState: "}}{{.lastState}}{{end}}' simmemleak-hra99 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]]{% endraw %} +LastState: map[terminated:map[exitCode:137 reason:OOM Killed startedAt:2015-07-07T20:58:43Z finishedAt:2015-07-07T20:58:43Z containerID:docker://0e4095bba1feccdfe7ef9fb6ebffe972b4b14285d5acdec6f0d3ae8a22fad8b2]] ``` You can see that the Container was terminated because of `reason:OOM Killed`, where `OOM` stands for Out Of Memory. ## Local ephemeral storage -{% include feature-state-beta.md %} +{{< feature-state state="beta" >}} Kubernetes version 1.8 introduces a new resource, _ephemeral-storage_ for managing local ephemeral storage. In each Kubernetes node, kubelet's root directory (/var/lib/kubelet by default) and log directory (/var/log) are stored on the root partition of the node. This partition is also shared and consumed by pods via EmptyDir volumes, container logs, image layers and container writable layers. This partition is “ephemeral” and applications cannot expect any performance SLAs (Disk IOPS for example) from this partition. Local ephemeral storage management only applies for the root partition; the optional partition for image layer and writable layer is out of scope. +{{< note >}} **Note:** If an optional runtime partition is used, root partition will not hold any image layer or writable layers. -{: .note} +{{< /note >}} ### Requests and limits setting for local ephemeral storage Each Container of a Pod can specify one or more of the following: @@ -413,11 +416,12 @@ curl --header "Content-Type: application/json-patch+json" \ http://k8s-master:8080/api/v1/nodes/k8s-node-1/status ``` +{{< note >}} **Note**: In the preceding request, `~1` is the encoding for the character `/` in the patch path. The operation path value in JSON-Patch is interpreted as a JSON-Pointer. For more details, see [IETF RFC 6901, section 3](https://tools.ietf.org/html/rfc6901#section-3). -{: .note} +{{< /note >}} #### Cluster-level extended resources @@ -467,16 +471,18 @@ The API server restricts quantities of Extended Resources to whole numbers. Examples of _valid_ quantities are `3`, `3000m` and `3Ki`. Examples of _invalid_ quantities are `0.5` and `1500m`. +{{< note >}} **Note:** Extended Resources replace Opaque Integer Resources. Users can use any domain name prefix other than "`kubernetes.io`" which is reserved. -{: .note} +{{< /note >}} To consume an Extended Resource in a Pod, include the resource name as a key in the `spec.containers[].resources.limits` map in the container spec. +{{< note >}} **Note:** Extended resources cannot be overcommitted, so request and limit must be equal if both are present in a container spec. -{: .note} +{{< /note >}} A Pod is scheduled only if all of the resource requests are satisfied, including CPU, memory and any Extended Resources. The Pod remains in the `PENDING` state @@ -513,7 +519,7 @@ all Containers in a Pod, such as Kubernetes version 1.5 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](https://github.com/kubernetes/community/blob/{{page.githubbranch}}/contributors/design-proposals/scheduling/resources.md). +[resource types](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/design-proposals/scheduling/resources.md). Kubernetes supports overcommitment of resources by supporting multiple levels of [Quality of Service](http://issue.k8s.io/168). @@ -525,19 +531,19 @@ For example, on AWS, the capacity of a node is reported in cores. We plan to revise the definition of the cpu resource to allow for more consistency across providers and platforms. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Get hands-on experience [assigning Memory resources to containers and pods](/docs/tasks/configure-pod-container/assign-memory-resource/). * Get hands-on experience [assigning CPU resources to containers and pods](/docs/tasks/configure-pod-container/assign-cpu-resource/). -* [Container](/docs/reference/generated/kubernetes-api/{{page.version}}/#container-v1-core) +* [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core) + +* [ResourceRequirements](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#resourcerequirements-v1-core) -* [ResourceRequirements](/docs/reference/generated/kubernetes-api/{{page.version}}/#resourcerequirements-v1-core) +{{% /capture %}} -{% endcapture %} -{% include templates/concept.md %} diff --git a/docs/concepts/configuration/organize-cluster-access-kubeconfig.md b/content/en/docs/concepts/configuration/organize-cluster-access-kubeconfig.md similarity index 97% rename from docs/concepts/configuration/organize-cluster-access-kubeconfig.md rename to content/en/docs/concepts/configuration/organize-cluster-access-kubeconfig.md index 5f51e7a574000..44d313f8fe6bb 100644 --- a/docs/concepts/configuration/organize-cluster-access-kubeconfig.md +++ b/content/en/docs/concepts/configuration/organize-cluster-access-kubeconfig.md @@ -1,18 +1,20 @@ --- title: Organizing Cluster Access Using kubeconfig Files +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} Use kubeconfig files to organize information about clusters, users, namespaces, and authentication mechanisms. The `kubectl` command-line tool uses kubeconfig files to find the information it needs to choose a cluster and communicate with the API server of a cluster. +{{< note >}} **Note:** A file that is used to configure access to clusters is called a *kubeconfig file*. This is a generic way of referring to configuration files. It does not mean that there is a file named `kubeconfig`. -{: .note} +{{< /note >}} By default, `kubectl` looks for a file named `config` in the `$HOME/.kube` directory. You can specify other kubeconfig files by setting the `KUBECONFIG` environment @@ -22,10 +24,10 @@ variable or by setting the For step-by-step instructions on creating and specifying kubeconfig files, see [Configure Access to Multiple Clusters](/docs/tasks/access-application-cluster/configure-access-multiple-clusters). -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Supporting multiple clusters, users, and authentication mechanisms @@ -140,14 +142,14 @@ File references on the command line are relative to the current working director In `$HOME/.kube/config`, relative paths are stored relatively, and absolute paths are stored absolutely. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [Configure Access to Multiple Clusters](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/) * [`kubectl config`](/docs/reference/generated/kubectl/kubectl-commands#config) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/configuration/overview.md b/content/en/docs/concepts/configuration/overview.md similarity index 95% rename from docs/concepts/configuration/overview.md rename to content/en/docs/concepts/configuration/overview.md index 3381f9e7eef6f..d0cf8e212e155 100644 --- a/docs/concepts/configuration/overview.md +++ b/content/en/docs/concepts/configuration/overview.md @@ -2,15 +2,16 @@ reviewers: - mikedanese title: Configuration Best Practices +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This document highlights and consolidates configuration best practices that are introduced throughout the user guide, Getting Started documentation, and examples. This is a living document. 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. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## General Configuration Tips - When defining configurations, specify the latest stable API version. @@ -19,7 +20,7 @@ This is a living document. If you think of something that is not on this list bu - Write your configuration files using YAML rather than JSON. Though these formats can be used interchangeably in almost all scenarios, YAML tends to be more user-friendly. -- Group related objects into a single file whenever it makes sense. One file is often easier to manage than several. See the [guestbook-all-in-one.yaml](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/guestbook/all-in-one/guestbook-all-in-one.yaml) file as an example of this syntax. +- Group related objects into a single file whenever it makes sense. One file is often easier to manage than several. See the [guestbook-all-in-one.yaml](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/guestbook/all-in-one/guestbook-all-in-one.yaml) file as an example of this syntax. - Note also that many `kubectl` commands can be called on a directory. For example, you can call `kubectl create` on a directory of config files. @@ -59,7 +60,7 @@ services) (which have a `ClusterIP` of `None`) for easy service discovery when y ## Using Labels -- Define and use [labels](/docs/concepts/overview/working-with-objects/labels/) that identify __semantic attributes__ of your application or Deployment, such as `{ app: myapp, tier: frontend, phase: test, deployment: v3 }`. You can use these labels to select the appropriate Pods for other resources; for example, a Service that selects all `tier: frontend` Pods, or all `phase: test` components of `app: myapp`. See the [guestbook](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/guestbook/) app for examples of this approach. +- Define and use [labels](/docs/concepts/overview/working-with-objects/labels/) that identify __semantic attributes__ of your application or Deployment, such as `{ app: myapp, tier: frontend, phase: test, deployment: v3 }`. You can use these labels to select the appropriate Pods for other resources; for example, a Service that selects all `tier: frontend` Pods, or all `phase: test` components of `app: myapp`. See the [guestbook](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/guestbook/) app for examples of this approach. A Service can be made to span multiple Deployments by omitting release-specific labels from its selector. [Deployments](/docs/concepts/workloads/controllers/deployment/) make it easy to update a running service without downtime. @@ -73,8 +74,9 @@ A desired state of an object is described by a Deployment, and if changes to tha An alternative, but deprecated way to have Kubernetes always pull the image is to use the `:latest` tag, which will implicitly set the `imagePullPolicy` to `Always`. +{{< note >}} **Note:** You should avoid using the `:latest` tag when deploying containers in production, because this makes it hard to track which version of the image is running and hard to roll back. -{: .note} +{{< /note >}} - To make sure the container always uses the same version of the image, you can specify its [digest](https://docs.docker.com/engine/reference/commandline/pull/#pull-an-image-by-digest-immutable-identifier) (for example `sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2`). This uniquely identifies a specific version of the image, so it will never be updated by Kubernetes unless you change the digest value. @@ -86,6 +88,6 @@ A desired state of an object is described by a Deployment, and if changes to tha - Use `kubectl run` and `kubectl expose` to quickly create single-container Deployments and Services. See [Use a Service to Access an Application in a Cluster](/docs/tasks/access-application-cluster/service-access-application-cluster/) for an example. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/configuration/pod-priority-preemption.md b/content/en/docs/concepts/configuration/pod-priority-preemption.md similarity index 97% rename from docs/concepts/configuration/pod-priority-preemption.md rename to content/en/docs/concepts/configuration/pod-priority-preemption.md index dc482b11e1681..9bbc81b7a38da 100644 --- a/docs/concepts/configuration/pod-priority-preemption.md +++ b/content/en/docs/concepts/configuration/pod-priority-preemption.md @@ -3,11 +3,12 @@ reviewers: - davidopp - wojtek-t title: Pod Priority and Preemption +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} -{% include feature-state-alpha.md %} +{{< feature-state state="alpha" >}} [Pods](/docs/user-guide/pods) in Kubernetes 1.8 and later can have priority. Priority indicates the importance of a Pod relative to other Pods. When a Pod cannot be scheduled, @@ -15,9 +16,9 @@ the scheduler tries to preempt (evict) lower priority Pods to make scheduling of pending Pod possible. In Kubernetes 1.9 and later, Priority also affects scheduling order of Pods and out-of-resource eviction ordering on the Node. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## How to use priority and preemption To use priority and preemption in Kubernetes 1.8 and later, follow these steps: @@ -78,19 +79,22 @@ with `globalDefault` set, the priority of Pods with no `priorityClassName` is ze The `description` field is an arbitrary string. It is meant to tell users of the cluster when they should use this PriorityClass. +{{< note >}} **Note 1**: If you upgrade your existing cluster and enable this feature, the priority of your existing Pods will be considered to be zero. -{: .note} +{{< /note >}} +{{< note >}} **Note 2**: Addition of a PriorityClass with `globalDefault` set to true does not change the priorities of existing Pods. The value of such a PriorityClass is used only for Pods created after the PriorityClass is added. -{: .note} +{{< /note >}} +{{< note >}} **Note 3**: If you delete a PriorityClass, existing Pods that use the name of the deleted priority class remain unchanged, but you are not able to create more Pods that use the name of the deleted PriorityClass. -{: .note} +{{< /note >}} ### Example PriorityClass @@ -197,12 +201,13 @@ the answer to this question is yes: "If all the Pods with lower priority than the pending Pod are removed from the Node, can the pending Pod be scheduled on the Node?" +{{< note >}} **Note:** Preemption does not necessarily remove all lower-priority Pods. If the pending Pod can be scheduled by removing fewer than all lower-priority Pods, then only a portion of the lower-priority Pods are removed. Even so, the answer to the preceding question must be yes. If the answer is no, the Node is not considered for preemption. -{: .note} +{{< /note >}} If a pending Pod has inter-pod affinity to one or more of the lower-priority Pods on the Node, the inter-Pod affinity rule cannot be satisfied in the absence of those @@ -235,6 +240,6 @@ We may consider adding cross Node preemption in future versions if we find an algorithm with reasonable performance. We cannot promise anything at this point, and cross Node preemption will not be considered a blocker for Beta or GA. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/configuration/pod-with-node-affinity.yaml b/content/en/docs/concepts/configuration/pod-with-node-affinity.yaml similarity index 100% rename from docs/concepts/configuration/pod-with-node-affinity.yaml rename to content/en/docs/concepts/configuration/pod-with-node-affinity.yaml diff --git a/docs/concepts/configuration/pod-with-pod-affinity.yaml b/content/en/docs/concepts/configuration/pod-with-pod-affinity.yaml similarity index 100% rename from docs/concepts/configuration/pod-with-pod-affinity.yaml rename to content/en/docs/concepts/configuration/pod-with-pod-affinity.yaml diff --git a/docs/concepts/configuration/pod.yaml b/content/en/docs/concepts/configuration/pod.yaml similarity index 100% rename from docs/concepts/configuration/pod.yaml rename to content/en/docs/concepts/configuration/pod.yaml diff --git a/docs/concepts/configuration/secret.md b/content/en/docs/concepts/configuration/secret.md similarity index 98% rename from docs/concepts/configuration/secret.md rename to content/en/docs/concepts/configuration/secret.md index 64cb62709ca37..a90e1f85d7135 100644 --- a/docs/concepts/configuration/secret.md +++ b/content/en/docs/concepts/configuration/secret.md @@ -9,8 +9,7 @@ passwords, OAuth tokens, and ssh keys. Putting this information in a `secret` is safer and more flexible than putting it verbatim in a `pod` definition or in a docker image. See [Secrets design document](https://git.k8s.io/community/contributors/design-proposals/auth/secrets.md) for more information. -* TOC -{:toc} +{{< toc >}} ## Overview of Secrets @@ -266,14 +265,15 @@ spec: - name: foo secret: secretName: mysecret - defaultMode: 0400 + defaultMode: 256 ``` Then, the secret will be mounted on `/etc/foo` and all the files created by the secret volume mount will have permission `0400`. -Note that the JSON spec doesn't support octal notation, so if you use json instead -of yaml for the pod, use the value 256 for 0400 permissions. +Note that the JSON spec doesn't support octal notation, so use the value 256 for +0400 permissions. If you use yaml instead of json for the pod, you can use octal +notation to specify permissions in a more natural way. You can also use mapping, as in the previous example, and specify different permission for different files like this: @@ -297,11 +297,12 @@ spec: items: - key: username path: my-group/my-username - mode: 0777 + mode: 511 ``` In this case, the file resulting in `/etc/foo/my-group/my-username` will have -permission value of `0777`. +permission value of `0777`. Owing to JSON limitations, you must specify the mode +in decimal notation. Note that this permission value might be displayed in decimal notation if you read it later. @@ -334,10 +335,11 @@ However, it is using its local ttl-based cache for getting the current value of As a result, the total delay from the moment when the secret is updated to the moment when new keys are projected to the pod can be as long as kubelet sync period + ttl of secrets cache in kubelet. +{{< note >}} **Note:** A container using a Secret as a [subPath](/docs/concepts/storage/volumes#using-subpath) volume mount will not receive Secret updates. -{: .note} +{{< /note >}} #### Using Secrets as Environment Variables @@ -745,5 +747,6 @@ Pod level](#use-case-secret-visible-to-one-container-in-a-pod). nodes that actually require them, to restrict the impact of a root exploit on a single node. +{{< note >}} **Note:** As of 1.7 [encryption of secret data at rest is supported](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/). -{: .note} +{{< /note >}} diff --git a/docs/concepts/configuration/taint-and-toleration.md b/content/en/docs/concepts/configuration/taint-and-toleration.md similarity index 99% rename from docs/concepts/configuration/taint-and-toleration.md rename to content/en/docs/concepts/configuration/taint-and-toleration.md index 594ced33d2205..03927a6c7c8a3 100644 --- a/docs/concepts/configuration/taint-and-toleration.md +++ b/content/en/docs/concepts/configuration/taint-and-toleration.md @@ -17,8 +17,7 @@ marks that the node should not accept any pods that do not tolerate the taints. Tolerations are applied to pods, and allow (but do not require) the pods to schedule onto nodes with matching taints. -* TOC -{:toc} +{{< toc >}} ## Concepts diff --git a/content/en/docs/concepts/containers/_index.md b/content/en/docs/concepts/containers/_index.md new file mode 100755 index 0000000000000..5800f8a31059e --- /dev/null +++ b/content/en/docs/concepts/containers/_index.md @@ -0,0 +1,5 @@ +--- +title: "Containers" +weight: 50 +--- + diff --git a/docs/concepts/containers/container-environment-variables.md b/content/en/docs/concepts/containers/container-environment-variables.md similarity index 87% rename from docs/concepts/containers/container-environment-variables.md rename to content/en/docs/concepts/containers/container-environment-variables.md index 0637e72f6f52f..b5fb026b30e7e 100644 --- a/docs/concepts/containers/container-environment-variables.md +++ b/content/en/docs/concepts/containers/container-environment-variables.md @@ -3,17 +3,18 @@ reviewers: - mikedanese - thockin title: Container Environment Variables +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page describes the resources available to Containers in the Container environment. -{% endcapture %} +{{% /capture %}} -{:toc} +{{< toc >}} -{% capture body %} +{{% capture body %}} ## Container environment @@ -50,16 +51,16 @@ FOO_SERVICE_PORT= ``` Services have dedicated IP addresses and are available to the Container via DNS, -if [DNS addon](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/dns/) is enabled.  +if [DNS addon](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/dns/) is enabled.  -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [Container lifecycle hooks](/docs/concepts/containers/container-lifecycle-hooks/). * Get hands-on experience [attaching handlers to Container lifecycle events](/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/). -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/containers/container-lifecycle-hooks.md b/content/en/docs/concepts/containers/container-lifecycle-hooks.md similarity index 97% rename from docs/concepts/containers/container-lifecycle-hooks.md rename to content/en/docs/concepts/containers/container-lifecycle-hooks.md index b7f90f8f94be0..0ab21d2e6fd6f 100644 --- a/docs/concepts/containers/container-lifecycle-hooks.md +++ b/content/en/docs/concepts/containers/container-lifecycle-hooks.md @@ -3,18 +3,19 @@ reviewers: - mikedanese - thockin title: Container Lifecycle Hooks +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page describes how kubelet managed Containers can use the Container lifecycle hook framework to run code triggered by events during their management lifecycle. -{% endcapture %} +{{% /capture %}} -{:toc} +{{< toc >}} -{% capture body %} +{{% capture body %}} ## Overview @@ -111,14 +112,14 @@ Events: 1m 22s 2 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Warning FailedPostStartHook ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about the [Container environment](/docs/concepts/containers/container-environment-variables/). * Get hands-on experience [attaching handlers to Container lifecycle events](/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/). -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/containers/images.md b/content/en/docs/concepts/containers/images.md similarity index 99% rename from docs/concepts/containers/images.md rename to content/en/docs/concepts/containers/images.md index 3a374315f7614..a8c1c931e95a0 100644 --- a/docs/concepts/containers/images.md +++ b/content/en/docs/concepts/containers/images.md @@ -3,19 +3,20 @@ reviewers: - erictune - thockin title: Images +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} 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. -{% endcapture %} +{{% /capture %}} -{:toc} +{{< toc >}} -{% capture body %} +{{% capture body %}} ## Updating Images @@ -321,6 +322,6 @@ common use cases and suggested solutions. - Generate registry credential for each tenant, put into secret, and populate secret to each tenant namespace. - The tenant adds that secret to imagePullSecrets of each namespace. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/example-concept-template.md b/content/en/docs/concepts/example-concept-template.md similarity index 78% rename from docs/concepts/example-concept-template.md rename to content/en/docs/concepts/example-concept-template.md index 9662f7c73c307..4f953a885542a 100644 --- a/docs/concepts/example-concept-template.md +++ b/content/en/docs/concepts/example-concept-template.md @@ -2,17 +2,18 @@ title: Example Concept Template reviewers: - chenopis +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} **NOTE:** Be sure to also [create an entry in the table of contents](/docs/home/contribute/write-new-topic/#creating-an-entry-in-the-table-of-contents) for your new document. This page explains ... -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Understanding ... @@ -22,15 +23,15 @@ Kubernetes provides ... To use ... -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} **[Optional Section]** * Learn more about [Writing a New Topic](/docs/home/contribute/write-new-topic/). * See [Using Page Templates - Concept template](/docs/home/contribute/page-templates/#concept_template) for how to use this template. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/content/en/docs/concepts/overview/_index.md b/content/en/docs/concepts/overview/_index.md new file mode 100755 index 0000000000000..93a6320fa5da2 --- /dev/null +++ b/content/en/docs/concepts/overview/_index.md @@ -0,0 +1,5 @@ +--- +title: "Overview" +weight: 20 +--- + diff --git a/docs/concepts/overview/components.md b/content/en/docs/concepts/overview/components.md similarity index 91% rename from docs/concepts/overview/components.md rename to content/en/docs/concepts/overview/components.md index b0922293c3081..800d72becb5de 100644 --- a/docs/concepts/overview/components.md +++ b/content/en/docs/concepts/overview/components.md @@ -2,14 +2,15 @@ reviewers: - lavalamp title: Kubernetes Components +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This document outlines the various binary components needed to deliver a functioning Kubernetes cluster. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Master Components Master components provide the cluster's control plane. Master components make global decisions about the @@ -22,19 +23,19 @@ the same machine, and do not run user containers on this machine. See ### kube-apiserver -{% glossary_definition term_id="kube-apiserver" length="all" %} +{{< glossary_definition term_id="kube-apiserver" length="all" >}} ### etcd -{% glossary_definition term_id="etcd" length="all" %} +{{< glossary_definition term_id="etcd" length="all" >}} ### kube-scheduler -{% glossary_definition term_id="kube-scheduler" length="all" %} +{{< glossary_definition term_id="kube-scheduler" length="all" >}} ### kube-controller-manager -{% glossary_definition term_id="kube-controller-manager" length="all" %} +{{< glossary_definition term_id="kube-controller-manager" length="all" >}} These controllers include: @@ -65,7 +66,7 @@ Node components run on every node, maintaining running pods and providing the Ku ### kubelet -{% glossary_definition term_id="kubelet" length="all" %} +{{< glossary_definition term_id="kubelet" length="all" >}} ### kube-proxy @@ -106,6 +107,6 @@ about containers in a central database, and provides a UI for browsing that data A [Cluster-level logging](/docs/concepts/cluster-administration/logging/) mechanism is responsible for saving container logs to a central log store with search/browsing interface. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/overview/extending.md b/content/en/docs/concepts/overview/extending.md similarity index 96% rename from docs/concepts/overview/extending.md rename to content/en/docs/concepts/overview/extending.md index e17b40f855ae4..fcb796e9baf1a 100644 --- a/docs/concepts/overview/extending.md +++ b/content/en/docs/concepts/overview/extending.md @@ -5,26 +5,26 @@ reviewers: - lavalamp - cheftako - chenopis +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} Kubernetes is highly configurable and extensible. As a result, there is rarely a need to fork or submit patches to the Kubernetes project code. This guide describes the options for customizing a Kubernetes -cluster. It is aimed at {% glossary_tooltip text="Cluster Operators" term_id="cluster-operator" %} who want to +cluster. It is aimed at {{< glossary_tooltip text="Cluster Operators" term_id="cluster-operator" >}} who want to understand how to adapt their Kubernetes cluster to the needs of -their work environment. Developers who are prospective {% glossary_tooltip text="Platform -Developers" term_id="platform-developer" %} or Kubernetes Project {% glossary_tooltip text="Contributors" term_id="contributor" %} will also find it +their work environment. Developers who are prospective {{< glossary_tooltip text="Platform Developers" term_id="platform-developer" >}} or Kubernetes Project {{< glossary_tooltip text="Contributors" term_id="contributor" >}} will also find it useful as an introduction to what extension points and patterns exist, and their trade-offs and limitations. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Overview @@ -194,10 +194,10 @@ The scheduler also supports a that permits a webhook backend (scheduler extension) to filter and prioritize the nodes chosen for a pod. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [Custom Resources](/docs/concepts/api-extension/custom-resources/) * Learn about [Dynamic admission control](/docs/admin/extensible-admission-controllers/) @@ -208,8 +208,8 @@ the nodes chosen for a pod. * See examples of Automation * [List of Operators](https://github.com/coreos/awesome-kubernetes-extensions) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/overview/kubernetes-api.md b/content/en/docs/concepts/overview/kubernetes-api.md similarity index 100% rename from docs/concepts/overview/kubernetes-api.md rename to content/en/docs/concepts/overview/kubernetes-api.md diff --git a/content/en/docs/concepts/overview/object-management-kubectl/_index.md b/content/en/docs/concepts/overview/object-management-kubectl/_index.md new file mode 100755 index 0000000000000..15a9df12323af --- /dev/null +++ b/content/en/docs/concepts/overview/object-management-kubectl/_index.md @@ -0,0 +1,5 @@ +--- +title: "Object Management Using kubectl" +weight: 50 +--- + diff --git a/docs/concepts/overview/object-management-kubectl/declarative-config.md b/content/en/docs/concepts/overview/object-management-kubectl/declarative-config.md similarity index 96% rename from docs/concepts/overview/object-management-kubectl/declarative-config.md rename to content/en/docs/concepts/overview/object-management-kubectl/declarative-config.md index 0a7628487ac5e..223cdbb8e7e85 100644 --- a/docs/concepts/overview/object-management-kubectl/declarative-config.md +++ b/content/en/docs/concepts/overview/object-management-kubectl/declarative-config.md @@ -1,16 +1,17 @@ --- title: Declarative Management of Kubernetes Objects Using Configuration Files +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} Kubernetes objects can be created, updated, and deleted by storing multiple object configuration files in a directory and using `kubectl apply` to recursively create and update those objects as needed. This method retains writes made to live objects without merging the changes back into the object configuration files. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Trade-offs @@ -61,7 +62,7 @@ configuration file that was used to create the object. Here's an example of an object configuration file: -{% include code.html language="yaml" file="simple_deployment.yaml" ghlink="/docs/concepts/overview/object-management-kubectl/simple_deployment.yaml" %} +{{< code file="simple_deployment.yaml" >}} Create the object using `kubectl apply`: @@ -133,7 +134,7 @@ kubectl apply -f / Here's an example configuration file: -{% include code.html language="yaml" file="simple_deployment.yaml" ghlink="/docs/concepts/overview/object-management-kubectl/simple_deployment.yaml" %} +{{< code file="simple_deployment.yaml" >}} Create the object using `kubectl apply`: @@ -249,7 +250,7 @@ spec: Update the `simple_deployment.yaml` configuration file to change the image from `nginx:1.7.9` to `nginx:1.11.9`, and delete the `minReadySeconds` field: -{% include code.html language="yaml" file="update_deployment.yaml" ghlink="/docs/concepts/overview/object-management-kubectl/update_deployment.yaml" %} +{{< code file="update_deployment.yaml" >}} Apply the changes made to the configuration file: @@ -350,9 +351,9 @@ configuration files. If an object matches the query, and it does not have a configuration file in the directory, and it has a `last-applied-configuration` annotation, it is deleted. -{% comment %} +{{< comment >}} TODO(pwittrock): We need to change the behavior to prevent the user from running apply on subdirectories unintentionally. -{% endcomment %} +{{< /comment >}} ```shell kubectl apply -f --prune -l @@ -399,7 +400,7 @@ to calculate which fields should be deleted or set: Here's an example. Suppose this is the configuration file for a Deployment object: -{% include code.html language="yaml" file="update_deployment.yaml" ghlink="/docs/concepts/overview/object-management-kubectl/update_deployment.yaml" %} +{{< code file="update_deployment.yaml" >}} Also, suppose this is the live configuration for the same Deployment object: @@ -499,11 +500,11 @@ spec: # ... ``` -{% comment %} +{{< comment >}} TODO(1.6): For 1.6, add the following bullet point to 1. - clear fields explicitly set to null in the local object configuration file regardless of whether they appear in the last-applied-configuration -{% endcomment %} +{{< /comment >}} ### How different types of fields are merged @@ -674,7 +675,7 @@ the `patchStrategy` tag in [types.go](https://git.k8s.io/api/core/v1/types.go#L2 If no `patchStrategy` is specified for a field of type list, then the list is replaced. -{% comment %} +{{< comment >}} TODO(pwittrock): Uncomment this for 1.6 - Treat the list as a set of primitives. Replace or delete individual @@ -683,7 +684,7 @@ TODO(pwittrock): Uncomment this for 1.6 **Example:** Using apply to update the `finalizers` field of ObjectMeta keeps elements added to the live configuration. Ordering of finalizers is lost. -{% endcomment %} +{{< /comment >}} ## Default field values @@ -692,7 +693,7 @@ not specified when the object is created. Here's a configuration file for a Deployment. The file does not specify `strategy` or `selector`: -{% include code.html language="yaml" file="simple_deployment.yaml" ghlink="/docs/concepts/overview/object-management-kubectl/simple_deployment.yaml" %} +{{< code file="simple_deployment.yaml" >}} Create the object using `kubectl apply`: @@ -869,14 +870,14 @@ Option 2: Remove the field through the configuration file. 1. Delete the field from the configuration file. 1. Apply the configuration file; this deletes the field from the live object and annotation. -{% comment %} +{{< comment >}} TODO(1.6): Update this with the following for 1.6 Fields that do not appear in the configuration file can be cleared by setting their values to `null` and then applying the configuration file. For fields defaulted by the server, this triggers re-defaulting the values. -{% endcomment %} +{{< /comment >}} ## How to change ownership of a field between the configuration file and direct imperative writers @@ -906,13 +907,13 @@ Switching from one method to another is possible, but is a manual process. **Exception:** It is OK to use imperative deletion with declarative management. -{% comment %} +{{< comment >}} TODO(pwittrock): We need to make using imperative commands with declarative object configuration work so that it doesn't write the fields to the annotation, and instead. Then add this bullet point. - using imperative commands with declarative configuration to manage where each manages different fields. -{% endcomment %} +{{< /comment >}} ### Migrating from imperative command management to declarative object configuration @@ -934,9 +935,9 @@ configuration involves several manual steps: 1. Change processes to use `kubectl apply` for managing the object exclusively. -{% comment %} +{{< comment >}} TODO(pwittrock): Why doesn't export remove the status field? Seems like it should. -{% endcomment %} +{{< /comment >}} ### Migrating from imperative object configuration to declarative object configuration @@ -970,13 +971,13 @@ template: * Prior to Kubernetes 1.6, `kubectl apply` did not support operating on objects stored in a [custom resource](/docs/concepts/api-extension/custom-resources/). For these cluster versions, you should instead use [imperative object configuration](/docs/concepts/overview/object-management-kubectl/imperative-config/). -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} - [Managing Kubernetes Objects Using Imperative Commands](/docs/concepts/overview/object-management-kubectl/imperative-command/) - [Imperative Management of Kubernetes Objects Using Configuration Files](/docs/concepts/overview/object-management-kubectl/imperative-config/) - [Kubectl Command Reference](/docs/reference/generated/kubectl/kubectl/) -- [Kubernetes API Reference](/docs/reference/generated/kubernetes-api/{{page.version}}/) -{% endcapture %} +- [Kubernetes API Reference](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/) +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/overview/object-management-kubectl/imperative-command.md b/content/en/docs/concepts/overview/object-management-kubectl/imperative-command.md similarity index 95% rename from docs/concepts/overview/object-management-kubectl/imperative-command.md rename to content/en/docs/concepts/overview/object-management-kubectl/imperative-command.md index 6c527399a818e..9d02d928c10ec 100644 --- a/docs/concepts/overview/object-management-kubectl/imperative-command.md +++ b/content/en/docs/concepts/overview/object-management-kubectl/imperative-command.md @@ -1,14 +1,15 @@ --- title: Managing Kubernetes Objects Using Imperative Commands +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} Kubernetes objects can quickly be created, updated, and deleted directly using imperative commands built into the `kubectl` command-line tool. This document explains how those commands are organized and how to use them to manage live objects. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Trade-offs @@ -73,9 +74,10 @@ Setting this aspect may set different fields for different object types: - `set` : Set an aspect of an object. +{{< note >}} **Note**: In Kubernetes version 1.5, not every verb-driven command has an associated aspect-driven command. -{: .note} +{{< /note >}} The `kubectl` tool supports these additional ways to update a live object directly, however they require a better understanding of the Kubernetes object schema. @@ -91,11 +93,12 @@ You can use the `delete` command to delete an object from a cluster: - `delete /` +{{< note >}} **Note**: You can use `kubectl delete` for both imperative commands and imperative object configuration. The difference is in the arguments passed to the command. To use `kubectl delete` as an imperative command, pass the object to be deleted as an argument. Here's an example that passes a Deployment object named nginx: -{: .note} +{{< /note >}} ```shell kubectl delete deployment/nginx @@ -103,14 +106,14 @@ kubectl delete deployment/nginx ## How to view an object -{% comment %} +{{< comment >}} TODO(pwittrock): Uncomment this when implemented. You can use `kubectl view` to print specific fields of an object. - `view`: Prints the value of a specific field of an object. -{% endcomment %} +{{< /comment >}} @@ -149,13 +152,13 @@ kubectl create --edit -f /tmp/srv.yaml 1. The `kubectl create service` command creates the configuration for the Service and saves it to `/tmp/srv.yaml`. 1. The `kubectl create --edit` command opens the configuration file for editing before it creates the object. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} - [Managing Kubernetes Objects Using Object Configuration (Imperative)](/docs/concepts/overview/object-management-kubectl/imperative-config/) - [Managing Kubernetes Objects Using Object Configuration (Declarative)](/docs/concepts/overview/object-management-kubectl/declarative-config/) - [Kubectl Command Reference](/docs/reference/generated/kubectl/kubectl/) -- [Kubernetes API Reference](/docs/reference/generated/kubernetes-api/{{page.version}}/) -{% endcapture %} +- [Kubernetes API Reference](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/) +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/overview/object-management-kubectl/imperative-config.md b/content/en/docs/concepts/overview/object-management-kubectl/imperative-config.md similarity index 95% rename from docs/concepts/overview/object-management-kubectl/imperative-config.md rename to content/en/docs/concepts/overview/object-management-kubectl/imperative-config.md index 639a32946be79..77fc318d33b98 100644 --- a/docs/concepts/overview/object-management-kubectl/imperative-config.md +++ b/content/en/docs/concepts/overview/object-management-kubectl/imperative-config.md @@ -1,14 +1,15 @@ --- title: Imperative Management of Kubernetes Objects Using Configuration Files +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} Kubernetes objects can be created, updated, and deleted by using the `kubectl` command-line tool along with an object configuration file written in YAML or JSON. This document explains how to define and manage objects using configuration files. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Trade-offs @@ -24,7 +25,7 @@ for a discussion of the advantages and disadvantage of each kind of object manag ## How to create objects You can use `kubectl create -f` to create an object from a configuration file. -Refer to the [kubernetes API reference](/docs/reference/generated/kubernetes-api/{{page.version}}/) +Refer to the [kubernetes API reference](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/) for details. - `kubectl create -f ` @@ -125,13 +126,13 @@ template: controller-selector: "extensions/v1beta1/deployment/nginx" ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} - [Managing Kubernetes Objects Using Imperative Commands](/docs/concepts/overview/object-management-kubectl/imperative-command/) - [Managing Kubernetes Objects Using Object Configuration (Declarative)](/docs/concepts/overview/object-management-kubectl/declarative-config/) - [Kubectl Command Reference](/docs/reference/generated/kubectl/kubectl/) -- [Kubernetes API Reference](/docs/reference/generated/kubernetes-api/{{page.version}}/) -{% endcapture %} +- [Kubernetes API Reference](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/) +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/overview/object-management-kubectl/overview.md b/content/en/docs/concepts/overview/object-management-kubectl/overview.md similarity index 94% rename from docs/concepts/overview/object-management-kubectl/overview.md rename to content/en/docs/concepts/overview/object-management-kubectl/overview.md index 2d2a2a37fa6f1..88a7fe0c0f4af 100644 --- a/docs/concepts/overview/object-management-kubectl/overview.md +++ b/content/en/docs/concepts/overview/object-management-kubectl/overview.md @@ -1,20 +1,22 @@ --- title: Kubernetes Object Management +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} The `kubectl` command-line tool supports several different ways to create and manage Kubernetes objects. This document provides an overview of the different approaches. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Management techniques +{{< warning >}} **Warning:** A Kubernetes object should be managed using only one technique. Mixing and matching techniques for the same object results in undefined behavior. -{: .warning} +{{< /warning >}} | Management technique | Operates on |Recommended environment | Supported writers | Learning curve | |----------------------------------|----------------------|------------------------|--------------------|----------------| @@ -67,16 +69,17 @@ operation (create, replace, etc.), optional flags and at least one file name. The file specified must contain a full definition of the object in YAML or JSON format. -See the [API reference](/docs/reference/generated/kubernetes-api/{{page.version}}/) +See the [API reference](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/) for more details on object definitions. +{{< warning >}} **Warning:** The imperative `replace` command replaces the existing spec with the newly provided one, dropping all changes to the object missing from the configuration file. This approach should not be used with resource types whose specs are updated independently of the configuration file. Services of type `LoadBalancer`, for example, have their `externalIPs` field updated independently from the configuration by the cluster. -{: .warning} +{{< /warning >}} ### Examples @@ -130,12 +133,13 @@ operations to be taken on the files. Create, update, and delete operations are automatically detected per-object by `kubectl`. This enables working on directories, where different operations might be needed for different objects. +{{< note >}} **Note:** Declarative object configuration retains changes made by other writers, even if the changes are not merged back to the object configuration file. This is possible by using the `patch` API operation to write only observed differences, instead of using the `replace` API operation to replace the entire object configuration. -{: .note} +{{< /note >}} ### Examples @@ -164,17 +168,17 @@ Disadvantages compared to imperative object configuration: - Declarative object configuration is harder to debug and understand results when they are unexpected. - Partial updates using diffs create complex merge and patch operations. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} - [Managing Kubernetes Objects Using Imperative Commands](/docs/concepts/overview/object-management-kubectl/imperative-command/) - [Managing Kubernetes Objects Using Object Configuration (Imperative)](/docs/concepts/overview/object-management-kubectl/imperative-config/) - [Managing Kubernetes Objects Using Object Configuration (Declarative)](/docs/concepts/overview/object-management-kubectl/declarative-config/) - [Kubectl Command Reference](/docs/reference/generated/kubectl/kubectl/) -- [Kubernetes API Reference](/docs/reference/generated/kubernetes-api/{{page.version}}/) +- [Kubernetes API Reference](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/) + +{{< comment >}} +{{< /comment >}} +{{% /capture %}} -{% comment %} -{% endcomment %} -{% endcapture %} -{% include templates/concept.md %} diff --git a/docs/concepts/overview/object-management-kubectl/simple_deployment.yaml b/content/en/docs/concepts/overview/object-management-kubectl/simple_deployment.yaml similarity index 100% rename from docs/concepts/overview/object-management-kubectl/simple_deployment.yaml rename to content/en/docs/concepts/overview/object-management-kubectl/simple_deployment.yaml diff --git a/docs/concepts/overview/object-management-kubectl/update_deployment.yaml b/content/en/docs/concepts/overview/object-management-kubectl/update_deployment.yaml similarity index 100% rename from docs/concepts/overview/object-management-kubectl/update_deployment.yaml rename to content/en/docs/concepts/overview/object-management-kubectl/update_deployment.yaml diff --git a/docs/concepts/overview/what-is-kubernetes.md b/content/en/docs/concepts/overview/what-is-kubernetes.md similarity index 97% rename from docs/concepts/overview/what-is-kubernetes.md rename to content/en/docs/concepts/overview/what-is-kubernetes.md index 3e84cb279a754..8b9cb9db50413 100644 --- a/docs/concepts/overview/what-is-kubernetes.md +++ b/content/en/docs/concepts/overview/what-is-kubernetes.md @@ -3,13 +3,14 @@ reviewers: - bgrant0607 - mikedanese title: What is Kubernetes? +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page is an overview of Kubernetes. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} Kubernetes is a portable, extensible open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly @@ -58,7 +59,7 @@ Additionally, the [Kubernetes control plane](/docs/concepts/overview/components/) is built upon the same [APIs](/docs/reference/api-overview/) that are available to developers and users. Users can write their own controllers, such as -[schedulers](https://github.com/kubernetes/community/blob/{{page.githubbranch}}/contributors/devel/scheduler.md), +[schedulers](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/devel/scheduler.md), with [their own APIs](/docs/concepts/api-extension/custom-resources/) that can be targeted by a general-purpose [command-line @@ -194,11 +195,11 @@ The name **Kubernetes** originates from Greek, meaning *helmsman* or is an abbreviation derived by replacing the 8 letters "ubernete" with "8". -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Ready to [Get Started](/docs/setup/)? * For more details, see the [Kubernetes Documentation](/docs/home/). -{% endcapture %} -{% include templates/concept.md %} +{{% /capture %}} + diff --git a/content/en/docs/concepts/overview/working-with-objects/_index.md b/content/en/docs/concepts/overview/working-with-objects/_index.md new file mode 100755 index 0000000000000..8661349a3fbc4 --- /dev/null +++ b/content/en/docs/concepts/overview/working-with-objects/_index.md @@ -0,0 +1,5 @@ +--- +title: "Working with Kubernetes Objects" +weight: 40 +--- + diff --git a/docs/concepts/overview/working-with-objects/annotations.md b/content/en/docs/concepts/overview/working-with-objects/annotations.md similarity index 92% rename from docs/concepts/overview/working-with-objects/annotations.md rename to content/en/docs/concepts/overview/working-with-objects/annotations.md index 6fc07236eb292..b415766c39cfa 100644 --- a/docs/concepts/overview/working-with-objects/annotations.md +++ b/content/en/docs/concepts/overview/working-with-objects/annotations.md @@ -1,13 +1,14 @@ --- title: Annotations +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} You can use Kubernetes annotations to attach arbitrary non-identifying metadata to objects. Clients such as tools and libraries can retrieve this metadata. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Attaching metadata to objects You can use either labels or annotations to attach metadata to Kubernetes @@ -56,10 +57,10 @@ external database or directory, but that would make it much harder to produce shared client libraries and tools for deployment, management, introspection, and the like. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Learn more about [Labels and Selectors](/docs/concepts/overview/working-with-objects/labels/). -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/overview/working-with-objects/kubernetes-objects.md b/content/en/docs/concepts/overview/working-with-objects/kubernetes-objects.md similarity index 88% rename from docs/concepts/overview/working-with-objects/kubernetes-objects.md rename to content/en/docs/concepts/overview/working-with-objects/kubernetes-objects.md index 00d84cca3eafc..71f3f74be0d2d 100644 --- a/docs/concepts/overview/working-with-objects/kubernetes-objects.md +++ b/content/en/docs/concepts/overview/working-with-objects/kubernetes-objects.md @@ -1,12 +1,13 @@ --- title: Understanding Kubernetes Objects +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page explains how Kubernetes objects are represented in the Kubernetes API, and how you can express them in `.yaml` format. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Understanding Kubernetes Objects *Kubernetes Objects* are persistent entities in the Kubernetes system. Kubernetes uses these entities to represent the state of your cluster. Specifically, they can describe: @@ -34,7 +35,7 @@ When you create an object in Kubernetes, you must provide the object spec that d Here's an example `.yaml` file that shows the required fields and object spec for a Kubernetes Deployment: -{% include code.html language="yaml" file="nginx-deployment.yaml" ghlink="/docs/concepts/overview/working-with-objects/nginx-deployment.yaml" %} +{{< code file="nginx-deployment.yaml" >}} One way to create a Deployment using a `.yaml` file like the one above is to use the [`kubectl create`](/docs/reference/generated/kubectl/kubectl-commands#create) command in the `kubectl` command-line interface, passing the `.yaml` file as an argument. Here's an example: @@ -56,16 +57,16 @@ In the `.yaml` file for the Kubernetes object you want to create, you'll need to * `kind` - What kind of object you want to create * `metadata` - Data that helps uniquely identify the object, including a `name` string, UID, and optional `namespace` -You'll also need to provide the object `spec` field. The precise format of the object `spec` is different for every Kubernetes object, and contains nested fields specific to that object. The [Kubernetes API Reference](/docs/reference/generated/kubernetes-api/{{page.version}}/) can help you find the spec format for all of the objects you can create using Kubernetes. +You'll also need to provide the object `spec` field. The precise format of the object `spec` is different for every Kubernetes object, and contains nested fields specific to that object. The [Kubernetes API Reference](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/) can help you find the spec format for all of the objects you can create using Kubernetes. For example, the `spec` format for a `Pod` object can be found -[here](/docs/reference/generated/kubernetes-api/{{page.version}}/#podspec-v1-core), +[here](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core), and the `spec` format for a `Deployment` object can be found -[here](/docs/reference/generated/kubernetes-api/{{page.version}}/#deploymentspec-v1-apps). +[here](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#deploymentspec-v1-apps). -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn about the most important basic Kubernetes objects, such as [Pod](/docs/concepts/workloads/pods/pod-overview/). -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/overview/working-with-objects/labels.md b/content/en/docs/concepts/overview/working-with-objects/labels.md similarity index 99% rename from docs/concepts/overview/working-with-objects/labels.md rename to content/en/docs/concepts/overview/working-with-objects/labels.md index 1c16303449467..e76798eb4810d 100644 --- a/docs/concepts/overview/working-with-objects/labels.md +++ b/content/en/docs/concepts/overview/working-with-objects/labels.md @@ -20,8 +20,7 @@ Each object can have a set of key/value labels defined. Each Key must be unique We'll eventually index and reverse-index labels for efficient queries and watches, use them to sort and group in UIs and CLIs, etc. We don't want to pollute labels with non-identifying, especially large and/or structured, data. Non-identifying information should be recorded using [annotations](/docs/concepts/overview/working-with-objects/annotations/). -* TOC -{:toc} +{{< toc >}} ## Motivation @@ -59,8 +58,9 @@ An empty label selector (that is, one with zero requirements) selects every obje A null label selector (which is only possible for optional selector fields) selects no objects. +{{< note >}} **Note**: the label selectors of two controllers must not overlap within a namespace, otherwise they will fight with each other. -{: .note} +{{< /note >}} ### _Equality-based_ requirement diff --git a/docs/concepts/overview/working-with-objects/names.md b/content/en/docs/concepts/overview/working-with-objects/names.md similarity index 86% rename from docs/concepts/overview/working-with-objects/names.md rename to content/en/docs/concepts/overview/working-with-objects/names.md index f2aa7fb1125b2..a80940f7a2591 100644 --- a/docs/concepts/overview/working-with-objects/names.md +++ b/content/en/docs/concepts/overview/working-with-objects/names.md @@ -13,10 +13,10 @@ See the [identifiers design doc](https://git.k8s.io/community/contributors/desig ## Names -{% glossary_definition term_id="name" length="all" %} +{{< glossary_definition term_id="name" length="all" >}} 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. ## UIDs -{% glossary_definition term_id="uid" length="all" %} +{{< glossary_definition term_id="uid" length="all" >}} diff --git a/docs/concepts/overview/working-with-objects/namespaces.md b/content/en/docs/concepts/overview/working-with-objects/namespaces.md similarity index 100% rename from docs/concepts/overview/working-with-objects/namespaces.md rename to content/en/docs/concepts/overview/working-with-objects/namespaces.md diff --git a/docs/concepts/overview/working-with-objects/nginx-deployment.yaml b/content/en/docs/concepts/overview/working-with-objects/nginx-deployment.yaml similarity index 100% rename from docs/concepts/overview/working-with-objects/nginx-deployment.yaml rename to content/en/docs/concepts/overview/working-with-objects/nginx-deployment.yaml diff --git a/content/en/docs/concepts/policy/_index.md b/content/en/docs/concepts/policy/_index.md new file mode 100755 index 0000000000000..4305fa559d598 --- /dev/null +++ b/content/en/docs/concepts/policy/_index.md @@ -0,0 +1,5 @@ +--- +title: "Policies" +weight: 160 +--- + diff --git a/docs/concepts/policy/example-psp.yaml b/content/en/docs/concepts/policy/example-psp.yaml similarity index 100% rename from docs/concepts/policy/example-psp.yaml rename to content/en/docs/concepts/policy/example-psp.yaml diff --git a/docs/concepts/policy/pod-security-policy.md b/content/en/docs/concepts/policy/pod-security-policy.md similarity index 98% rename from docs/concepts/policy/pod-security-policy.md rename to content/en/docs/concepts/policy/pod-security-policy.md index d73baed1cc293..a20287498eeac 100644 --- a/docs/concepts/policy/pod-security-policy.md +++ b/content/en/docs/concepts/policy/pod-security-policy.md @@ -5,13 +5,12 @@ reviewers: title: Pod Security Policies --- -{% include feature-state-beta.md %} +{{< feature-state state="beta" >}} Pod Security Policies enable fine-grained authorization of pod creation and updates. -* TOC -{:toc} +{{< toc >}} ## What is a Pod Security Policy? @@ -187,7 +186,7 @@ $ alias kubectl-user='kubectl --as=system:serviceaccount:psp-example:fake-user - Define the example PodSecurityPolicy object in a file. This is a policy that simply prevents the creation of privileged pods. -{% include code.html language="yaml" file="example-psp.yaml" ghlink="/docs/concepts/policy/example-psp.yaml" %} +{{< code file="example-psp.yaml" >}} And create it with kubectl: @@ -348,13 +347,13 @@ podsecuritypolicy "example" deleted This is the least restricted policy you can create, equivalent to not using the pod security policy admission controller: -{% include code.html language="yaml" file="privileged-psp.yaml" ghlink="/docs/concepts/policy/privileged-psp.yaml" %} +{{< code file="privileged-psp.yaml" >}} This is an example of a restrictive policy that requires users to run as an unprivileged user, blocks possible escalations to root, and requires use of several security mechanisms. -{% include code.html language="yaml" file="restricted-psp.yaml" ghlink="/docs/concepts/policy/restricted-psp.yaml" %} +{{< code file="restricted-psp.yaml" >}} ## Policy Reference diff --git a/docs/concepts/policy/privileged-psp.yaml b/content/en/docs/concepts/policy/privileged-psp.yaml similarity index 100% rename from docs/concepts/policy/privileged-psp.yaml rename to content/en/docs/concepts/policy/privileged-psp.yaml diff --git a/docs/concepts/policy/resource-quotas.md b/content/en/docs/concepts/policy/resource-quotas.md similarity index 100% rename from docs/concepts/policy/resource-quotas.md rename to content/en/docs/concepts/policy/resource-quotas.md diff --git a/docs/concepts/policy/restricted-psp.yaml b/content/en/docs/concepts/policy/restricted-psp.yaml similarity index 100% rename from docs/concepts/policy/restricted-psp.yaml rename to content/en/docs/concepts/policy/restricted-psp.yaml diff --git a/docs/concepts/service-catalog/index.md b/content/en/docs/concepts/service-catalog/_index.md similarity index 91% rename from docs/concepts/service-catalog/index.md rename to content/en/docs/concepts/service-catalog/_index.md index ed39b3b53471b..94a5430477d22 100644 --- a/docs/concepts/service-catalog/index.md +++ b/content/en/docs/concepts/service-catalog/_index.md @@ -2,23 +2,25 @@ title: Service Catalog reviewers: - chenopis +content_template: templates/concept +toc_hide: true --- -{% capture overview %} -{% glossary_definition term_id="service-catalog" length="all" prepend="Service Catalog is" %} +{{% capture overview %}} +{{< glossary_definition term_id="service-catalog" length="all" prepend="Service Catalog is" >}} A service broker, as defined by the [Open service broker API spec](https://github.com/openservicebrokerapi/servicebroker/blob/v2.13/spec.md), is an endpoint for a set of managed services offered and maintained by a third-party, which could be a cloud provider such as AWS, GCP, or Azure. Some examples of managed services are Microsoft Azure Cloud Queue, Amazon Simple Queue Service, and Google Cloud Pub/Sub, but they can be any software offering that can be used by an application. -Using Service Catalog, a {% glossary_tooltip text="cluster operator" term_id="cluster-operator" %} can browse the list of managed services offered by a service broker, provision an instance of a managed service, and bind with it to make it available to an application in the Kubernetes cluster. +Using Service Catalog, a {{< glossary_tooltip text="cluster operator" term_id="cluster-operator" >}} can browse the list of managed services offered by a service broker, provision an instance of a managed service, and bind with it to make it available to an application in the Kubernetes cluster. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Example use case -An {% glossary_tooltip text="application developer" term_id="application-developer" %} wants to use message queuing as part of their application running in a Kubernetes cluster. +An {{< glossary_tooltip text="application developer" term_id="application-developer" >}} wants to use message queuing as part of their application running in a Kubernetes cluster. However, they do not want to deal with the overhead of setting such a service up and administering it themselves. Fortunately, there is a cloud provider that offers message queuing as a managed service through its service broker. @@ -220,15 +222,15 @@ The following example describes how to map secret values into application enviro key: topic ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} -* If you are familiar with {% glossary_tooltip text="Helm Charts" term_id="helm-chart" %}, [install Service Catalog using Helm](/docs/tasks/service-catalog/install-service-catalog-using-helm/) into your Kubernetes cluster. Alternatively, you can [install Service Catalog using the SC tool](/docs/tasks/service-catalog/install-service-catalog-using-sc/). +{{% capture whatsnext %}} +* If you are familiar with {{< glossary_tooltip text="Helm Charts" term_id="helm-chart" >}}, [install Service Catalog using Helm](/docs/tasks/service-catalog/install-service-catalog-using-helm/) into your Kubernetes cluster. Alternatively, you can [install Service Catalog using the SC tool](/docs/tasks/service-catalog/install-service-catalog-using-sc/). * View [sample service brokers](https://github.com/openservicebrokerapi/servicebroker/blob/master/gettingStarted.md#sample-service-brokers). * Explore the [kubernetes-incubator/service-catalog](https://github.com/kubernetes-incubator/service-catalog) project. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/content/en/docs/concepts/services-networking/_index.md b/content/en/docs/concepts/services-networking/_index.md new file mode 100755 index 0000000000000..f4c379d88c58e --- /dev/null +++ b/content/en/docs/concepts/services-networking/_index.md @@ -0,0 +1,5 @@ +--- +title: "Services, Load Balancing, and Networking" +weight: 80 +--- + diff --git a/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md b/content/en/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md similarity index 95% rename from docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md rename to content/en/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md index 43dbd26205d31..fddfd06f4c864 100644 --- a/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md +++ b/content/en/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md @@ -5,8 +5,7 @@ reviewers: title: Adding entries to Pod /etc/hosts with HostAliases --- -* TOC -{:toc} +{{< toc >}} Adding entries to a Pod's /etc/hosts file provides Pod-level override of hostname resolution when DNS and other options are not applicable. In 1.7, users can add these custom entries with the HostAliases field in PodSpec. @@ -45,7 +44,7 @@ by default, the hosts file only includes ipv4 and ipv6 boilerplates like `localh In addition to the default boilerplate, we can add additional entries to the hosts file to resolve `foo.local`, `bar.local` to `127.0.0.1` and `foo.remote`, `bar.remote` to `10.1.2.3`, we can by adding HostAliases to the Pod under `.spec.hostAliases`: -{% include code.html language="yaml" file="hostaliases-pod.yaml" ghlink="/docs/concepts/services-networking/hostaliases-pod.yaml" %} +{{< code file="hostaliases-pod.yaml" >}} This Pod can be started with the following commands: diff --git a/docs/concepts/services-networking/connect-applications-service.md b/content/en/docs/concepts/services-networking/connect-applications-service.md similarity index 92% rename from docs/concepts/services-networking/connect-applications-service.md rename to content/en/docs/concepts/services-networking/connect-applications-service.md index 779025c303f4e..d2ca05c90ff63 100644 --- a/docs/concepts/services-networking/connect-applications-service.md +++ b/content/en/docs/concepts/services-networking/connect-applications-service.md @@ -6,8 +6,7 @@ reviewers: title: Connecting Applications with Services --- -* TOC -{:toc} +{{< toc >}} ## The Kubernetes model for connecting containers @@ -23,7 +22,7 @@ This guide uses a simple nginx server to demonstrate proof of concept. The same We did this in a previous example, but let's do it once again and focus on the networking perspective. Create an nginx pod, and note that it has a container port specification: -{% include code.html language="yaml" file="run-my-nginx.yaml" ghlink="/docs/concepts/services-networking/run-my-nginx.yaml" %} +{{< code file="run-my-nginx.yaml" >}} This makes it accessible from any node in your cluster. Check the nodes the pod is running on: @@ -62,9 +61,9 @@ service "my-nginx" exposed This is equivalent to `kubectl create -f` the following yaml: -{% include code.html language="yaml" file="nginx-svc.yaml" ghlink="/docs/concepts/services-networking/nginx-svc.yaml" %} +{{< code file="nginx-svc.yaml" >}} -This specification will create a Service which targets TCP port 80 on any Pod with the `run: my-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](/docs/reference/generated/kubernetes-api/{{page.version}}/#service-v1-core) to see the list of supported fields in service definition. +This specification will create a Service which targets TCP port 80 on any Pod with the `run: my-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](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#service-v1-core) to see the list of supported fields in service definition. Check your Service: ```shell @@ -98,7 +97,7 @@ You should now be able to curl the nginx Service on `:` from a ## 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/{{page.githubbranch}}/cluster/addons/dns/README.md). +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/{{< param "githubbranch" >}}/cluster/addons/dns/README.md). ### Environment Variables @@ -143,7 +142,7 @@ NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-dns 10.0.0.10 53/UDP,53/TCP 8m ``` -If it isn't running, you can [enable it](http://releases.k8s.io/{{page.githubbranch}}/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 (my-nginx), 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 run another curl application to test this: +If it isn't running, you can [enable it](http://releases.k8s.io/{{< param "githubbranch" >}}/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 (my-nginx), 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 run another curl application to test this: ```shell $ kubectl run curl --image=radial/busyboxplus:curl -i --tty @@ -170,7 +169,7 @@ Till now we have only accessed the nginx server from within the cluster. Before * An nginx server configured to use the certificates * A [secret](/docs/concepts/configuration/secret/) that makes the certificates accessible to pods -You can acquire all these from the [nginx https example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/https-nginx/). This requires having go and make tools installed. If you don't want to install those, then follow the manual steps later. In short: +You can acquire all these from the [nginx https example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/https-nginx/). This requires having go and make tools installed. If you don't want to install those, then follow the manual steps later. In short: ```shell $ make keys secret KEY=/tmp/nginx.key CERT=/tmp/nginx.crt SECRET=/tmp/secret.json @@ -214,12 +213,12 @@ nginxsecret Opaque 2 1m Now modify your nginx replicas to start an https server using the certificate in the secret, and the Service, to expose both ports (80 and 443): -{% include code.html language="yaml" file="nginx-secure-app.yaml" ghlink="/docs/concepts/services-networking/nginx-secure-app.yaml" %} +{{< code file="nginx-secure-app.yaml" >}} Noteworthy points about the nginx-secure-app manifest: - It contains both Deployment and Service specification in the same file. -- The [nginx server](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/https-nginx/default.conf) serves http traffic on port 80 and https traffic on 443, and nginx Service exposes both ports. +- The [nginx server](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/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. ```shell @@ -240,7 +239,7 @@ Note how we supplied the `-k` parameter to curl in the last step, this is becaus 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. Let's test this from a pod (the same secret is being reused for simplicity, the pod only needs nginx.crt to access the Service): -{% include code.html language="yaml" file="curlpod.yaml" ghlink="/docs/concepts/services-networking/curlpod.yaml" %} +{{< code file="curlpod.yaml" >}} ```shell $ kubectl create -f ./curlpod.yaml diff --git a/docs/concepts/services-networking/curlpod.yaml b/content/en/docs/concepts/services-networking/curlpod.yaml similarity index 100% rename from docs/concepts/services-networking/curlpod.yaml rename to content/en/docs/concepts/services-networking/curlpod.yaml diff --git a/docs/concepts/services-networking/custom-dns.yaml b/content/en/docs/concepts/services-networking/custom-dns.yaml similarity index 100% rename from docs/concepts/services-networking/custom-dns.yaml rename to content/en/docs/concepts/services-networking/custom-dns.yaml diff --git a/docs/concepts/services-networking/dns-pod-service.md b/content/en/docs/concepts/services-networking/dns-pod-service.md similarity index 96% rename from docs/concepts/services-networking/dns-pod-service.md rename to content/en/docs/concepts/services-networking/dns-pod-service.md index d93b379750abc..857996fb6f67e 100644 --- a/docs/concepts/services-networking/dns-pod-service.md +++ b/content/en/docs/concepts/services-networking/dns-pod-service.md @@ -3,12 +3,13 @@ reviewers: - davidopp - thockin title: DNS for Services and Pods +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page provides an overview of DNS support by Kubernetes. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Introduction @@ -169,9 +170,10 @@ following pod-specific DNS policies. These policies are specified in the settings are supposed to be provided using the `dnsConfig` field in the Pod Spec. See [DNS config](#dns-config) subsection below. +{{< note >}} **NOTE:** "Default" is not the default DNS policy. If `dnsPolicy` is not explicitly specified, then “ClusterFirst” is used. -{: .note} +{{< /note >}} The example below shows a Pod with its DNS policy set to @@ -230,7 +232,7 @@ Below are the properties a user can specify in the `dnsConfig` field: The following is an example Pod with custom DNS settings: -{% include code.html language="yaml" file="custom-dns.yaml" ghlink="/docs/concepts/services-networking/custom-dns.yaml" %} +{{< code file="custom-dns.yaml" >}} When the Pod above is created, the container `test` gets the following contents in its `/etc/resolv.conf` file: @@ -250,13 +252,13 @@ search default.svc.cluster.local svc.cluster.local cluster.local options ndots:5 ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} For guidance on administering DNS configurations, check [Configure DNS Service](/docs/tasks/administer-cluster/dns-custom-nameservers/) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/services-networking/hostaliases-pod.yaml b/content/en/docs/concepts/services-networking/hostaliases-pod.yaml similarity index 100% rename from docs/concepts/services-networking/hostaliases-pod.yaml rename to content/en/docs/concepts/services-networking/hostaliases-pod.yaml diff --git a/docs/concepts/services-networking/ingress.md b/content/en/docs/concepts/services-networking/ingress.md similarity index 96% rename from docs/concepts/services-networking/ingress.md rename to content/en/docs/concepts/services-networking/ingress.md index 6f285dcec9c42..5eaaa484d0759 100644 --- a/docs/concepts/services-networking/ingress.md +++ b/content/en/docs/concepts/services-networking/ingress.md @@ -2,13 +2,14 @@ reviewers: - bprashanth title: Ingress +content_template: templates/concept --- -{% capture overview %} -{% glossary_definition term_id="ingress" length="all" %} -{% endcapture %} +{{% capture overview %}} +{{< glossary_definition term_id="ingress" length="all" >}} +{{% /capture %}} -{% capture body %} +{{% capture body %}} __Terminology__ Throughout this doc you will see a few terms that are sometimes used interchangeably elsewhere, that might cause confusion. This section attempts to clarify them. @@ -81,7 +82,7 @@ __Lines 10-11__: Each http rule contains the following information: A host (e.g. __Lines 12-14__: A backend is a service:port combination as described in the [services doc](/docs/concepts/services-networking/service/). 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/{{page.githubbranch}}/staging/src/k8s.io/api/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. +__Global Parameters__: For the sake of simplicity the example Ingress has no global parameters, see the [API reference](https://releases.k8s.io/{{< param "githubbranch" >}}/staging/src/k8s.io/api/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. ## Ingress controllers @@ -97,7 +98,7 @@ The following document describes a set of cross platform features exposed throug 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. -{% include code.html language="yaml" file="ingress.yaml" ghlink="/docs/concepts/services-networking/ingress.yaml" %} +{{< code file="ingress.yaml" >}} If you create it using `kubectl create -f` you should see: @@ -297,6 +298,6 @@ You can expose a Service in multiple ways that don't directly involve the Ingres * Use [Service.Type=LoadBalancer](/docs/concepts/services-networking/service/#type-loadbalancer) * Use [Service.Type=NodePort](/docs/concepts/services-networking/service/#type-nodeport) * Use a [Port Proxy](https://git.k8s.io/contrib/for-demos/proxy-to-service) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/services-networking/ingress.yaml b/content/en/docs/concepts/services-networking/ingress.yaml similarity index 100% rename from docs/concepts/services-networking/ingress.yaml rename to content/en/docs/concepts/services-networking/ingress.yaml diff --git a/docs/concepts/services-networking/network-policies.md b/content/en/docs/concepts/services-networking/network-policies.md similarity index 98% rename from docs/concepts/services-networking/network-policies.md rename to content/en/docs/concepts/services-networking/network-policies.md index 8c39a8ccaa8b9..7222d9116c0f1 100644 --- a/docs/concepts/services-networking/network-policies.md +++ b/content/en/docs/concepts/services-networking/network-policies.md @@ -6,8 +6,7 @@ reviewers: title: Network Policies --- -* TOC -{:toc} +{{< toc >}} A network policy is a specification of how groups of pods are allowed to communicate with each other and other network endpoints. @@ -25,7 +24,7 @@ Pods become isolated by having a NetworkPolicy that selects them. Once there is ## The `NetworkPolicy` Resource -See the [NetworkPolicy](/docs/reference/generated/kubernetes-api/{{page.version}}/#networkpolicy-v1-networking) for a full definition of the resource. +See the [NetworkPolicy](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#networkpolicy-v1-networking) for a full definition of the resource. An example `NetworkPolicy` might look like this: diff --git a/docs/concepts/services-networking/nginx-secure-app.yaml b/content/en/docs/concepts/services-networking/nginx-secure-app.yaml similarity index 100% rename from docs/concepts/services-networking/nginx-secure-app.yaml rename to content/en/docs/concepts/services-networking/nginx-secure-app.yaml diff --git a/docs/concepts/services-networking/nginx-svc.yaml b/content/en/docs/concepts/services-networking/nginx-svc.yaml similarity index 100% rename from docs/concepts/services-networking/nginx-svc.yaml rename to content/en/docs/concepts/services-networking/nginx-svc.yaml diff --git a/docs/concepts/services-networking/run-my-nginx.yaml b/content/en/docs/concepts/services-networking/run-my-nginx.yaml similarity index 100% rename from docs/concepts/services-networking/run-my-nginx.yaml rename to content/en/docs/concepts/services-networking/run-my-nginx.yaml diff --git a/docs/concepts/services-networking/service.md b/content/en/docs/concepts/services-networking/service.md similarity index 98% rename from docs/concepts/services-networking/service.md rename to content/en/docs/concepts/services-networking/service.md index 9b50666504f0c..ab8c23169f338 100644 --- a/docs/concepts/services-networking/service.md +++ b/content/en/docs/concepts/services-networking/service.md @@ -32,8 +32,7 @@ that is updated whenever the set of `Pods` in a `Service` changes. For non-native applications, Kubernetes offers a virtual-IP-based bridge to Services which redirects to the backend `Pods`. -* TOC -{:toc} +{{< toc >}} ## Defining a service @@ -116,11 +115,12 @@ subsets: - port: 9376 ``` +{{< note >}} **NOTE** The endpoint IPs may not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast (224.0.0.0/24). They cannot be the cluster IPs of other Kubernetes services either because the `kube-proxy` component doesn't support virtual IPs as destination yet. -{: .note} +{{< /note >}} Accessing a `Service` without a selector works the same as if it had a selector. The traffic will be routed to endpoints defined by the user (`1.2.3.4:9376` in @@ -196,7 +196,7 @@ Note that in the above diagram, `clusterIP` is shown as `ServiceIP`. ### Proxy-mode: ipvs -{% assign for_k8s_version="v1.9" %}{% include feature-state-beta.md %} +{{< feature-state for_k8s_version="v1.9" state="beta" >}} In this mode, kube-proxy watches Kubernetes Services and Endpoints, calls `netlink` interface to create ipvs rules accordingly and syncs ipvs rules with Kubernetes @@ -295,7 +295,7 @@ variables and DNS. When a `Pod` is run on a `Node`, the kubelet adds a set of environment variables for each active `Service`. It supports both [Docker links compatible](https://docs.docker.com/userguide/dockerlinks/) variables (see -[makeLinkVariables](http://releases.k8s.io/{{page.githubbranch}}/pkg/kubelet/envvars/envvars.go#L49)) +[makeLinkVariables](http://releases.k8s.io/{{< param "githubbranch" >}}/pkg/kubelet/envvars/envvars.go#L49)) and simpler `{SVCNAME}_SERVICE_HOST` and `{SVCNAME}_SERVICE_PORT` variables, where the Service name is upper-cased and dashes are converted to underscores. @@ -467,11 +467,11 @@ In a split-horizon DNS environment you would need two services to be able to rou This can be achieved by adding the following annotations to the service based on cloud provider. -{% capture default_tab %} +{{< tabs name="service_tabs" >}} +{{% tab name="Decfault" %}} Select one of the tabs. -{% endcapture %} - -{% capture gcp %} +{{% /tab %}} +{{% tab name="GCP" %}} ```yaml [...] metadata: @@ -482,9 +482,8 @@ metadata: ``` Use `cloud.google.com/load-balancer-type: "internal"` for masters with version 1.7.0 to 1.7.3. For more information, see the [docs](https://cloud.google.com/kubernetes-engine/docs/internal-load-balancing). -{% endcapture %} - -{% capture aws %} +{{% /tab %}} +{{% tab name="AWS" %}} ```yaml [...] metadata: @@ -493,9 +492,8 @@ metadata: service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0 [...] ``` -{% endcapture %} - -{% capture azure %} +{{% /tab %}} +{{% tab name="Azure" %}} ```yaml [...] metadata: @@ -504,9 +502,8 @@ metadata: service.beta.kubernetes.io/azure-load-balancer-internal: "true" [...] ``` -{% endcapture %} - -{% capture openstack %} +{{% /tab %}} +{{% tab name="OpenStack" %}} ```yaml [...] metadata: @@ -515,11 +512,9 @@ metadata: service.beta.kubernetes.io/openstack-internal-load-balancer: "true" [...] ``` -{% endcapture %} +{{% /tab %}} +{{< /tabs >}} -{% assign tab_names = 'Default,GCP,AWS,Azure,OpenStack' | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: default_tab | push: gcp | push: aws | push: azure | push: openstack %} -{% include tabs.md %} #### SSL support on AWS For partial SSL support on clusters running on AWS, starting with 1.3 three @@ -892,7 +887,7 @@ Iptables operations slow down dramatically in large scale cluster e.g 10,000 Ser Service is a top-level resource in the Kubernetes REST API. More details about the API object can be found at: -[Service API object](/docs/reference/generated/kubernetes-api/{{page.version}}/#service-v1-core). +[Service API object](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#service-v1-core). ## For More Information diff --git a/content/en/docs/concepts/storage/_index.md b/content/en/docs/concepts/storage/_index.md new file mode 100755 index 0000000000000..8d38e78dd63eb --- /dev/null +++ b/content/en/docs/concepts/storage/_index.md @@ -0,0 +1,5 @@ +--- +title: "Storage" +weight: 90 +--- + diff --git a/docs/concepts/storage/dynamic-provisioning.md b/content/en/docs/concepts/storage/dynamic-provisioning.md similarity index 97% rename from docs/concepts/storage/dynamic-provisioning.md rename to content/en/docs/concepts/storage/dynamic-provisioning.md index c7baede82e9ce..40cfebefb1c0a 100644 --- a/docs/concepts/storage/dynamic-provisioning.md +++ b/content/en/docs/concepts/storage/dynamic-provisioning.md @@ -5,9 +5,10 @@ reviewers: - thockin - msau42 title: Dynamic Volume Provisioning +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} Dynamic volume provisioning allows storage volumes to be created on-demand. Without dynamic provisioning, cluster administrators have to manually make @@ -17,11 +18,11 @@ to represent them in Kubernetes. The dynamic provisioning feature eliminates the need for cluster administrators to pre-provision storage. Instead, it automatically provisions storage when it is requested by users. -{% endcapture %} +{{% /capture %}} -{:toc} +{{< toc >}} -{% capture body %} +{{% capture body %}} ## Background @@ -122,6 +123,6 @@ Note that there can be at most one *default* storage class on a cluster, or a `PersistentVolumeClaim` without `storageClassName` explicitly specified cannot be created. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/storage/persistent-volumes.md b/content/en/docs/concepts/storage/persistent-volumes.md similarity index 98% rename from docs/concepts/storage/persistent-volumes.md rename to content/en/docs/concepts/storage/persistent-volumes.md index 41916cceba4b2..b10475e12b903 100644 --- a/docs/concepts/storage/persistent-volumes.md +++ b/content/en/docs/concepts/storage/persistent-volumes.md @@ -9,8 +9,7 @@ title: Persistent Volumes This document describes the current state of `PersistentVolumes` in Kubernetes. Familiarity with [volumes](/docs/concepts/storage/volumes/) is suggested. -* TOC -{:toc} +{{< toc >}} ## Introduction @@ -71,11 +70,12 @@ Pods use claims as volumes. The cluster inspects the claim to find the bound vol Once a user has a claim and that claim is bound, the bound PV belongs to the user for as long as they need it. Users schedule Pods and access their claimed PVs by including a `persistentVolumeClaim` in their Pod's volumes block. [See below for syntax details](#claims-as-volumes). ### Storage Object in Use Protection -{% assign for_k8s_version="v1.10" %}{% include feature-state-beta.md %} +{{< feature-state for_k8s_version="v1.10" state="beta" >}} The purpose of the Storage Object in Use Protection feature is to ensure that Persistent Volume Claims (PVCs) in active use by a pod and Persistent Volume (PVs) that are bound to PVCs are not removed from the system as this may result in data loss. +{{< note >}} **Note:** PVC is in active use by a pod when the pod status is `Pending` and the pod is assigned to a node or the pod status is `Running`. -{: .note} +{{< /note >}} When the [Storage Object in Use Protection beta feature](/docs/tasks/administer-cluster/storage-object-in-use-protection/) is enabled, if a user deletes a PVC in active use by a pod, the PVC is not removed immediately. PVC removal is postponed until the PVC is no longer actively used by any pods, and also if admin deletes a PV that is bound to a PVC, the PV is not removed immediately. PV removal is postponed until the PV is not bound to a PVC any more. @@ -135,8 +135,9 @@ For volume plugins that support the `Delete` reclaim policy, deletion removes bo #### Recycle +{{< warning >}} **Warning:** The `Recycle` reclaim policy is deprecated. Instead, the recommended approach is to use dynamic provisioning. -{: .warning} +{{< /warning >}} If supported by the underlying volume plugin, the `Recycle` reclaim policy performs a basic scrub (`rm -rf /thevolume/*`) on the volume and makes it available again for a new claim. @@ -208,8 +209,9 @@ resizing to take place. Also, file system resizing is only supported for followi * XFS * Ext3, Ext4 +{{< note >}} **Note:** Expanding EBS volumes is a time consuming operation. Also, there is a per-volume quota of one modification every 6 hours. -{: .note} +{{< /note >}} ## Types of Persistent Volumes @@ -274,8 +276,9 @@ Currently, storage size is the only resource that can be set or requested. Futu Prior to v1.9, the default behavior for all volume plugins was to create a filesystem on the persistent volume. With v1.9, the user can specify a `volumeMode` which will now support raw block devices in addition to file systems. Valid values for `volumeMode` are "Filesystem" or "Block". If left unspecified, `volumeMode` defaults to "Filesystem" internally. This is an optional API parameter. +{{< note >}} **Note:** This feature is alpha in v1.9 and may change in the future. -{: .note} +{{< /note >}} ### Access Modes @@ -346,8 +349,9 @@ Currently, only NFS and HostPath support recycling. AWS EBS, GCE PD, Azure Disk, A Kubernetes administrator can specify additional mount options for when a Persistent Volume is mounted on a node. +{{< note >}} **Note:** Not all Persistent volume types support mount options. -{: .note} +{{< /note >}} The following volume types support mount options: @@ -463,8 +467,9 @@ When a PVC specifies a `selector` in addition to requesting a `StorageClass`, the requirements are ANDed together: only a PV of the requested class and with the requested labels may be bound to the PVC. +{{< note >}} **Note:** Currently, a PVC with a non-empty `selector` can't have a PV dynamically provisioned for it. -{: .note} +{{< /note >}} In the past, the annotation `volume.beta.kubernetes.io/storage-class` was used instead of `storageClassName` attribute. This annotation is still working, however @@ -553,8 +558,9 @@ spec: claimName: block-pvc ``` +{{< note >}} **Note:** When adding a raw block device for a Pod, we specify the device path in the container instead of a mount path. -{: .note} +{{< /note >}} ### Binding Block Volumes @@ -574,8 +580,9 @@ Volume binding matrix for statically provisioned volumes: | Filesystem | Block | NO BIND | | Filesystem | unspecified | BIND | +{{< note >}} **Note:** Only statically provisioned volumes are supported for alpha release. Administrators should take care to consider these values when working with raw block devices. -{: .note} +{{< /note >}} ## Writing Portable Configuration diff --git a/docs/concepts/storage/storage-classes.md b/content/en/docs/concepts/storage/storage-classes.md similarity index 99% rename from docs/concepts/storage/storage-classes.md rename to content/en/docs/concepts/storage/storage-classes.md index 5d924365b5bb2..ccba9623e3030 100644 --- a/docs/concepts/storage/storage-classes.md +++ b/content/en/docs/concepts/storage/storage-classes.md @@ -11,8 +11,7 @@ This document describes the concept of `StorageClass` in Kubernetes. Familiarity with [volumes](/docs/concepts/storage/volumes/) and [persistent volumes](/docs/concepts/storage/persistent-volumes) is suggested. -* TOC -{:toc} +{{< toc >}} ## Introduction @@ -640,7 +639,7 @@ references it. ### Local -{% assign for_k8s_version="v1.10" %}{% include feature-state-beta.md %} +{{< feature-state for_k8s_version="v1.10" state="beta" >}} ```yaml kind: StorageClass diff --git a/docs/concepts/storage/volumes.md b/content/en/docs/concepts/storage/volumes.md similarity index 94% rename from docs/concepts/storage/volumes.md rename to content/en/docs/concepts/storage/volumes.md index 9c05d1dcc39cd..38b49204d5be7 100644 --- a/docs/concepts/storage/volumes.md +++ b/content/en/docs/concepts/storage/volumes.md @@ -5,9 +5,10 @@ reviewers: - thockin - msau42 title: Volumes +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} On-disk files in a container are ephemeral, which presents some problems for non-trivial applications when running in containers. First, when a container @@ -18,11 +19,11 @@ Kubernetes `Volume` abstraction solves both of these problems. Familiarity with [pods](/docs/user-guide/pods) is suggested. -{% endcapture %} +{{% /capture %}} -{:toc} +{{< toc >}} -{% capture body %} +{{% capture body %}} ## Background @@ -103,8 +104,9 @@ volume are preserved and the volume is merely unmounted. This means that an EBS volume can be pre-populated with data, and that data can be "handed off" between pods. +{{< caution >}} **Important:** You must create an EBS volume using `aws ec2 create-volume` or the AWS API before you can use it. -{: .caution} +{{< /caution >}} There are some restrictions when using an `awsElasticBlockStore` volume: @@ -149,14 +151,14 @@ spec: A `azureDisk` is used to mount a Microsoft Azure [Data Disk](https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-linux-about-disks-vhds/) into a Pod. -More details can be found [here](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/volumes/azure_disk/README.md). +More details can be found [here](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/azure_disk/README.md). ### azureFile A `azureFile` is used to mount a Microsoft Azure File Volume (SMB 2.1 and 3.0) into a Pod. -More details can be found [here](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/volumes/azure_file/README.md). +More details can be found [here](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/azure_file/README.md). ### cephfs @@ -167,10 +169,11 @@ unmounted. This means that a CephFS volume can be pre-populated with data, and that data can be "handed off" between pods. CephFS can be mounted by multiple writers simultaneously. +{{< caution >}} **Important:** You must have your own Ceph server running with the share exported before you can use it. -{: .caution} +{{< /caution >}} -See the [CephFS example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/volumes/cephfs/) for more details. +See the [CephFS example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/cephfs/) for more details. ### configMap @@ -211,21 +214,24 @@ its `log_level` entry are mounted into the Pod at path "`/etc/config/log_level`" Note that this path is derived from the volume's `mountPath` and the `path` keyed with `log_level`. +{{< caution >}} **Important:** You must create a [ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/) before you can use it. -{: .caution} +{{< /caution >}} +{{< note >}} **Note:** A container using a ConfigMap as a [subPath](#using-subpath) volume mount will not receive ConfigMap updates. -{: .note} +{{< /note >}} ### downwardAPI A `downwardAPI` volume is used to make downward API data available to applications. It mounts a directory and writes the requested data in plain text files. +{{< note >}} **Note:** A container using Downward API as a [subPath](#using-subpath) volume mount will not receive Downward API updates. -{: .note} +{{< /note >}} See the [`downwardAPI` volume example](/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/) for more details. @@ -238,8 +244,9 @@ files in the `emptyDir` volume, though that volume can be mounted at the same or different paths in each container. When a Pod is removed from a node for any reason, the data in the `emptyDir` is deleted forever. +{{< note >}} **Note:** a container crashing does *NOT* remove a pod from a node, so the data in an `emptyDir` volume is safe across container crashes. -{: .note} +{{< /note >}} Some uses for an `emptyDir` are: @@ -282,10 +289,11 @@ You can specify single or multiple target World Wide Names using the parameter `targetWWNs` in your volume configuration. If multiple WWNs are specified, targetWWNs expect that those WWNs are from multi-path connections. +{{< caution >}} **Important:** You must configure FC SAN Zoning to allocate and mask those LUNs (volumes) to the target WWNs beforehand so that Kubernetes hosts can access them. -{: .caution} +{{< /caution >}} -See the [FC example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/volumes/fibre_channel) for more details. +See the [FC example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/fibre_channel) for more details. ### flocker @@ -298,10 +306,11 @@ CLI or by using the Flocker API. If the dataset already exists it will be reattached by Flocker to the node that the pod is scheduled. This means data can be "handed off" between pods as required. +{{< caution >}} **Important:** You must have your own Flocker installation running before you can use it. -{: .caution} +{{< /caution >}} -See the [Flocker example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/volumes/flocker) for more details. +See the [Flocker example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/flocker) for more details. ### gcePersistentDisk @@ -311,8 +320,9 @@ Disk](http://cloud.google.com/compute/docs/disks) into your pod. Unlike preserved and the volume is merely unmounted. This means that a PD can be pre-populated with data, and that data can be "handed off" between pods. +{{< caution >}} **Important:** You must create a PD using `gcloud` or the GCE API or UI before you can use it. -{: .caution} +{{< /caution >}} There are some restrictions when using a `gcePersistentDisk`: @@ -396,10 +406,11 @@ means that a glusterfs volume can be pre-populated with data, and that data can be "handed off" between pods. GlusterFS can be mounted by multiple writers simultaneously. +{{< caution >}} **Important:** You must have your own GlusterFS installation running before you can use it. -{: .caution} +{{< /caution >}} -See the [GlusterFS example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/volumes/glusterfs) for more details. +See the [GlusterFS example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/glusterfs) for more details. ### hostPath @@ -473,8 +484,9 @@ contents of an `iscsi` volume are preserved and the volume is merely unmounted. This means that an iscsi volume can be pre-populated with data, and that data can be "handed off" between pods. +{{< caution >}} **Important:** You must have your own iSCSI server running with the volume created before you can use it. -{: .caution} +{{< /caution >}} A feature of iSCSI is that it can be mounted as read-only by multiple consumers simultaneously. This means that you can pre-populate a volume with your dataset @@ -482,17 +494,18 @@ and then serve it in parallel from as many pods as you need. Unfortunately, iSCSI volumes can only be mounted by a single consumer in read-write mode - no simultaneous writers allowed. -See the [iSCSI example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/volumes/iscsi) for more details. +See the [iSCSI example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/iscsi) for more details. ### local -{% assign for_k8s_version="v1.10" %}{% include feature-state-beta.md %} +{{< feature-state for_k8s_version="v1.10" state="beta" >}} +{{< note >}} **Note:** The alpha PersistentVolume NodeAffinity annotation has been deprecated and will be removed in a future release. Existing PersistentVolumes using this annotation must be updated by the user to use the new PersistentVolume `NodeAffinity` field. -{: .note} +{{< /note >}} A `local` volume represents a mounted local storage device such as a disk, partition or directory. @@ -560,10 +573,11 @@ the local volume lifecycle. Note that this provisioner does not support dynamic provisioning yet. For an example on how to run an external local provisioner, see the [local volume provisioner user guide](https://github.com/kubernetes-incubator/external-storage/tree/master/local-volume). +{{< note >}} **Note:** The local PersistentVolume requires manual cleanup and deletion by the user if the external static provisioner is not used to manage the volume lifecycle. -{: .note} +{{< /note >}} ### nfs @@ -574,10 +588,11 @@ unmounted. This means that an NFS volume can be pre-populated with data, and that data can be "handed off" between pods. NFS can be mounted by multiple writers simultaneously. +{{< caution >}} **Important:** You must have your own NFS server running with the share exported before you can use it. -{: .caution} +{{< /caution >}} -See the [NFS example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/volumes/nfs) for more details. +See the [NFS example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/nfs) for more details. ### persistentVolumeClaim @@ -599,7 +614,7 @@ Currently, the following types of volume sources can be projected: - [`downwardAPI`](#downwardapi) - `configMap` -All sources are required to be in the same namespace as the pod. For more details, see the [all-in-one volume design document](https://github.com/kubernetes/community/blob/{{page.githubbranch}}/contributors/design-proposals/node/all-in-one-volume.md). +All sources are required to be in the same namespace as the pod. For more details, see the [all-in-one volume design document](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/design-proposals/node/all-in-one-volume.md). #### Example pod with a secret, a downward API, and a configmap. @@ -670,7 +685,7 @@ spec: items: - key: password path: my-group/my-password - mode: 0777 + mode: 511 ``` Each projected volume source is listed in the spec under `sources`. The @@ -682,9 +697,10 @@ parameters are nearly the same with two exceptions: volume source. However, as illustrated above, you can explicitly set the `mode` for each individual projection. +{{< note >}} **Note:** A container using a projected volume source as a [subPath](#using-subpath) volume mount will not receive updates for those volume sources. -{: .note} +{{< /note >}} ### portworxVolume @@ -717,22 +733,24 @@ spec: fsType: "" ``` +{{< caution >}} **Important:** Make sure you have an existing PortworxVolume with name `pxvol` before using it in the pod. -{: .caution} +{{< /caution >}} -More details and examples can be found [here](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/volumes/portworx/README.md). +More details and examples can be found [here](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/portworx/README.md). ### quobyte A `quobyte` volume allows an existing [Quobyte](http://www.quobyte.com) volume to be mounted into your pod. +{{< caution >}} **Important:** You must have your own Quobyte setup running with the volumes created before you can use it. -{: .caution} +{{< /caution >}} -See the [Quobyte example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/volumes/quobyte) for more details. +See the [Quobyte example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/quobyte) for more details. ### rbd @@ -743,8 +761,9 @@ a `rbd` volume are preserved and the volume is merely unmounted. This means that a RBD volume can be pre-populated with data, and that data can be "handed off" between pods. +{{< caution >}} **Important:** You must have your own Ceph installation running before you can use RBD. -{: .caution} +{{< /caution >}} A feature of RBD is that it can be mounted as read-only by multiple consumers simultaneously. This means that you can pre-populate a volume with your dataset @@ -752,7 +771,7 @@ and then serve it in parallel from as many pods as you need. Unfortunately, RBD volumes can only be mounted by a single consumer in read-write mode - no simultaneous writers allowed. -See the [RBD example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/volumes/rbd) for more details. +See the [RBD example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/rbd) for more details. ### scaleIO @@ -762,9 +781,10 @@ plugin allows deployed pods to access existing ScaleIO volumes (or it can dynamically provision new volumes for persistent volume claims, see [ScaleIO Persistent Volumes](/docs/concepts/storage/persistent-volumes/#scaleio)). +{{< caution >}} **Important:** You must have an existing ScaleIO cluster already setup and running with the volumes created before you can use them. -{: .caution} +{{< /caution >}} The following is an example pod configuration with ScaleIO: @@ -793,7 +813,7 @@ spec: fsType: xfs ``` -For further detail, please the see the [ScaleIO examples](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/volumes/scaleio). +For further detail, please the see the [ScaleIO examples](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/scaleio). ### secret @@ -803,12 +823,14 @@ use by pods without coupling to Kubernetes directly. `secret` volumes are backed by tmpfs (a RAM-backed filesystem) so they are never written to non-volatile storage. +{{< caution >}} **Important:** You must create a secret in the Kubernetes API before you can use it. -{: .caution} +{{< /caution >}} +{{< note >}} **Note:** A container using a Secret as a [subPath](#using-subpath) volume mount will not receive Secret updates. -{: .note} +{{< /note >}} Secrets are described in more detail [here](/docs/user-guide/secrets). @@ -827,11 +849,12 @@ At its core, StorageOS provides block storage to containers, accessible via a fi The StorageOS container requires 64-bit Linux and has no additional dependencies. A free developer license is available. +{{< caution >}} **Important:** You must run the StorageOS container on each node that wants to access StorageOS volumes or that will contribute storage capacity to the pool. For installation instructions, consult the [StorageOS documentation](https://docs.storageos.com). -{: .caution} +{{< /caution >}} ```yaml apiVersion: v1 @@ -866,39 +889,40 @@ For more information including Dynamic Provisioning and Persistent Volume Claims ### vsphereVolume +{{< note >}} **Prerequisite:** Kubernetes with vSphere Cloud Provider configured. For cloudprovider configuration please refer [vSphere getting started guide](https://vmware.github.io/vsphere-storage-for-kubernetes/documentation/). -{: .note} +{{< /note >}} A `vsphereVolume` is used to mount a vSphere VMDK Volume into your Pod. The contents of a volume are preserved when it is unmounted. It supports both VMFS and VSAN datastore. +{{< caution >}} **Important:** You must create VMDK using one of the following method before using with POD. -{: .caution} +{{< /caution >}} #### Creating a VMDK volume Choose one of the following methods to create a VMDK. -{% capture vmkfstools %} +{{< tabs name="tabs_volumes" >}} +{{% tab name="Create using vmkfstools" %}} First ssh into ESX, then use the following command to create a VMDK: ```shell vmkfstools -c 2G /vmfs/volumes/DatastoreName/volumes/myDisk.vmdk ``` -{% endcapture %} - -{% capture vdiskmanager %} +{{% /tab %}} +{{% tab name="Create using vmware-vdiskmanager" %}} Use the following command to create a VMDK: ```shell vmware-vdiskmanager -c -t 0 -s 40GB -a lsilogic myDisk.vmdk ``` -{% endcapture %} +{{% /tab %}} + +{{< /tabs >}} -{% assign tab_names = 'Create using vmkfstools,Create using vmware-vdiskmanager' | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: vmkfstools | push: vdiskmanager %} -{% include tabs.md %} #### vSphere VMDK Example configuration @@ -994,7 +1018,7 @@ to [this FAQ](https://github.com/kubernetes/community/blob/master/sig-storage/vo ### CSI -{% assign for_k8s_version="v1.10" %}{% include feature-state-beta.md %} +{{< feature-state for_k8s_version="v1.10" state="beta" >}} [Container Storage Interface](https://github.com/container-storage-interface/spec/blob/master/spec.md) (CSI) defines a standard interface for container orchestration systems (like @@ -1071,7 +1095,7 @@ More details can be found [here](https://github.com/kubernetes/community/blob/ma ## Mount propagation -{% assign for_k8s_version="v1.10" %}{% include feature-state-beta.md %} +{{< feature-state for_k8s_version="v1.10" state="beta" >}} Mount propagation allows for sharing volumes mounted by a Container to other Containers in the same Pod, or even to other Pods on the same node. @@ -1115,12 +1139,13 @@ Its values are: This mode is equal to `rshared` mount propagation as described in the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) +{{< caution >}} **Caution:** `Bidirectional` mount propagation can be dangerous. It can damage the host operating system and therefore it is allowed only in privileged Containers. Familiarity with Linux kernel behavior is strongly recommended. In addition, any volume mounts created by Containers in Pods must be destroyed (unmounted) by the Containers on termination. -{: .caution} +{{< /caution >}} ### Configuration Before mount propagation can work properly on some deployments (CoreOS, @@ -1137,10 +1162,10 @@ $ sudo systemctl daemon-reload $ sudo systemctl restart docker ``` -{% endcapture %} -{% capture whatsnext %} + +{{% capture whatsnext %}} * Follow an example of [deploying WordPress and MySQL with Persistent Volumes](/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/). -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/content/en/docs/concepts/workloads/controllers/_index.md b/content/en/docs/concepts/workloads/controllers/_index.md new file mode 100755 index 0000000000000..6aaa7405b532c --- /dev/null +++ b/content/en/docs/concepts/workloads/controllers/_index.md @@ -0,0 +1,5 @@ +--- +title: "Controllers" +weight: 20 +--- + diff --git a/docs/concepts/workloads/controllers/cron-jobs.md b/content/en/docs/concepts/workloads/controllers/cron-jobs.md similarity index 98% rename from docs/concepts/workloads/controllers/cron-jobs.md rename to content/en/docs/concepts/workloads/controllers/cron-jobs.md index bd5b70db161d2..b33c591e60801 100644 --- a/docs/concepts/workloads/controllers/cron-jobs.md +++ b/content/en/docs/concepts/workloads/controllers/cron-jobs.md @@ -6,8 +6,7 @@ reviewers: title: CronJob --- -* TOC -{:toc} +{{< toc >}} ## What is a cron job? @@ -45,7 +44,7 @@ component. Here is an example Cron Job. Every minute, it runs a simple job to print current time and then say hello. -{% include code.html language="yaml" file="cronjob.yaml" ghlink="/docs/concepts/workloads/controllers/cronjob.yaml" %} +{{< code file="cronjob.yaml" >}} Run the example cron job by downloading the example file and then running this command: diff --git a/docs/concepts/workloads/controllers/cronjob.yaml b/content/en/docs/concepts/workloads/controllers/cronjob.yaml similarity index 100% rename from docs/concepts/workloads/controllers/cronjob.yaml rename to content/en/docs/concepts/workloads/controllers/cronjob.yaml diff --git a/docs/concepts/workloads/controllers/daemonset.md b/content/en/docs/concepts/workloads/controllers/daemonset.md similarity index 98% rename from docs/concepts/workloads/controllers/daemonset.md rename to content/en/docs/concepts/workloads/controllers/daemonset.md index a20f0f8d39f23..5c95db7da7819 100644 --- a/docs/concepts/workloads/controllers/daemonset.md +++ b/content/en/docs/concepts/workloads/controllers/daemonset.md @@ -8,8 +8,7 @@ reviewers: title: DaemonSet --- -* TOC -{:toc} +{{< toc >}} ## What is a DaemonSet? @@ -34,7 +33,7 @@ different flags and/or different memory and cpu requests for different hardware You can describe a DaemonSet in a YAML file. For example, the `daemonset.yaml` file below describes a DaemonSet that runs the fluentd-elasticsearch Docker image: -{% include code.html language="yaml" file="daemonset.yaml" ghlink="/docs/concepts/workloads/controllers/daemonset.yaml" %} +{{< code file="daemonset.yaml" >}} * Create a DaemonSet based on the YAML file: ``` diff --git a/docs/concepts/workloads/controllers/daemonset.yaml b/content/en/docs/concepts/workloads/controllers/daemonset.yaml similarity index 100% rename from docs/concepts/workloads/controllers/daemonset.yaml rename to content/en/docs/concepts/workloads/controllers/daemonset.yaml diff --git a/docs/concepts/workloads/controllers/deployment.md b/content/en/docs/concepts/workloads/controllers/deployment.md similarity index 98% rename from docs/concepts/workloads/controllers/deployment.md rename to content/en/docs/concepts/workloads/controllers/deployment.md index 06a5eebd7f4d8..dbadc8ab4c3ea 100644 --- a/docs/concepts/workloads/controllers/deployment.md +++ b/content/en/docs/concepts/workloads/controllers/deployment.md @@ -3,22 +3,24 @@ reviewers: - bgrant0607 - janetkuo title: Deployments +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} A _Deployment_ controller provides declarative updates for [Pods](/docs/concepts/workloads/pods/pod/) and [ReplicaSets](/docs/concepts/workloads/controllers/replicaset/). You describe a _desired state_ in a Deployment object, and the Deployment controller changes the actual state to the desired state at a controlled rate. You can define Deployments to create new ReplicaSets, or to remove existing Deployments and adopt all their resources with new Deployments. +{{< note >}} **Note:** You should not manage ReplicaSets owned by a Deployment. All the use cases should be covered by manipulating the Deployment object. Consider opening an issue in the main Kubernetes repository if your use case is not covered below. -{: .note} +{{< /note >}} -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Use Case @@ -37,7 +39,7 @@ The following are typical use cases for Deployments: The following is an example of a Deployment. It creates a ReplicaSet to bring up three `nginx` Pods: -{% include code.html language="yaml" file="nginx-deployment.yaml" ghlink="/docs/concepts/workloads/controllers/nginx-deployment.yaml" %} +{{< code file="nginx-deployment.yaml" >}} In this example: @@ -52,10 +54,11 @@ In this example: [Docker Hub](https://hub.docker.com/) image at version 1.7.9. * The Deployment opens port 80 for use by the Pods. +{{< note >}} **Note:** `matchLabels` is a map of {key,value} pairs. A single {key,value} in the `matchLabels` map is equivalent to an element of `matchExpressions`, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. -{: .note} +{{< /note >}} The `template` field contains the following instructions: @@ -70,10 +73,11 @@ To create this Deployment, run the following command: kubectl create -f https://raw.githubusercontent.com/kubernetes/website/master/docs/concepts/workloads/controllers/nginx-deployment.yaml ``` +{{< note >}} **Note:** You can append `--record` to this command to record the current command in the annotations of the created or updated resource. This is useful for future review, such as investigating which commands were executed in each Deployment revision. -{: .note} +{{< /note >}} Next, run `kubectl get deployments`. The output is similar to the following: @@ -138,14 +142,16 @@ nginx-deployment-2035384211-qqcnn 1/1 Running 0 18s app The created ReplicaSet ensures that there are three `nginx` Pods running at all times. +{{< note >}} **Note:** You must specify an appropriate selector and Pod template labels in a Deployment (in this case, `app: nginx`). Do not overlap labels or selectors with other controllers (including other Deployments and StatefulSets). Kubernetes doesn't stop you from overlapping, and if multiple controllers have overlapping selectors those controllers might conflict and behave unexpectedly. -{: .note} +{{< /note >}} ### Pod-template-hash label +{{< note >}} **Note:** Do not change this label. -{: .note} +{{< /note >}} The `pod-template-hash` label is added by the Deployment controller to every ReplicaSet that a Deployment creates or adopts. @@ -154,9 +160,10 @@ and in any existing Pods that the ReplicaSet might have. ## Updating a Deployment +{{< note >}} **Note:** A Deployment's rollout is triggered if and only if the Deployment's pod template (that is, `.spec.template`) is changed, for example if the labels or container images of the template are updated. Other updates, such as scaling the Deployment, do not trigger a rollout. -{: .note} +{{< /note >}} Suppose that we now want to update the nginx Pods to use the `nginx:1.9.1` image instead of the `nginx:1.7.9` image. @@ -297,8 +304,9 @@ It is generally discouraged to make label selector updates and it is suggested t In any case, if you need to perform a label selector update, exercise great caution and make sure you have grasped all of the implications. +{{< note >}} **Note:** In API version `apps/v1`, a Deployment's label selector is immutable after it gets created. -{: .note} +{{< /note >}} * Selector additions require the pod template labels in the Deployment spec to be updated with the new label too, otherwise a validation error is returned. This change is a non-overlapping one, meaning that the new selector does @@ -315,13 +323,14 @@ Sometimes you may want to rollback a Deployment; for example, when the Deploymen By default, all of the Deployment's rollout history is kept in the system so that you can rollback anytime you want (you can change that by modifying revision history limit). +{{< note >}} **Note:** A Deployment's revision is created when a Deployment's rollout is triggered. This means that the new revision is created if and only if the Deployment's pod template (`.spec.template`) is changed, for example if you update the labels or container images of the template. Other updates, such as scaling the Deployment, do not create a Deployment revision, so that we can facilitate simultaneous manual- or auto-scaling. This means that when you roll back to an earlier revision, only the Deployment's pod template part is rolled back. -{: .note} +{{< /note >}} Suppose that we made a typo while updating the Deployment, by putting the image name as `nginx:1.91` instead of `nginx:1.9.1`: @@ -362,12 +371,13 @@ nginx-deployment-3066724191-08mng 0/1 ImagePullBackOff 0 6s nginx-deployment-3066724191-eocby 0/1 ImagePullBackOff 0 6s ``` +{{< note >}} **Note:** The Deployment controller will stop the bad rollout automatically, and will stop scaling up the new ReplicaSet. This depends on the rollingUpdate parameters (`maxUnavailable` specifically) that you have specified. Kubernetes by default sets the value to 1 and `spec.replicas` to 1 so if you haven't cared about setting those parameters, your Deployment can have 100% unavailability by default! This will be fixed in Kubernetes in a future version. -{: .note} +{{< /note >}} ```shell $ kubectl describe deployment @@ -639,8 +649,9 @@ nginx-2142116321 0 0 0 2m nginx-3926361531 3 3 3 28s ``` +{{< note >}} **Note:** You cannot rollback a paused Deployment until you resume it. -{: .note} +{{< /note >}} ## Deployment status @@ -711,15 +722,17 @@ attributes to the Deployment's `status.conditions`: See the [Kubernetes API conventions](https://git.k8s.io/community/contributors/devel/api-conventions.md#typical-status-properties) for more information on status conditions. +{{< note >}} **Note:** Kubernetes will take no action on a stalled Deployment other than to report a status condition with `Reason=ProgressDeadlineExceeded`. Higher level orchestrators can take advantage of it and act accordingly, for example, rollback the Deployment to its previous version. -{: .note} +{{< /note >}} +{{< note >}} **Note:** If you pause a Deployment, Kubernetes does not check progress against your specified deadline. You can safely pause a Deployment in the middle of a rollout and resume without triggering the condition for exceeding the deadline. -{: .note} +{{< /note >}} You may experience transient errors with your Deployments, either due to a low timeout that you have set or due to any other kind of error that can be treated as transient. For example, let's suppose you have @@ -820,9 +833,10 @@ You can set `.spec.revisionHistoryLimit` field in a Deployment to specify how ma this Deployment you want to retain. The rest will be garbage-collected in the background. By default, it is 10. +{{< note >}} **Note:** Explicitly setting this field to 0, will result in cleaning up all the history of your Deployment thus that Deployment will not be able to roll back. -{: .note} +{{< /note >}} ## Use Cases @@ -870,10 +884,11 @@ A Deployment may terminate Pods whose labels match the selector if their templat from `.spec.template` or if the total number of such Pods exceeds `.spec.replicas`. It brings up new Pods with `.spec.template` if the number of Pods is less than the desired number. +{{< note >}} **Note:** You should not create other pods whose labels match this selector, either directly, by creating another Deployment, or by creating another controller such as a ReplicaSet or a ReplicationController. If you do so, the first Deployment thinks that it created these other pods. Kubernetes does not stop you from doing this. -{: .note} +{{< /note >}} If you have multiple controllers that have overlapping selectors, the controllers will fight with each other and won't behave correctly. @@ -968,6 +983,6 @@ it is created. in a similar fashion. But Deployments are recommended, since they are declarative, server side, and have additional features, such as rolling back to any previous revision even after the rolling update is done. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/workloads/controllers/frontend.yaml b/content/en/docs/concepts/workloads/controllers/frontend.yaml similarity index 100% rename from docs/concepts/workloads/controllers/frontend.yaml rename to content/en/docs/concepts/workloads/controllers/frontend.yaml diff --git a/docs/concepts/workloads/controllers/garbage-collection.md b/content/en/docs/concepts/workloads/controllers/garbage-collection.md similarity index 95% rename from docs/concepts/workloads/controllers/garbage-collection.md rename to content/en/docs/concepts/workloads/controllers/garbage-collection.md index 73a929809007c..376d88259e394 100644 --- a/docs/concepts/workloads/controllers/garbage-collection.md +++ b/content/en/docs/concepts/workloads/controllers/garbage-collection.md @@ -1,8 +1,9 @@ --- title: Garbage Collection +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} The role of the Kubernetes garbage collector is to delete certain objects that once had an owner, but no longer have an owner. @@ -10,10 +11,10 @@ that once had an owner, but no longer have an owner. **Note**: Garbage collection is a beta feature and is enabled by default in Kubernetes version 1.4 and later. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Owners and dependents @@ -34,7 +35,7 @@ setting the `ownerReference` field. Here's a configuration file for a ReplicaSet that has three Pods: -{% include code.html language="yaml" file="my-repset.yaml" ghlink="/docs/concepts/workloads/controllers/my-repset.yaml" %} +{{< code file="my-repset.yaml" >}} If you create the ReplicaSet and then view the Pod metadata, you can see OwnerReferences field: @@ -161,16 +162,16 @@ See [kubeadm/#149](https://github.com/kubernetes/kubeadm/issues/149#issuecomment Tracked at [#26120](https://github.com/kubernetes/kubernetes/issues/26120) -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} [Design Doc 1](https://git.k8s.io/community/contributors/design-proposals/api-machinery/garbage-collection.md) [Design Doc 2](https://git.k8s.io/community/contributors/design-proposals/api-machinery/synchronous-garbage-collection.md) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/workloads/controllers/hpa-rs.yaml b/content/en/docs/concepts/workloads/controllers/hpa-rs.yaml similarity index 100% rename from docs/concepts/workloads/controllers/hpa-rs.yaml rename to content/en/docs/concepts/workloads/controllers/hpa-rs.yaml diff --git a/docs/concepts/workloads/controllers/job.yaml b/content/en/docs/concepts/workloads/controllers/job.yaml similarity index 100% rename from docs/concepts/workloads/controllers/job.yaml rename to content/en/docs/concepts/workloads/controllers/job.yaml diff --git a/docs/concepts/workloads/controllers/jobs-run-to-completion.md b/content/en/docs/concepts/workloads/controllers/jobs-run-to-completion.md similarity index 98% rename from docs/concepts/workloads/controllers/jobs-run-to-completion.md rename to content/en/docs/concepts/workloads/controllers/jobs-run-to-completion.md index 50bc770aec286..cf7412094b878 100644 --- a/docs/concepts/workloads/controllers/jobs-run-to-completion.md +++ b/content/en/docs/concepts/workloads/controllers/jobs-run-to-completion.md @@ -5,8 +5,7 @@ reviewers: title: Jobs - Run to Completion --- -* TOC -{:toc} +{{< toc >}} ## What is a Job? @@ -26,7 +25,7 @@ A Job can also be used to run multiple pods in parallel. Here is an example Job config. It computes π to 2000 places and prints it out. It takes around 10s to complete. -{% include code.html language="yaml" file="job.yaml" ghlink="/docs/concepts/workloads/controllers/job.yaml" %} +{{< code file="job.yaml" >}} Run the example job by downloading the example file and then running this command: @@ -197,11 +196,12 @@ exponential back-off delay (10s, 20s, 40s ...) capped at six minutes, The back-off limit is reset if no new failed Pods appear before the Job's next status check. +{{< note >}} **Note:** Due to a known issue [#54870](https://github.com/kubernetes/kubernetes/issues/54870), when the `spec.template.spec.restartPolicy` field is set to "`OnFailure`", the back-off limit may be ineffective. As a short-term workaround, set the restart policy for the embedded template to "`Never`". -{: .note} +{{< /note >}} ## Job Termination and Cleanup @@ -386,7 +386,7 @@ of custom controller for those pods. This allows the most flexibility, but may complicated to get started with and offers less integration with Kubernetes. One example of this pattern would be a Job which starts a Pod which runs a script that in turn -starts a Spark master controller (see [spark example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/spark/README.md)), runs a spark +starts a Spark master controller (see [spark example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/spark/README.md)), runs a spark driver, and then cleans up. An advantage of this approach is that the overall process gets the completion guarantee of a Job diff --git a/docs/concepts/workloads/controllers/my-repset.yaml b/content/en/docs/concepts/workloads/controllers/my-repset.yaml similarity index 100% rename from docs/concepts/workloads/controllers/my-repset.yaml rename to content/en/docs/concepts/workloads/controllers/my-repset.yaml diff --git a/docs/concepts/workloads/controllers/nginx-deployment.yaml b/content/en/docs/concepts/workloads/controllers/nginx-deployment.yaml similarity index 100% rename from docs/concepts/workloads/controllers/nginx-deployment.yaml rename to content/en/docs/concepts/workloads/controllers/nginx-deployment.yaml diff --git a/docs/concepts/workloads/controllers/replicaset.md b/content/en/docs/concepts/workloads/controllers/replicaset.md similarity index 96% rename from docs/concepts/workloads/controllers/replicaset.md rename to content/en/docs/concepts/workloads/controllers/replicaset.md index 03bcf9538dbdf..af720322e228c 100644 --- a/docs/concepts/workloads/controllers/replicaset.md +++ b/content/en/docs/concepts/workloads/controllers/replicaset.md @@ -4,9 +4,10 @@ reviewers: - bprashanth - madhusudancs title: ReplicaSet +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} ReplicaSet is the next-generation Replication Controller. The only difference between a _ReplicaSet_ and a @@ -15,9 +16,9 @@ the selector support. ReplicaSet supports the new set-based selector requirement as described in the [labels user guide](/docs/concepts/overview/working-with-objects/labels/#label-selectors) whereas a Replication Controller only supports equality-based selector requirements. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## How to use a ReplicaSet @@ -49,7 +50,7 @@ use a Deployment instead, and define your application in the spec section. ## Example -{% include code.html language="yaml" file="frontend.yaml" ghlink="/docs/concepts/workloads/controllers/frontend.yaml" %} +{{< code file="frontend.yaml" >}} Saving this manifest into `frontend.yaml` and submitting it to a Kubernetes cluster should create the defined ReplicaSet and the pods that it manages. @@ -190,7 +191,7 @@ A ReplicaSet can also be a target for a ReplicaSet can be auto-scaled by an HPA. Here is an example HPA targeting the ReplicaSet we created in the previous example. -{% include code.html language="yaml" file="hpa-rs.yaml" ghlink="/docs/concepts/workloads/controllers/hpa-rs.yaml" %} +{{< code file="hpa-rs.yaml" >}} Saving this manifest into `hpa-rs.yaml` and submitting it to a Kubernetes cluster should create the defined HPA that autoscales the target ReplicaSet depending on the CPU usage @@ -232,6 +233,6 @@ machine-level function, such as machine monitoring or machine logging. These po to a machine lifetime: the pod needs to be running on the machine before other pods start, and are safe to terminate when the machine is otherwise ready to be rebooted/shutdown. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/workloads/controllers/replication.yaml b/content/en/docs/concepts/workloads/controllers/replication.yaml similarity index 100% rename from docs/concepts/workloads/controllers/replication.yaml rename to content/en/docs/concepts/workloads/controllers/replication.yaml diff --git a/docs/concepts/workloads/controllers/replicationcontroller.md b/content/en/docs/concepts/workloads/controllers/replicationcontroller.md similarity index 98% rename from docs/concepts/workloads/controllers/replicationcontroller.md rename to content/en/docs/concepts/workloads/controllers/replicationcontroller.md index 393b8388d8f91..7e4169defc5c0 100644 --- a/docs/concepts/workloads/controllers/replicationcontroller.md +++ b/content/en/docs/concepts/workloads/controllers/replicationcontroller.md @@ -3,21 +3,23 @@ reviewers: - bprashanth - janetkuo title: ReplicationController +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} +{{< note >}} **NOTE:** A [`Deployment`](/docs/concepts/workloads/controllers/deployment/) that configures a [`ReplicaSet`](/docs/concepts/workloads/controllers/replicaset/) is now the recommended way to set up replication. -{: .note} +{{< /note >}} A _ReplicationController_ ensures that a specified number of pod replicas are running at any one time. In other words, a ReplicationController makes sure that a pod or a homogeneous set of pods is always up and available. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## How a ReplicationController Works @@ -41,7 +43,7 @@ service, such as web servers. This example ReplicationController config runs three copies of the nginx web server. -{% include code.html language="yaml" file="replication.yaml" ghlink="/docs/concepts/workloads/controllers/replication.yaml" %} +{{< code file="replication.yaml" >}} Run the example job by downloading the example file and then running this command: @@ -237,7 +239,7 @@ The ReplicationController is intended to be a composable building-block primitiv Replication controller is a top-level resource in the Kubernetes REST API. More details about the API object can be found at: -[ReplicationController API object](/docs/reference/generated/kubernetes-api/{{page.version}}/#replicationcontroller-v1-core). +[ReplicationController API object](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#replicationcontroller-v1-core). ## Alternatives to ReplicationController @@ -274,6 +276,6 @@ safe to terminate when the machine is otherwise ready to be rebooted/shutdown. Read [Run Stateless AP Replication Controller](/docs/tutorials/stateless-application/run-stateless-ap-replication-controller/). -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/workloads/controllers/statefulset.md b/content/en/docs/concepts/workloads/controllers/statefulset.md similarity index 96% rename from docs/concepts/workloads/controllers/statefulset.md rename to content/en/docs/concepts/workloads/controllers/statefulset.md index a19691ce59069..09bf1ab76f769 100644 --- a/docs/concepts/workloads/controllers/statefulset.md +++ b/content/en/docs/concepts/workloads/controllers/statefulset.md @@ -7,19 +7,21 @@ reviewers: - kow3ns - smarterclayton title: StatefulSets +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} StatefulSet is the workload API object used to manage stateful applications. +{{< note >}} **Note:** StatefulSets are stable (GA) in 1.9. -{: .note} +{{< /note >}} -{% glossary_definition term_id="statefulset" length="all" %} -{% endcapture %} +{{< glossary_definition term_id="statefulset" length="all" >}} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Using StatefulSets @@ -43,7 +45,7 @@ provides a set of stateless replicas. Controllers such as * StatefulSet was a beta resource prior to 1.9 and not available in any Kubernetes release prior to 1.5. * As with all alpha/beta resources, you can disable StatefulSet through the `--runtime-config` option passed to the apiserver. -* The storage for a given Pod must either be provisioned by a [PersistentVolume Provisioner](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/persistent-volume-provisioning/README.md) based on the requested `storage class`, or pre-provisioned by an admin. +* The storage for a given Pod must either be provisioned by a [PersistentVolume Provisioner](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/persistent-volume-provisioning/README.md) based on the requested `storage class`, or pre-provisioned by an admin. * Deleting and/or scaling a StatefulSet down will *not* delete the volumes associated with the StatefulSet. This is done to ensure data safety, which is generally more valuable than an automatic purge of all related StatefulSet resources. * StatefulSets currently require a [Headless Service](/docs/concepts/services-networking/service/#headless-services) to be responsible for the network identity of the Pods. You are responsible for creating this Service. @@ -233,11 +235,11 @@ updates to its `.spec.template` will not be propagated to its Pods. In most cases you will not need to use a partition, but they are useful if you want to stage an update, roll out a canary, or perform a phased roll out. -{% endcapture %} -{% capture whatsnext %} +{{% /capture %}} +{{% capture whatsnext %}} * Follow an example of [deploying a stateful application](/docs/tutorials/stateful-application/basic-stateful-set/). * Follow an example of [deploying Cassandra with Stateful Sets](/docs/tutorials/stateful-application/cassandra/). -{% endcapture %} -{% include templates/concept.md %} +{{% /capture %}} + diff --git a/content/en/docs/concepts/workloads/pods/_index.md b/content/en/docs/concepts/workloads/pods/_index.md new file mode 100755 index 0000000000000..a105f18fb3327 --- /dev/null +++ b/content/en/docs/concepts/workloads/pods/_index.md @@ -0,0 +1,5 @@ +--- +title: "Pods" +weight: 10 +--- + diff --git a/docs/concepts/workloads/pods/disruptions.md b/content/en/docs/concepts/workloads/pods/disruptions.md similarity index 98% rename from docs/concepts/workloads/pods/disruptions.md rename to content/en/docs/concepts/workloads/pods/disruptions.md index 25d6360678867..1b472317bbe6d 100644 --- a/docs/concepts/workloads/pods/disruptions.md +++ b/content/en/docs/concepts/workloads/pods/disruptions.md @@ -4,9 +4,10 @@ reviewers: - foxish - davidopp title: Disruptions +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This guide is for application owners who want to build highly available applications, and thus need to understand what types of Disruptions can happen to Pods. @@ -14,11 +15,11 @@ what types of Disruptions can happen to Pods. It is also for Cluster Administrators who want to perform automated cluster actions, like upgrading and autoscaling clusters. -{% endcapture %} +{{% /capture %}} -{:toc} +{{< toc >}} -{% capture body %} +{{% capture body %}} ## Voluntary and Involuntary Disruptions @@ -131,7 +132,7 @@ during application updates is configured in the controller spec. (Learn about [updating a deployment](/docs/concepts/workloads/controllers/deployment/#updating-a-deployment).) When a pod is evicted using the eviction API, it is gracefully terminated (see -`terminationGracePeriodSeconds` in [PodSpec](/docs/reference/generated/kubernetes-api/{{page.version}}/#podspec-v1-core).) +`terminationGracePeriodSeconds` in [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core).) ## PDB Example @@ -254,16 +255,16 @@ the nodes in your cluster, such as a node or system software upgrade, here are s disruptions largely overlaps with work to support autoscaling and tolerating involuntary disruptions. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Follow steps to protect your application by [configuring a Pod Disruption Budget](/docs/tasks/run-application/configure-pdb/). * Learn more about [draining nodes](/docs/tasks/administer-cluster/safely-drain-node/) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/workloads/pods/init-containers.md b/content/en/docs/concepts/workloads/pods/init-containers.md similarity index 97% rename from docs/concepts/workloads/pods/init-containers.md rename to content/en/docs/concepts/workloads/pods/init-containers.md index a1b80f318011b..d04d8909e8bce 100644 --- a/docs/concepts/workloads/pods/init-containers.md +++ b/content/en/docs/concepts/workloads/pods/init-containers.md @@ -2,22 +2,23 @@ reviewers: - erictune title: Init Containers +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page provides an overview of Init Containers, which are specialized Containers that run before app Containers and can contain utilities or setup scripts not present in an app image. -{% endcapture %} +{{% /capture %}} -{:toc} +{{< toc >}} This feature has exited beta in 1.6. Init Containers can be specified in the PodSpec alongside the app `containers` array. The beta annotation value will still be respected and overrides the PodSpec field value, however, they are deprecated in 1.6 and 1.7. In 1.8, the annotations are no longer supported and must be converted to the PodSpec field. -{% capture body %} +{{% capture body %}} ## Understanding Init Containers A [Pod](/docs/concepts/workloads/pods/pod-overview/) can have multiple Containers running @@ -34,7 +35,7 @@ Container succeeds. However, if the Pod has a `restartPolicy` of Never, it is no To specify a Container as an Init Container, add the `initContainers` field on the PodSpec as a JSON array of objects of type -[Container](/docs/reference/generated/kubernetes-api/{{page.version}}/#container-v1-core) +[Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core) alongside the app `containers` array. The status of the init containers is returned in `status.initContainerStatuses` field as an array of the container statuses (similar to the `status.containerStatuses` @@ -319,14 +320,14 @@ In Apiserver and Kubelet versions 1.8.0 or greater, support for the alpha and be is removed, requiring a conversion from the deprecated annotations to the `spec.initContainers` field. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [Creating a Pod that has an Init Container](/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod-that-has-an-init-container) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/workloads/pods/pod-lifecycle.md b/content/en/docs/concepts/workloads/pods/pod-lifecycle.md similarity index 89% rename from docs/concepts/workloads/pods/pod-lifecycle.md rename to content/en/docs/concepts/workloads/pods/pod-lifecycle.md index 75dc84ff8b8f0..59ddd17dbc3db 100644 --- a/docs/concepts/workloads/pods/pod-lifecycle.md +++ b/content/en/docs/concepts/workloads/pods/pod-lifecycle.md @@ -1,23 +1,24 @@ --- title: Pod Lifecycle +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} -{% comment %}Updated: 4/14/2015{% endcomment %} -{% comment %}Edited and moved to Concepts section: 2/2/17{% endcomment %} +{{< comment >}}Updated: 4/14/2015{{< /comment >}} +{{< comment >}}Edited and moved to Concepts section: 2/2/17{{< /comment >}} This page describes the lifecycle of a Pod. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Pod phase A Pod's `status` field is a -[PodStatus](/docs/reference/generated/kubernetes-api/{{page.version}}/#podstatus-v1-core) +[PodStatus](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podstatus-v1-core) object, which has a `phase` field. The phase of a Pod is a simple, high-level summary of where the Pod is in its @@ -52,7 +53,7 @@ Here are the possible values for `phase`: ## Pod conditions A Pod has a PodStatus, which has an array of -[PodConditions](/docs/reference/generated/kubernetes-api/{{page.version}}/#podcondition-v1-core). Each element +[PodConditions](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podcondition-v1-core). Each element of the PodCondition array has a `type` field and a `status` field. The `type` field is a string, with possible values PodScheduled, Ready, Initialized, and Unschedulable. The `status` field is a string, with possible values True, False, @@ -60,22 +61,22 @@ and Unknown. ## Container probes -A [Probe](/docs/reference/generated/kubernetes-api/{{page.version}}/#probe-v1-core) is a diagnostic +A [Probe](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#probe-v1-core) is a diagnostic performed periodically by the [kubelet](/docs/admin/kubelet/) on a Container. To perform a diagnostic, the kubelet calls a [Handler](https://godoc.org/k8s.io/kubernetes/pkg/api/v1#Handler) implemented by the Container. There are three types of handlers: -* [ExecAction](/docs/reference/generated/kubernetes-api/{{page.version}}/#execaction-v1-core): +* [ExecAction](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#execaction-v1-core): Executes a specified command inside the Container. The diagnostic is considered successful if the command exits with a status code of 0. -* [TCPSocketAction](/docs/reference/generated/kubernetes-api/{{page.version}}/#tcpsocketaction-v1-core): +* [TCPSocketAction](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#tcpsocketaction-v1-core): Performs a TCP check against the Container's IP address on a specified port. The diagnostic is considered successful if the port is open. -* [HTTPGetAction](/docs/reference/generated/kubernetes-api/{{page.version}}/#httpgetaction-v1-core): +* [HTTPGetAction](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#httpgetaction-v1-core): Performs an HTTP Get request against the Container's IP address on a specified port and path. The diagnostic is considered successful if the response has a status code greater than or equal to 200 and less than 400. @@ -133,11 +134,11 @@ For more information about how to set up a liveness or readiness probe, see [Con ## Pod and Container status For detailed information about Pod Container status, see -[PodStatus](/docs/reference/generated/kubernetes-api/{{page.version}}/#podstatus-v1-core) +[PodStatus](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podstatus-v1-core) and -[ContainerStatus](/docs/reference/generated/kubernetes-api/{{page.version}}/#containerstatus-v1-core). +[ContainerStatus](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#containerstatus-v1-core). Note that the information reported as Pod status depends on the current -[ContainerState](/docs/reference/generated/kubernetes-api/{{page.version}}/#containerstatus-v1-core). +[ContainerState](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#containerstatus-v1-core). ## Restart policy @@ -267,10 +268,10 @@ spec: * Node controller sets Pod `phase` to Failed. * If running under a controller, Pod is recreated elsewhere. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Get hands-on experience [attaching handlers to Container lifecycle events](/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/). @@ -280,7 +281,7 @@ spec: * Learn more about [Container lifecycle hooks](/docs/concepts/containers/container-lifecycle-hooks/). -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/workloads/pods/pod-overview.md b/content/en/docs/concepts/workloads/pods/pod-overview.md similarity index 97% rename from docs/concepts/workloads/pods/pod-overview.md rename to content/en/docs/concepts/workloads/pods/pod-overview.md index 3302e1fad8db8..bfdcd2ec280a7 100644 --- a/docs/concepts/workloads/pods/pod-overview.md +++ b/content/en/docs/concepts/workloads/pods/pod-overview.md @@ -2,15 +2,16 @@ reviewers: - erictune title: Pod Overview +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page provides an overview of `Pod`, the smallest deployable object in the Kubernetes object model. -{% endcapture %} +{{% /capture %}} -{:toc} +{{< toc >}} -{% capture body %} +{{% capture body %}} ## Understanding Pods A *Pod* is the basic building block of Kubernetes--the smallest and simplest unit in the Kubernetes object model that you create or deploy. A Pod represents a running process on your cluster. @@ -53,8 +54,9 @@ A Pod can specify a set of shared storage *volumes*. All containers in the Pod c You'll rarely create individual Pods directly in Kubernetes--even singleton Pods. This is because Pods are designed as relatively ephemeral, disposable entities. When a Pod gets created (directly by you, or indirectly by a Controller), it is scheduled to run on a Node in your cluster. The Pod remains on that Node until the process is terminated, the pod object is deleted, the pod is *evicted* for lack of resources, or the Node fails. +{{< note >}} **Note:** Restarting a container in a Pod should not be confused with restarting the Pod. The Pod itself does not run, but is an environment the containers run in and persists until it is deleted. -{: .note} +{{< /note >}} Pods do not, by themselves, self-heal. If a Pod is scheduled to a Node that fails, or if the scheduling operation itself fails, the Pod is deleted; likewise, a Pod won't survive an eviction due to a lack of resources or Node maintenance. Kubernetes uses a higher-level abstraction, called a *Controller*, that handles the work of managing the relatively disposable Pod instances. Thus, while it is possible to use Pod directly, it's far more common in Kubernetes to manage your pods using a Controller. See [Pods and Controllers](#pods-and-controllers) for more information on how Kubernetes uses Controllers to implement Pod scaling and healing. @@ -94,12 +96,12 @@ spec: Rather than specifying the current desired state of all replicas, pod templates are like cookie cutters. Once a cookie has been cut, the cookie has no relationship to the cutter. There is no "quantum entanglement". Subsequent changes to the template or even switching to a new template has no direct effect on the pods already created. Similarly, pods created by a replication controller may subsequently be updated directly. This is in deliberate contrast to pods, which do specify the current desired state of all containers belonging to the pod. This approach radically simplifies system semantics and increases the flexibility of the primitive. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about Pod behavior: * [Pod Termination](/docs/concepts/workloads/pods/pod/#termination-of-pods) * Other Pod Topics -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/concepts/workloads/pods/pod.md b/content/en/docs/concepts/workloads/pods/pod.md similarity index 99% rename from docs/concepts/workloads/pods/pod.md rename to content/en/docs/concepts/workloads/pods/pod.md index 665e76435b2ca..ca83ff740d334 100644 --- a/docs/concepts/workloads/pods/pod.md +++ b/content/en/docs/concepts/workloads/pods/pod.md @@ -3,8 +3,7 @@ reviewers: title: Pods --- -* TOC -{:toc} +{{< toc >}} _Pods_ are the smallest deployable units of computing that can be created and @@ -198,4 +197,4 @@ spec.containers[0].securityContext.privileged: forbidden '<*>(0xc20b222db0)true' Pod is a top-level resource in the Kubernetes REST API. More details about the API object can be found at: -[Pod API object](/docs/reference/generated/kubernetes-api/{{page.version}}/#pod-v1-core). +[Pod API object](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#pod-v1-core). diff --git a/docs/concepts/workloads/pods/podpreset.md b/content/en/docs/concepts/workloads/pods/podpreset.md similarity index 94% rename from docs/concepts/workloads/pods/podpreset.md rename to content/en/docs/concepts/workloads/pods/podpreset.md index 7863d61be5ff5..74fd2dd75076b 100644 --- a/docs/concepts/workloads/pods/podpreset.md +++ b/content/en/docs/concepts/workloads/pods/podpreset.md @@ -2,17 +2,18 @@ reviewers: - jessfraz title: Pod Preset +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page provides an overview of PodPresets, which are objects for injecting certain information into pods at creation time. The information can include secrets, volumes, volume mounts, and environment variables. -{% endcapture %} +{{% /capture %}} -{:toc} +{{< toc >}} -{% capture body %} +{{% capture body %}} ## Understanding Pod Presets A `Pod Preset` is an API resource for injecting additional runtime requirements @@ -49,10 +50,11 @@ Pods, Kubernetes modifies the Pod Spec. For changes to `Env`, `EnvFrom`, and `VolumeMounts`, Kubernetes modifies the container spec for all containers in the Pod; for changes to `Volume`, Kubernetes modifies the Pod Spec. +{{< note >}} **Note:** A Pod Preset is capable of modifying the `spec.containers` field in a Pod spec when appropriate. *No* resource definition from the Pod Preset will be applied to the `initContainers` field. -{: .note} +{{< /note >}} ### Disable Pod Preset for a Specific Pod @@ -73,12 +75,12 @@ In order to use Pod Presets in your cluster you must ensure the following: 1. You have defined your Pod Presets by creating `PodPreset` objects in the namespace you will use. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [Injecting data into a Pod using PodPreset](/docs/tasks/inject-data-application/podpreset/) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/editdocs.md b/content/en/docs/editdocs.md similarity index 97% rename from editdocs.md rename to content/en/docs/editdocs.md index 73d62db8abbe5..1a3eeb53ce4e3 100644 --- a/editdocs.md +++ b/content/en/docs/editdocs.md @@ -12,7 +12,7 @@ $( document ).ready(function() { $("#generalInstructions").hide(); $("#continueEdit").show(); $("#continueEditButton").text("Edit " + forwarding); - $("#continueEditButton").attr("href", "https://github.com/kubernetes/website/edit/{{ page.docsbranch }}/" + forwarding) + $("#continueEditButton").attr("href", "https://github.com/kubernetes/website/edit/{{< param "docsbranch" >}}/" + forwarding) $("#viewOnGithubButton").text("View " + forwarding + " on GitHub"); $("#viewOnGithubButton").attr("href", "https://git.k8s.io/website/" + forwarding) } else { diff --git a/docs/getting-started-guides/OWNERS b/content/en/docs/getting-started-guides/OWNERS similarity index 100% rename from docs/getting-started-guides/OWNERS rename to content/en/docs/getting-started-guides/OWNERS diff --git a/content/en/docs/getting-started-guides/_index.md b/content/en/docs/getting-started-guides/_index.md new file mode 100755 index 0000000000000..0e925b92bd0b6 --- /dev/null +++ b/content/en/docs/getting-started-guides/_index.md @@ -0,0 +1,5 @@ +--- +title: "Independent Solutions" +weight: 50 +--- + diff --git a/docs/getting-started-guides/alibaba-cloud.md b/content/en/docs/getting-started-guides/alibaba-cloud.md similarity index 100% rename from docs/getting-started-guides/alibaba-cloud.md rename to content/en/docs/getting-started-guides/alibaba-cloud.md diff --git a/docs/getting-started-guides/alternatives.md b/content/en/docs/getting-started-guides/alternatives.md similarity index 100% rename from docs/getting-started-guides/alternatives.md rename to content/en/docs/getting-started-guides/alternatives.md diff --git a/docs/getting-started-guides/aws.md b/content/en/docs/getting-started-guides/aws.md similarity index 96% rename from docs/getting-started-guides/aws.md rename to content/en/docs/getting-started-guides/aws.md index e491ebb230362..0a854624216fa 100644 --- a/docs/getting-started-guides/aws.md +++ b/content/en/docs/getting-started-guides/aws.md @@ -5,8 +5,7 @@ reviewers: title: Running Kubernetes on AWS EC2 --- -* TOC -{:toc} +{{< toc >}} ## Supported Production Grade Tools @@ -47,9 +46,9 @@ For more information, please read [kubeconfig files](/docs/tasks/access-applicat See [a simple nginx example](/docs/tasks/run-application/run-stateless-application-deployment/) to try out your new cluster. -The "Guestbook" application is another popular example to get started with Kubernetes: [guestbook example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/guestbook/) +The "Guestbook" application is another popular example to get started with Kubernetes: [guestbook example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/guestbook/) -For more complete applications, please look in the [examples directory](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/) +For more complete applications, please look in the [examples directory](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/) ## Scaling the cluster diff --git a/docs/getting-started-guides/azure.md b/content/en/docs/getting-started-guides/azure.md similarity index 100% rename from docs/getting-started-guides/azure.md rename to content/en/docs/getting-started-guides/azure.md diff --git a/docs/getting-started-guides/clc.md b/content/en/docs/getting-started-guides/clc.md similarity index 99% rename from docs/getting-started-guides/clc.md rename to content/en/docs/getting-started-guides/clc.md index eafb55511fa17..e4792f40c835d 100644 --- a/docs/getting-started-guides/clc.md +++ b/content/en/docs/getting-started-guides/clc.md @@ -2,7 +2,6 @@ title: Running Kubernetes on CenturyLink Cloud --- -* TOC {: toc} These scripts handle the creation, deletion and expansion of Kubernetes clusters on CenturyLink Cloud. diff --git a/docs/getting-started-guides/cloudstack.md b/content/en/docs/getting-started-guides/cloudstack.md similarity index 97% rename from docs/getting-started-guides/cloudstack.md rename to content/en/docs/getting-started-guides/cloudstack.md index 27d445b4b508c..9a76ab3f8a808 100644 --- a/docs/getting-started-guides/cloudstack.md +++ b/content/en/docs/getting-started-guides/cloudstack.md @@ -12,8 +12,7 @@ This guide uses a single [Ansible playbook](https://github.com/apachecloudstack/ -* TOC -{:toc} +{{< toc >}} ## Prerequisites @@ -73,7 +72,7 @@ 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 {% raw %}{{ k8s_master.default_ip }}{% endraw %}'] ******** + 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: diff --git a/docs/getting-started-guides/coreos/OWNERS b/content/en/docs/getting-started-guides/coreos/OWNERS similarity index 100% rename from docs/getting-started-guides/coreos/OWNERS rename to content/en/docs/getting-started-guides/coreos/OWNERS diff --git a/docs/getting-started-guides/coreos/index.md b/content/en/docs/getting-started-guides/coreos/_index.md similarity index 99% rename from docs/getting-started-guides/coreos/index.md rename to content/en/docs/getting-started-guides/coreos/_index.md index 03d6b413ca8d3..95a568e26d353 100644 --- a/docs/getting-started-guides/coreos/index.md +++ b/content/en/docs/getting-started-guides/coreos/_index.md @@ -1,9 +1,9 @@ --- title: CoreOS +toc_hide: true --- -* TOC -{:toc} +{{< toc >}} There are multiple guides on running Kubernetes with [CoreOS](https://coreos.com/kubernetes/docs/latest/): diff --git a/docs/getting-started-guides/coreos/cloud-configs/master.yaml b/content/en/docs/getting-started-guides/coreos/cloud-configs/master.yaml similarity index 100% rename from docs/getting-started-guides/coreos/cloud-configs/master.yaml rename to content/en/docs/getting-started-guides/coreos/cloud-configs/master.yaml diff --git a/docs/getting-started-guides/coreos/cloud-configs/node.yaml b/content/en/docs/getting-started-guides/coreos/cloud-configs/node.yaml similarity index 100% rename from docs/getting-started-guides/coreos/cloud-configs/node.yaml rename to content/en/docs/getting-started-guides/coreos/cloud-configs/node.yaml diff --git a/docs/getting-started-guides/dcos.md b/content/en/docs/getting-started-guides/dcos.md similarity index 100% rename from docs/getting-started-guides/dcos.md rename to content/en/docs/getting-started-guides/dcos.md diff --git a/docs/getting-started-guides/fedora/OWNERS b/content/en/docs/getting-started-guides/fedora/OWNERS similarity index 100% rename from docs/getting-started-guides/fedora/OWNERS rename to content/en/docs/getting-started-guides/fedora/OWNERS diff --git a/content/en/docs/getting-started-guides/fedora/_index.md b/content/en/docs/getting-started-guides/fedora/_index.md new file mode 100755 index 0000000000000..d8a5bb38a0606 --- /dev/null +++ b/content/en/docs/getting-started-guides/fedora/_index.md @@ -0,0 +1,5 @@ +--- +title: "Bare Metal" +weight: 60 +--- + diff --git a/docs/getting-started-guides/fedora/fedora_manual_config.md b/content/en/docs/getting-started-guides/fedora/fedora_manual_config.md similarity index 99% rename from docs/getting-started-guides/fedora/fedora_manual_config.md rename to content/en/docs/getting-started-guides/fedora/fedora_manual_config.md index 94c1fc1cc44cb..f6d7c0c2d64f1 100644 --- a/docs/getting-started-guides/fedora/fedora_manual_config.md +++ b/content/en/docs/getting-started-guides/fedora/fedora_manual_config.md @@ -6,8 +6,7 @@ reviewers: title: Fedora (Single Node) --- -* TOC -{:toc} +{{< toc >}} ## Prerequisites diff --git a/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md b/content/en/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md similarity index 99% rename from docs/getting-started-guides/fedora/flannel_multi_node_cluster.md rename to content/en/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md index 22aa54d50a6fb..7a13f101ca5e7 100644 --- a/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md +++ b/content/en/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md @@ -6,8 +6,7 @@ reviewers: title: Fedora (Multi Node) --- -* TOC -{:toc} +{{< toc >}} 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](/docs/getting-started-guides/fedora/fedora_manual_config/) 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. diff --git a/docs/getting-started-guides/gce.md b/content/en/docs/getting-started-guides/gce.md similarity index 97% rename from docs/getting-started-guides/gce.md rename to content/en/docs/getting-started-guides/gce.md index 8497db17c9f92..063069e4a8b5a 100644 --- a/docs/getting-started-guides/gce.md +++ b/content/en/docs/getting-started-guides/gce.md @@ -9,8 +9,7 @@ title: Running Kubernetes on Google Compute Engine 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). -* TOC -{:toc} +{{< toc >}} ### Before you start @@ -140,7 +139,7 @@ Some of the pods may take a few seconds to start up (during this time they'll sh Then, see [a simple nginx example](/docs/user-guide/simple-nginx) to try out your new cluster. -For more complete applications, please look in the [examples directory](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/). The [guestbook example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/guestbook/) is a good "getting started" walkthrough. +For more complete applications, please look in the [examples directory](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/). The [guestbook example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/guestbook/) is a good "getting started" walkthrough. ### Tearing down the cluster diff --git a/docs/getting-started-guides/kops.md b/content/en/docs/getting-started-guides/kops.md similarity index 100% rename from docs/getting-started-guides/kops.md rename to content/en/docs/getting-started-guides/kops.md diff --git a/docs/getting-started-guides/kubespray.md b/content/en/docs/getting-started-guides/kubespray.md similarity index 99% rename from docs/getting-started-guides/kubespray.md rename to content/en/docs/getting-started-guides/kubespray.md index 3bc5f1a5f2eb8..255870822069b 100644 --- a/docs/getting-started-guides/kubespray.md +++ b/content/en/docs/getting-started-guides/kubespray.md @@ -94,8 +94,9 @@ Check out planned work on Kubespray's [roadmap](https://github.com/kubernetes-in You can reset your nodes and wipe out all components installed with Kubespray via the [reset playbook](https://github.com/kubernetes-incubator/kubespray/blob/master/reset.yml). +{{< caution >}} **Caution:** When running the reset playbook, be sure not to accidentally target your production cluster! -{: .caution} +{{< /caution >}} ## Feedback diff --git a/docs/getting-started-guides/minikube.md b/content/en/docs/getting-started-guides/minikube.md similarity index 99% rename from docs/getting-started-guides/minikube.md rename to content/en/docs/getting-started-guides/minikube.md index f2504cefec205..585baa00f93b8 100644 --- a/docs/getting-started-guides/minikube.md +++ b/content/en/docs/getting-started-guides/minikube.md @@ -8,8 +8,7 @@ title: Running Kubernetes Locally via Minikube Minikube is a tool that makes it easy to run Kubernetes locally. Minikube runs a single-node Kubernetes cluster inside a VM on your laptop for users looking to try out Kubernetes or develop with it day-to-day. -* TOC -{:toc} +{{< toc >}} ### Minikube Features diff --git a/docs/getting-started-guides/ovirt.md b/content/en/docs/getting-started-guides/ovirt.md similarity index 99% rename from docs/getting-started-guides/ovirt.md rename to content/en/docs/getting-started-guides/ovirt.md index 5740f01ebf4cb..ebdd2c1159327 100644 --- a/docs/getting-started-guides/ovirt.md +++ b/content/en/docs/getting-started-guides/ovirt.md @@ -5,8 +5,7 @@ reviewers: title: oVirt --- -* TOC -{:toc} +{{< toc >}} ## What is oVirt diff --git a/docs/getting-started-guides/scratch.md b/content/en/docs/getting-started-guides/scratch.md similarity index 98% rename from docs/getting-started-guides/scratch.md rename to content/en/docs/getting-started-guides/scratch.md index 2e731d99eaa88..5bf657bdadeed 100644 --- a/docs/getting-started-guides/scratch.md +++ b/content/en/docs/getting-started-guides/scratch.md @@ -18,8 +18,7 @@ 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. -* TOC -{:toc} +{{< toc >}} ## Designing and Preparing @@ -185,7 +184,7 @@ You have several choices for Kubernetes images: - For example `k8s.gcr.io/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/{{page.githubbranch}}/cmd/hyperkube) binary is an all in one binary + - The [hyperkube](https://releases.k8s.io/{{< param "githubbranch" >}}/cmd/hyperkube) binary is an all in one binary - `hyperkube kubelet ...` runs the kubelet, `hyperkube apiserver ...` runs an apiserver, etc. - Build your own images. - Useful if you are using a private registry. @@ -493,12 +492,14 @@ You will need to run one or more instances of etcd. - Not highly available, but easy to restore - Run one etcd instance, with its log written to a directory backed by durable storage (RAID, GCE PD). + {{< note >}} **Note:** May result in operations outages in case of instance outage. - {: .note} + {{< /note >}} - Highly available - Run 3 or 5 etcd instances with non durable storage. + {{< note >}} **Note:** Log can be written to non-durable storage because storage is replicated. - {: .note} + {{< /note >}} See [cluster-troubleshooting](/docs/admin/cluster-troubleshooting/) for more discussion on factors affecting cluster availability. @@ -641,7 +642,7 @@ Apiserver supports several cloud providers. - options for `--cloud-provider` flag are `aws`, `azure`, `cloudstack`, `fake`, `gce`, `mesos`, `openstack`, `ovirt`, `photon`, `rackspace`, `vsphere`, or unset. - unset used for bare metal setups. -- support for new IaaS is added by contributing code [here](https://releases.k8s.io/{{page.githubbranch}}/pkg/cloudprovider/providers) +- support for new IaaS is added by contributing code [here](https://releases.k8s.io/{{< param "githubbranch" >}}/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. @@ -649,7 +650,7 @@ Some cloud providers require a config file. If so, you need to put config file i - Used by `aws`, `gce`, `mesos`, `openstack`, `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/{{page.githubbranch}}/pkg/cloudprovider/providers/aws/aws.go) +- AWS format defined by type [AWSCloudConfig](https://releases.k8s.io/{{< param "githubbranch" >}}/pkg/cloudprovider/providers/aws/aws.go) - There is a similar type in the corresponding file for other cloud providers. #### Scheduler pod template @@ -812,14 +813,14 @@ Notes for setting up each cluster service are given below: * Cluster DNS: * Required for many Kubernetes examples - * [Setup instructions](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/dns/) + * [Setup instructions](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/dns/) * [Admin Guide](/docs/concepts/services-networking/dns-pod-service/) * Cluster-level Logging * [Cluster-level Logging Overview](/docs/user-guide/logging/overview/) * [Cluster-level Logging with Elasticsearch](/docs/user-guide/logging/elasticsearch/) * [Cluster-level Logging with Stackdriver Logging](/docs/user-guide/logging/stackdriver/) * Container Resource Monitoring - * [Setup instructions](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/cluster-monitoring/) + * [Setup instructions](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/cluster-monitoring/) * GUI * [Setup instructions](https://github.com/kubernetes/dashboard) @@ -860,7 +861,7 @@ At this point you should be able to run through one of the basic examples, such ### Running the Conformance Test -You may want to try to run the [Conformance test](http://releases.k8s.io/{{page.githubbranch}}/test/e2e_node/conformance/run_test.sh). Any failures may give a hint as to areas that need more attention. +You may want to try to run the [Conformance test](http://releases.k8s.io/{{< param "githubbranch" >}}/test/e2e_node/conformance/run_test.sh). Any failures may give a hint as to areas that need more attention. ### Networking diff --git a/docs/getting-started-guides/stackpoint.md b/content/en/docs/getting-started-guides/stackpoint.md similarity index 99% rename from docs/getting-started-guides/stackpoint.md rename to content/en/docs/getting-started-guides/stackpoint.md index c073ce733c121..a0a108bb30332 100644 --- a/docs/getting-started-guides/stackpoint.md +++ b/content/en/docs/getting-started-guides/stackpoint.md @@ -4,8 +4,7 @@ reviewers: title: Running Kubernetes on Multiple Clouds with Stackpoint.io --- -* TOC -{:toc} +{{< toc >}} ## Introduction diff --git a/docs/getting-started-guides/ubuntu/index.md b/content/en/docs/getting-started-guides/ubuntu/_index.md similarity index 95% rename from docs/getting-started-guides/ubuntu/index.md rename to content/en/docs/getting-started-guides/ubuntu/_index.md index b503e8025d0b0..1b1eced18964a 100644 --- a/docs/getting-started-guides/ubuntu/index.md +++ b/content/en/docs/getting-started-guides/ubuntu/_index.md @@ -1,12 +1,13 @@ --- title: Kubernetes on Ubuntu +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} There are multiple ways to run a Kubernetes cluster with Ubuntu. These pages explain how to deploy Kubernetes on Ubuntu on multiple public and private clouds, as well as bare metal. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Official Ubuntu Guides - [The Canonical Distribution of Kubernetes](https://www.ubuntu.com/cloud/kubernetes) @@ -71,6 +72,6 @@ We're normally following the following Slack channels: - [sig-onprem](https://kubernetes.slack.com/messages/sig-onprem/) and we monitor the Kubernetes mailing lists. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/getting-started-guides/ubuntu/backups.md b/content/en/docs/getting-started-guides/ubuntu/backups.md similarity index 94% rename from docs/getting-started-guides/ubuntu/backups.md rename to content/en/docs/getting-started-guides/ubuntu/backups.md index e3e621b0b1091..f06a8edde357d 100644 --- a/docs/getting-started-guides/ubuntu/backups.md +++ b/content/en/docs/getting-started-guides/ubuntu/backups.md @@ -1,20 +1,21 @@ --- title: Backups +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} The state of a Kubernetes cluster is kept in the etcd datastore. This page shows how to backup and restore the etcd shipped with the Canonical Distribution of Kubernetes. Backing up application specific data, normally stored in a persistent volume, is outside the scope of this document. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} This page assumes you have a working Juju deployed cluster. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Snapshot etcd data The `snapshot` action of the etcd charm allows the operator to snapshot @@ -113,9 +114,9 @@ juju run-action new-etcd/0 restore ``` -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Known Limitations #### Loss of PKI warning @@ -124,11 +125,12 @@ If you destroy the leader - identified with the `*` text next to the unit number all TLS pki will be lost. No PKI migration occurs outside of the units requesting and registering the certificates. +{{< caution >}} **Caution:** Mismanaging this configuration will result in locking yourself out of the cluster, and can potentially break existing deployments in very strange ways relating to x509 validation of certificates, which affects both servers and clients. -{: .caution} +{{< /caution >}} #### Restoring from snapshot on a scaled cluster @@ -137,6 +139,6 @@ Etcd performs clustering during unit turn-up, and state is stored in Etcd itself During the snapshot restore phase, a new cluster ID is initialized, and peers are dropped from the snapshot state to enable snapshot restoration. Please follow the migration instructions above in the restore action description. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/getting-started-guides/ubuntu/decommissioning.md b/content/en/docs/getting-started-guides/ubuntu/decommissioning.md similarity index 93% rename from docs/getting-started-guides/ubuntu/decommissioning.md rename to content/en/docs/getting-started-guides/ubuntu/decommissioning.md index 1585e649153b4..6eaa3c3391768 100644 --- a/docs/getting-started-guides/ubuntu/decommissioning.md +++ b/content/en/docs/getting-started-guides/ubuntu/decommissioning.md @@ -1,21 +1,23 @@ --- title: Decommissioning +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows you how to properly decommission a cluster. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} This page assumes you have a working Juju deployed cluster. +{{< warning >}} **Warning:** By the time you've reached this step you should have backed up your workloads and pertinent data; this section is for the complete destruction of a cluster. -{: .warning} +{{< /warning >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Destroy the Juju model It is recommended to deploy individual Kubernetes clusters in their own models, so that there is a clean separation between environments. To remove a cluster first find out which model it's in with `juju list-models`. The controller reserves an `admin` model for itself. If you have chosen to not name your model it might show up as `default`. @@ -73,6 +75,6 @@ Waiting for hosted model resources to be reclaimed All hosted models reclaimed, cleaning up controller machines $ ``` -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/getting-started-guides/ubuntu/glossary.md b/content/en/docs/getting-started-guides/ubuntu/glossary.md similarity index 92% rename from docs/getting-started-guides/ubuntu/glossary.md rename to content/en/docs/getting-started-guides/ubuntu/glossary.md index 30cbd8e142cb1..391190eebf7b4 100644 --- a/docs/getting-started-guides/ubuntu/glossary.md +++ b/content/en/docs/getting-started-guides/ubuntu/glossary.md @@ -1,12 +1,13 @@ --- title: Glossary and Terminology +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page explains some of the terminology used in deploying Kubernetes with Juju. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} **controller** - The management node of a cloud environment. Typically you have one controller per cloud region, or more in HA environments. The controller is responsible for managing all subsequent models in a given environment. It contains the Juju API server and its underlying database. @@ -18,6 +19,6 @@ This page explains some of the terminology used in deploying Kubernetes with Juj **unit** - A given instance of a service. These may or may not use up a whole machine, and may be colocated on the same machine. So for example you might have a `kubernetes-worker`, and `etcd`, and `easyrsa` units running on a single machine, but they are three distinct units of different services. **machine** - A physical node, these can either be bare metal nodes, or virtual machines provided by a cloud. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/getting-started-guides/ubuntu/installation.md b/content/en/docs/getting-started-guides/ubuntu/installation.md similarity index 98% rename from docs/getting-started-guides/ubuntu/installation.md rename to content/en/docs/getting-started-guides/ubuntu/installation.md index 7c788380d0e19..811850c3264b2 100644 --- a/docs/getting-started-guides/ubuntu/installation.md +++ b/content/en/docs/getting-started-guides/ubuntu/installation.md @@ -3,13 +3,14 @@ reviewers: - caesarxuchao - erictune title: Setting up Kubernetes with Juju +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} Ubuntu 16.04 introduced the [Canonical Distribution of Kubernetes](https://www.ubuntu.com/cloud/kubernetes), a pure upstream distribution of Kubernetes designed for production usage. This page shows you how to deploy a cluster. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} - A working [Juju client](https://jujucharms.com/docs/2.3/reference-install); this does not have to be a Linux machine, it can also be Windows or OSX. - A [supported cloud](#cloud-compatibility). - Bare Metal deployments are supported via [MAAS](http://maas.io). Refer to the [MAAS documentation](http://maas.io/docs/) for configuration instructions. @@ -21,10 +22,10 @@ Ubuntu 16.04 introduced the [Canonical Distribution of Kubernetes](https://www.u - github.com - Access to an Ubuntu mirror (public or private) - Offline deployment prepared with [these](https://github.com/juju-solutions/bundle-canonical-kubernetes/wiki/Running-CDK-in-a-restricted-environment) instructions. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Deployment overview Out of the box the deployment comes with the following components on 9 machines: @@ -279,9 +280,9 @@ juju switch juju destroy-controller $controllername --destroy-all-models ``` This will shutdown and terminate all running instances on that cloud. -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## More Info The Ubuntu Kubernetes deployment uses open-source operations, or operations as code, known as charms. These charms are assembled from layers which keeps the code smaller and more focused on the operations of just Kubernetes and its components. @@ -295,6 +296,6 @@ project on github.com: - [Main issue tracker](https://github.com/juju-solutions/bundle-canonical-kubernetes) Feature requests, bug reports, pull requests and feedback are appreciated. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/getting-started-guides/ubuntu/local.md b/content/en/docs/getting-started-guides/ubuntu/local.md similarity index 93% rename from docs/getting-started-guides/ubuntu/local.md rename to content/en/docs/getting-started-guides/ubuntu/local.md index 67e8c60362a44..61127fb4c9dfb 100644 --- a/docs/getting-started-guides/ubuntu/local.md +++ b/content/en/docs/getting-started-guides/ubuntu/local.md @@ -1,14 +1,15 @@ --- title: Local Kubernetes development with LXD +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} Running Kubernetes locally has obvious development advantages, such as lower cost and faster iteration than constantly deploying and tearing down clusters on a public cloud. Ideally, a Kubernetes developer can spawn all necessary nodes inside local containers and test new configurations as they are committed. This page will show you how to deploy a cluster to LXD containers on a local machine. -{% endcapture %} +{{% /capture %}} The purpose of using [LXD](https://linuxcontainers.org/lxd/) on a local machine is to emulate the same deployment that a user would use in a cloud or bare metal. Each node is treated as a machine, with the same characteristics as production. Each node is a separate container, which runs Docker containers and `kubectl` inside (see [Cluster Intro](/docs/tutorials/kubernetes-basics/cluster-intro/) for more info). -{% capture prerequisites %} +{{% capture prerequisites %}} Install [conjure-up](http://conjure-up.io/), a tool for deploying big software. Add the current user to the `lxd` user group. @@ -18,9 +19,9 @@ sudo usermod -a -G lxd $(whoami) ``` Note: If conjure-up asks you to "Setup an ipv6 subnet" with LXD, answer NO. ipv6 with Juju/LXD is currently unsupported. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Deploying Kubernetes Start the deployment with: @@ -64,7 +65,7 @@ Or if you've already run this once it'll create a new config file as shown in th kubectl --kubeconfig=~/.kube/config.conjure-up -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/getting-started-guides/ubuntu/logging.md b/content/en/docs/getting-started-guides/ubuntu/logging.md similarity index 91% rename from docs/getting-started-guides/ubuntu/logging.md rename to content/en/docs/getting-started-guides/ubuntu/logging.md index 9c29a0ddda34a..e691731d297ea 100644 --- a/docs/getting-started-guides/ubuntu/logging.md +++ b/content/en/docs/getting-started-guides/ubuntu/logging.md @@ -1,16 +1,17 @@ --- title: Logging +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page will explain how logging works within a Juju deployed cluster. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} This page assumes you have a working Juju deployed cluster. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Agent Logging The `juju debug-log` will show all of the consolidated logs of all the Juju agents running on each node of the cluster. This can be useful for finding out why a specific node hasn't deployed or is in an error state. These agent logs are located in `/var/lib/juju/agents` on every node. @@ -57,6 +58,6 @@ sudo systemctl restart jujud-machine-0.service ``` See the [official documentation](https://jujucharms.com/docs/stable/models-config) for more information about logging and other model settings in Juju. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/getting-started-guides/ubuntu/monitoring.md b/content/en/docs/getting-started-guides/ubuntu/monitoring.md similarity index 96% rename from docs/getting-started-guides/ubuntu/monitoring.md rename to content/en/docs/getting-started-guides/ubuntu/monitoring.md index d6cfdbaf33bcd..110de5cb134a0 100644 --- a/docs/getting-started-guides/ubuntu/monitoring.md +++ b/content/en/docs/getting-started-guides/ubuntu/monitoring.md @@ -1,16 +1,17 @@ --- title: Monitoring +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to connect various logging solutions to a Juju deployed cluster. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} This page assumes you have a working Juju deployed cluster. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Connecting Datadog Datadog is a SaaS offering which includes support for a range of integrations, including Kubernetes and ETCD. While the solution is SAAS/Commercial, they include a Free tier which is supported with the following method. To deploy a full Kubernetes stack with Datadog out of the box, do: @@ -139,6 +140,6 @@ juju configure nrpe-external-master nagios_master=255.255.255.255 ``` Once configured, connect nrpe-external-master as outlined above. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/getting-started-guides/ubuntu/networking.md b/content/en/docs/getting-started-guides/ubuntu/networking.md similarity index 90% rename from docs/getting-started-guides/ubuntu/networking.md rename to content/en/docs/getting-started-guides/ubuntu/networking.md index d797720b90387..843dd5f6e9ce7 100644 --- a/docs/getting-started-guides/ubuntu/networking.md +++ b/content/en/docs/getting-started-guides/ubuntu/networking.md @@ -1,23 +1,25 @@ --- title: Networking +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} Kubernetes supports the [Container Network Interface (CNI)](https://github.com/containernetworking/cni). This is a network plugin architecture that allows you to use whatever Kubernetes-friendly SDN you want. Currently this means support for Flannel and Canal. This page shows how the various network portions of a cluster work and how to configure them. -{% endcapture %} -{% capture prerequisites %} +{{% /capture %}} +{{% capture prerequisites %}} This page assumes you have a working Juju deployed cluster. +{{< note >}} **Note:** Note that if you deploy a cluster via conjure-up or the CDK bundles, manually deploying CNI plugins is unnecessary. -{: .note} -{% endcapture %} +{{< /note >}} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} The CNI charms are [subordinates](https://jujucharms.com/docs/stable/authors-subordinate-applications). These charms will require a principal charm that implements the `kubernetes-cni` interface in order to properly deploy. @@ -56,6 +58,6 @@ if care is not taken when selecting a good CIDR range to assign to flannel. It's also good practice to ensure you allot yourself a large enough IP range to support how large your cluster will potentially scale. Class A IP ranges with /24 are a good option. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/getting-started-guides/ubuntu/operational-considerations.md b/content/en/docs/getting-started-guides/ubuntu/operational-considerations.md similarity index 97% rename from docs/getting-started-guides/ubuntu/operational-considerations.md rename to content/en/docs/getting-started-guides/ubuntu/operational-considerations.md index b3f1fc758d4db..a2128eb09ede5 100644 --- a/docs/getting-started-guides/ubuntu/operational-considerations.md +++ b/content/en/docs/getting-started-guides/ubuntu/operational-considerations.md @@ -1,15 +1,16 @@ --- title: Operational Considerations +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page gives recommendations and hints for people managing long lived clusters -{% endcapture %} -{% capture prerequisites %} +{{% /capture %}} +{{% capture prerequisites %}} This page assumes you understand the basics of Juju and Kubernetes. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Managing Juju @@ -160,6 +161,6 @@ juju run-action kubernetes-worker/0 registry delete=true ingress=true ``` -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/getting-started-guides/ubuntu/rancher.md b/content/en/docs/getting-started-guides/ubuntu/rancher.md similarity index 98% rename from docs/getting-started-guides/ubuntu/rancher.md rename to content/en/docs/getting-started-guides/ubuntu/rancher.md index 9a2716f84318c..f2d77c11f474a 100644 --- a/docs/getting-started-guides/ubuntu/rancher.md +++ b/content/en/docs/getting-started-guides/ubuntu/rancher.md @@ -1,23 +1,24 @@ --- title: Rancher Integration with Ubuntu Kubernetes +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This repository explains how to deploy Rancher 2.0alpha on Canonical Kubernetes. These steps are currently in alpha/testing phase and will most likely change. The original documentation for this integration can be found at [https://github.com/CalvinHartwell/canonical-kubernetes-rancher/](https://github.com/CalvinHartwell/canonical-kubernetes-rancher/). -{% endcapture %} -{% capture prerequisites %} +{{% /capture %}} +{{% capture prerequisites %}} To use this guide, you must have a working kubernetes cluster that was deployed using Canonical's juju. The full instructions for deploying Kubernetes with juju can be found at [https://kubernetes.io/docs/getting-started-guides/ubuntu/installation/](https://kubernetes.io/docs/getting-started-guides/ubuntu/installation/). -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Deploying Rancher To deploy Rancher, we just need to run the Rancher container workload on-top of Kubernetes. Rancher provides their containers through dockerhub ([https://hub.docker.com/r/rancher/server/tags/](https://hub.docker.com/r/rancher/server/tags/)) and can be downloaded freely from the internet. @@ -356,6 +357,6 @@ You can remove Rancher from your cluster using kubectl. Deleting constructs in K # If you used the nodeport example change the yaml filename if you used the ingress example. kubectl delete -f cdk-rancher-nodeport.yaml ``` -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/getting-started-guides/ubuntu/scaling.md b/content/en/docs/getting-started-guides/ubuntu/scaling.md similarity index 94% rename from docs/getting-started-guides/ubuntu/scaling.md rename to content/en/docs/getting-started-guides/ubuntu/scaling.md index c630bbbf77811..aab81330b6e18 100644 --- a/docs/getting-started-guides/ubuntu/scaling.md +++ b/content/en/docs/getting-started-guides/ubuntu/scaling.md @@ -1,12 +1,13 @@ --- title: Scaling +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to horizontally scale master and worker nodes on a cluster. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} This page assumes you have a working Juju deployed cluster. Any of the applications can be scaled out post-deployment. The charms @@ -15,9 +16,9 @@ update the status messages with progress, so it is recommended to run. ``` watch -c juju status --color ``` -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Kubernetes masters The provided Kubernetes master nodes act as a control plane for the cluster. @@ -83,6 +84,5 @@ For production deployments it is recommended to enable HA of the controller node Enabling HA results in 3 controller nodes, this should be sufficient for most use cases. 5 and 7 controller nodes are also supported for extra large deployments. Refer to the [Juju HA controller documentation](https://jujucharms.com/docs/2.2/controllers-ha) for more information. -{% endcapture %} +{{% /capture %}} -{% include templates/task.md %} \ No newline at end of file diff --git a/docs/getting-started-guides/ubuntu/security.md b/content/en/docs/getting-started-guides/ubuntu/security.md similarity index 87% rename from docs/getting-started-guides/ubuntu/security.md rename to content/en/docs/getting-started-guides/ubuntu/security.md index 7b26785a22e7a..89e70ea822cd6 100644 --- a/docs/getting-started-guides/ubuntu/security.md +++ b/content/en/docs/getting-started-guides/ubuntu/security.md @@ -1,18 +1,19 @@ --- title: Security Considerations +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} By default all connections between every provided node are secured via TLS by easyrsa, including the etcd cluster. This page explains the security considerations of a deployed cluster and production recommendations. -{% endcapture %} -{% capture prerequisites %} +{{% /capture %}} +{{% capture prerequisites %}} This page assumes you have a working Juju deployed cluster. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Implementation The TLS and easyrsa implementations use the following [layers](https://jujucharms.com/docs/2.2/developer-layers). @@ -30,6 +31,6 @@ By default the administrator can ssh to any deployed node in a cluster. You can Note: The Juju controller node will still have open ssh access in your cloud, and will be used as a jump host in this case. Refer to the [model management](https://jujucharms.com/docs/2.2/models) page in the Juju documentation for instructions on how to manage ssh keys. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/getting-started-guides/ubuntu/storage.md b/content/en/docs/getting-started-guides/ubuntu/storage.md similarity index 93% rename from docs/getting-started-guides/ubuntu/storage.md rename to content/en/docs/getting-started-guides/ubuntu/storage.md index 79cdf6da0d6b6..008df52219f50 100644 --- a/docs/getting-started-guides/ubuntu/storage.md +++ b/content/en/docs/getting-started-guides/ubuntu/storage.md @@ -1,15 +1,16 @@ --- title: Storage +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page explains how to install and configure persistent storage on a cluster. -{% endcapture %} -{% capture prerequisites %} +{{% /capture %}} +{{% capture prerequisites %}} This page assumes you have a working Juju deployed cluster. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Ceph Persistent Volumes The Canonical Distribution of Kubernetes allows you to connect with durable @@ -86,6 +87,6 @@ To consume these Persistent Volumes, your pods will need an associated Persistent Volume Claim with them, and is outside the scope of this README. See the [Persistent Volumes](/docs/concepts/storage/persistent-volumes/) documentation for more information. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/getting-started-guides/ubuntu/troubleshooting.md b/content/en/docs/getting-started-guides/ubuntu/troubleshooting.md similarity index 98% rename from docs/getting-started-guides/ubuntu/troubleshooting.md rename to content/en/docs/getting-started-guides/ubuntu/troubleshooting.md index 335cf23dd7b41..925e816beef55 100644 --- a/docs/getting-started-guides/ubuntu/troubleshooting.md +++ b/content/en/docs/getting-started-guides/ubuntu/troubleshooting.md @@ -1,15 +1,16 @@ --- title: Troubleshooting +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This document with highlighting how to troubleshoot the deployment of a Kubernetes cluster, it will not cover debugging of workloads inside Kubernetes. -{% endcapture %} -{% capture prerequisites %} +{{% /capture %}} +{{% capture prerequisites %}} This page assumes you have a working Juju deployed cluster. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Understanding Cluster Status Using `juju status` can give you some insight as to what's happening in a cluster: @@ -175,6 +176,6 @@ This is caused by the API load balancer not forwarding ports in the context of t ## Logging and monitoring By default there is no log aggregation of the Kubernetes nodes, each node logs locally. Please read over the [logging](https://kubernetes.io/docs/getting-started-guides/ubuntu/logging/) page for more information. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/getting-started-guides/ubuntu/upgrades.md b/content/en/docs/getting-started-guides/ubuntu/upgrades.md similarity index 96% rename from docs/getting-started-guides/ubuntu/upgrades.md rename to content/en/docs/getting-started-guides/ubuntu/upgrades.md index d94e9f0b55e48..0feb911186b1d 100644 --- a/docs/getting-started-guides/ubuntu/upgrades.md +++ b/content/en/docs/getting-started-guides/ubuntu/upgrades.md @@ -1,22 +1,24 @@ --- title: Upgrades +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page will outline how to manage and execute a Kubernetes upgrade. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} This page assumes you have a working deployed cluster. +{{< warning >}} **Warning:** You should always back up all your data before attempting an upgrade. Don't forget to include the workload inside your cluster! Refer to the [backup documentation](/docs/getting-started-guides/ubuntu/backups). -{: .warning} +{{< /warning >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Patch kubernetes upgrades for example 1.9.0 -> 1.9.1 Clusters are transparently upgraded to the latest Kubernetes patch release. @@ -80,8 +82,9 @@ First you need to upgrade the masters: juju upgrade-charm kubernetes-master +{{< note >}} **Note:** Always upgrade the masters before the workers. -{: .note} +{{< /note >}} Once the latest charm is deployed, the channel for Kubernetes can be selected by issuing the following: @@ -156,6 +159,6 @@ Upgrading easyrsa should result in zero downtime as it is not a running service: juju upgrade-charm easyrsa -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/getting-started-guides/ubuntu/validation.md b/content/en/docs/getting-started-guides/ubuntu/validation.md similarity index 96% rename from docs/getting-started-guides/ubuntu/validation.md rename to content/en/docs/getting-started-guides/ubuntu/validation.md index 0fccf58967aba..13d65a88de043 100644 --- a/docs/getting-started-guides/ubuntu/validation.md +++ b/content/en/docs/getting-started-guides/ubuntu/validation.md @@ -1,17 +1,18 @@ --- title: Validation - End-to-end Testing +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page will outline how to ensure that a Juju-deployed Kubernetes cluster has stood up correctly and is ready to accept workloads. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} This page assumes you have a working Juju deployed cluster. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## End-to-end testing End-to-end (e2e) tests for Kubernetes provide a mechanism to test end-to-end @@ -88,8 +89,9 @@ a deployed cluster. The following example will skip the `Flaky`, `Slow`, and juju run-action kubernetes-e2e/0 test skip='\[(Flaky|Slow|Feature:.*)\]' +{{< note >}} **Note:** the escaping of the regex due to how bash handles brackets. -{: .note} +{{< /note >}} To see the different types of tests the Kubernetes end-to-end charm has access to, we encourage you to see the [upstream documentation on the different types @@ -109,10 +111,11 @@ places. The raw output of the e2e run is available in the `juju show-action-outp command, as well as a flat file on disk on the `kubernetes-e2e` unit that executed the test. +{{< note >}} **Note:** The results will only be available once the action has completed the test run. End-to-end testing can be quite time consuming, often taking more than 1 hour, depending on configuration. -{: .note} +{{< /note >}} ##### Accessing the results in a flat file @@ -160,7 +163,7 @@ When an upgrade is available, upgrade your deployment: juju upgrade-charm kubernetes-e2e -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/getting-started-guides/windows/OVN_OVS_Windows_Installer.png b/content/en/docs/getting-started-guides/windows/OVN_OVS_Windows_Installer.png similarity index 100% rename from docs/getting-started-guides/windows/OVN_OVS_Windows_Installer.png rename to content/en/docs/getting-started-guides/windows/OVN_OVS_Windows_Installer.png diff --git a/docs/getting-started-guides/windows/UpstreamRouting.png b/content/en/docs/getting-started-guides/windows/UpstreamRouting.png similarity index 100% rename from docs/getting-started-guides/windows/UpstreamRouting.png rename to content/en/docs/getting-started-guides/windows/UpstreamRouting.png diff --git a/docs/getting-started-guides/windows/index.md b/content/en/docs/getting-started-guides/windows/_index.md similarity index 99% rename from docs/getting-started-guides/windows/index.md rename to content/en/docs/getting-started-guides/windows/_index.md index b863610cf9d91..35fbbe00edb04 100644 --- a/docs/getting-started-guides/windows/index.md +++ b/content/en/docs/getting-started-guides/windows/_index.md @@ -1,8 +1,10 @@ --- title: Using Windows Server Containers in Kubernetes +toc_hide: true --- +{{< note >}} **Note:** These instructions were recently updated based on Windows Server platform enhancements and the Kubernetes v1.9 release -{: .note} +{{< /note >}} Kubernetes version 1.5 introduced Alpha support for Windows Server Containers based on the Windows Server 2016 operating system. With the release of Windows Server version 1709 and using Kubernetes v1.9 users are able to deploy a Kubernetes cluster either on-premises or in a private/public cloud using a number of different network topologies and CNI plugins. Some key feature improvements for Windows Server Containers on Kubernetes include: - Improved support for pods! Shared network namespace (compartment) with multiple Windows Server containers (shared kernel) @@ -13,8 +15,9 @@ Kubernetes version 1.5 introduced Alpha support for Windows Server Containers ba The Kubernetes control plane (API Server, Scheduler, Controller Manager, etc) continue to run on Linux, while the kubelet and kube-proxy can be run on Windows Server 2016 or later +{{< note >}} **Note:** Windows Server Containers on Kubernetes is a Beta feature in Kubernetes v1.9 -{: .note} +{{< /note >}} ## Get Windows Binaries We recommend using the release binaries that can be found at [https://github.com/kubernetes/kubernetes/releases/latest](https://github.com/kubernetes/kubernetes/releases/latest). Under the CHANGELOG you can find the Node Binaries link for Windows-amd64, which will include kubeadm, kubectl, kubelet and kube-proxy. diff --git a/docs/getting-started-guides/windows/configmap-pod.yaml b/content/en/docs/getting-started-guides/windows/configmap-pod.yaml similarity index 100% rename from docs/getting-started-guides/windows/configmap-pod.yaml rename to content/en/docs/getting-started-guides/windows/configmap-pod.yaml diff --git a/docs/getting-started-guides/windows/emptydir-pod.yaml b/content/en/docs/getting-started-guides/windows/emptydir-pod.yaml similarity index 100% rename from docs/getting-started-guides/windows/emptydir-pod.yaml rename to content/en/docs/getting-started-guides/windows/emptydir-pod.yaml diff --git a/docs/getting-started-guides/windows/hostpath-volume-pod.yaml b/content/en/docs/getting-started-guides/windows/hostpath-volume-pod.yaml similarity index 100% rename from docs/getting-started-guides/windows/hostpath-volume-pod.yaml rename to content/en/docs/getting-started-guides/windows/hostpath-volume-pod.yaml diff --git a/docs/getting-started-guides/windows/ovn_kubernetes.png b/content/en/docs/getting-started-guides/windows/ovn_kubernetes.png similarity index 100% rename from docs/getting-started-guides/windows/ovn_kubernetes.png rename to content/en/docs/getting-started-guides/windows/ovn_kubernetes.png diff --git a/docs/getting-started-guides/windows/sample-l2bridge-wincni-config.json b/content/en/docs/getting-started-guides/windows/sample-l2bridge-wincni-config.json similarity index 100% rename from docs/getting-started-guides/windows/sample-l2bridge-wincni-config.json rename to content/en/docs/getting-started-guides/windows/sample-l2bridge-wincni-config.json diff --git a/docs/getting-started-guides/windows/secret-pod.yaml b/content/en/docs/getting-started-guides/windows/secret-pod.yaml similarity index 100% rename from docs/getting-started-guides/windows/secret-pod.yaml rename to content/en/docs/getting-started-guides/windows/secret-pod.yaml diff --git a/docs/getting-started-guides/windows/windows-setup.png b/content/en/docs/getting-started-guides/windows/windows-setup.png similarity index 100% rename from docs/getting-started-guides/windows/windows-setup.png rename to content/en/docs/getting-started-guides/windows/windows-setup.png diff --git a/content/en/docs/home/_index.md b/content/en/docs/home/_index.md new file mode 100644 index 0000000000000..3173a76a091da --- /dev/null +++ b/content/en/docs/home/_index.md @@ -0,0 +1,16 @@ +--- +approvers: +- chenopis +title: Kubernetes Documentation +layout: docsportal_home +noedit: true +cid: userJourneys +css: /css/style_user_journeys.css +js: /js/user-journeys/home.js, https://use.fontawesome.com/4bcc658a89.js +display_browse_numbers: true +linkTitle: "Documentation" +main_menu: true +weight: 5 +--- + + diff --git a/content/en/docs/home/contribute/_index.md b/content/en/docs/home/contribute/_index.md new file mode 100755 index 0000000000000..15c469efc2e12 --- /dev/null +++ b/content/en/docs/home/contribute/_index.md @@ -0,0 +1,5 @@ +--- +title: "Contributing to the Kubernetes Docs" +weight: 40 +--- + diff --git a/docs/home/contribute/blog-post.md b/content/en/docs/home/contribute/blog-post.md similarity index 94% rename from docs/home/contribute/blog-post.md rename to content/en/docs/home/contribute/blog-post.md index aed3d2544210d..639bba0db39f2 100644 --- a/docs/home/contribute/blog-post.md +++ b/content/en/docs/home/contribute/blog-post.md @@ -4,15 +4,16 @@ reviewers: - zacharysarah - kbarnard10 - sarahkconway +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows you how to submit a post for the [Kubernetes blog](https://kubernetes.io/blog). You’ll receive a response within 5 business days on whether your submission is approved and information about next steps, if any. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} To create a new blog post, you can either: - Fill out the [Kubernetes Blog Submission](https://docs.google.com/forms/d/e/1FAIpQLSch_phFYMTYlrTDuYziURP6nLMijoXx_f7sLABEU5gWBtxJHQ/viewform) form. @@ -21,9 +22,9 @@ or: - Open a pull request against this repository as described in [Creating a Documentation Pull Request](/docs/home/contribute/create-pull-request/) -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Kubernetes blog guidelines All content must be original. The Kubernetes blog does not post material previously published elsewhere. @@ -87,9 +88,10 @@ date: Saturday, March 20, 2015 When you [create a new pull request](/docs/home/contribute/create-pull-request/), include the following in the PR description: +{{< note >}} - Desired publishing date **Note:** PRs must include complete drafts no later than 15 days prior to the desired publication date. -{: .note} +{{< /note >}} - Author information: - Name - Title @@ -125,8 +127,8 @@ Check out the ![CNCF logo][cncf-logo]. [cncf-logo]: /images/blog/2018-03-01-cncf-color.svg ``` -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} [ref-style]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#images diff --git a/content/en/docs/home/contribute/content-organization.md b/content/en/docs/home/contribute/content-organization.md new file mode 100644 index 0000000000000..2c56bb887972b --- /dev/null +++ b/content/en/docs/home/contribute/content-organization.md @@ -0,0 +1,130 @@ +--- +title: Content Organization +date: 2018-04-30 +weight: 42 +--- + +This site uses Hugo. In Hugo, [content organization](https://gohugo.io/content-management/organization/) is a core concept. + +Also see: + +* [Custom Hugo Shortcodes](/docs/home/contribute/includes) +* [Style Guide](/docs/home/contribute/style-guide) + + +{{% note %}} +**Hugo Tip:** Start Hugo with `hugo server --navigateToChanged` for content edit-sessions. +{{% /note %}} + +## Page Lists + +### Page Order + +The documentation side menu, the documentation page browser etc. are listed using Hugo's default sort order, which sorts by weight (from 1), date (newest first) and finally by the link title. + +Given that, if you want to move a page or a section up, set a weight in the page's front matter: + +```yaml +title: My Page +weight: 10 +``` + + +{{% note %}} +For page weights, it can be smart not to use 1, 2, 3 ..., but some other interval, say 10, 20, 30... This allows you to insert pages where you want later. +{{% /note %}} + + +### Documentation Main Menu + +The `Documentation` main menu is built from the sections below `docs/` with the `main_menu` flag set in front matter of the `_index.md` section content file: + +```yaml +main_menu: true +``` + + +Note that the link title is fetched from the page's `linkTitle`, so if you want it to be something different than the title, change it in the content file: + + +```yaml +main_menu: true +title: Page Title +linkTitle: Title used in links +``` + + +{{% note %}} +The above needs to be done per language. If you don't see your section in the menu, it is probably because it is not identified as a section by Hugo. Create a `_index.md` content file in the section folder. +{{% /note %}} + +### Documentation Side Menu + +The documentation side-bar menu is built from the _current section tree_ starting below `docs/`. + +It will show all sections and their pages. + +If you want a section or page to not be listed, set the `toc_hide` flag in front matter: + + +```yaml +toc_hide: true +``` + +When you navigate to a section, the page shown is the section page (e.g. `_index.md`) if it has content, else the first page inside that section. + +### Documentation Browser + +The page browser on the documentation home page is built from all sections and pages directly below the `docs section`. + +If you want a section or page to not be listed, set the `toc_hide` flag in front matter: + +```yaml +toc_hide: true +``` + +### The Main Menu + +The site links in the top-right menu -- and also in the footer -- are built by page-lookups. This is to make sure that the page actually exists. So, if the `case-studies` section does not exist in a site (language), it will not be linked to. + + +## Page Bundles + +In addition to standalone content pages (Markdown files), Hugo supports [Page Bundles](https://gohugo.io/content-management/page-bundles/). + +One example is [Custom Hugo Shortcodes](/docs/home/contribute/includes/). It is a socalled `leaf bundle`. Everything below the directory with the `index.md` will be part of the bundle, with page-relative links, images can be processed etc.: + +```bash +en/docs/home/contribute/includes +├── example1.md +├── example2.md +├── index.md +└── podtemplate.json +``` + +Another example used widely is the `includes` bundle. It has `headless: true` set in front matter, which means that it does not get its own URL. It is only used in other pages. + +```bash +en/includes +├── default-storage-class-prereqs.md +├── federated-task-tutorial-prereqs.md +├── federation-content-moved.md +├── index.md +├── partner-script.js +├── partner-style.css +├── task-tutorial-prereqs.md +├── user-guide-content-moved.md +└── user-guide-migration-notice.md +``` + +Some important notes to the files in the bundles: + +* For translated bundles, any missing non-content files will be inherited from languages above. This avoids duplication. +* All the files in a bundle are what Hugo calls `Resources` and you can provide metadata per language, such as parameters and title, even if it does not supports front matter (YAML files etc.). See [Page Resources Metadata](https://gohugo.io/content-management/page-resources/#page-resources-metadata). +* The value you get from `.RelPermalink` from a `Resource` is page-relative. + + +## Styles + +The `SASS` source of the stylesheets for this site is stored below `src/sass` and can be built with `make sass` (note that Hugo will get `SASS` support soon, see https://github.com/gohugoio/hugo/issues/4243). + diff --git a/docs/home/contribute/create-pull-request.md b/content/en/docs/home/contribute/create-pull-request.md similarity index 96% rename from docs/home/contribute/create-pull-request.md rename to content/en/docs/home/contribute/create-pull-request.md index 50ec2f0989e81..74aaa6235134a 100644 --- a/docs/home/contribute/create-pull-request.md +++ b/content/en/docs/home/contribute/create-pull-request.md @@ -1,16 +1,17 @@ --- title: Creating a Documentation Pull Request +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} To contribute to the Kubernetes documentation, create a pull request against the [kubernetes/website](https://github.com/kubernetes/website){: target="_blank"} repository. This page shows how to create a pull request. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} 1. Create a [GitHub account](https://github.com){: target="_blank"}. @@ -19,9 +20,9 @@ repository. This page shows how to create a pull request. Documentation will be published under the [CC BY SA 4.0](https://git.k8s.io/website/LICENSE) license. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Creating a fork of the Kubernetes documentation repository @@ -97,12 +98,12 @@ next upcoming release. It's automatically updated as new PRs get merged. ## Pull request review process for both Current and Upcoming Releases Once your pull request is created, a Kubernetes reviewer will take responsibility for providing clear, actionable feedback. As the owner of the pull request, **it is your responsibility to modify your pull request to address the feedback that has been provided to you by the Kubernetes reviewer.** Also note that you may end up having more than one Kubernetes reviewer provide you feedback or you may end up getting feedback from a Kubernetes reviewer that is different than the one originally assigned to provide you feedback. Furthermore, in some cases, one of your reviewers might ask for a technical review from a [Kubernetes tech reviewer](https://github.com/kubernetes/website/wiki/Tech-reviewers) when needed. Reviewers will do their best to provide feedback in a timely fashion but response time can vary based on circumstances. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn about [writing a new topic](/docs/home/contribute/write-new-topic/). * Learn about [using page templates](/docs/home/contribute/page-templates/). * Learn about [staging your changes](/docs/home/contribute/stage-documentation-changes/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/home/contribute/generated-reference/federation-api.md b/content/en/docs/home/contribute/generated-reference/federation-api.md similarity index 93% rename from docs/home/contribute/generated-reference/federation-api.md rename to content/en/docs/home/contribute/generated-reference/federation-api.md index 9f85c018a46d8..312ac178e81bb 100644 --- a/docs/home/contribute/generated-reference/federation-api.md +++ b/content/en/docs/home/contribute/generated-reference/federation-api.md @@ -1,16 +1,17 @@ --- title: Generating Reference Documentation for Kubernetes Federation API +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to automatically generate reference pages for the Kubernetes Federation API. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * You need to have [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) @@ -28,10 +29,10 @@ Typically, this involves creating a fork of the repository. For more information, see [Creating a Documentation Pull Request](/docs/home/contribute/create-pull-request/). -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Running the update-federation-api-docs.sh script @@ -77,15 +78,15 @@ These files are published at * [Federation API extensions/v1beta1 Operations](https://kubernetes.io/docs/reference/federation/extensions/v1beta1/operations/) * [Federation API extensions/v1beta1 Definitions](https://kubernetes.io/docs/reference/federation/extensions/v1beta1/definitions/) -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [Generating Reference Documentation for the Kubernetes API](/docs/home/contribute/generated-reference/kubernetes-api/) * [Generating Reference Documentation for kubectl Commands](/docs/home/contribute/generated-reference/kubectl/) * [Generating Reference Pages for Kubernetes Components and Tools](/docs/home/contribute/generated-reference/kubernetes-components/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/home/contribute/generated-reference/kubectl.md b/content/en/docs/home/contribute/generated-reference/kubectl.md similarity index 97% rename from docs/home/contribute/generated-reference/kubectl.md rename to content/en/docs/home/contribute/generated-reference/kubectl.md index ec4c0a3b686b3..6793c6e6b9ec7 100644 --- a/docs/home/contribute/generated-reference/kubectl.md +++ b/content/en/docs/home/contribute/generated-reference/kubectl.md @@ -1,12 +1,14 @@ --- title: Generating Reference Documentation for kubectl Commands +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to automatically generate reference pages for the commands provided by the `kubectl` tool. +{{< note >}} **Note:** This topic shows how to generate reference documentation for [kubectl commands](/docs/reference/generated/kubectl/kubectl-commands) @@ -18,12 +20,12 @@ This topic does not show how to generate the options reference page. For instructions on how to generate the kubectl options reference page, see [Generating Reference Pages for Kubernetes Components and Tools](/docs/home/contribute/generated-reference/kubernetes-components/). -{: .note} +{{< /note >}} -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * You need to have [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) @@ -42,10 +44,10 @@ information, see [Creating a Documentation Pull Request](/docs/home/contribute/create-pull-request/) and [GitHub Standard Fork & Pull Request Workflow](https://gist.github.com/Chaser324/ce0505fbed06b947d962). -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Getting three repositories @@ -129,11 +131,12 @@ on how to do this, see Monitor your cherry-pick pull request until it is merged into the release branch. +{{< note >}} **Note:** Proposing a cherry pick requires that you have permission to set a label and a milestone in your pull request. If you don’t have those permissions, you will need to work with someone who can set the label and milestone for you. -{: .note} +{{< /note >}} ## Editing Makefile @@ -248,15 +251,15 @@ topics will be visible in the [published documentation](/docs/home). -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [Generating Reference Documentation for Kubernetes Components and Tools](/docs/home/contribute/generated-reference/kubernetes-components/) * [Generating Reference Documentation for the Kubernetes API](/docs/home/contribute/generated-reference/kubernetes-api/) * [Generating Reference Documentation for the Kubernetes Federation API](/docs/home/contribute/generated-reference/federation-api/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/home/contribute/generated-reference/kubernetes-api.md b/content/en/docs/home/contribute/generated-reference/kubernetes-api.md similarity index 97% rename from docs/home/contribute/generated-reference/kubernetes-api.md rename to content/en/docs/home/contribute/generated-reference/kubernetes-api.md index f0647f0972089..f61e62f5cbc41 100644 --- a/docs/home/contribute/generated-reference/kubernetes-api.md +++ b/content/en/docs/home/contribute/generated-reference/kubernetes-api.md @@ -1,16 +1,17 @@ --- title: Generating Reference Documentation for the Kubernetes API +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to update the automatically generated reference docs for the Kubernetes API. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} You need to have these tools installed: @@ -28,10 +29,10 @@ information, see [Creating a Documentation Pull Request](/docs/home/contribute/create-pull-request/) and [GitHub Standard Fork & Pull Request Workflow](https://gist.github.com/Chaser324/ce0505fbed06b947d962). -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## The big picture @@ -96,9 +97,10 @@ or more comments in the Kubernetes source code. ### Making changes to comments in the source code +{{< note >}} **Note**: The following steps are an example, not a general procedure. Details will be different in your situation. -{: .note} +{{< /note >}} Here's an example of editing a comment in the Kubernetes source code. @@ -181,6 +183,7 @@ to monitor your pull request until it has been merged. [PR 57758](https://github.com/kubernetes/kubernetes/pull/57758) is an example of a pull request that fixes a typo in the Kubernetes source code. +{{< note >}} **Note**: It can be tricky to determine the correct source file to be changed. In the preceding example, the authoritative source file is under the `staging` directory in the `kubernetes/kubernetes` repository. But in your situation,the `staging` directory @@ -189,7 +192,7 @@ might not be the place to find the authoritative source. For guidance, check the [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes/tree/master/staging) repository and in related repositories like [kubernetes/apiserver](https://github.com/kubernetes/apiserver/blob/master/README.md). -{: .note} +{{< /note >}} ### Cherry picking your commit into a release branch @@ -237,7 +240,7 @@ several files, including `api/openapi-spec/swagger.json` in the `kubernetes/kubernetes` repository. This section shows how to generate the -[published Kubernetes API reference documentation](/docs/reference/generated/kubernetes-api/{{page.version}}/), +[published Kubernetes API reference documentation](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/), which is generated by the tools at [kubernetes-incubator/reference-docs](https://github.com/kubernetes-incubator/reference-docs). Those tools take the `api/openapi-spec/swagger.json` file as input. @@ -322,7 +325,7 @@ This section show how to copy the generated docs to the [kubernetes/website](https://github.com/kubernetes/website) repository. The files in the `kubernetes/website` repository are published in the [kubernetes.io](https://kubernetes.io) website. In particular, the generated -`index.html` file is published [here](/docs/reference/generated/kubernetes-api/{{page.version}}/). +`index.html` file is published [here](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/). Enter the following command to copy the generated files to your local kubernetes/website repository: @@ -360,17 +363,17 @@ Monitor your pull request, and respond to reviewer comments as needed. Continue to monitor your pull request until it has been merged. A few minutes after your pull request is merged, your changes will be visible -in the [published reference documentation](/docs/reference/generated/kubernetes-api/{{page.version}}/). +in the [published reference documentation](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/). -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [Generating Reference Docs for Kubernetes Components and Tools](/docs/home/contribute/generated-reference/kubernetes-components/) * [Generating Reference Documentation for kubectl Commands](/docs/home/contribute/generated-reference/kubectl/) * [Generating Reference Documentation for the Kubernetes Federation API](/docs/home/contribute/generated-reference/federation-api/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/home/contribute/generated-reference/kubernetes-components.md b/content/en/docs/home/contribute/generated-reference/kubernetes-components.md similarity index 97% rename from docs/home/contribute/generated-reference/kubernetes-components.md rename to content/en/docs/home/contribute/generated-reference/kubernetes-components.md index a3b2ac5a9de48..c2b0617bbd8de 100644 --- a/docs/home/contribute/generated-reference/kubernetes-components.md +++ b/content/en/docs/home/contribute/generated-reference/kubernetes-components.md @@ -1,18 +1,19 @@ --- title: Generating Reference Pages for Kubernetes Components and Tools +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to use the `update-imported-docs` tool to generate reference documentation for tools and components in the [Kubernetes](https://github.com/kubernetes/kubernetes) and [Federation](https://github.com/kubernetes/federation) repositories. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * You need a machine that is running Linux or MacOS. @@ -33,10 +34,10 @@ Typically, this involves creating a fork of the repository. For more information, see [Creating a Documentation Pull Request](/docs/home/contribute/create-pull-request/). -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Getting two repositories @@ -69,11 +70,12 @@ For example, if you followed the preceding step to get the repository, your base directory is `$GOPATH/src/github.com/kubernetes/kubernetes.` The remaining steps refer to your base directory as ``. +{{< note >}} **Note:** If you only need to generate, but not change, the reference docs, you don't need to manually get the `kubernetes/kubernetes` repository. When you run the `update-imported-docs` tool, it automatically clones the `kubernetes/kubernetes` repository. -{: .note} +{{< /note >}} ## Editing the Kubernetes source code @@ -106,10 +108,11 @@ to do this, see Monitor your cherry-pick pull request until it is merged into the release branch. +{{< note >}} **Note:** Proposing a cherry pick requires that you have permission to set a label and a milestone in your pull request. If you don’t have those permissions, you will need to work with someone who can set the label and milestone for you. -{: .note} +{{< /note >}} ## Overview of update-imported-docs @@ -289,15 +292,15 @@ A few minutes after your pull request is merged, your updated reference topics will be visible in the [published documentation](/docs/home/). -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [Generating Reference Documentation for kubectl Commands](/docs/home/contribute/generated-reference/kubectl/) * [Generating Reference Documentation for the Kubernetes API](/docs/home/contribute/generated-reference/kubernetes-api/) * [Generating Reference Documentation for the Kubernetes Federation API](/docs/home/contribute/generated-reference/federation-api/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/content/en/docs/home/contribute/includes/example1.md b/content/en/docs/home/contribute/includes/example1.md new file mode 100644 index 0000000000000..9ee1a0b313178 --- /dev/null +++ b/content/en/docs/home/contribute/includes/example1.md @@ -0,0 +1,9 @@ +--- +title: Example #1 +--- + +This is an **example** content file inside the **includes** leaf bundle. + +{{< note >}} +**Note:** Included content files can also contain shortcodes. +{{< /note >}} \ No newline at end of file diff --git a/content/en/docs/home/contribute/includes/example2.md b/content/en/docs/home/contribute/includes/example2.md new file mode 100644 index 0000000000000..bf03fb5d93d6b --- /dev/null +++ b/content/en/docs/home/contribute/includes/example2.md @@ -0,0 +1,7 @@ +--- +title: Example #1 +--- + +This is another **example** content file inside the **includes** leaf bundle. + + diff --git a/content/en/docs/home/contribute/includes/index.md b/content/en/docs/home/contribute/includes/index.md new file mode 100644 index 0000000000000..dce517e44e0fa --- /dev/null +++ b/content/en/docs/home/contribute/includes/index.md @@ -0,0 +1,211 @@ +--- +approvers: +- chenopis +title: Custom Hugo Shortcodes +content_template: templates/concept +--- + +{{% capture overview %}} +This page explains the custom Hugo shortcodes that can be used in Kubernetes documentation markdown. + +Read more about shortcodes in the [Hugo documentation](https://gohugo.io/content-management/shortcodes). +{{% /capture %}} + +{{% capture body %}} +## Feature state + +In a markdown page (.md file) on this site, you can add a shortcode to display version and state of the documented feature. + +### Feature state demo + +Below is a demo of the feature state snippet. Here it is used to display the feature as stable in Kubernetes version 1.10. + +``` +{{}} +``` + +Will render to: + +{{< feature-state for_k8s_version="v1.10" state="stable" >}} + +The valid values for `state` are: + +* alpha +* beta +* deprecated +* stable + +### Feature state code + +Below is the template code for each available feature state. + +The displayed Kubernetes version defaults to that of the page or the site. This can be changed by passing the for_k8s_version shortcode parameter. + +```` +{{}} +```` + +Renders to: + +{{< feature-state for_k8s_version="v1.10" state="stable" >}} + +#### Alpha feature + +```` +{{}} +```` + +Renders to: + +{{< feature-state state="alpha" >}} + + +#### Beta feature + +```` +{{}} +```` + +Renders to: + +{{< feature-state state="beta" >}} + +#### Stable feature + +```` +{{}} +```` + +Renders to: + +{{< feature-state state="stable" >}} + +#### Deprecated feature + +```` +{{}} +```` + +Renders to: + +{{< feature-state state="deprecated" >}} + +## Glossary + +You can reference glossary terms with an inclusion that will automatically update and replace content with the relevant links from [our glossary](/docs/reference/glossary/). When the term is moused-over by someone +using the online documentation, the glossary entry will display a tooltip. + +The raw data for glossary terms is stored at [https://github.com/kubernetes/website/tree/master/content/en/docs/reference/glossary](https://github.com/kubernetes/website/tree/master/content/en/docs/reference/glossary), with a content file for each glossary term. + +### Glossary Demo + +For example, the following include within the markdown will render to {{< glossary_tooltip text="cluster" term_id="cluster" >}} with a tooltip: + +````liquid +{{}} +```` + +## Tabs + +In a markdown page (`.md` file) on this site, you can add a tab set to display multiple flavors of a given solution. + +The `tabs` shortcode takes these parameters: + +* `name`: The name as shown on the tab. +* `codelang`: If you provide inner content to the `tab` shortcode, you can tell Hugo what code language to use for highlighting. +* `include`: The file to include in the tab. If the tab lives in a Hugo [leaf bundle](https://gohugo.io/content-management/page-bundles/#leaf-bundles), the file -- which can be any MIME type supported by Hugo -- will be looked up in the bundle itself. If not, the content page to include will be looked up relative to the current. Note that with the `include` you will not have any shortcode inner content and must use the self-closing syntax, e.g. {{}}. Non-content files will be code-highlighted. The language to use will be taken from the filename if not provided in `codelang`. + +* If your inner content is markdown, you must use `%`-delimiter to surorund the tab, e.g. `{{%/* tab name="Tab 1" %}}This is **markdown**{{% /tab */%}}` +* You can combine the variations mentioned above inside a tab set. + +Below is a demo of the tabs shortcode. + +{{< note >}} +The tab **name** in a `tabs` definition must be unique within a content page. +{{< /note >}} + +### Tabs demo: Code highlighting + +```go-text-template +{{}} +{{{< tab name="Tab 1" codelang="bash" >}} +echo "This is tab 1." +{{< /tab >}} +{{< tab name="Tab 2" codelang="go" >}} +println "This is tab 2." +{{< /tab >}}} +{{< /tabs */>}} +``` + +Will be rendered as: + +{{< tabs name="tab_with_code" >}} +{{< tab name="Tab 1" codelang="bash" >}} +echo "This is tab 1." +{{< /tab >}} +{{< tab name="Tab 2" codelang="go" >}} +println "This is tab 2." +{{< /tab >}} +{{< /tabs >}} + +### Tabs demo: Inline Markdown and HTML + +```go-html-template +{{}} +{{% tab name="Markdown" %}} +This is **some markdown.** +{{< note >}}**Note:** It can even contain shortcodes.{{< /note >}} +{{% /tab %}} +{{< tab name="HTML" >}} +
+

Plain HTML

+

This is some plain HTML.

+
+{{< /tab >}} +{{< /tabs */>}} +``` + +Will be rendered as: + +{{< tabs name="tab_with_md" >}} +{{% tab name="Markdown" %}} +This is **some markdown.** +{{< note >}}**Note:** It can even contain shortcodes.{{< /note >}} +{{% /tab %}} +{{< tab name="HTML" >}} +
+

Plain HTML

+

This is some plain HTML.

+
+{{< /tab >}} +{{< /tabs >}} + +### Tabs demo: File include + +```go-text-template +{{}} +{{< tab name="Content File #1" include="example1" />}} +{{< tab name="Content File #2" include="example2" />}} +{{< tab name="JSON File" include="podtemplate" />}} +{{< /tabs */>}} +``` + +Will be rendered as: + +{{< tabs name="tab_with_file_include" >}} +{{< tab name="Content File #1" include="example1" />}} +{{< tab name="Content File #2" include="example2" />}} +{{< tab name="JSON File" include="podtemplate" />}} +{{< /tabs >}} + + +{{% /capture %}} + +{{% capture whatsnext %}} +* Learn about [Hugo](https://gohugo.io/). +* Learn about [writing a new topic](/docs/home/contribute/write-new-topic/). +* Learn about [using page templates](/docs/home/contribute/page-templates/). +* Learn about [staging your changes](/docs/home/contribute/stage-documentation-changes/) +* Learn about [creating a pull request](/docs/home/contribute/create-pull-request/). +{{% /capture %}} + diff --git a/content/en/docs/home/contribute/includes/podtemplate.json b/content/en/docs/home/contribute/includes/podtemplate.json new file mode 100644 index 0000000000000..bd4327414a10a --- /dev/null +++ b/content/en/docs/home/contribute/includes/podtemplate.json @@ -0,0 +1,22 @@ + { + "apiVersion": "v1", + "kind": "PodTemplate", + "metadata": { + "name": "nginx" + }, + "template": { + "metadata": { + "labels": { + "name": "nginx" + }, + "generateName": "nginx-" + }, + "spec": { + "containers": [{ + "name": "nginx", + "image": "dockerfile/nginx", + "ports": [{"containerPort": 80}] + }] + } + } + } diff --git a/docs/home/contribute/localization.md b/content/en/docs/home/contribute/localization.md similarity index 97% rename from docs/home/contribute/localization.md rename to content/en/docs/home/contribute/localization.md index 70ae72cb52179..79f72fc85402e 100644 --- a/docs/home/contribute/localization.md +++ b/content/en/docs/home/contribute/localization.md @@ -23,15 +23,17 @@ Localizations must source from the English files for the [most recent major rele For example, the branch for Kubernetes v1.9 docs is `release-1.9`. +{{< note >}} Source files reside in the `/docs/` directory. -{: .note} +{{< /note >}} ### Repository A l10n team will have a repository specifically dedicated to its work, for example: [kubernetes/kubernetes-docs-cn](https://github.com/kubernetes/kubernetes-docs-cn). +{{< note >}} **Note:** To open a l10n repository, [contact the SIG docs lead](https://kubernetes.slack.com/messages/C1J0BPD2M) on Slack for assistance. -{: .note} +{{< /note >}} ### Project @@ -76,5 +78,6 @@ Once a l10n meets requirements for workflow and minimum output, SIG docs will: - Work with the localization team to implement language selection on the website - Publicize availability through [Cloud Native Computing Foundation](https://www.cncf.io/) (CNCF) channels. +{{< note >}} **Note:** Implementation of language selection is pending Kubernetes' first completed localization project. -{: .note} +{{< /note >}} diff --git a/docs/home/contribute/page-templates.md b/content/en/docs/home/contribute/page-templates.md similarity index 100% rename from docs/home/contribute/page-templates.md rename to content/en/docs/home/contribute/page-templates.md diff --git a/docs/home/contribute/participating.md b/content/en/docs/home/contribute/participating.md similarity index 96% rename from docs/home/contribute/participating.md rename to content/en/docs/home/contribute/participating.md index 81371e0d04e7a..e6d66c1a6b880 100644 --- a/docs/home/contribute/participating.md +++ b/content/en/docs/home/contribute/participating.md @@ -1,14 +1,15 @@ --- title: Participating in SIG-DOCS +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} SIG-DOCS is one of the [special interest groups](https://github.com/kubernetes/community/blob/master/sig-list.md) within the Kubernetes project, focused on writing, updating, and maintaining the documentation for Kubernetes as a whole. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} SIG Docs welcomes content and reviews from all contributors. Anyone can open a pull request (PR), and anyone is welcome to comment on content or pull requests in progress. @@ -56,8 +57,9 @@ Another reviewer or approver can remove a hold with the comment: `/hold cancel`. Approvers may skip further reviews for small pull requests if the proposed changes appear trivial and/or well-understood. An approver can indicate `/lgtm` or `/approve` in a PR comment to have a pull request merged, and all pull requests require at least one approver to provide their vote in order for the PR to be merged. +{{< note >}} **Note:** There is a special case when an approver uses the comment: `/lgtm`. In these cases, the automation will add both `lgtm` and `approve` tags, skipping any further review. -+{: .note } +{{< /note >}} For PRs that require no review (typos or otherwise trivial changes), approvers can enter an `lgtm` comment, indicating no need for further review and flagging the PR with approval to merge. @@ -76,9 +78,10 @@ For assignment of issues, pull requests, and to support PR approvals, the automa To volunteer as a reviewer or approver, make a pull request and add your Github handle to the relevant section in the [OWNERS file](https://github.com/kubernetes/community/blob/master/contributors/devel/owners.md). +{{< note >}} **Note:** Reviewers and approvers must meet requirements for participation. For more information, see the [Kubernetes community](https://github.com/kubernetes/community/blob/master/community-membership.md#membership) repository. -{: .note } +{{< /note >}} Documentation for the [OWNERS](https://github.com/kubernetes/community/blob/master/contributors/devel/owners.md) explains how to maintain OWNERS for each repository that enables it. @@ -88,9 +91,9 @@ The [Kubernetes website repository](https://github.com/kubernetes/website) has t These two plugins use the [OWNERS](https://github.com/kubernetes/website/blob/master/OWNERS) and [OWNERS_ALIASES](https://github.com/kubernetes/website/blob/master/OWNERS_ALIASES) files in our repo for configuration. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} For more information about contributing to the Kubernetes documentation, see: * Review the SIG Docs [Style Guide](/docs/home/contribute/style-guide/). @@ -104,6 +107,6 @@ For more information about contributing to the Kubernetes documentation, see: * Learn how to [generate Reference Documentation for kubectl Commands](/docs/home/contribute/generated-reference/kubectl/) * Learn how to [generate Reference Documentation for the Kubernetes API](/docs/home/contribute/generated-reference/kubernetes-api/) * Learn how to [generate Reference Pages for Kubernetes Components and Tools](/docs/home/contribute/generated-reference/kubernetes-components/) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/home/contribute/review-issues.md b/content/en/docs/home/contribute/review-issues.md similarity index 96% rename from docs/home/contribute/review-issues.md rename to content/en/docs/home/contribute/review-issues.md index 59e182479aacb..08a3f3bd9a12c 100644 --- a/docs/home/contribute/review-issues.md +++ b/content/en/docs/home/contribute/review-issues.md @@ -1,13 +1,14 @@ --- title: Reviewing Documentation Issues +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page explains how documentation issues are reviewed and prioritized for the [kubernetes/website](https://github.com/kubernetes/website){: target="_blank"} repository. The purpose is to provide a way to organize issues and make it easier to contribute to Kubernetes documentation. The following should be used as the standard way of prioritizing, labeling, and interacting with issues. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Categorizing issues Issues should be sorted into different buckets of work using the following labels and definitions. If an issue doesn't have enough information to identify a problem that can be researched, reviewed, or worked on (i.e. the issue doesn't fit into any of the categories below) you should close the issue with a comment explaining why it is being closed. @@ -89,14 +90,14 @@ https://github.com/kubernetes/kubernetes/issues. If this is a documentation issue, please re-open this issue. ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn about [writing a new topic](/docs/home/contribute/write-new-topic/). * Learn about [using page templates](/docs/home/contribute/page-templates/). * Learn about [staging your changes](/docs/home/contribute/stage-documentation-changes/). -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/home/contribute/stage-documentation-changes.md b/content/en/docs/home/contribute/stage-documentation-changes.md similarity index 92% rename from docs/home/contribute/stage-documentation-changes.md rename to content/en/docs/home/contribute/stage-documentation-changes.md index 31932c1c81645..04ea8fcde9b28 100644 --- a/docs/home/contribute/stage-documentation-changes.md +++ b/content/en/docs/home/contribute/stage-documentation-changes.md @@ -1,18 +1,19 @@ --- title: Staging Your Documentation Changes +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to stage content that you want to contribute to the Kubernetes documentation. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} Create a fork of the Kubernetes documentation repository as described in [Creating a Documentation Pull Request](/docs/home/contribute/create-pull-request/). -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Staging a pull request @@ -74,15 +75,16 @@ web server: 1. View your staged content at `http://localhost:4000`. +{{< note >}} **Note:** If you do not want Jekyll to interfere with your other globally installed gems, you can use `bundler`:

```gem install bundler```
```bundle install```
```bundler exec jekyll serve```

Regardless of whether you use `bundler` or not, your copy of the site will then be viewable at: http://localhost:4000 -{: .note} +{{< /note >}} -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn about [writing a new topic](/docs/home/contribute/write-new-topic/). * Learn about [using page templates](/docs/home/contribute/page-templates/). * Learn about [creating a pull request](/docs/home/contribute/create-pull-request/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/home/contribute/style-guide.md b/content/en/docs/home/contribute/style-guide.md similarity index 78% rename from docs/home/contribute/style-guide.md rename to content/en/docs/home/contribute/style-guide.md index 46574deef341a..f2b352049519f 100644 --- a/docs/home/contribute/style-guide.md +++ b/content/en/docs/home/contribute/style-guide.md @@ -1,8 +1,11 @@ --- title: Documentation Style Guide +content_template: templates/concept --- -{% capture overview %} + + +{{% capture overview %}} This page gives writing style guidelines for the Kubernetes documentation. These are guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request. @@ -11,12 +14,13 @@ For additional information on creating new content for the Kubernetes docs, follow the instructions on [using page templates](/docs/home/contribute/page-templates/) and [creating a documentation pull request](/docs/home/contribute/create-pull-request/). -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} -**Note:** Kubernetes documentation uses [GitHub Flavored Markdown](https://github.github.com/gfm/) along with a few [local jekyll includes](/docs/home/contribute/includes/) to support glossary entries, tabs, and representing feature state. -{: .note} +{{< note >}} +**Note:** Kubernetes documentation uses [Blackfriday Markdown Renderer](https://github.com/russross/blackfriday) along with a few [Hugo Shortcodes](/docs/home/contribute/includes/) to support glossary entries, tabs, and representing feature state. +{{< /note >}} ## Language @@ -146,10 +150,7 @@ The output is similar to this: Code examples and configuration examples that include version information should be consistent with the accompanying text. Identify the Kubernetes version in the **Before you begin** section. -To specify the Kubernetes version for a task or tutorial page: - -- Include `min-kubernetes-server-version` in the front matter of the page. -- In the **Before you begin** section, use `{{ "{% include tasks-tutorial-prereqs.md "}} %}`. +To specify the Kubernetes version for a task or tutorial page, include `min-kubernetes-server-version` in the front matter of the page. If the example YAML is in a standalone file, find and review the topics that include it as a reference. Verify that any topics using the standalone YAML have the appropriate version information defined. @@ -179,117 +180,98 @@ A list of Kubernetes-specific terms and words to be used consistently across the - - - +
TermUsage
DockerDocker should always be capitalized.
KubernetesKubernetes should always be capitalized.
kubectlkubectl should always not be capitalized.
MinikubeMinikube should always be capitalized.
DockerDocker should always be capitalized.
SIG DocsSIG Docs rather than SIG-DOCS or other variations.
-## Callout Formatting -Callouts help create different rhetorical appeal levels. Our documentation supports three different callouts: **Note:** {: .note}, **Caution:** {: .caution}, and **Warning:** {: .warning}. +## Shortcodes +Hugo [Shortcodes](https://gohugo.io/content-management/shortcodes) help create different rhetorical appeal levels. Our documentation supports three different shortcodes in this category: **Note:** {{}}, **Caution:** {{}}, and **Warning:** {{}}. -1. Start each callout with the appropriate prefix. +1. Surround the text with an opening and closing shortcode. 2. Use the following syntax to apply a style: + + ```md + {{}} + **Note:** The prefix you use is the same text you use in the tag. + {{}} + ``` - **Note:** The prefix you use is the same text you use in the tag. - {: .note} The output is: +{{< note >}} **Note:** The prefix you choose is the same text for the tag. -{: .note} +{{< /note >}} ### Note -Use {: .note} to highlight a tip or a piece of information that may be helpful to know. +Use {{}} to highlight a tip or a piece of information that may be helpful to know. For example: - - **Note:** You can _still_ use Markdown inside these callouts. - {: .note} + +``` +{{}} +**Note:** You can _still_ use Markdown inside these callouts. +{{}} +``` The output is: +{{< note >}} **Note:** You can _still_ use Markdown inside these callouts. -{: .note} +{{< /note >}} ### Caution -Use {: .caution} to call attention to an important piece of information to avoid pitfalls. +Use {{}} to call attention to an important piece of information to avoid pitfalls. For example: - **Caution:** The callout style only applies to the line directly above the tag. - {: .caution} +``` +{{}} +**Caution:** The callout style only applies to the line directly above the tag. +{{}} +``` The output is: +{{< caution >}} **Caution:** The callout style only applies to the line directly above the tag. -{: .caution} +{{< /caution >}} ### Warning -Use {: .warning} to indicate danger or a piece of information that is crucial to follow. +Use {{}} to indicate danger or a piece of information that is crucial to follow. For example: - **Warning:** Beware. - {: .warning} - -The output is: - +``` +{{}} **Warning:** Beware. -{: .warning} - -## Common Callout Issues - -### Style Does Not Apply - -Callout tags must be on a new line to apply the style. Github's Preview Changes feature further obfuscates this fact by rendering the tag on the same line, but your code must match the following syntax: - - **Note:** Your text goes here. - {: .note} - -### Multiple Lines - -Callouts automatically span multiple lines. However, you can use `
` tags if you need to create multiple lines. - -For example: +{{}} +``` - **Note:"** This is my note. Use `
` to create multiple lines.

You can still use _Markdown_ to **format** text! - {: .note} The output is: -**Note:** This is my note. Use `
` to create multiple lines.

You can still use _Markdown_ to **format** text! -{: .note} - -Typing multiple lines does **not** work. The callout style only applies to the line directly above the tag. - - **Note:** This is my note. - - I didn't read the style guide. - {: .note} - -**Note:** This is my note. +{{< warning >}} +**Warning:** Beware. +{{< /warning >}} -I didn't read the style guide. -{: .note} +## Common Shortcode Issues ### Ordered Lists -Callouts will interrupt numbered lists unless you indent three spaces before the notice and the tag. +Shortcodes will interrupt numbered lists unless you indent four spaces before the notice and the tag. For example: 1. Preheat oven to 350˚F 1. Prepare the batter, and pour into springform pan. - - **Note:** Grease the pan for best results. - {: .note} + {{}}**Note:** Grease the pan for best results.{{}} 1. Bake for 20-25 minutes or until set. @@ -298,9 +280,7 @@ The output is: 1. Preheat oven to 350˚F 1. Prepare the batter, and pour into springform pan. - - **Note:** Grease the pan for best results. - {: .note} + {{< note >}}**Note:** Grease the pan for best results.{{< /note >}} 1. Bake for 20-25 minutes or until set. @@ -401,15 +381,13 @@ considered new in a few months. The Federation feature provides ...The new Federation feature provides ... -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn about [writing a new topic](/docs/home/contribute/write-new-topic/). * Learn about [using page templates](/docs/home/contribute/page-templates/). * Learn about [staging your changes](/docs/home/contribute/stage-documentation-changes/) * Learn about [creating a pull request](/docs/home/contribute/create-pull-request/). -{% endcapture %} - -{% include templates/concept.md %} +{{% /capture %}} diff --git a/docs/home/contribute/write-new-topic.md b/content/en/docs/home/contribute/write-new-topic.md similarity index 96% rename from docs/home/contribute/write-new-topic.md rename to content/en/docs/home/contribute/write-new-topic.md index ccde10eb9f80c..2af0acc927b75 100644 --- a/docs/home/contribute/write-new-topic.md +++ b/content/en/docs/home/contribute/write-new-topic.md @@ -1,17 +1,18 @@ --- title: Writing a New Topic +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to create a new topic for the Kubernetes docs. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} Create a fork of the Kubernetes documentation repository as described in [Creating a Documentation Pull Request](/docs/home/contribute/create-pull-request/). -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Choosing a page type @@ -132,12 +133,12 @@ For an example of a topic that uses this technique, see Put image files in the `/images` directory. The preferred image format is SVG. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn about [using page templates](/docs/home/contribute/page-templates/). * Learn about [staging your changes](/docs/home/contribute/stage-documentation-changes/). * Learn about [creating a pull request](/docs/home/contribute/create-pull-request/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/home/supported-doc-versions.md b/content/en/docs/home/supported-doc-versions.md similarity index 50% rename from docs/home/supported-doc-versions.md rename to content/en/docs/home/supported-doc-versions.md index 30071bd5724f8..7747ea2b76435 100644 --- a/docs/home/supported-doc-versions.md +++ b/content/en/docs/home/supported-doc-versions.md @@ -1,29 +1,26 @@ --- title: Supported Versions of the Kubernetes Documentation +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This website contains documentation for the current version of Kubernetes and the four previous versions of Kubernetes. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Current version The current version is -[{{page.version}}](/). +[{{< param "version" >}}](/). ## Previous versions -{% for v in page.versions %} -{% if v.version != page.version %} -* [{{ v.version }}]({{v.url}}) -{% endif %} -{% endfor %} +{{< versions-other >}} + +{{% /capture %}} -{% endcapture %} -{% include templates/concept.md %} diff --git a/docs/imported/index.md b/content/en/docs/imported/_index.md similarity index 100% rename from docs/imported/index.md rename to content/en/docs/imported/_index.md diff --git a/content/en/docs/imported/community/_index.md b/content/en/docs/imported/community/_index.md new file mode 100755 index 0000000000000..6180924f0b5e4 --- /dev/null +++ b/content/en/docs/imported/community/_index.md @@ -0,0 +1,5 @@ +--- +title: "Community" +weight: 20 +--- + diff --git a/docs/imported/community/devel.md b/content/en/docs/imported/community/devel.md old mode 100755 new mode 100644 similarity index 100% rename from docs/imported/community/devel.md rename to content/en/docs/imported/community/devel.md diff --git a/docs/imported/community/guide.md b/content/en/docs/imported/community/guide.md old mode 100755 new mode 100644 similarity index 100% rename from docs/imported/community/guide.md rename to content/en/docs/imported/community/guide.md diff --git a/docs/imported/community/keps.md b/content/en/docs/imported/community/keps.md old mode 100755 new mode 100644 similarity index 100% rename from docs/imported/community/keps.md rename to content/en/docs/imported/community/keps.md diff --git a/docs/imported/community/mentoring.md b/content/en/docs/imported/community/mentoring.md old mode 100755 new mode 100644 similarity index 100% rename from docs/imported/community/mentoring.md rename to content/en/docs/imported/community/mentoring.md diff --git a/content/en/docs/imported/release/_index.md b/content/en/docs/imported/release/_index.md new file mode 100755 index 0000000000000..5d2ebd4bc23f2 --- /dev/null +++ b/content/en/docs/imported/release/_index.md @@ -0,0 +1,5 @@ +--- +title: "Downloading Kubernetes" +weight: 30 +--- + diff --git a/docs/imported/release/notes.md b/content/en/docs/imported/release/notes.md old mode 100755 new mode 100644 similarity index 100% rename from docs/imported/release/notes.md rename to content/en/docs/imported/release/notes.md diff --git a/docs/reference/index.md b/content/en/docs/reference/_index.md similarity index 98% rename from docs/reference/index.md rename to content/en/docs/reference/_index.md index 5b88d5e3d0bc9..5c79c55d94924 100644 --- a/docs/reference/index.md +++ b/content/en/docs/reference/_index.md @@ -2,6 +2,9 @@ title: Reference Documentation approvers: - chenopis +linkTitle: "Reference" +main_menu: true +weight: 70 --- ## API Reference diff --git a/docs/reference/api-concepts.md b/content/en/docs/reference/api-concepts.md similarity index 99% rename from docs/reference/api-concepts.md rename to content/en/docs/reference/api-concepts.md index fc9092faf990a..ca1d6e6ebcb9d 100644 --- a/docs/reference/api-concepts.md +++ b/content/en/docs/reference/api-concepts.md @@ -5,13 +5,14 @@ approvers: - smarterclayton - lavalamp - liggitt +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page describes common concepts in the Kubernetes API. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} The Kubernetes API is a resource-based (RESTful) programmatic interface provided via HTTP. It supports retrieving, creating, updating, and deleting primary resources via the standard HTTP verbs (POST, PUT, PATCH, DELETE, GET), includes additional subresources for many objects that allow fine grained authorization (such as binding a pod to a node), and can accept and serve those resources in different representations for convenience or efficiency. It also supports efficient change notifications on resources via "watches" and consistent lists to allow other components to effectively cache and synchronize the state of resources. @@ -282,6 +283,6 @@ An encoded Protobuf message with the following IDL: Clients that receive a response in `application/vnd.kubernetes.protobuf` that does not match the expected prefix should reject the response, as future versions may need to alter the serialization format in an incompatible way and will do so by changing the prefix. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/reference/api-overview.md b/content/en/docs/reference/api-overview.md similarity index 95% rename from docs/reference/api-overview.md rename to content/en/docs/reference/api-overview.md index 4668e3595ce5d..3d41aee51cd80 100644 --- a/docs/reference/api-overview.md +++ b/content/en/docs/reference/api-overview.md @@ -5,16 +5,17 @@ approvers: - erictune - lavalamp - jbeda +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page provides an overview of the Kubernetes API. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} The REST API is the fundamental fabric of Kubernetes. All operations and communications between components, and external user commands are REST API calls that the API Server handles. Consequently, everything in the Kubernetes platform is treated as an API object and has a corresponding entry in the -[API](/docs/reference/generated/kubernetes-api/{{page.version}}/). +[API](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/). Most operations can be performed through the [kubectl](/docs/reference/kubectl/overview/) command-line interface or other @@ -36,9 +37,10 @@ The version is set at the API level rather than at the resource or field level t The JSON and Protobuf serialization schemas follow the same guidelines for schema changes. The following descriptions cover both formats. +{{< note >}} **Note:** the API versioning and software versioning are indirectly related. The [API and release versioning proposal](https://git.k8s.io/community/contributors/design-proposals/release/versioning.md) describes the relationship between API versioning and software versioning. -{: .note} +{{< /note >}} Different API versions indicate different levels of stability and support. You can find more information about the criteria for each level in the [API Changes documentation](https://git.k8s.io/community/contributors/devel/api_changes.md#alpha-beta-and-stable-versions). @@ -58,8 +60,9 @@ Here's a summary of each level: API objects. The editing process may require some thought. This may require downtime for applications that rely on the feature. - The software is 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. + {{< note >}} **Note:** Try the beta features and provide feedback. After the features exit beta, it may not be practical to make more changes. - {: .note} + {{< /note >}} - Stable: - The version name is `vX` where `X` is an integer. @@ -90,9 +93,10 @@ on the apiserver. `--runtime-config` accepts comma separated values. For example - to enable batch/v2alpha1, set `--runtime-config=batch/v2alpha1` The flag accepts comma separated set of key=value pairs describing runtime configuration of the apiserver. +{{< note >}} **Note:** When you enable or disable groups or resources, you need to restart the apiserver and controller-manager to pick up the `--runtime-config` changes. -{: .note} +{{< /note >}} ## Enabling resources in the groups @@ -100,6 +104,6 @@ DaemonSets, Deployments, HorizontalPodAutoscalers, Ingress, Jobs and ReplicaSets You can enable other extensions resources by setting `--runtime-config` on apiserver. `--runtime-config` accepts comma separated values. For example, to disable deployments and jobs, set `--runtime-config=extensions/v1beta1/deployments=false,extensions/v1beta1/jobs=false` -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/reference/client-libraries.md b/content/en/docs/reference/client-libraries.md similarity index 97% rename from docs/reference/client-libraries.md rename to content/en/docs/reference/client-libraries.md index b53ab664c2b40..69a92440e9eb8 100644 --- a/docs/reference/client-libraries.md +++ b/content/en/docs/reference/client-libraries.md @@ -2,14 +2,15 @@ title: Client Libraries approvers: - ahmetb +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page contains an overview of the client libraries for using the Kubernetes API from various programming languages. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} To write applications using the [Kubernetes REST API](/docs/reference/api-overview/), you do not need to implement the API calls and request/response types yourself. You can use a client library for the programming language you are using. @@ -62,6 +63,6 @@ their authors, not the Kubernetes team. | DotNet (RestSharp) | [github.com/masroorhasan/Kubernetes.DotNet](https://github.com/masroorhasan/Kubernetes.DotNet) | | Elixir | [github.com/obmarg/kazan](https://github.com/obmarg/kazan/) | | Haskell | [github.com/soundcloud/haskell-kubernetes](https://github.com/soundcloud/haskell-kubernetes) | -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/reference/deprecation-policy.md b/content/en/docs/reference/deprecation-policy.md similarity index 100% rename from docs/reference/deprecation-policy.md rename to content/en/docs/reference/deprecation-policy.md diff --git a/docs/reference/feature-gates.md b/content/en/docs/reference/feature-gates.md similarity index 99% rename from docs/reference/feature-gates.md rename to content/en/docs/reference/feature-gates.md index 672e49d721178..659f151e04a4e 100644 --- a/docs/reference/feature-gates.md +++ b/content/en/docs/reference/feature-gates.md @@ -1,13 +1,14 @@ --- title: Feature Gates +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} This page contains an overview of the various feature gates an administrator can specify on different Kubernetes components. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Overview @@ -119,9 +120,10 @@ A *Beta* feature means: incompatible changes in subsequent releases. If you have multiple clusters that can be upgraded independently, you may be able to relax this restriction. +{{< note >}} **Note:** Please do try *Beta* features and give feedback on them! After they exit beta, it may not be practical for us to make more changes. -{: .note} +{{< /note >}} A *GA* feature is also referred to as a *stable* feature. It means: @@ -219,6 +221,6 @@ Each feature gate is designed for enabling/disabling a specific feature: enables the usage of [`local`](/docs/concepts/storage/volumes/#local) volume type when used together with the `PersistentLocalVolumes` feature gate. -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/content/en/docs/reference/glossary/annotation.md b/content/en/docs/reference/glossary/annotation.md new file mode 100755 index 0000000000000..03feb69a058d3 --- /dev/null +++ b/content/en/docs/reference/glossary/annotation.md @@ -0,0 +1,18 @@ +--- +title: Annotation +id: annotation +date: 2018-04-12 +full_link: /docs/concepts/overview/working-with-objects/annotations +short_description: > + A key-value pair that is used to attach arbitrary non-identifying metadata to objects. + +aka: +tags: +- fundamental +--- + A key-value pair that is used to attach arbitrary non-identifying metadata to objects. + + + +The metadata in an annotation can be small or large, structured or unstructured, and can include characters not permitted by labels. Clients such as tools and libraries can retrieve this metadata. + diff --git a/content/en/docs/reference/glossary/application-architect.md b/content/en/docs/reference/glossary/application-architect.md new file mode 100755 index 0000000000000..332993e9b9576 --- /dev/null +++ b/content/en/docs/reference/glossary/application-architect.md @@ -0,0 +1,18 @@ +--- +title: Application Architect +id: application-architect +date: 2018-04-12 +full_link: +short_description: > + A person responsible for the high-level design of an application. + +aka: +tags: +- user-type +--- + A person responsible for the high-level design of an application. + + + +An architect ensures that an app's implementation allows it to interact with its surrounding components in a scalable, maintainable way. Surrounding components include databases, logging infrastructure, and other microservices. + diff --git a/content/en/docs/reference/glossary/application-developer.md b/content/en/docs/reference/glossary/application-developer.md new file mode 100755 index 0000000000000..3a67deecbdfd4 --- /dev/null +++ b/content/en/docs/reference/glossary/application-developer.md @@ -0,0 +1,18 @@ +--- +title: Application Developer +id: application-developer +date: 2018-04-12 +full_link: +short_description: > + A person who writes an application that runs in a Kubernetes cluster. + +aka: +tags: +- user-type +--- + A person who writes an application that runs in a Kubernetes cluster. + + + +An application developer focuses on one part of an application. The scale of their focus may vary significantly in size. + diff --git a/content/en/docs/reference/glossary/approver.md b/content/en/docs/reference/glossary/approver.md new file mode 100755 index 0000000000000..44a740474389a --- /dev/null +++ b/content/en/docs/reference/glossary/approver.md @@ -0,0 +1,18 @@ +--- +title: Approver +id: approver +date: 2018-04-12 +full_link: +short_description: > + A person who can review and approve Kubernetes code contributions. + +aka: +tags: +- community +--- + A person who can review and approve Kubernetes code contributions. + + + +While code review is focused on code quality and correctness, approval is focused on the holistic acceptance of a contribution. Holistic acceptance includes backwards/forwards compatibility, adhering to API and flag conventions, subtle performance and correctness issues, interactions with other parts of the system, and others. Approver status is scoped to a part of the codebase. + diff --git a/content/en/docs/reference/glossary/certificate.md b/content/en/docs/reference/glossary/certificate.md new file mode 100755 index 0000000000000..90f49b0d45d23 --- /dev/null +++ b/content/en/docs/reference/glossary/certificate.md @@ -0,0 +1,18 @@ +--- +title: Certificate +id: certificate +date: 2018-04-12 +full_link: /docs/tasks/tls/managing-tls-in-a-cluster/ +short_description: > + A cryptographically secure file used to validate access to the Kubernetes cluster. + +aka: +tags: +- security +--- + A cryptographically secure file used to validate access to the Kubernetes cluster. + + + +Certificates enable applications within a Kubernetes cluster to access the Kubernetes API securely. Certificates validate that clients are allowed to access the API. + diff --git a/content/en/docs/reference/glossary/cla.md b/content/en/docs/reference/glossary/cla.md new file mode 100755 index 0000000000000..3f5c4324808c4 --- /dev/null +++ b/content/en/docs/reference/glossary/cla.md @@ -0,0 +1,18 @@ +--- +title: CLA (Contributor License Agreement) +id: cla +date: 2018-04-12 +full_link: https://github.com/kubernetes/community/blob/master/CLA.md +short_description: > + Terms under which a contributor grants a license to an open source project for their contributions. + +aka: +tags: +- community +--- + Terms under which a {{< glossary_tooltip text="contributor" term_id="contributor" >}} grants a license to an open source project for their contributions. + + + +CLAs help resolve legal disputes involving contributed material and intellectual property (IP). + diff --git a/content/en/docs/reference/glossary/cloud-controller-manager.md b/content/en/docs/reference/glossary/cloud-controller-manager.md new file mode 100755 index 0000000000000..0962c0c359efe --- /dev/null +++ b/content/en/docs/reference/glossary/cloud-controller-manager.md @@ -0,0 +1,20 @@ +--- +title: Cloud Controller Manager +id: cloud-controller-manager +date: 2018-04-12 +full_link: https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/ +short_description: > + Cloud Controller Manager is an alpha feature in 1.8. In upcoming releases it will be the preferred way to integrate Kubernetes with any cloud. + +aka: +tags: +- core-object +- architecture +- operation +--- + Cloud Controller Manager is an alpha feature in 1.8. In upcoming releases it will be the preferred way to integrate Kubernetes with any cloud. + + + +Kubernetes v1.6 contains a new binary called cloud-controller-manager. cloud-controller-manager is a daemon that embeds cloud-specific control loops. These cloud-specific control loops were originally in the kube-controller-manager. Since cloud providers develop and release at a different pace compared to the Kubernetes project, abstracting the provider-specific code to the cloud-controller-manager binary allows cloud vendors to evolve independently from the core Kubernetes code. + diff --git a/content/en/docs/reference/glossary/cloud-provider.md b/content/en/docs/reference/glossary/cloud-provider.md new file mode 100755 index 0000000000000..d897cc69a2a8a --- /dev/null +++ b/content/en/docs/reference/glossary/cloud-provider.md @@ -0,0 +1,18 @@ +--- +title: Cloud Provider +id: cloud-provider +date: 2018-04-12 +full_link: /docs/concepts/cluster-administration/cloud-providers +short_description: > + Cloud provider is a company that offers cloud computing platform that can run Kubernetes clusters. + +aka: +tags: +- community +--- + Cloud provider is a company that offers cloud computing platform that can run Kubernetes clusters. + + + +Cloud providers or sometime called Cloud Service Provider (CSPs) provides cloud computing platforms. They may offer services such as Infrastructure as a Service (IaaS) or Platform as a Service (PaaS). Cloud providers host the Kubernetes cluster and also provide services that interact with the cluster, such as Load Balancers, Storage Classes etc. + diff --git a/content/en/docs/reference/glossary/cluster-architect.md b/content/en/docs/reference/glossary/cluster-architect.md new file mode 100755 index 0000000000000..0c2d0201b54aa --- /dev/null +++ b/content/en/docs/reference/glossary/cluster-architect.md @@ -0,0 +1,18 @@ +--- +title: Cluster Architect +id: cluster-architect +date: 2018-04-12 +full_link: +short_description: > + A person who designs infrastructure that involves one or more Kubernetes clusters. + +aka: +tags: +- user-type +--- + A person who designs infrastructure that involves one or more Kubernetes clusters. + + + +Cluster architects are concerned with best practices for distributed systems, for example: high availability and security. + diff --git a/content/en/docs/reference/glossary/cluster-operator.md b/content/en/docs/reference/glossary/cluster-operator.md new file mode 100755 index 0000000000000..f006ebe31971d --- /dev/null +++ b/content/en/docs/reference/glossary/cluster-operator.md @@ -0,0 +1,20 @@ +--- +title: Cluster Operator +id: cluster-operator +date: 2018-04-12 +full_link: +short_description: > + A person who configures, controls, and monitors clusters. + +aka: +tags: +- user-type +--- + A person who configures, controls, and monitors clusters. + + + +Their primary responsibility is keeping a cluster up and running, which may involve periodic maintenance activities or upgrades.
+ +**NOTE:** Cluster operators are different from the [Operator pattern](https://coreos.com/operators) that extends the Kubernetes API. + diff --git a/content/en/docs/reference/glossary/cluster.md b/content/en/docs/reference/glossary/cluster.md new file mode 100755 index 0000000000000..cca5e5ecc6380 --- /dev/null +++ b/content/en/docs/reference/glossary/cluster.md @@ -0,0 +1,19 @@ +--- +title: Cluster +id: cluster +date: 2018-04-12 +full_link: +short_description: > + A set of machines, called nodes, that run containerized applications managed by Kubernetes. + +aka: +tags: +- fundamental +- operation +--- + A set of machines, called nodes, that run containerized applications managed by Kubernetes. + + + +A cluster has several worker nodes and at least one master node. + diff --git a/content/en/docs/reference/glossary/code-contributor.md b/content/en/docs/reference/glossary/code-contributor.md new file mode 100755 index 0000000000000..56d67a946fa2e --- /dev/null +++ b/content/en/docs/reference/glossary/code-contributor.md @@ -0,0 +1,19 @@ +--- +title: Code Contributor +id: code-contributor +date: 2018-04-12 +full_link: /docs/imported/community/devel/ +short_description: > + A person who develops and contributes code to the Kubernetes open source codebase. + +aka: +tags: +- community +- user-type +--- + A person who develops and contributes code to the Kubernetes open source codebase. + + + +They are also an active {{< glossary_tooltip text="community member" term_id="member" >}} who participates in one or more {{< glossary_tooltip text="Special Interest Groups (SIGs)" term_id="sig" >}}. + diff --git a/content/en/docs/reference/glossary/configmap.md b/content/en/docs/reference/glossary/configmap.md new file mode 100755 index 0000000000000..14be411cf2299 --- /dev/null +++ b/content/en/docs/reference/glossary/configmap.md @@ -0,0 +1,18 @@ +--- +title: ConfigMap +id: configmap +date: 2018-04-12 +full_link: /docs/tasks/configure-pod-container/configure-pod-configmap/ +short_description: > + An API object used to store non-confidential data in key-value pairs. Can be consumed as environment variables, command-line arguments, or config files in a volume. + +aka: +tags: +- core-object +--- + An API object used to store non-confidential data in key-value pairs. Can be consumed as environment variables, command-line arguments, or config files in a {{< glossary_tooltip text="volume" term_id="volume" >}}. + + + +Allows you to decouple environment-specific configuration from your {{< glossary_tooltip text="container images" term_id="container" >}}, so that your applications are easily portable. When storing confidential data use a [Secret](https://kubernetes.io/docs/concepts/configuration/secret/). + diff --git a/content/en/docs/reference/glossary/container-env-variables.md b/content/en/docs/reference/glossary/container-env-variables.md new file mode 100755 index 0000000000000..1fe95d097398d --- /dev/null +++ b/content/en/docs/reference/glossary/container-env-variables.md @@ -0,0 +1,18 @@ +--- +title: Container Environment Variables +id: container-env-variables +date: 2018-04-12 +full_link: /docs/concepts/containers/container-environment-variables.md +short_description: > + Container environment variables are name/value pairs that provide useful information into containers running in a Pod. + +aka: +tags: +- fundamental +--- + Container environment variables are name/value pairs that provide useful information into containers running in a Pod. + + + +Container environment variables provide information that is required by the running containerized applications along with information about important resources to the [Containers] {{< glossary_tooltip text="Containers" term_id="container" >}}. For example, file system, information about the container itself and other cluster resources such as service endpoints, etc. + diff --git a/content/en/docs/reference/glossary/container.md b/content/en/docs/reference/glossary/container.md new file mode 100755 index 0000000000000..762a4fdcd55dc --- /dev/null +++ b/content/en/docs/reference/glossary/container.md @@ -0,0 +1,19 @@ +--- +title: Container +id: container +date: 2018-04-12 +full_link: /docs/concepts/overview/what-is-kubernetes/#why-containers +short_description: > + A lightweight and portable executable image that contains software and all of its dependencies. + +aka: +tags: +- fundamental +- workload +--- + A lightweight and portable executable image that contains software and all of its dependencies. + + + +Containers decouple applications from underlying host infrastructure to make deployment easier in different cloud or OS environments, and for easier scaling. + diff --git a/content/en/docs/reference/glossary/contributor.md b/content/en/docs/reference/glossary/contributor.md new file mode 100755 index 0000000000000..fb4628453b9ba --- /dev/null +++ b/content/en/docs/reference/glossary/contributor.md @@ -0,0 +1,18 @@ +--- +title: Contributor +id: contributor +date: 2018-04-12 +full_link: +short_description: > + Someone who donates code, documentation, or their time to help the Kubernetes project or community. + +aka: +tags: +- community +--- + Someone who donates code, documentation, or their time to help the Kubernetes project or community. + + + +Contributions include pull requests (PRs), issues, feedback, {{< glossary_tooltip text="special interest groups (SIG)" term_id="sig" >}} participation, or organizing community events. + diff --git a/content/en/docs/reference/glossary/controller.md b/content/en/docs/reference/glossary/controller.md new file mode 100755 index 0000000000000..5c810e2b47280 --- /dev/null +++ b/content/en/docs/reference/glossary/controller.md @@ -0,0 +1,19 @@ +--- +title: Controller +id: controller +date: 2018-04-12 +full_link: /docs/admin/kube-controller-manager/ +short_description: > + 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. + +aka: +tags: +- architecture +- fundamental +--- + A control loop that watches the shared state of the cluster through the {{< glossary_tooltip text="apiserver" term_id="kube-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. + diff --git a/content/en/docs/reference/glossary/cronjob.md b/content/en/docs/reference/glossary/cronjob.md new file mode 100755 index 0000000000000..3173740b5b6d8 --- /dev/null +++ b/content/en/docs/reference/glossary/cronjob.md @@ -0,0 +1,19 @@ +--- +title: CronJob +id: cronjob +date: 2018-04-12 +full_link: /docs/concepts/workloads/controllers/cron-jobs/ +short_description: > + Manages a [Job](/docs/concepts/workloads/controllers/jobs-run-to-completion/) that runs on a periodic schedule. + +aka: +tags: +- core-object +- workload +--- + Manages a [Job](/docs/concepts/workloads/controllers/jobs-run-to-completion/) that runs on a periodic schedule. + + + +Similar to a line in a *crontab* file, a Cronjob object specifies a schedule using the [Cron](https://en.wikipedia.org/wiki/Cron) format. + diff --git a/content/en/docs/reference/glossary/customresourcedefinition.md b/content/en/docs/reference/glossary/customresourcedefinition.md new file mode 100755 index 0000000000000..60a096a5e9dd9 --- /dev/null +++ b/content/en/docs/reference/glossary/customresourcedefinition.md @@ -0,0 +1,20 @@ +--- +title: CustomResourceDefinition +id: CustomResourceDefinition +date: 2018-04-12 +full_link: docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/ +short_description: > + Custom code that defines a resource to add to your Kubernetes API server without building a complete custom server. + +aka: +tags: +- fundamental +- operation +- extension +--- + Custom code that defines a resource to add to your Kubernetes API server without building a complete custom server. + + + +Custom Resource Definitions let you extend the Kubernetes API for your environment if the publicly supported API resources can't meet your needs. + diff --git a/content/en/docs/reference/glossary/daemonset.md b/content/en/docs/reference/glossary/daemonset.md new file mode 100755 index 0000000000000..c5ae01dd5b8f2 --- /dev/null +++ b/content/en/docs/reference/glossary/daemonset.md @@ -0,0 +1,20 @@ +--- +title: DaemonSet +id: daemonset +date: 2018-04-12 +full_link: /docs/concepts/workloads/controllers/daemonset +short_description: > + Ensures a copy of a Pod is running across a set of nodes in a cluster. + +aka: +tags: +- fundamental +- core-object +- workload +--- + Ensures a copy of a {{< glossary_tooltip text="Pod" term_id="pod" >}} is running across a set of nodes in a {{< glossary_tooltip text="cluster" term_id="cluster" >}}. + + + +Used to deploy system daemons such as log collectors and monitoring agents that typically must run on every {{< glossary_tooltip term_id="node" >}}. + diff --git a/content/en/docs/reference/glossary/deployment.md b/content/en/docs/reference/glossary/deployment.md new file mode 100755 index 0000000000000..89a4f7b9b2b9c --- /dev/null +++ b/content/en/docs/reference/glossary/deployment.md @@ -0,0 +1,20 @@ +--- +title: Deployment +id: deployment +date: 2018-04-12 +full_link: /docs/concepts/workloads/controllers/deployment/ +short_description: > + An API object that manages a replicated application. + +aka: +tags: +- fundamental +- core-object +- workload +--- + An API object that manages a replicated application. + + + +Each replica is represented by a {{< glossary_tooltip term_id="pod" >}}, and the Pods are distributed among the nodes of a cluster. + diff --git a/content/en/docs/reference/glossary/developer.md b/content/en/docs/reference/glossary/developer.md new file mode 100755 index 0000000000000..1e0c8bd10efe1 --- /dev/null +++ b/content/en/docs/reference/glossary/developer.md @@ -0,0 +1,19 @@ +--- +title: Developer (disambiguation) +id: developer +date: 2018-04-12 +full_link: +short_description: > + May refer to: Application Developer, Code Contributor, or Platform Developer. + +aka: +tags: +- community +- user-type +--- + May refer to: {{< glossary_tooltip text="Application Developer" term_id="application-developer" >}}, {{< glossary_tooltip text="Code Contributor" term_id="code-contributor" >}}, or {{< glossary_tooltip text="Platform Developer" term_id="platform-developer" >}}. + + + +This overloaded term may have different meanings depending on the context + diff --git a/content/en/docs/reference/glossary/docker.md b/content/en/docs/reference/glossary/docker.md new file mode 100755 index 0000000000000..639f56879050a --- /dev/null +++ b/content/en/docs/reference/glossary/docker.md @@ -0,0 +1,18 @@ +--- +title: docker +id: docker +date: 2018-04-12 +full_link: /docs/reference/kubectl/docker-cli-to-kubectl/ +short_description: > + Docker is a software technology providing operating-system-level virtualization also known as containers. + +aka: +tags: +- fundamental +--- + Docker is a software technology providing operating-system-level virtualization also known as containers. + + + +Docker uses the resource isolation features of the Linux kernel such as cgroups and kernel namespaces, and a union-capable file system such as OverlayFS and others to allow independent "containers" to run within a single Linux instance, avoiding the overhead of starting and maintaining virtual machines (VMs). + diff --git a/content/en/docs/reference/glossary/downstream.md b/content/en/docs/reference/glossary/downstream.md new file mode 100755 index 0000000000000..f5b010f40d77d --- /dev/null +++ b/content/en/docs/reference/glossary/downstream.md @@ -0,0 +1,19 @@ +--- +title: Downstream (disambiguation) +id: downstream +date: 2018-04-12 +full_link: +short_description: > + May refer to: code in the Kubernetes ecosystem that depends upon the core Kubernetes codebase or a forked repo. + +aka: +tags: +- community +--- + May refer to: code in the Kubernetes ecosystem that depends upon the core Kubernetes codebase or a forked repo. + + + +* In the **Kubernetes Community**: Conversations often use *downstream* to mean the ecosystem, code, or third-party tools that rely on the core Kubernetes codebase. For example, a new feature in Kubernetes may be adopted by applications *downstream* to improve their functionality. +* In **GitHub** or **git**: The convention is to refer to a forked repo as *downstream*, whereas the source repo is considered *upstream*. + diff --git a/content/en/docs/reference/glossary/dynamic-volume-provisioning.md b/content/en/docs/reference/glossary/dynamic-volume-provisioning.md new file mode 100755 index 0000000000000..fd5c150e925a7 --- /dev/null +++ b/content/en/docs/reference/glossary/dynamic-volume-provisioning.md @@ -0,0 +1,19 @@ +--- +title: Dynamic Volume Provisioning +id: dynamicvolumeprovisioning +date: 2018-04-12 +full_link: /docs/concepts/storage/dynamic-provisioning +short_description: > + Allows users to request automatic creation of storage Volumes. + +aka: +tags: +- core-object +- storage +--- + Allows users to request automatic creation of storage {{< glossary_tooltip text="Volumes" term_id="volume" >}}. + + + +Dynamic provisioning eliminates the need for cluster administrators to pre-provision storage. Instead, it automatically provisions storage by user request. Dynamic volume provisioning is based on an API object, {{< glossary_tooltip text="StorageClass" term_id="storage-class" >}}, referring to a {{< glossary_tooltip text="Volume Plugin" term_id="volume-plugin" >}} that provisions a {{< glossary_tooltip text="Volume" term_id="volume" >}} and the set of parameters to pass to the Volume Plugin. + diff --git a/content/en/docs/reference/glossary/etcd.md b/content/en/docs/reference/glossary/etcd.md new file mode 100755 index 0000000000000..6e8d5186bc3a3 --- /dev/null +++ b/content/en/docs/reference/glossary/etcd.md @@ -0,0 +1,19 @@ +--- +title: etcd +id: etcd +date: 2018-04-12 +full_link: /docs/tasks/administer-cluster/configure-upgrade-etcd/ +short_description: > + Consistent and highly-available key value store used as Kubernetes' backing store for all cluster data. + +aka: +tags: +- architecture +- storage +--- + Consistent and highly-available key value store used as Kubernetes' backing store for all cluster data. + + + +Always have a backup plan for etcd's data for your Kubernetes cluster. For in-depth information on etcd, see [etcd documentation](https://github.com/coreos/etcd/blob/master/Documentation/docs.md). + diff --git a/content/en/docs/reference/glossary/helm-chart.md b/content/en/docs/reference/glossary/helm-chart.md new file mode 100755 index 0000000000000..6fd83bff50738 --- /dev/null +++ b/content/en/docs/reference/glossary/helm-chart.md @@ -0,0 +1,19 @@ +--- +title: Helm Chart +id: helm-chart +date: 2018-04-12 +full_link: https://github.com/kubernetes/helm/blob/master/docs/charts.md +short_description: > + A package of pre-configured Kubernetes resources that can be managed with the Helm tool. + +aka: +tags: +- tool +--- + A package of pre-configured Kubernetes resources that can be managed with the Helm tool. + + + +Charts provide a reproducible way of creating and sharing Kubernetes applications. +A single chart can be used to deploy something simple, like a memcached Pod, or something complex, like a full web app stack with HTTP servers, databases, caches, and so on. + diff --git a/content/en/docs/reference/glossary/horizontal-pod-autoscaler.md b/content/en/docs/reference/glossary/horizontal-pod-autoscaler.md new file mode 100755 index 0000000000000..a82df528a4c67 --- /dev/null +++ b/content/en/docs/reference/glossary/horizontal-pod-autoscaler.md @@ -0,0 +1,18 @@ +--- +title: Horizontal Pod Autoscaler +id: horizontal-pod-autoscaler +date: 2018-04-12 +full_link: /docs/tasks/run-application/horizontal-pod-autoscale/ +short_description: > + An API resource that automatically scales the number of pod replicas based on targeted CPU utilization or custom metric targets. + +aka: +tags: +- operation +--- + An API resource that automatically scales the number of pod replicas based on targeted CPU utilization or custom metric targets. + + + +HPA is typically used with {{< glossary_tooltip text="Replication Controllers" term_id="replication-controller" >}}, {{< glossary_tooltip text="Deployments" term_id="deployment" >}}, or Replica Sets. It cannot be applied to objects that cannot be scaled, for example {{< glossary_tooltip text="DaemonSets" term_id="daemonset" >}}. + diff --git a/content/en/docs/reference/glossary/image.md b/content/en/docs/reference/glossary/image.md new file mode 100755 index 0000000000000..cdb2c7e02c6b2 --- /dev/null +++ b/content/en/docs/reference/glossary/image.md @@ -0,0 +1,18 @@ +--- +title: Image +id: image +date: 2018-04-12 +full_link: +short_description: > + Stored instance of a container that holds a set of software needed to run an application. + +aka: +tags: +- fundamental +--- + Stored instance of a container that holds a set of software needed to run an application. + + + +A way of packaging software that allows it to be stored in a container registry, pulled to a local system, and run as an application. Meta data is included in the image that can indicate what executable to run, who built it, and other information. + diff --git a/content/en/docs/reference/glossary/index.md b/content/en/docs/reference/glossary/index.md new file mode 100755 index 0000000000000..a8c229569a05a --- /dev/null +++ b/content/en/docs/reference/glossary/index.md @@ -0,0 +1,11 @@ +--- +approvers: +- chenopis +- abiogenesis-now +title: Standardized Glossary +layout: glossary +noedit: true +default_active_tag: fundamental +weight: 5 +--- + diff --git a/content/en/docs/reference/glossary/ingress.md b/content/en/docs/reference/glossary/ingress.md new file mode 100755 index 0000000000000..0a8342800259e --- /dev/null +++ b/content/en/docs/reference/glossary/ingress.md @@ -0,0 +1,20 @@ +--- +title: Ingress +id: ingress +date: 2018-04-12 +full_link: /docs/concepts/services-networking/ingress/ +short_description: > + An API object that manages external access to the services in a cluster, typically HTTP. + +aka: +tags: +- networking +- architecture +- extension +--- + An API object that manages external access to the services in a cluster, typically HTTP. + + + +Ingress can provide load balancing, SSL termination and name-based virtual hosting. + diff --git a/content/en/docs/reference/glossary/init-container.md b/content/en/docs/reference/glossary/init-container.md new file mode 100755 index 0000000000000..2ea793661ca93 --- /dev/null +++ b/content/en/docs/reference/glossary/init-container.md @@ -0,0 +1,18 @@ +--- +title: Init Container +id: init-container +date: 2018-04-12 +full_link: +short_description: > + One or more initialization containers that must run to completion before any app containers run. + +aka: +tags: +- fundamental +--- + One or more initialization containers that must run to completion before any app containers run. + + + +Initialization (init) containers are like regular app containers, with one difference: init containers must run to completion before any app containers can start. Init containers run in series: each init container must run to completion before the next init container begins. + diff --git a/content/en/docs/reference/glossary/istio.md b/content/en/docs/reference/glossary/istio.md new file mode 100755 index 0000000000000..246d53bb15689 --- /dev/null +++ b/content/en/docs/reference/glossary/istio.md @@ -0,0 +1,20 @@ +--- +title: Istio +id: istio +date: 2018-04-12 +full_link: https://istio.io/docs/concepts/what-is-istio/overview.html +short_description: > + An open platform (not Kubernetes-specific) that provides a uniform way to integrate microservices, manage traffic flow, enforce policies, and aggregate telemetry data. + +aka: +tags: +- networking +- architecture +- extension +--- + An open platform (not Kubernetes-specific) that provides a uniform way to integrate microservices, manage traffic flow, enforce policies, and aggregate telemetry data. + + + +Adding Istio does not require changing application code. It is a layer of infrastructure between a service and the network, which when combined with service deployments, is commonly referred to as a service mesh. Istio's control plane abstracts away the underlying cluster management platform, which may be Kubernetes, Mesosphere, etc. + diff --git a/content/en/docs/reference/glossary/job.md b/content/en/docs/reference/glossary/job.md new file mode 100755 index 0000000000000..af8cfa0c3768e --- /dev/null +++ b/content/en/docs/reference/glossary/job.md @@ -0,0 +1,20 @@ +--- +title: Job +id: job +date: 2018-04-12 +full_link: /docs/concepts/workloads/controllers/jobs-run-to-completion +short_description: > + A finite or batch task that runs to completion. + +aka: +tags: +- fundamental +- core-object +- workload +--- + A finite or batch task that runs to completion. + + + +Creates one or more {{< glossary_tooltip term_id="pod" >}} objects and ensures that a specified number of them successfully terminate. As Pods successfully complete, the Job tracks the successful completions. + diff --git a/content/en/docs/reference/glossary/kops.md b/content/en/docs/reference/glossary/kops.md new file mode 100755 index 0000000000000..c52be7880903c --- /dev/null +++ b/content/en/docs/reference/glossary/kops.md @@ -0,0 +1,28 @@ +--- +title: Kops +id: kops +date: 2018-04-12 +full_link: /docs/getting-started-guides/kops/ +short_description: > + A CLI tool that helps you create, destroy, upgrade and maintain production-grade, highly available, Kubernetes clusters. *NOTE: Officially supports AWS only, with GCE and VMware vSphere in alpha*. + +aka: +tags: +- tool +- operation +--- + A CLI tool that helps you create, destroy, upgrade and maintain production-grade, highly available, Kubernetes clusters. *NOTE: Officially supports AWS only, with GCE and VMware vSphere in alpha*. + + + +`kops` provisions your cluster with: + + * Fully automated installation + * DNS-based cluster identification + * Self-healing: everything runs in Auto-Scaling Groups + * Limited OS support (Debian preferred, Ubuntu 16.04 supported, early support for CentOS & RHEL) + * High availability (HA) support + * The ability to directly provision, or generate terraform manifests + +You can also build your own cluster using {{< glossary_tooltip term_id="kubeadm" >}} as a building block. `kops` builds on the kubeadm work. + diff --git a/content/en/docs/reference/glossary/kube-apiserver.md b/content/en/docs/reference/glossary/kube-apiserver.md new file mode 100755 index 0000000000000..d6855edb385df --- /dev/null +++ b/content/en/docs/reference/glossary/kube-apiserver.md @@ -0,0 +1,19 @@ +--- +title: kube-apiserver +id: kube-apiserver +date: 2018-04-12 +full_link: /docs/reference/generated/kube-apiserver/ +short_description: > + Component on the master that exposes the Kubernetes API. It is the front-end for the Kubernetes control plane. + +aka: +tags: +- architecture +- fundamental +--- + Component on the master that exposes the Kubernetes API. It is the front-end for the Kubernetes control plane. + + + +It is designed to scale horizontally -- that is, it scales by deploying more instances. See [Building High-Availability Clusters](/docs/admin/high-availability/). + diff --git a/content/en/docs/reference/glossary/kube-controller-manager.md b/content/en/docs/reference/glossary/kube-controller-manager.md new file mode 100755 index 0000000000000..0b039ae536e39 --- /dev/null +++ b/content/en/docs/reference/glossary/kube-controller-manager.md @@ -0,0 +1,19 @@ +--- +title: kube-controller-manager +id: kube-controller-manager +date: 2018-04-12 +full_link: /docs/reference/generated/kube-controller-manager/ +short_description: > + Component on the master that runs controllers. + +aka: +tags: +- architecture +- fundamental +--- + Component on the master that runs {{< glossary_tooltip text="controllers" term_id="controller" >}}. + + + +Logically, each {{< glossary_tooltip text="controller" term_id="controller" >}} is a separate process, but to reduce complexity, they are all compiled into a single binary and run in a single process. + diff --git a/content/en/docs/reference/glossary/kube-proxy.md b/content/en/docs/reference/glossary/kube-proxy.md new file mode 100755 index 0000000000000..4f313c06c8aae --- /dev/null +++ b/content/en/docs/reference/glossary/kube-proxy.md @@ -0,0 +1,19 @@ +--- +title: kube-proxy +id: kube proxy +date: 2018-04-12 +full_link: /docs/reference/generated/kube-proxy +short_description: > + `kube-proxy` is a network proxy that runs on each node in the cluster. + +aka: +tags: +- fundamental +- core-object +--- + `kube-proxy` is a network proxy that runs on each node in the cluster. + + + +`kube-proxy` is responsible for request forwarding. `kube-proxy` allows TCP and UDP stream forwarding or round robin TCP and UDP forwarding across a set of backend functions. + diff --git a/content/en/docs/reference/glossary/kube-scheduler.md b/content/en/docs/reference/glossary/kube-scheduler.md new file mode 100755 index 0000000000000..b9672b6e0399a --- /dev/null +++ b/content/en/docs/reference/glossary/kube-scheduler.md @@ -0,0 +1,18 @@ +--- +title: kube-scheduler +id: kube-scheduler +date: 2018-04-12 +full_link: /docs/reference/generated/kube-scheduler/ +short_description: > + Component on the master that watches newly created pods that have no node assigned, and selects a node for them to run on. + +aka: +tags: +- architecture +--- + Component on the master that watches newly created pods that have no node assigned, and selects a node for them to run on. + + + +Factors taken into account for scheduling decisions include individual and collective resource requirements, hardware/software/policy constraints, affinity and anti-affinity specifications, data locality, inter-workload interference and deadlines. + diff --git a/content/en/docs/reference/glossary/kubeadm.md b/content/en/docs/reference/glossary/kubeadm.md new file mode 100755 index 0000000000000..ce26062270819 --- /dev/null +++ b/content/en/docs/reference/glossary/kubeadm.md @@ -0,0 +1,19 @@ +--- +title: Kubeadm +id: kubeadm +date: 2018-04-12 +full_link: /docs/admin/kubeadm/ +short_description: > + A tool for quickly installing Kubernetes and setting up a secure cluster. + +aka: +tags: +- tool +- operation +--- + A tool for quickly installing Kubernetes and setting up a secure cluster. + + + +You can use kubeadm to install both the control plane and the worker node components. + diff --git a/content/en/docs/reference/glossary/kubectl.md b/content/en/docs/reference/glossary/kubectl.md new file mode 100755 index 0000000000000..665fffcf98622 --- /dev/null +++ b/content/en/docs/reference/glossary/kubectl.md @@ -0,0 +1,19 @@ +--- +title: Kubectl +id: kubectl +date: 2018-04-12 +full_link: /docs/user-guide/kubectl-overview/ +short_description: > + A command line tool for communicating with a Kubernetes API server. + +aka: +tags: +- tool +- fundamental +--- + A command line tool for communicating with a {{< glossary_tooltip text="Kubernetes API" term_id="kubernetes-api" >}} server. + + + +You can use kubectl to create, inspect, update, and delete Kubernetes objects. + diff --git a/content/en/docs/reference/glossary/kubelet.md b/content/en/docs/reference/glossary/kubelet.md new file mode 100755 index 0000000000000..0c4ea9425a1b9 --- /dev/null +++ b/content/en/docs/reference/glossary/kubelet.md @@ -0,0 +1,19 @@ +--- +title: Kubelet +id: kubelet +date: 2018-04-12 +full_link: /docs/reference/generated/kubelet +short_description: > + An agent that runs on each node in the cluster. It makes sure that containers are running in a pod. + +aka: +tags: +- fundamental +- core-object +--- + An agent that runs on each node in the cluster. It makes sure that containers are running in a pod. + + + +The kubelet takes a set of PodSpecs that are provided through various mechanisms and ensures that the containers described in those PodSpecs are running and healthy. The kubelet doesn’t manage containers which were not created by Kubernetes. + diff --git a/content/en/docs/reference/glossary/kubernetes-api.md b/content/en/docs/reference/glossary/kubernetes-api.md new file mode 100755 index 0000000000000..80f08ed5be286 --- /dev/null +++ b/content/en/docs/reference/glossary/kubernetes-api.md @@ -0,0 +1,19 @@ +--- +title: Kubernetes API +id: kubernetes-api +date: 2018-04-12 +full_link: /docs/concepts/overview/kubernetes-api/ +short_description: > + The application that serves Kubernetes functionality through a RESTful interface and stores the state of the cluster. + +aka: +tags: +- fundamental +- architecture +--- + The application that serves Kubernetes functionality through a RESTful interface and stores the state of the cluster. + + + +Kubernetes resources and "records of intent" are all stored as API objects, and modified via RESTful calls to the API. The API allows configuration to be managed in a declarative way. Users can interact with the Kubernetes API directly, or via tools like `kubectl`. The core Kubernetes API is flexible and can also be extended to support custom resources. + diff --git a/content/en/docs/reference/glossary/label.md b/content/en/docs/reference/glossary/label.md new file mode 100755 index 0000000000000..24a3aa95f49d7 --- /dev/null +++ b/content/en/docs/reference/glossary/label.md @@ -0,0 +1,18 @@ +--- +title: Label +id: label +date: 2018-04-12 +full_link: /docs/concepts/overview/working-with-objects/labels +short_description: > + Tags objects with identifying attributes that are meaningful and relevant to users. + +aka: +tags: +- fundamental +--- + Tags objects with identifying attributes that are meaningful and relevant to users. + + + +Labels are key/value pairs that are attached to objects such as {{< glossary_tooltip text="Pods" term_id="pod" >}}. They are used to organize and to select subsets of objects. + diff --git a/content/en/docs/reference/glossary/maintainer.md b/content/en/docs/reference/glossary/maintainer.md new file mode 100755 index 0000000000000..8ca64a7ef872c --- /dev/null +++ b/content/en/docs/reference/glossary/maintainer.md @@ -0,0 +1,18 @@ +--- +title: Maintainer +id: maintainer +date: 2018-04-12 +full_link: +short_description: > + A highly experienced contributor, active in multiple areas of Kubernetes, who has cross-area ownership and write access to a project's GitHub repository. + +aka: +tags: +- community +--- + A highly experienced {{< glossary_tooltip text="contributor" term_id="contributor" >}}, active in multiple areas of Kubernetes, who has cross-area ownership and write access to a project's GitHub repository. + + + +Maintainers work holistically across the project to maintain its health and success and have made substantial contributions, both through code development and broader organizational efforts. + diff --git a/content/en/docs/reference/glossary/managed-service.md b/content/en/docs/reference/glossary/managed-service.md new file mode 100755 index 0000000000000..61ac76aabdfac --- /dev/null +++ b/content/en/docs/reference/glossary/managed-service.md @@ -0,0 +1,17 @@ +--- +title: Managed Service +id: managed-service +date: 2018-04-12 +full_link: +short_description: > + A software offering maintained by a third-party provider. + +aka: +tags: +- extension +--- + A software offering maintained by a third-party provider. + + + +Some examples of Managed Services are AWS EC2, Azure SQL Database, and GCP Pub/Sub, but they can be any software offering that can be used by an application. [Service Catalog](/docs/concepts/service-catalog/) provides a way to list, provision, and bind with Managed Services offered by {{< glossary_tooltip text="Service Brokers" term_id="service-broker" >}}. diff --git a/content/en/docs/reference/glossary/member.md b/content/en/docs/reference/glossary/member.md new file mode 100755 index 0000000000000..e56d2709218c4 --- /dev/null +++ b/content/en/docs/reference/glossary/member.md @@ -0,0 +1,18 @@ +--- +title: Member +id: member +date: 2018-04-12 +full_link: +short_description: > + A continuously active contributor in the K8s community. + +aka: +tags: +- community +--- + A continuously active {{< glossary_tooltip text="contributor" term_id="contributor" >}} in the K8s community. + + + +Members can have issues and PRs assigned to them and participate in {{< glossary_tooltip text="special interest groups (SIGs)" term_id="sig" >}} through GitHub teams. Pre-submit tests are automatically run for members' PRs. A member is expected to remain an active contributor to the community. + diff --git a/content/en/docs/reference/glossary/minikube.md b/content/en/docs/reference/glossary/minikube.md new file mode 100755 index 0000000000000..26e47f3412423 --- /dev/null +++ b/content/en/docs/reference/glossary/minikube.md @@ -0,0 +1,19 @@ +--- +title: Minikube +id: minikube +date: 2018-04-12 +full_link: /docs/getting-started-guides/minikube/ +short_description: > + A tool for running Kubernetes locally. + +aka: +tags: +- fundamental +- tool +--- + A tool for running Kubernetes locally. + + + +Minikube runs a single-node cluster inside a VM on your computer. + diff --git a/content/en/docs/reference/glossary/name.md b/content/en/docs/reference/glossary/name.md new file mode 100755 index 0000000000000..8fce1fb24ef43 --- /dev/null +++ b/content/en/docs/reference/glossary/name.md @@ -0,0 +1,18 @@ +--- +title: Name +id: name +date: 2018-04-12 +full_link: /docs/concepts/overview/working-with-objects/names +short_description: > + A client-provided string that refers to an object in a resource URL, such as `/api/v1/pods/some-name`. + +aka: +tags: +- fundamental +--- + A client-provided string that refers to an object in a resource URL, such as `/api/v1/pods/some-name`. + + + +Only one object of a given kind can have a given name at a time. However, if you delete the object, you can make a new object with the same name. + diff --git a/content/en/docs/reference/glossary/namespace.md b/content/en/docs/reference/glossary/namespace.md new file mode 100755 index 0000000000000..a477150a9d2ed --- /dev/null +++ b/content/en/docs/reference/glossary/namespace.md @@ -0,0 +1,18 @@ +--- +title: Namespace +id: namespace +date: 2018-04-12 +full_link: /docs/concepts/overview/working-with-objects/namespaces +short_description: > + An abstraction used by Kubernetes to support multiple virtual clusters on the same physical cluster. + +aka: +tags: +- fundamental +--- + An abstraction used by Kubernetes to support multiple virtual clusters on the same physical {{< glossary_tooltip text="cluster" term_id="cluster" >}}. + + + +Namespaces are used to organize objects in a cluster and provide a way to divide cluster resources. Names of resources need to be unique within a namespace, but not across namespaces. + diff --git a/content/en/docs/reference/glossary/network-policy.md b/content/en/docs/reference/glossary/network-policy.md new file mode 100755 index 0000000000000..8fb33b666ab97 --- /dev/null +++ b/content/en/docs/reference/glossary/network-policy.md @@ -0,0 +1,20 @@ +--- +title: Network Policy +id: network-policy +date: 2018-04-12 +full_link: /docs/concepts/services-networking/network-policies/ +short_description: > + A specification of how groups of Pods are allowed to communicate with each other and with other network endpoints. + +aka: +tags: +- networking +- architecture +- extension +--- + A specification of how groups of Pods are allowed to communicate with each other and with other network endpoints. + + + +Network Policies help you declaratively configure which Pods are allowed to connect to each other, which namespaces are allowed to communicate, and more specifically which port numbers to enforce each policy on. `NetworkPolicy` resources use labels to select Pods and define rules which specify what traffic is allowed to the selected Pods. Network Policies are implemented by a supported network plugin provided by a network provider. Be aware that creating a network resource without a controller to implement it will have no effect. + diff --git a/content/en/docs/reference/glossary/node.md b/content/en/docs/reference/glossary/node.md new file mode 100755 index 0000000000000..e87914fa319f0 --- /dev/null +++ b/content/en/docs/reference/glossary/node.md @@ -0,0 +1,18 @@ +--- +title: Node +id: node +date: 2018-04-12 +full_link: /docs/concepts/architecture/nodes/ +short_description: > + A node is a worker machine in Kubernetes. + +aka: +tags: +- fundamental +--- + A node is a worker machine in Kubernetes. + + + +A worker machine may be a VM or physical machine, depending on the cluster. It has the {{< glossary_tooltip text="Services" term_id="service" >}} necessary to run {{< glossary_tooltip text="Pods" term_id="pod" >}} and is managed by the master components. The {{< glossary_tooltip text="Services" term_id="service" >}} on a node include Docker, kubelet and kube-proxy. + diff --git a/content/en/docs/reference/glossary/persistent-volume-claim.md b/content/en/docs/reference/glossary/persistent-volume-claim.md new file mode 100755 index 0000000000000..dc6314d8873d9 --- /dev/null +++ b/content/en/docs/reference/glossary/persistent-volume-claim.md @@ -0,0 +1,19 @@ +--- +title: Persistent Volume Claim +id: persistent-volume-claim +date: 2018-04-12 +full_link: /docs/concepts/storage/persistent-volumes/ +short_description: > + Claims storage resources defined in a PersistentVolume so that it can be mounted as a volume in a container. + +aka: +tags: +- core-object +- storage +--- + Claims storage resources defined in a PersistentVolume so that it can be mounted as a volume in a container. + + + +Specifies the amount of storage, how the storage will be accessed (read-only, read-write and/or exclusive) and how it is reclaimed (retained, recycled or deleted). Details of the storage itself are in the PersistentVolume specification. + diff --git a/content/en/docs/reference/glossary/persistent-volume.md b/content/en/docs/reference/glossary/persistent-volume.md new file mode 100755 index 0000000000000..fe0f676fd4e29 --- /dev/null +++ b/content/en/docs/reference/glossary/persistent-volume.md @@ -0,0 +1,21 @@ +--- +title: Persistent Volume +id: persistent-volume +date: 2018-04-12 +full_link: /docs/concepts/storage/persistent-volumes/ +short_description: > + An API object that represents a piece of storage in the cluster. Available as a general, pluggable resource that persists beyond the lifecycle of any individual Pod. + +aka: +tags: +- core-object +- storage +--- + An API object that represents a piece of storage in the cluster. Available as a general, pluggable resource that persists beyond the lifecycle of any individual {{< glossary_tooltip text="Pod" term_id="pod" >}}. + + + +PersistentVolumes (PVs) provide an API that abstracts details of how storage is provided from how it is consumed. +PVs are used directly in scenarios where storage can be created ahead of time (static provisioning). +For scenarios that require on-demand storage (dynamic provisioning), PersistentVolumeClaims (PVCs) are used instead. + diff --git a/content/en/docs/reference/glossary/platform-developer.md b/content/en/docs/reference/glossary/platform-developer.md new file mode 100755 index 0000000000000..ed9a5fa1b7118 --- /dev/null +++ b/content/en/docs/reference/glossary/platform-developer.md @@ -0,0 +1,18 @@ +--- +title: Platform Developer +id: platform-developer +date: 2018-04-12 +full_link: +short_description: > + A person who customizes the Kubernetes platform to fit the needs of their project. + +aka: +tags: +- user-type +--- + A person who customizes the Kubernetes platform to fit the needs of their project. + + + +A platform developer may, for example, use [Custom Resources](/docs/concepts/api-extension/custom-resources/) or [Extend the Kubernetes API with the aggregation layer](/docs/concepts/api-extension/apiserver-aggregation/) to add functionality to their instance of Kubernetes, specifically for their application. Some Platform Developers are also {{< glossary_tooltip text="contributors" term_id="contributor" >}} and develop extensions which are contributed to the Kubernetes community. Others develop closed-source commercial or site-specific extensions. + diff --git a/content/en/docs/reference/glossary/pod-security-policy.md b/content/en/docs/reference/glossary/pod-security-policy.md new file mode 100755 index 0000000000000..52c4433b481eb --- /dev/null +++ b/content/en/docs/reference/glossary/pod-security-policy.md @@ -0,0 +1,19 @@ +--- +title: Pod Security Policy +id: pod-security-policy +date: 2018-04-12 +full_link: /docs/concepts/policy/pod-security-policy/ +short_description: > + Enables fine-grained authorization of pod creation and updates. + +aka: +tags: +- core-object +- fundamental +--- + Enables fine-grained authorization of {{< glossary_tooltip term_id="pod" >}} creation and updates. + + + +A cluster-level resource that controls security sensitive aspects of the Pod specification. The `PodSecurityPolicy` objects define a set of conditions that a Pod must run with in order to be accepted into the system, as well as defaults for the related fields. Pod Security Policy control is implemented as an optional admission controller. + diff --git a/content/en/docs/reference/glossary/pod.md b/content/en/docs/reference/glossary/pod.md new file mode 100755 index 0000000000000..fcd62f44239b2 --- /dev/null +++ b/content/en/docs/reference/glossary/pod.md @@ -0,0 +1,19 @@ +--- +title: Pod +id: pod +date: 2018-04-12 +full_link: /docs/concepts/workloads/pods/pod-overview/ +short_description: > + The smallest and simplest Kubernetes object. A Pod represents a set of running containers on your cluster. + +aka: +tags: +- core-object +- fundamental +--- + The smallest and simplest Kubernetes object. A Pod represents a set of running {{< glossary_tooltip text="containers" term_id="container" >}} on your cluster. + + + +A Pod is typically set up to run a single primary container. It can also run optional sidecar containers that add supplementary features like logging. Pods are commonly managed by a {{< glossary_tooltip term_id="deployment" >}}. + diff --git a/content/en/docs/reference/glossary/podpreset.md b/content/en/docs/reference/glossary/podpreset.md new file mode 100755 index 0000000000000..c60f03cd9571c --- /dev/null +++ b/content/en/docs/reference/glossary/podpreset.md @@ -0,0 +1,18 @@ +--- +title: PodPreset +id: podpreset +date: 2018-04-12 +full_link: +short_description: > + An API object that injects information such as secrets, volume mounts, and environment variables into pods at creation time. + +aka: +tags: +- operation +--- + An API object that injects information such as secrets, volume mounts, and environment variables into pods at creation time. + + + +This object chooses the pods to inject information into using standard selectors. This allows the podspec definitions to be nonspecific, decoupling the podspec from environment specific configuration. + diff --git a/content/en/docs/reference/glossary/rbac.md b/content/en/docs/reference/glossary/rbac.md new file mode 100755 index 0000000000000..862a5ead0a597 --- /dev/null +++ b/content/en/docs/reference/glossary/rbac.md @@ -0,0 +1,19 @@ +--- +title: RBAC (Role-Based Access Control) +id: rbac +date: 2018-04-12 +full_link: /docs/admin/authorization/rbac/ +short_description: > + Manages authorization decisions, allowing admins to dynamically configure access policies through the Kubernetes API. + +aka: +tags: +- security +- fundamental +--- + Manages authorization decisions, allowing admins to dynamically configure access policies through the {{< glossary_tooltip text="Kubernetes API" term_id="kubernetes-api" >}}. + + + +RBAC utilizes *roles*, which contain permission rules, and *role bindings*, which grant the permissions defined in a role to a set of users. + diff --git a/content/en/docs/reference/glossary/replica-set.md b/content/en/docs/reference/glossary/replica-set.md new file mode 100755 index 0000000000000..0d53c9f31bb50 --- /dev/null +++ b/content/en/docs/reference/glossary/replica-set.md @@ -0,0 +1,20 @@ +--- +title: ReplicaSet +id: replica-set +date: 2018-04-12 +full_link: https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/ +short_description: > + ReplicaSet is the next-generation Replication Controller. + +aka: +tags: +- fundamental +- core-object +- workload +--- + ReplicaSet is the next-generation Replication Controller. + + + +ReplicaSet, like ReplicationController, ensures that a specified number of pods replicas are running at one time. ReplicaSet supports the new set-based selector requirements as described in the labels user guide, whereas a Replication Controller only supports equality-based selector requirements. + diff --git a/content/en/docs/reference/glossary/replication-controller.md b/content/en/docs/reference/glossary/replication-controller.md new file mode 100755 index 0000000000000..b564c29691e47 --- /dev/null +++ b/content/en/docs/reference/glossary/replication-controller.md @@ -0,0 +1,19 @@ +--- +title: Replication Controller +id: replication-controller +date: 2018-04-12 +full_link: +short_description: > + Kubernetes service that ensures a specific number of instances of a pod are always running. + +aka: +tags: +- workload +- core-object +--- + Kubernetes service that ensures a specific number of instances of a pod are always running. + + + +Will automatically add or remove running instances of a pod, based on a set value for that pod. Allows the pod to return to the defined number of instances if pods are deleted or if too many are started by mistake. + diff --git a/content/en/docs/reference/glossary/resource-quota.md b/content/en/docs/reference/glossary/resource-quota.md new file mode 100755 index 0000000000000..206791aa1cf10 --- /dev/null +++ b/content/en/docs/reference/glossary/resource-quota.md @@ -0,0 +1,20 @@ +--- +title: Resource Quotas +id: resource-quota +date: 2018-04-12 +full_link: /docs/concepts/policy/resource-quotas/ +short_description: > + Provides constraints that limit aggregate resource consumption per namespace. + +aka: +tags: +- fundamental +- operation +- architecture +--- + Provides constraints that limit aggregate resource consumption per {{< glossary_tooltip term_id="namespace" >}}. + + + +Limits the quantity of objects that can be created in a namespace by type, as well as the total amount of compute resources that may be consumed by resources in that project. + diff --git a/content/en/docs/reference/glossary/reviewer.md b/content/en/docs/reference/glossary/reviewer.md new file mode 100755 index 0000000000000..883bb7cb53711 --- /dev/null +++ b/content/en/docs/reference/glossary/reviewer.md @@ -0,0 +1,18 @@ +--- +title: Reviewer +id: reviewer +date: 2018-04-12 +full_link: +short_description: > + A person who reviews code for quality and correctness on some part of the project. + +aka: +tags: +- community +--- + A person who reviews code for quality and correctness on some part of the project. + + + +Reviewers are knowledgeable about both the codebase and software engineering principles. Reviewer status is scoped to a part of the codebase. + diff --git a/content/en/docs/reference/glossary/secret.md b/content/en/docs/reference/glossary/secret.md new file mode 100755 index 0000000000000..e1290f8d7ebba --- /dev/null +++ b/content/en/docs/reference/glossary/secret.md @@ -0,0 +1,19 @@ +--- +title: Secret +id: secret +date: 2018-04-12 +full_link: /docs/concepts/configuration/secret/ +short_description: > + Stores sensitive information, such as passwords, OAuth tokens, and ssh keys. + +aka: +tags: +- core-object +- security +--- + Stores sensitive information, such as passwords, OAuth tokens, and ssh keys. + + + +Allows for more control over how sensitive information is used and reduces the risk of accidental exposure, including [encryption](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#ensure-all-secrets-are-encrypted) at rest. A {{< glossary_tooltip text="Pod" term_id="pod" >}} references the secret as a file in a volume mount or by the kubelet pulling images for a pod. Secrets are great for confidential data and [ConfigMaps](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/) for non-confidential data. + diff --git a/content/en/docs/reference/glossary/security-context.md b/content/en/docs/reference/glossary/security-context.md new file mode 100755 index 0000000000000..7bdf99534ae0d --- /dev/null +++ b/content/en/docs/reference/glossary/security-context.md @@ -0,0 +1,18 @@ +--- +title: Security Context +id: security-context +date: 2018-04-12 +full_link: /docs/tasks/configure-pod-container/security-context/ +short_description: > + The securityContext field defines privilege and access control settings for a Pod or Container, including the runtime UID and GID. + +aka: +tags: +- security +--- + The securityContext field defines privilege and access control settings for a Pod or Container, including the runtime UID and GID. + + + +The securityContext field in a {{< glossary_tooltip term_id="pod" >}} (applying to all containers) or container is used to set the user (runAsUser) and group (fsGroup), capabilities, privilege settings, and security policies (SELinux/AppArmor/Seccomp) that container processes use. + diff --git a/content/en/docs/reference/glossary/selector.md b/content/en/docs/reference/glossary/selector.md new file mode 100755 index 0000000000000..9b8a0202524e6 --- /dev/null +++ b/content/en/docs/reference/glossary/selector.md @@ -0,0 +1,18 @@ +--- +title: Selector +id: selector +date: 2018-04-12 +full_link: /docs/concepts/overview/working-with-objects/labels/ +short_description: > + Allows users to filter a list of resources based on labels. + +aka: +tags: +- fundamental +--- + Allows users to filter a list of resources based on labels. + + + +Selectors are applied when querying lists of resources to filter them by {{< glossary_tooltip text="Labels" term_id="label" >}}. + diff --git a/content/en/docs/reference/glossary/service-account.md b/content/en/docs/reference/glossary/service-account.md new file mode 100755 index 0000000000000..f5d6854ad076b --- /dev/null +++ b/content/en/docs/reference/glossary/service-account.md @@ -0,0 +1,19 @@ +--- +title: Service Account +id: service-account +date: 2018-04-12 +full_link: /docs/tasks/configure-pod-container/configure-service-account/ +short_description: > + Provides an identity for processes that run in a Pod. + +aka: +tags: +- fundamental +- core-object +--- + Provides an identity for processes that run in a {{< glossary_tooltip text="Pod" term_id="pod" >}}. + + + +When processes inside Pods access the cluster, they are authenticated by the API server as a particular service account, for example, `default`. When you create a Pod, if you do not specify a service account, it is automatically assigned the default service account in the same namespace {{< glossary_tooltip text="Namespace" term_id="namespace" >}}. + diff --git a/content/en/docs/reference/glossary/service-broker.md b/content/en/docs/reference/glossary/service-broker.md new file mode 100755 index 0000000000000..84fc8367a13b4 --- /dev/null +++ b/content/en/docs/reference/glossary/service-broker.md @@ -0,0 +1,17 @@ +--- +title: Service Broker +id: service-broker +date: 2018-04-12 +full_link: +short_description: > + An endpoint for a set of Managed Services offered and maintained by a third-party. + +aka: +tags: +- extension +--- + An endpoint for a set of {{< glossary_tooltip text="Managed Services" term_id="managed-service" >}} offered and maintained by a third-party. + + + +{{< glossary_tooltip text="Service Brokers" term_id="service-broker" >}} implement the [Open Service Broker API spec](https://github.com/openservicebrokerapi/servicebroker/blob/v2.13/spec.md) and provide a standard interface for applications to use their Managed Services. [Service Catalog](/docs/concepts/service-catalog/) provides a way to list, provision, and bind with Managed Services offered by Service Brokers. diff --git a/content/en/docs/reference/glossary/service-catalog.md b/content/en/docs/reference/glossary/service-catalog.md new file mode 100755 index 0000000000000..3404543d18500 --- /dev/null +++ b/content/en/docs/reference/glossary/service-catalog.md @@ -0,0 +1,18 @@ +--- +title: Service Catalog +id: service-catalog +date: 2018-04-12 +full_link: +short_description: > + An extension API that enables applications running in Kubernetes clusters to easily use external managed software offerings, such as a datastore service offered by a cloud provider. + +aka: +tags: +- extension +--- + An extension API that enables applications running in Kubernetes clusters to easily use external managed software offerings, such as a datastore service offered by a cloud provider. + + + +It provides a way to list, provision, and bind with external {{< glossary_tooltip text="Managed Services" term_id="managed-service" >}} from {{< glossary_tooltip text="Service Brokers" term_id="service-broker" >}} without needing detailed knowledge about how those services are created or managed. + diff --git a/content/en/docs/reference/glossary/service.md b/content/en/docs/reference/glossary/service.md new file mode 100755 index 0000000000000..75bb48e4eb8a1 --- /dev/null +++ b/content/en/docs/reference/glossary/service.md @@ -0,0 +1,19 @@ +--- +title: Service +id: service +date: 2018-04-12 +full_link: /docs/concepts/services-networking/service/ +short_description: > + An API object that describes how to access applications, such as a set of Pods, and can describe ports and load-balancers. + +aka: +tags: +- fundamental +- core-object +--- + An API object that describes how to access applications, such as a set of {{< glossary_tooltip text="Pods" term_id="pod" >}}, and can describe ports and load-balancers. + + + +The access point can be internal or external to the cluster. + diff --git a/content/en/docs/reference/glossary/sig.md b/content/en/docs/reference/glossary/sig.md new file mode 100755 index 0000000000000..b0a6af0acbd0a --- /dev/null +++ b/content/en/docs/reference/glossary/sig.md @@ -0,0 +1,21 @@ +--- +title: SIG (special interest group) +id: sig +date: 2018-04-12 +full_link: https://github.com/kubernetes/community/blob/master/sig-list.md#master-sig-list +short_description: > + Community members who collectively manage an ongoing piece or aspect of the larger Kubernetes open source project. + +aka: +tags: +- community +--- + {{< glossary_tooltip text="Community members" term_id="member" >}} who collectively manage an ongoing piece or aspect of the larger Kubernetes open source project. + + + +Members within a SIG have a shared interest in advancing a specific area, such as architecture, API machinery, or documentation. +SIGs must follow the [SIG Governance](https://github.com/kubernetes/community/blob/master/sig-governance.md) guidelines but can have their own contribution policy and channels of communication. + +For more information, see the [kubernetes/community](https://github.com/kubernetes/community) repo and the current list of [SIGs and Working Groups](https://github.com/kubernetes/community/blob/master/sig-list.md). + diff --git a/content/en/docs/reference/glossary/statefulset.md b/content/en/docs/reference/glossary/statefulset.md new file mode 100755 index 0000000000000..59b3bf7be5645 --- /dev/null +++ b/content/en/docs/reference/glossary/statefulset.md @@ -0,0 +1,23 @@ +--- +title: StatefulSet +id: statefulset +date: 2018-04-12 +full_link: /docs/concepts/workloads/controllers/statefulset/ +short_description: > + Manages the deployment and scaling of a set of Pods, *and provides guarantees about the ordering and uniqueness* of these Pods. + +aka: +tags: +- fundamental +- core-object +- workload +- storage +--- + Manages the deployment and scaling of a set of {{< glossary_tooltip text="Pods" term_id="pod" >}}, *and provides guarantees about the ordering and uniqueness* of these Pods. + + + +Like a {{< glossary_tooltip term_id="deployment" >}}, a StatefulSet manages Pods that are based on an identical container spec. Unlike a Deployment, a StatefulSet maintains a sticky identity for each of their Pods. These pods are created from the same spec, but are not interchangeable: each has a persistent identifier that it maintains across any rescheduling. + +A StatefulSet operates under the same pattern as any other Controller. You define your desired state in a StatefulSet *object*, and the StatefulSet *controller* makes any necessary updates to get there from the current state. + diff --git a/content/en/docs/reference/glossary/storage-class.md b/content/en/docs/reference/glossary/storage-class.md new file mode 100755 index 0000000000000..5663a8005969e --- /dev/null +++ b/content/en/docs/reference/glossary/storage-class.md @@ -0,0 +1,19 @@ +--- +title: Storage Class +id: storageclass +date: 2018-04-12 +full_link: /docs/concepts/storage/storage-classes +short_description: > + A StorageClass provides a way for administrators to describe different available storage types. + +aka: +tags: +- core-object +- storage +--- + A StorageClass provides a way for administrators to describe different available storage types. + + + +StorageClasses can map to quality-of-service levels, backup policies, or to arbitrary policies determined by cluster administrators. Each StorageClass contains the fields `provisioner`, `parameters`, and `reclaimPolicy`, which are used when a {{< glossary_tooltip text="Persistent Volume" term_id="persistent-volume" >}} belonging to the class needs to be dynamically provisioned. Users can request a particular class using the name of a StorageClass object. + diff --git a/content/en/docs/reference/glossary/uid.md b/content/en/docs/reference/glossary/uid.md new file mode 100755 index 0000000000000..2465cd09caba3 --- /dev/null +++ b/content/en/docs/reference/glossary/uid.md @@ -0,0 +1,18 @@ +--- +title: UID +id: uid +date: 2018-04-12 +full_link: /docs/concepts/overview/working-with-objects/names +short_description: > + A Kubernetes systems-generated string to uniquely identify objects. + +aka: +tags: +- fundamental +--- + A Kubernetes systems-generated string to uniquely identify objects. + + + +Every object created over the whole lifetime of a Kubernetes cluster has a distinct UID. It is intended to distinguish between historical occurrences of similar entities. + diff --git a/content/en/docs/reference/glossary/upstream.md b/content/en/docs/reference/glossary/upstream.md new file mode 100755 index 0000000000000..860e002bfe2d8 --- /dev/null +++ b/content/en/docs/reference/glossary/upstream.md @@ -0,0 +1,19 @@ +--- +title: Upstream (disambiguation) +id: upstream +date: 2018-04-12 +full_link: +short_description: > + May refer to: core Kubernetes or the source repo from which a repo was forked. + +aka: +tags: +- community +--- + May refer to: core Kubernetes or the source repo from which a repo was forked. + + + +* In the **Kubernetes Community**: Conversations often use *upstream* to mean the core Kubernetes codebase, which the general ecosystem, other code, or third-party tools relies upon. For example, [community members](#term-member) may suggest that a feature is moved upstream so that it is in the core codebase instead of in a plugin or third-party tool. +* In **GitHub** or **git**: The convention is to refer to a source repo as *upstream*, whereas the forked repo is considered *downstream*. + diff --git a/content/en/docs/reference/glossary/volume-plugin.md b/content/en/docs/reference/glossary/volume-plugin.md new file mode 100755 index 0000000000000..8fc1c7be52f89 --- /dev/null +++ b/content/en/docs/reference/glossary/volume-plugin.md @@ -0,0 +1,19 @@ +--- +title: Volume Plugin +id: volumeplugin +date: 2018-04-12 +full_link: +short_description: > + A Volume Plugin enables integration of storage within a Pod. + +aka: +tags: +- core-object +- storage +--- + A Volume Plugin enables integration of storage within a {{< glossary_tooltip text="Pod" term_id="pod" >}}. + + + +A Volume Plugin lets you attach and mount storage volumes for use by a {{< glossary_tooltip text="Pod" term_id="pod" >}}. Volume plugins can be _in tree_ or _out of tree_. _In tree_ plugins are part of the Kubernetes code repository and follow its release cycle. _Out of tree_ plugins are developed independently. + diff --git a/content/en/docs/reference/glossary/volume.md b/content/en/docs/reference/glossary/volume.md new file mode 100755 index 0000000000000..f162ce0010c0e --- /dev/null +++ b/content/en/docs/reference/glossary/volume.md @@ -0,0 +1,19 @@ +--- +title: Volume +id: volume +date: 2018-04-12 +full_link: /docs/concepts/storage/volumes/ +short_description: > + A directory containing data, accessible to the containers in a pod. + +aka: +tags: +- core-object +- fundamental +--- + A directory containing data, accessible to the containers in a {{< glossary_tooltip text="pod" term_id="pod" >}}. + + + +A Kubernetes volume lives as long as the {{< glossary_tooltip text="pod" term_id="pod" >}} that encloses it. Consequently, a volume outlives any {{< glossary_tooltip text="containers" term_id="container" >}} that run within the {{< glossary_tooltip text="pod" term_id="pod" >}}, and data is preserved across {{< glossary_tooltip text="container" term_id="container" >}} restarts. + diff --git a/content/en/docs/reference/glossary/wg.md b/content/en/docs/reference/glossary/wg.md new file mode 100755 index 0000000000000..2a3b8786f63b5 --- /dev/null +++ b/content/en/docs/reference/glossary/wg.md @@ -0,0 +1,20 @@ +--- +title: WG (working group) +id: wg +date: 2018-04-12 +full_link: https://github.com/kubernetes/community/blob/master/sig-list.md#master-working-group-list +short_description: > + Facilitates the discussion and/or implementation of a short-lived, narrow, or decoupled project for a committee, SIG, or cross-SIG effort. + +aka: +tags: +- community +--- + Facilitates the discussion and/or implementation of a short-lived, narrow, or decoupled project for a committee, {{< glossary_tooltip text="SIG" term_id="sig" >}}, or cross-SIG effort. + + + +Working groups are a way of organizing people to accomplish a discrete task, and are relatively easy to create and deprecate when inactive. + +For more information, see the [kubernetes/community](https://github.com/kubernetes/community) repo and the current list of [SIGs and working groups](https://github.com/kubernetes/community/blob/master/sig-list.md). + diff --git a/content/en/docs/reference/kubectl/_index.md b/content/en/docs/reference/kubectl/_index.md new file mode 100755 index 0000000000000..7b6c2d720b12a --- /dev/null +++ b/content/en/docs/reference/kubectl/_index.md @@ -0,0 +1,5 @@ +--- +title: "kubectl CLI" +weight: 60 +--- + diff --git a/docs/reference/kubectl/cheatsheet.md b/content/en/docs/reference/kubectl/cheatsheet.md similarity index 100% rename from docs/reference/kubectl/cheatsheet.md rename to content/en/docs/reference/kubectl/cheatsheet.md diff --git a/docs/reference/kubectl/conventions.md b/content/en/docs/reference/kubectl/conventions.md similarity index 99% rename from docs/reference/kubectl/conventions.md rename to content/en/docs/reference/kubectl/conventions.md index a2ff5772fa31f..191fd079776c9 100644 --- a/docs/reference/kubectl/conventions.md +++ b/content/en/docs/reference/kubectl/conventions.md @@ -5,8 +5,7 @@ approvers: title: kubectl Usage Conventions --- -* TOC -{:toc} +{{< toc >}} ## Using `kubectl` in Reusable Scripts diff --git a/docs/reference/kubectl/docker-cli-to-kubectl.md b/content/en/docs/reference/kubectl/docker-cli-to-kubectl.md similarity index 99% rename from docs/reference/kubectl/docker-cli-to-kubectl.md rename to content/en/docs/reference/kubectl/docker-cli-to-kubectl.md index 541f35e24f798..77dfa8981c65c 100644 --- a/docs/reference/kubectl/docker-cli-to-kubectl.md +++ b/content/en/docs/reference/kubectl/docker-cli-to-kubectl.md @@ -8,8 +8,7 @@ title: kubectl for Docker Users You can use the Kubernetes command line tool kubectl to interact with the api. You can use kubectl if you are familiar with docker-cli. However, there are a few differences in the docker-cli commands and the kubectl commands. Each of the following section details a docker subcommand and explains the kubectl equivalent. -* TOC -{:toc} +{{< toc >}} #### docker run @@ -34,8 +33,9 @@ $ kubectl run --image=nginx nginx-app --port=80 --env="DOMAIN=cluster" deployment "nginx-app" created ``` +{{< note >}} **Note:** `kubectl` commands print the type and name of the resource created or mutated, which can then be used in subsequent commands. You can expose a new Service after a Deployment is created. -{: .note} +{{< /note >}} ```shell # expose a port through with a service @@ -219,8 +219,9 @@ $ kubectl get po -l run=nginx-app # Return nothing ``` +{{< note >}} **Note:** When you use kubectl, you don't delete the pod directly.You have to fiirst delete the Deployment that owns the pod. If you delete the pod directly, the Deployment recreates the pod. -{: .note} +{{< /note >}} #### docker login diff --git a/docs/reference/kubectl/jsonpath.md b/content/en/docs/reference/kubectl/jsonpath.md similarity index 100% rename from docs/reference/kubectl/jsonpath.md rename to content/en/docs/reference/kubectl/jsonpath.md diff --git a/docs/reference/kubectl/overview.md b/content/en/docs/reference/kubectl/overview.md similarity index 99% rename from docs/reference/kubectl/overview.md rename to content/en/docs/reference/kubectl/overview.md index bfeba024552ad..5680be59a2fc8 100644 --- a/docs/reference/kubectl/overview.md +++ b/content/en/docs/reference/kubectl/overview.md @@ -287,6 +287,7 @@ $ kubectl describe pods $ kubectl describe pods --include-uninitialized=false ``` +{{< note >}} **Note:** The `kubectl get` command is usually used for retrieving one or more resources of the same resource type. It features a rich set of flags that allows you to customize the output format using the `-o` or `--output` flag, for example. @@ -296,7 +297,7 @@ related aspects of a specified resource. It may invoke several API calls to the API server to build a view for the user. For example, the `kubectl describe node` command retrieves not only the information about the node, but also a summary of the pods running on it, the events generated for the node etc. -{: .note} +{{< /note >}} `kubectl delete` - Delete resources either from a file, stdin, or specifying label selectors, names, resource selectors, or resources. diff --git a/docs/reference/labels-annotations-taints.md b/content/en/docs/reference/labels-annotations-taints.md similarity index 100% rename from docs/reference/labels-annotations-taints.md rename to content/en/docs/reference/labels-annotations-taints.md diff --git a/docs/reference/security.md b/content/en/docs/reference/security.md similarity index 98% rename from docs/reference/security.md rename to content/en/docs/reference/security.md index 76e3919083984..d208e6a8e3630 100644 --- a/docs/reference/security.md +++ b/content/en/docs/reference/security.md @@ -1,7 +1,7 @@ --- -layout: docwithnav + title: Kubernetes Security and Disclosure Information -permalink: /security/ +aliases: [/security/] approvers: - eparis - erictune diff --git a/content/en/docs/reference/setup-tools/kubeadm/_index.md b/content/en/docs/reference/setup-tools/kubeadm/_index.md new file mode 100755 index 0000000000000..21331379e622c --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/_index.md @@ -0,0 +1,5 @@ +--- +title: "Kubeadm" +weight: 10 +--- + diff --git a/docs/reference/generated/README.md b/content/en/docs/reference/setup-tools/kubeadm/generated/README.md similarity index 100% rename from docs/reference/generated/README.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/README.md diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/_index.md b/content/en/docs/reference/setup-tools/kubeadm/generated/_index.md new file mode 100644 index 0000000000000..7ebf753ae9d46 --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/generated/_index.md @@ -0,0 +1,6 @@ +--- +title: "Kubeadm Generated" +weight: 10 +toc_hide: true +--- + diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_all.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_all.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_all.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-dns.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-dns.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-dns.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-dns.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-proxy.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-proxy.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-proxy.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_addon_kube-proxy.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_all.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_all.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_all.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_cluster-info.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_cluster-info.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_cluster-info.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_cluster-info.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_create.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_create.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_create.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_create.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-auto-approve.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-auto-approve.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-auto-approve.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-auto-approve.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-post-csrs.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-post-csrs.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-post-csrs.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_bootstrap-token_node_allow-post-csrs.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_all.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_all.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_all.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-etcd-client.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-etcd-client.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-etcd-client.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-etcd-client.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-kubelet-client.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-kubelet-client.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-kubelet-client.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver-kubelet-client.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_apiserver.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_ca.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_ca.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_ca.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_ca.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-ca.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-ca.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-ca.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-ca.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-healthcheck-client.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-healthcheck-client.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-healthcheck-client.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-healthcheck-client.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-peer.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-peer.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-peer.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-peer.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-server.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-server.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-server.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_etcd-server.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-ca.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-ca.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-ca.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-ca.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-client.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-client.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-client.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_front-proxy-client.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_sa.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_sa.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_sa.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_certs_sa.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_all.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_all.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_all.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_apiserver.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_apiserver.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_apiserver.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_apiserver.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_controller-manager.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_controller-manager.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_controller-manager.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_controller-manager.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_scheduler.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_scheduler.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_scheduler.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_controlplane_scheduler.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd_local.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd_local.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd_local.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_etcd_local.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_admin.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_admin.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_admin.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_admin.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_all.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_all.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_all.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_controller-manager.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_controller-manager.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_controller-manager.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_controller-manager.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_kubelet.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_kubelet.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_kubelet.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_kubelet.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_scheduler.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_scheduler.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_scheduler.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_scheduler.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_user.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_user.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_user.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_kubeconfig_user.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_mark-master.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_mark-master.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_mark-master.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_mark-master.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_master.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_master.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_master.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_master.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_node.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_node.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_node.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_preflight_node.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting_convert-from-staticpods.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting_convert-from-staticpods.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting_convert-from-staticpods.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_selfhosting_convert-from-staticpods.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_upload-config.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_upload-config.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_upload-config.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha_phase_upload-config.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_completion.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_completion.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_completion.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_completion.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_config.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_config.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-file.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-file.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-file.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-file.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-flags.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-flags.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-flags.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_upload_from-flags.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_view.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_view.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_config_view.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_view.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_join.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_join.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_generate.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_generate.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_token_generate.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_generate.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_list.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_list.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_token_list.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_list.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md diff --git a/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md rename to content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md diff --git a/docs/reference/setup-tools/kubeadm/implementation-details.md b/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md similarity index 99% rename from docs/reference/setup-tools/kubeadm/implementation-details.md rename to content/en/docs/reference/setup-tools/kubeadm/implementation-details.md index 67c188ff9c20d..ca75bfe93fb8a 100644 --- a/docs/reference/setup-tools/kubeadm/implementation-details.md +++ b/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md @@ -4,15 +4,16 @@ approvers: - luxas - jbeda title: Implementation details +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} `kubeadm init` and `kubeadm join` together provides a nice user experience for creating a best-practice but bare Kubernetes cluster from scratch. However, it might not be obvious _how_ kubeadm does that. This document provide additional details on what happen under the hood, with the aim of sharing knowledge on Kubernetes cluster best practices. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Core design principles The cluster that `kubeadm init` and `kubeadm join` set up should be: @@ -576,6 +577,6 @@ Please note that: 1. To make dynamic kubelet configuration work, flag `--dynamic-config-dir=/var/lib/kubelet/config/dynamic` should be specified in `/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-alpha.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-alpha.md new file mode 100644 index 0000000000000..6574d37d39ee6 --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-alpha.md @@ -0,0 +1,154 @@ +--- +approvers: +- mikedanese +- luxas +- jbeda +title: kubeadm alpha +--- +{{< caution >}} +`kubeadm alpha` provides a preview of a set of features made available for gathering feedback + from the community. Please try it out and give us feedback! +{{< /caution >}} + +In v1.8.0, kubeadm introduced the `kubeadm alpha phase` command with the aim of making kubeadm more modular. This modularity enables you to invoke atomic sub-steps of the bootstrap process; you can let kubeadm do some parts and fill in yourself where you need customizations. + +`kubeadm alpha phase` is consistent with [kubeadm init workflow](kubeadm-init.md#init-workflow), +and behind the scene both use the same code. + +* [kubeadm alpha phase preflight](#cmd-phase-preflight) +* [kubeadm alpha phase certs](#cmd-phase-certs) +* [kubeadm alpha phase kubeconfig](#cmd-phase-kubeconfig) +* [kubeadm alpha phase controlplane](#cmd-phase-controlplane) +* [kubeadm alpha phase etcd](#cmd-phase-etcd) +* [kubeadm alpha phase mark-master](#cmd-phase-mark-master) +* [kubeadm alpha phase bootstrap-token](#cmd-phase-bootstrap-token) +* [kubeadm alpha phase upload-config](#cmd-phase-upload-config) +* [kubeadm alpha phase addon](#cmd-phase-addon) +* [kubeadm alpha phase selfhosting](#cmd-phase-self-hosting) + +## kubeadm alpha phase preflight {#cmd-phase-preflight} + +You can execute preflight checks both for the master node, like in `kubeadm init`, or for the worker node +like in `kubeadm join`. + +{{< tabs name="tab-preflight" >}} +{{< tab name="master" include="generated/kubeadm_alpha_phase_preflight_master.md" />}} +{{< tab name="node" include="generated/kubeadm_alpha_phase_preflight_node.md" />}} +{{< /tabs >}} + + +## kubeadm alpha phase certs {#cmd-phase-certs} + +You can create all required certificates with the `all` subcommand or selectively create certificates. + +{{< tabs name="tab-certs" >}} +{{< tab name="all" include="generated/kubeadm_alpha_phase_certs_all.md" />}} +{{< tab name="ca" include="generated/kubeadm_alpha_phase_certs_ca.md" />}} +{{< tab name="apiserver" include="generated/kubeadm_alpha_phase_certs_apiserver.md" />}} +{{< tab name="apiserver-kubelet-client" include="generated/kubeadm_alpha_phase_certs_apiserver-kubelet-client.md" />}} +{{< tab name="sa" include="generated/kubeadm_alpha_phase_certs_sa.md" />}} +{{< tab name="front-proxy-ca" include="generated/kubeadm_alpha_phase_certs_front-proxy-ca.md" />}} +{{< tab name="front-proxy-client" include="generated/kubeadm_alpha_phase_certs_front-proxy-client.md" />}} +{{< /tabs >}} + + +## kubeadm alpha phase kubeconfig {#cmd-phase-kubeconfig} + +You can create all required kubeconfig files with the `all` subcommand, or selectively create the files. +Additionally, the `user` subcommand supports the creation of kubeconfig files for additional users. + +{{< tabs name="tab-kubeconfig" >}} +{{< tab name="all" include="generated/kubeadm_alpha_phase_kubeconfig_all.md" />}} +{{< tab name="admin" include="generated/kubeadm_alpha_phase_kubeconfig_admin.md" />}} +{{< tab name="kubelet" include="generated/kubeadm_alpha_phase_kubeconfig_kubelet.md" />}} +{{< tab name="controller-manager" include="generated/kubeadm_alpha_phase_kubeconfig_controller-manager.md" />}} +{{< tab name="scheduler" include="generated/kubeadm_alpha_phase_kubeconfig_scheduler.md" />}} +{{< tab name="user" include="generated/kubeadm_alpha_phase_kubeconfig_user.md" />}} +{{< /tabs >}} + + +## kubeadm alpha phase controlplane {#cmd-phase-controlplane} + +You can create all required static Pod files for the control plane components with the `all` subcommand, +or selectively create the files. + +{{< tabs name="tab-controlplane" >}} +{{< tab name="all" include="generated/kubeadm_alpha_phase_controlplane_all.md" />}} +{{< tab name="apiserver" include="generated/kubeadm_alpha_phase_controlplane_apiserver.md" />}} +{{< tab name="controller-manager" include="generated/kubeadm_alpha_phase_controlplane_controller-manager.md" />}} +{{< tab name="scheduler" include="generated/kubeadm_alpha_phase_controlplane_scheduler.md" />}} +{{< /tabs >}} + + +## kubeadm alpha phase etcd {#cmd-phase-etcd} + +Use the following command to create a self-hosted, local etcd instance based on a static Pod file. + +{{< tabs name="tab-etcd" >}} +{{< tab name="etcd local" include="generated/kubeadm_alpha_phase_etcd_local.md" />}} +{{< /tabs >}} + + +## kubeadm alpha phase mark-master {#cmd-phase-mark-master} + +Use the following command to label and taint the node with the `node-role.kubernetes.io/master=""` key-value pair. + +{{< tabs name="tab-mark-master" >}} +{{< tab name="mark-master" include="generated/kubeadm_alpha_phase_mark-master.md" />}} +{{< /tabs >}} + + +## kubeadm alpha phase bootstrap-token {#cmd-phase-bootstrap-token} + +Use the following actions to fully configure bootstrap tokens. +You can fully configure bootstrap tokens with the `all` subcommand, +or selectively configure single elements. + +{{< tabs name="tab-bootstrap-token" >}} +{{< tab name="all" include="generated/kubeadm_alpha_phase_bootstrap-token_all.md" />}} +{{< tab name="create" include="generated/kubeadm_alpha_phase_bootstrap-token_create.md" />}} +{{< tab name="cluster-info" include="generated/kubeadm_alpha_phase_bootstrap-token_cluster-info.md " />}} +{{< tab name="node allow-auto-approve" include="generated/kubeadm_alpha_phase_bootstrap-token_node_allow-auto-approve.md" />}} +{{< tab name="node allow-post-csrs" include="generated/kubeadm_alpha_phase_bootstrap-token_node_allow-post-csrs.md" />}} +{{< /tabs >}} + + +## kubeadm alpha phase upload-config {#cmd-phase-upload-config} + +You can use this command to upload the kubeadm configuration to your cluster. +Alternatively, you can use [kubeadm config](kubeadm-config.md). + +{{< tabs name="upload-config" >}} +{{< tab name="mark-master" include="generated/kubeadm_alpha_phase_upload-config.md" />}} +{{< /tabs >}} + + +## kubeadm alpha phase addon {#cmd-phase-addon} + +You can install all the available addons with the `all` subcommand, or +install them selectively. + +Please note that if kubeadm is invoked with `--feature-gates=CoreDNS=true`, [CoreDNS](https://coredns.io/) is installed instead of `kube-dns`. + +{{< tabs name="tab-addon" >}} +{{< tab name="all" include="generated/kubeadm_alpha_phase_addon_all.md" />}} +{{< tab name="kube-proxy" include="generated/kubeadm_alpha_phase_addon_kube-proxy.md" />}} +{{< tab name="kube-dns" include="generated/kubeadm_alpha_phase_addon_kube-dns.md" />}} +{{< /tabs >}} + + +## kubeadm alpha phase self-hosting {#cmd-phase-self-hosting} + +{{< caution >}} +**Caution:** Self-hosting is an alpha feature. See [kubeadm init](kubeadm-init.md) documentation for self-hosting limitations. +{{< /caution >}} + +{{< tabs name="tab-self-hosting" >}} +{{< tab name="self-hosting" include="generated/kubeadm_alpha_phase_selfhosting_convert-from-staticpods.md" />}} +{{< /tabs >}} + + +## What's next +* [kubeadm init](kubeadm-init.md) to bootstrap a Kubernetes master node +* [kubeadm join](kubeadm-join.md) to connect a node to the cluster +* [kubeadm reset](kubeadm-reset.md) to revert any changes made to this host by `kubeadm init` or `kubeadm join` diff --git a/docs/reference/setup-tools/kubeadm/kubeadm-config.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-config.md similarity index 70% rename from docs/reference/setup-tools/kubeadm/kubeadm-config.md rename to content/en/docs/reference/setup-tools/kubeadm/kubeadm-config.md index 5a9ed78ebd8e6..d4907da75afed 100644 --- a/docs/reference/setup-tools/kubeadm/kubeadm-config.md +++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-config.md @@ -4,8 +4,9 @@ approvers: - luxas - jbeda title: kubeadm config +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} Beginning with v1.8.0, kubeadm uploads the configuration of your cluster to a ConfigMap called `kubeadm-config` in the `kube-system` namespace, and later reads the ConfigMap when upgrading. This enables correct configuration of system components, and provides a seamless user experience. @@ -14,21 +15,20 @@ You can execute `kubeadm config view` to view the ConfigMap. If you initialized kubeadm v1.7.x or lower, you must use `kubeadm config upload` to create the ConfigMap before you may use `kubeadm upgrade`. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## kubeadm config upload from-file {#cmd-config-from-file} -{% include_relative generated/kubeadm_config_upload_from-file.md %} +{{< include "generated/kubeadm_config_upload_from-file.md" >}} ## kubeadm config upload from-flags {#cmd-config-from-flags} -{% include_relative generated/kubeadm_config_upload_from-flags.md %} +{{< include "generated/kubeadm_config_upload_from-flags.md" >}} ## kubeadm config view {#cmd-config-view} -{% include_relative generated/kubeadm_config_view.md %} -{% endcapture %} +{{< include "generated/kubeadm_config_view.md" >}} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [kubeadm upgrade](kubeadm-upgrade.md) to upgrade a Kubernetes cluster to a newer version -{% endcapture %} +{{% /capture %}} -{% include templates/concept.md %} \ No newline at end of file diff --git a/docs/reference/setup-tools/kubeadm/kubeadm-init.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init.md old mode 100755 new mode 100644 similarity index 98% rename from docs/reference/setup-tools/kubeadm/kubeadm-init.md rename to content/en/docs/reference/setup-tools/kubeadm/kubeadm-init.md index 6bc2f595b73b6..a7077d5de2448 --- a/docs/reference/setup-tools/kubeadm/kubeadm-init.md +++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init.md @@ -4,12 +4,13 @@ approvers: - luxas - jbeda title: kubeadm init +content_template: templates/concept --- -{% capture overview %} -{% endcapture %} +{{% capture overview %}} +{{% /capture %}} -{% capture body %} -{% include_relative generated/kubeadm_init.md %} +{{% capture body %}} +{{< include "generated/kubeadm_init.md" >}} ### Init workflow {#init-workflow} `kubeadm init` bootstraps a Kubernetes master node by executing the @@ -85,9 +86,10 @@ following steps: ### Using kubeadm init with a configuration file {#config-file} +{{< caution >}} **Caution:** The config file is still considered alpha and may change in future versions. -{: .caution} +{{< /caution >}} It's possible to configure `kubeadm init` with a configuration file instead of command line flags, and some more advanced features may only be available as @@ -340,13 +342,15 @@ manager, and scheduler run as [DaemonSet pods](/docs/concepts/workloads/controll configured via the Kubernetes API instead of [static pods](/docs/tasks/administer-cluster/static-pod/) configured in the kubelet via static files. +{{< caution >}} **Caution:** Self-hosting is alpha, but is expected to become the default in a future version. To create a self-hosted cluster, pass the `--feature-gates=SelfHosting=true` flag to `kubeadm init`. -{: .caution} +{{< /caution >}} +{{< warning >}} **Warning:** see self-hosted caveats and limitations. -{: .warning} +{{< /warning >}} #### Caveats @@ -445,12 +449,12 @@ it does not allow the root CA hash to be validated with `--discovery-token-ca-cert-hash` (since it's not generated when the nodes are provisioned). For details, see the [kubeadm join](kubeadm-join.md). -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [kubeadm join](kubeadm-join.md) to bootstrap a Kubernetes worker node and join it to the cluster * [kubeadm upgrade](kubeadm-upgrade.md) to upgrade a Kubernetes cluster to a newer version * [kubeadm reset](kubeadm-reset.md) to revert any changes made to this host by `kubeadm init` or `kubeadm join` -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/reference/setup-tools/kubeadm/kubeadm-join.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-join.md old mode 100755 new mode 100644 similarity index 97% rename from docs/reference/setup-tools/kubeadm/kubeadm-join.md rename to content/en/docs/reference/setup-tools/kubeadm/kubeadm-join.md index 2b1eed19e83c0..aca7b1d0b10b8 --- a/docs/reference/setup-tools/kubeadm/kubeadm-join.md +++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-join.md @@ -4,12 +4,13 @@ approvers: - luxas - jbeda title: kubeadm join +content_template: templates/concept --- -{% capture overview %} -{% endcapture %} +{{% capture overview %}} +{{% /capture %}} -{% capture body %} -{% include_relative generated/kubeadm_join.md %} +{{% capture body %}} +{{< include "generated/kubeadm_join.md" >}} ### The joining workflow @@ -200,9 +201,10 @@ These commands should be run after `kubeadm init` but before `kubeadm join`. ### Using kubeadm join with a configuration file {#config-file} +{{< caution >}} **Caution:** The config file is still considered alpha and may change in future versions. -{: .caution} +{{< /caution >}} It's possible to configure `kubeadm join` with a configuration file instead of command line flags, and some more advanced features may only be available as @@ -225,12 +227,12 @@ discoveryTokenCACertHashes: - discoveryTokenUnsafeSkipCAVerification: ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [kubeadm init](kubeadm-init.md) to bootstrap a Kubernetes master node * [kubeadm token](kubeadm-token.md) to manage tokens for `kubeadm join` * [kubeadm reset](kubeadm-reset.md) to revert any changes made to this host by `kubeadm init` or `kubeadm join` -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/reference/setup-tools/kubeadm/kubeadm-reset.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-reset.md similarity index 73% rename from docs/reference/setup-tools/kubeadm/kubeadm-reset.md rename to content/en/docs/reference/setup-tools/kubeadm/kubeadm-reset.md index 1e9f2e862d46a..a617f61e916d2 100644 --- a/docs/reference/setup-tools/kubeadm/kubeadm-reset.md +++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-reset.md @@ -4,14 +4,15 @@ approvers: - luxas - jbeda title: kubeadm reset +content_template: templates/concept --- -{% capture overview %} -{% endcapture %} +{{% capture overview %}} +{{% /capture %}} -{% capture body %} -{% include_relative generated/kubeadm_reset.md %} +{{% capture body %}} +{{< include "generated/kubeadm_reset.md" >}} -### External etcd clean up +### External etcd clean up! `kubeadm reset` will not delete any etcd data if external etcd is used. This means that if you run `kubeadm init` again using the same etcd endpoints, you will see state from previous clusters. @@ -22,11 +23,10 @@ etcdctl del "" --prefix ``` See the [etcd documentation](https://github.com/coreos/etcd/tree/master/etcdctl) for more information. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [kubeadm init](kubeadm-init.md) to bootstrap a Kubernetes master node * [kubeadm join](kubeadm-join.md) to bootstrap a Kubernetes worker node and join it to the cluster -{% endcapture %} +{{% /capture %}} -{% include templates/concept.md %} \ No newline at end of file diff --git a/docs/reference/setup-tools/kubeadm/kubeadm-token.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-token.md similarity index 65% rename from docs/reference/setup-tools/kubeadm/kubeadm-token.md rename to content/en/docs/reference/setup-tools/kubeadm/kubeadm-token.md index 994c3a0bbe981..b798676d9bdf3 100644 --- a/docs/reference/setup-tools/kubeadm/kubeadm-token.md +++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-token.md @@ -4,8 +4,9 @@ approvers: - luxas - jbeda title: kubeadm token +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} Bootstrap tokens are used for establishing bidirectional trust between a node joining the cluster and a master node, as described in [authenticating with bootstrap tokens](/docs/admin/bootstrap-tokens/). @@ -13,24 +14,24 @@ the cluster and a master node, as described in [authenticating with bootstrap to `kubeadm init` creates an initial token with a 24-hour TTL. The following commands allow you to manage such a token and also to create and manage new ones. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## kubeadm token create {#cmd-token-create} -{% include_relative generated/kubeadm_token_create.md %} +{{< include "generated/kubeadm_token_create.md" >}} ## kubeadm token delete {#cmd-token-delete} -{% include_relative generated/kubeadm_token_delete.md %} +{{< include "generated/kubeadm_token_delete.md" >}} ## kubeadm token generate {#cmd-token-generate} -{% include_relative generated/kubeadm_token_generate.md %} +{{< include "generated/kubeadm_token_generate.md" >}} ## kubeadm token list {#cmd-token-list} -{% include_relative generated/kubeadm_token_list.md %} -{% endcapture %} +{{< include "generated/kubeadm_token_list.md" >}} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [kubeadm join](kubeadm-join.md) to bootstrap a Kubernetes worker node and join it to the cluster -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md old mode 100755 new mode 100644 similarity index 83% rename from docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md rename to content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md index 6d115d0fd19e9..fe0c88b328f94 --- a/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md +++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-upgrade.md @@ -4,14 +4,15 @@ approvers: - luxas - jbeda title: kubeadm upgrade +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} `kubeadm upgrade` is a user-friendly command that wraps complex upgrading logic behind one command, with support for both planning an upgrade and actually performing it. `kubeadm upgrade` can also be used for downgrading cluster if necessary. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## kubeadm upgrade guidance Every upgrade process might be a bit different, so we've documented each minor upgrade process individually. @@ -26,15 +27,15 @@ Please check these documents out for more detailed how-to-upgrade guidance: * [1.9.x to 1.9.y HA cluster upgrades](/docs/tasks/administer-cluster/kubeadm-upgrade-ha/) ## kubeadm upgrade plan {#cmd-upgrade-plan} -{% include_relative generated/kubeadm_upgrade_plan.md %} +{{< include "generated/kubeadm_upgrade_plan.md" >}} ## kubeadm upgrade apply {#cmd-upgrade-apply} -{% include_relative generated/kubeadm_upgrade_apply.md %} +{{< include "generated/kubeadm_upgrade_apply.md" >}} -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [kubeadm config](kubeadm-config.md) if you initialized your cluster using kubeadm v1.7.x or lower, to configure your cluster for `kubeadm upgrade` -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-version.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-version.md new file mode 100644 index 0000000000000..1eaf8f74e81d2 --- /dev/null +++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-version.md @@ -0,0 +1,16 @@ +--- +approvers: +- mikedanese +- luxas +- jbeda +title: kubeadm version +content_template: templates/concept +--- +{{% capture overview %}} +{{% /capture %}} + +{{% capture body %}} +{{< include "generated/kubeadm_version.md" >}} +{{% /capture %}} + + diff --git a/docs/reference/setup-tools/kubeadm/kubeadm.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm.md similarity index 100% rename from docs/reference/setup-tools/kubeadm/kubeadm.md rename to content/en/docs/reference/setup-tools/kubeadm/kubeadm.md diff --git a/docs/reference/workloads-18-19.md b/content/en/docs/reference/workloads-18-19.md similarity index 100% rename from docs/reference/workloads-18-19.md rename to content/en/docs/reference/workloads-18-19.md diff --git a/content/en/docs/search.md b/content/en/docs/search.md new file mode 100644 index 0000000000000..d741e321888d8 --- /dev/null +++ b/content/en/docs/search.md @@ -0,0 +1,5 @@ +--- +layout: search +title: Search Results +--- + diff --git a/docs/setup/index.md b/content/en/docs/setup/_index.md similarity index 91% rename from docs/setup/index.md rename to content/en/docs/setup/_index.md index 5ceaf1667beeb..344d013f53d22 100644 --- a/docs/setup/index.md +++ b/content/en/docs/setup/_index.md @@ -5,6 +5,8 @@ reviewers: - mikedanese no_issue: true title: Setup +main_menu: true +weight: 30 --- This section provides instructions for installing Kubernetes and setting diff --git a/docs/setup/building-from-source.md b/content/en/docs/setup/building-from-source.md similarity index 90% rename from docs/setup/building-from-source.md rename to content/en/docs/setup/building-from-source.md index e541d74480c90..27436d1670951 100644 --- a/docs/setup/building-from-source.md +++ b/content/en/docs/setup/building-from-source.md @@ -21,4 +21,4 @@ cd kubernetes make release ``` -For more details on the release process see the kubernetes/kubernetes [`build`](http://releases.k8s.io/{{page.githubbranch}}/build/) directory. +For more details on the release process see the kubernetes/kubernetes [`build`](http://releases.k8s.io/{{< param "githubbranch" >}}/build/) directory. diff --git a/content/en/docs/setup/independent/_index.md b/content/en/docs/setup/independent/_index.md new file mode 100755 index 0000000000000..d5332e7516779 --- /dev/null +++ b/content/en/docs/setup/independent/_index.md @@ -0,0 +1,5 @@ +--- +title: "Bootstrapping Clusters with kubeadm" +weight: 20 +--- + diff --git a/docs/setup/independent/create-cluster-kubeadm.md b/content/en/docs/setup/independent/create-cluster-kubeadm.md similarity index 96% rename from docs/setup/independent/create-cluster-kubeadm.md rename to content/en/docs/setup/independent/create-cluster-kubeadm.md index 34978d7527300..2dad9503000d2 100644 --- a/docs/setup/independent/create-cluster-kubeadm.md +++ b/content/en/docs/setup/independent/create-cluster-kubeadm.md @@ -5,9 +5,10 @@ reviewers: - errordeveloper - jbeda title: Using kubeadm to Create a Cluster +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} **kubeadm** is a toolkit that helps you bootstrap a best-practice Kubernetes cluster in an easy, reasonably secure and extensible way. It also supports @@ -74,9 +75,9 @@ timeframe; which also applies to `kubeadm`. | v1.9.x | December 2017 | September 2018   | | v1.10.x | March 2018 | December 2018   | -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} 1. One or more machines running a deb/rpm-compatible OS, e.g. Ubuntu or CentOS 1. 2 GB or more of RAM per machine (any less will leave little room for your @@ -84,9 +85,9 @@ timeframe; which also applies to `kubeadm`. 1. 2 CPUs or more on the master 1. Full network connectivity between all machines in the cluster (public or private network is fine) -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Objectives @@ -243,13 +244,12 @@ kubectl apply -f **NOTE:** You can install **only one** pod network per cluster. -{% capture choose %} +{{< tabs name="tabs-pod-install" >}} +{{% tab name="Choose one..." %}} Please select one of the tabs to see installation instructions for the respective third-party Pod Network Provider. -{% endcapture %} - -{% capture calico %} - -Refer to the Calico documentation for a [kubeadm quickstart](https://docs.projectcalico.org/latest/getting-started/kubernetes/) and other resources. +{{% /tab %}} +{{% tab name="Calico" %}} +Refer to the Calico documentation for a [kubeadm quickstart](https://docs.projectcalico.org/latest/getting-started/kubernetes/), a [kubeadm installation guide](http://docs.projectcalico.org/latest/getting-started/kubernetes/installation/hosted/kubeadm/), and other resources. **Note:** @@ -257,12 +257,10 @@ Refer to the Calico documentation for a [kubeadm quickstart](https://docs.projec - Calico works on `amd64` only. ```shell -kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml +kubectl apply -f https://docs.projectcalico.org/v3.0/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml ``` -{% endcapture %} - -{% capture canal %} - +{{% /tab %}} +{{% tab name="Canal" %}} The official Canal set-up guide is [here](https://github.com/projectcalico/canal/tree/master/k8s-install). **Note:** @@ -274,10 +272,8 @@ The official Canal set-up guide is [here](https://github.com/projectcalico/canal kubectl apply -f https://raw.githubusercontent.com/projectcalico/canal/master/k8s-install/1.7/rbac.yaml kubectl apply -f https://raw.githubusercontent.com/projectcalico/canal/master/k8s-install/1.7/canal.yaml ``` -{% endcapture %} - -{% capture flannel %} - +{{% /tab %}} +{{% tab name="Flannel" %}} **Note:** - For `flannel` to work correctly, `--pod-network-cidr=10.244.0.0/16` has to be passed to `kubeadm init`. @@ -292,11 +288,8 @@ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documen ``` - For more information about `flannel`, please see [here](https://github.com/coreos/flannel). - -{% endcapture %} - -{% capture kube-router %} - +{{% /tab %}} +{{% tab name="Kube-router" %}} Set `/proc/sys/net/bridge/bridge-nf-call-iptables` to `1` by running `sysctl net.bridge.bridge-nf-call-iptables=1` to pass bridged IPv4 traffic to iptables' chains. This is a requirement for some CNI plugins to work, for more information please see [here](https://kubernetes.io/docs/concepts/cluster-administration/network-plugins/#network-plugin-requirements). @@ -306,11 +299,8 @@ Kube-router relies on kube-controller-manager to allocate pod CIDR for the nodes Kube-router provides pod networking, network policy, and high-performing IP Virtual Server(IPVS)/Linux Virtual Server(LVS) based service proxy. For information on setting up Kubernetes cluster with Kube-router using kubeadm, please see official [setup guide](https://github.com/cloudnativelabs/kube-router/blob/master/Documentation/kubeadm.md). - -{% endcapture %} - -{% capture romana %} - +{{% /tab %}} +{{% tab name="Romana" %}} Set `/proc/sys/net/bridge/bridge-nf-call-iptables` to `1` by running `sysctl net.bridge.bridge-nf-call-iptables=1` to pass bridged IPv4 traffic to iptables' chains. This is a requirement for some CNI plugins to work, for more information please see [here](https://kubernetes.io/docs/concepts/cluster-administration/network-plugins/#network-plugin-requirements). @@ -322,10 +312,8 @@ The official Romana set-up guide is [here](https://github.com/romana/romana/tree ```shell kubectl apply -f https://raw.githubusercontent.com/romana/romana/master/containerize/specs/romana-kubeadm.yml ``` -{% endcapture %} - -{% capture weave_net %} - +{{% /tab %}} +{{% tab name="Weave Net" %}} Set `/proc/sys/net/bridge/bridge-nf-call-iptables` to `1` by running `sysctl net.bridge.bridge-nf-call-iptables=1` to pass bridged IPv4 traffic to iptables' chains. This is a requirement for some CNI plugins to work, for more information please see [here](https://kubernetes.io/docs/concepts/cluster-administration/network-plugins/#network-plugin-requirements). @@ -337,15 +325,13 @@ Weave Net sets hairpin mode by default. This allows Pods to access themselves vi if they don't know their PodIP. ```shell -export kubever=$(kubectl version | base64 | tr -d '\n') -kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever" +export kubever=$(kubectl version | base64 | tr -d ' +') +kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=" ``` -{% endcapture %} - -{% assign tab_names = "Choose one...,Calico,Canal,Flannel,Kube-router,Romana,Weave Net" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: choose | push: calico | push: canal | push: flannel | push: kube-router | push: romana | push: weave_net %} +{{% /tab %}} +{{< /tabs >}} -{% include tabs.md %} Once a pod network has been installed, you can confirm that it is working by checking that the kube-dns pod is Running in the output of `kubectl get pods --all-namespaces`. @@ -388,8 +374,9 @@ The nodes are where your workloads (containers and pods, etc) run. To add new no kubeadm join --token : --discovery-token-ca-cert-hash sha256: ``` +{{< note >}} **Note:** To specify an IPv6 tuple for `:`, IPv6 address must be enclosed in square brackets, for example: `[fd00::101]:2073`. -{: .note} +{{< /note >}} The output should look something like: @@ -554,6 +541,6 @@ addressed in due course. If you are running into difficulties with kubeadm, please consult our [troubleshooting docs](/docs/setup/independent/troubleshooting-kubeadm/). -{% endcapture %} -{% include templates/task.md %} + + diff --git a/docs/setup/independent/high-availability.md b/content/en/docs/setup/independent/high-availability.md similarity index 83% rename from docs/setup/independent/high-availability.md rename to content/en/docs/setup/independent/high-availability.md index 602ce9f03f447..bd4b133c47655 100644 --- a/docs/setup/independent/high-availability.md +++ b/content/en/docs/setup/independent/high-availability.md @@ -5,20 +5,22 @@ reviewers: - errordeveloper - jbeda title: Creating HA clusters with kubeadm +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This guide shows you how to install and set up a highly available Kubernetes cluster using kubeadm. This document shows you how to perform setup tasks that kubeadm doesn't perform: provision hardware; configure multiple systems; and load balancing. +{{< note >}} **Note:** This guide is only one potential solution, and there are many ways to configure a highly available cluster. If a better solution works for you, please use it. If you find a better solution that can be adopted by the community, feel free to contribute it back. -{: .note} +{{< /note >}} -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} - Three machines that meet [kubeadm's minimum requirements](/docs/setup/independent/install-kubeadm/#before-you-begin) for the masters - Three machines that meet [kubeadm's minimum requirements](/docs/setup/independent/install-kubeadm/#before-you-begin) for the workers @@ -28,9 +30,9 @@ This document shows you how to perform setup tasks that kubeadm doesn't perform: - Full network connectivity between all machines in the cluster (public or private network is fine) -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Installing prerequisites on masters @@ -116,9 +118,10 @@ For **Option 2**: you can skip to the next step. Any reference to `etcd0`, `etcd EOF ``` + {{< note >}} **Optional:** You can modify `ca-csr.json` to add a section for `names`. See [the CFSSL wiki](https://github.com/cloudflare/cfssl/wiki/Creating-a-new-CSR) for an example. - {: .note} + {{< /note >}} 1. Next, generate the CA certs like so: @@ -211,25 +214,20 @@ In order to copy certs between machines, you must enable SSH access for `scp`. This will result in the following files: `peer.pem`, `peer-key.pem`, `server.pem`, `server-key.pem`. -### Run etcd - -Now that all the certificates have been generated, you will now install and set up etcd on each machine. - -{% capture choose %} +### {{< tabs name="etcd_mode" >}} +{{% tab name="Choose one..." %}} Please select one of the tabs to see installation instructions for the respective way to run etcd. -{% endcapture %} - -{% capture systemd %} - +{{% /tab %}} +{{% tab name="systemd" %}} 1. First you will install etcd binaries like so: ```shell - export ETCD_VERSION=v3.1.12 - curl -sSL https://github.com/coreos/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gz | tar -xzv --strip-components=1 -C /usr/local/bin/ - rm -rf etcd-$ETCD_VERSION-linux-amd64* + export ETCD_VERSION=v3.1.10 + curl -sSL https://github.com/coreos/etcd/releases/download//etcd--linux-amd64.tar.gz | tar -xzv --strip-components=1 -C /usr/local/bin/ + rm -rf etcd--linux-amd64* ``` - It is worth noting that etcd v3.1.12 is the preferred version for Kubernetes v1.10. For other versions of Kubernetes please consult [the changelog](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md). + It is worth noting that etcd v3.1.10 is the preferred version for Kubernetes v1.9. For other versions of Kubernetes please consult [the changelog](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md). Also, please realise that most distributions of Linux already have a version of etcd installed, so you will be replacing the system default. @@ -237,8 +235,8 @@ Please select one of the tabs to see installation instructions for the respectiv ``` touch /etc/etcd.env - echo "PEER_NAME=$PEER_NAME" >> /etc/etcd.env - echo "PRIVATE_IP=$PRIVATE_IP" >> /etc/etcd.env + echo "PEER_NAME=" >> /etc/etcd.env + echo "PRIVATE_IP=" >> /etc/etcd.env ``` 1. Now copy the systemd unit file like so: @@ -259,23 +257,7 @@ Please select one of the tabs to see installation instructions for the respectiv LimitNOFILE=40000 TimeoutStartSec=0 - ExecStart=/usr/local/bin/etcd --name ${PEER_NAME} \ - --data-dir /var/lib/etcd \ - --listen-client-urls https://${PRIVATE_IP}:2379 \ - --advertise-client-urls https://${PRIVATE_IP}:2379 \ - --listen-peer-urls https://${PRIVATE_IP}:2380 \ - --initial-advertise-peer-urls https://${PRIVATE_IP}:2380 \ - --cert-file=/etc/kubernetes/pki/etcd/server.pem \ - --key-file=/etc/kubernetes/pki/etcd/server-key.pem \ - --client-cert-auth \ - --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.pem \ - --peer-cert-file=/etc/kubernetes/pki/etcd/peer.pem \ - --peer-key-file=/etc/kubernetes/pki/etcd/peer-key.pem \ - --peer-client-cert-auth \ - --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.pem \ - --initial-cluster =https://:2380,=https://:2380,=https://:2380 \ - --initial-cluster-token my-etcd-token \ - --initial-cluster-state new + ExecStart=/usr/local/bin/etcd --name --data-dir /var/lib/etcd --listen-client-urls https://:2379 --advertise-client-urls https://:2379 --listen-peer-urls https://:2380 --initial-advertise-peer-urls https://:2380 --cert-file=/etc/kubernetes/pki/etcd/server.pem --key-file=/etc/kubernetes/pki/etcd/server-key.pem --client-cert-auth --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.pem --peer-cert-file=/etc/kubernetes/pki/etcd/peer.pem --peer-key-file=/etc/kubernetes/pki/etcd/peer-key.pem --peer-client-cert-auth --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.pem --initial-cluster =https://:2380,=https://:2380,=https://:2380 --initial-cluster-token my-etcd-token --initial-cluster-state new [Install] WantedBy=multi-user.target @@ -296,10 +278,8 @@ Please select one of the tabs to see installation instructions for the respectiv ```shell systemctl status etcd ``` -{% endcapture %} - -{% capture static_pods %} - +{{% /tab %}} +{{% tab name="Static Pods" %}} **Note**: This is only supported on nodes that have the all dependencies for the kubelet installed. If you are hosting etcd on the master nodes, this has already been set up. If you are hosting etcd on dedicated nodes, you should either use systemd or run the [installation guide](/docs/setup/independent/install-kubeadm/) on each dedicated etcd machine. 1. The first step is to run the following to generate the manifest file: @@ -317,23 +297,7 @@ Please select one of the tabs to see installation instructions for the respectiv spec: containers: - command: - - etcd --name ${PEER_NAME} \ - - --data-dir /var/lib/etcd \ - - --listen-client-urls https://${PRIVATE_IP}:2379 \ - - --advertise-client-urls https://${PRIVATE_IP}:2379 \ - - --listen-peer-urls https://${PRIVATE_IP}:2380 \ - - --initial-advertise-peer-urls https://${PRIVATE_IP}:2380 \ - - --cert-file=/certs/server.pem \ - - --key-file=/certs/server-key.pem \ - - --client-cert-auth \ - - --trusted-ca-file=/certs/ca.pem \ - - --peer-cert-file=/certs/peer.pem \ - - --peer-key-file=/certs/peer-key.pem \ - - --peer-client-cert-auth \ - - --peer-trusted-ca-file=/certs/ca.pem \ - - --initial-cluster etcd0=https://:2380,etcd1=https://:2380,etcd2=https://:2380 \ - - --initial-cluster-token my-etcd-token \ - - --initial-cluster-state new + - etcd --name - --data-dir /var/lib/etcd - --listen-client-urls https://:2379 - --advertise-client-urls https://:2379 - --listen-peer-urls https://:2380 - --initial-advertise-peer-urls https://:2380 - --cert-file=/certs/server.pem - --key-file=/certs/server-key.pem - --client-cert-auth - --trusted-ca-file=/certs/ca.pem - --peer-cert-file=/certs/peer.pem - --peer-key-file=/certs/peer-key.pem - --peer-client-cert-auth - --peer-trusted-ca-file=/certs/ca.pem - --initial-cluster etcd0=https://:2380,etcd1=https://:2380,etcd2=https://:2380 - --initial-cluster-token my-etcd-token - --initial-cluster-state new image: k8s.gcr.io/etcd-amd64:3.1.10 livenessProbe: httpGet: @@ -376,24 +340,15 @@ Please select one of the tabs to see installation instructions for the respectiv Make sure you replace: * `` with the name of the node you're running on (e.g. `etcd0`, `etcd1` or `etcd2`) * ``, `` and `` with the public IPv4s of the other machines that host etcd. +{{% /tab %}} +{{< /tabs >}} -{% endcapture %} - -{% assign tab_set_name = "etcd_mode" %} -{% assign tab_names = "Choose one...,systemd,Static Pods" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: choose | push: systemd | push: static_pods %} - -{% include tabs.md %} - -## Set up master Load Balancer -The next step is to create a Load Balancer that sits in front of your master nodes. How you do this depends on your environment; you could, for example, leverage a cloud provider Load Balancer, or set up your own using NGINX, keepalived, or HAproxy. - -{% capture choose %} -Please select one of the tabs to see installation instructions for information on load balancing in the respective environment. -{% endcapture %} - -{% capture cloud %} +## {{< tabs name="lb_mode" >}} +{{% tab name="Choose one..." %}} +Please select one of the tabs to see installation instructions for the respective way to run etcd. +{{% /tab %}} +{{% tab name="Cloud" %}} Some examples of cloud provider solutions are: * [AWS Elastic Load Balancer](https://aws.amazon.com/elasticloadbalancing/) @@ -403,9 +358,8 @@ Some examples of cloud provider solutions are: You will need to ensure that the load balancer routes to **just `master0` on port 6443**. This is because kubeadm will perform health checks using the load balancer IP. Since `master0` is set up individually first, the other masters will not have running apiservers, which will result in kubeadm hanging indefinitely. If possible, use a smart load balancing algorithm like "least connections", and use health checks so unhealthy nodes can be removed from circulation. Most providers will provide these features. -{% endcapture %} - -{% capture onsite %} +{{% /tab %}} +{{% tab name="On-Site" %}} In an on-site environment there may not be a physical load balancer available. Instead, a virtual IP pointing to a healthy master node can be used. There are a number of solutions for this including keepalived, Pacemaker and probably many others, some with and some without load balancing. As an example we outline a simple setup based on keepalived. Depending on environment and requirements people may prefer different solutions. The configuration shown here provides an _active/passive_ failover without load balancing. If required, load balancing can by added quite easily by setting up HAProxy, NGINX or similar on the master nodes (not covered in this guide). @@ -473,14 +427,9 @@ As an example we outline a simple setup based on keepalived. Depending on enviro Replace the `` by your chosen virtual IP. 4. Restart keepalived. While no Kubernetes services are up yet it will log health check fails on all master nodes. This will stop as soon as the first master node has been bootstrapped. +{{% /tab %}} +{{< /tabs >}} -{% endcapture %} - -{% assign tab_set_name = "lb_mode" %} -{% assign tab_names = "Choose one...,Cloud,On-Site" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: choose | push: cloud | push: onsite %} - -{% include tabs.md %} ## Acquire etcd certs @@ -592,6 +541,6 @@ Next provision and set up the worker nodes. To do this, you will need to provisi sudo systemctl restart kubelet ``` -{% endcapture %} -{% include templates/task.md %} + + diff --git a/docs/setup/independent/install-kubeadm.md b/content/en/docs/setup/independent/install-kubeadm.md similarity index 84% rename from docs/setup/independent/install-kubeadm.md rename to content/en/docs/setup/independent/install-kubeadm.md index a44ed9330e1b5..8fb33b34458e7 100644 --- a/docs/setup/independent/install-kubeadm.md +++ b/content/en/docs/setup/independent/install-kubeadm.md @@ -1,16 +1,17 @@ --- title: Installing kubeadm +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to install the `kubeadm` toolbox. For information how to create a cluster with kubeadm once you have performed this installation process, see the [Using kubeadm to Create a Cluster](/docs/setup/independent/create-cluster-kubeadm/) page. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * One or more machines running one of: - Ubuntu 16.04+ @@ -27,9 +28,9 @@ see the [Using kubeadm to Create a Cluster](/docs/setup/independent/create-clust * Certain ports are open on your machines. See [here](/docs/setup/independent/install-kubeadm/#check-required-ports) for more details. * Swap disabled. You **MUST** disable swap in order for the kubelet to work properly. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Verify the MAC address and product_uuid are unique for every node @@ -90,8 +91,8 @@ Please proceed with executing the following commands based on your OS as root. Y If you already have the required versions of the Docker installed, you can move on to next section. If not, you can use the following commands to install Docker on your system: -{% capture docker_ubuntu %} - +{{< tabs name="docker_install" >}} +{{% tab name="Ubuntu, Debian or HypriotOS" %}} Install Docker from Ubuntu's repositories: ```bash @@ -103,47 +104,29 @@ or install Docker CE 17.03 from Docker's repositories for Ubuntu or Debian: ```bash apt-get update -apt-get install -y \ - apt-transport-https \ - ca-certificates \ - curl \ - software-properties-common +apt-get install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - -add-apt-repository \ - "deb https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \ - $(lsb_release -cs) \ - stable" -apt-get update && apt-get install -y docker-ce=$(apt-cache madison docker-ce | grep 17.03 | head -1 | awk '{print $3}') +add-apt-repository "deb https://download.docker.com/linux/$(. /etc/os-release; echo "") $(lsb_release -cs) stable" +apt-get update && apt-get install -y docker-ce=$(apt-cache madison docker-ce | grep 17.03 | head -1 | awk '{print }') ``` - -{% endcapture %} - -{% capture docker_centos %} - +{{% /tab %}} +{{% tab name="CentOS, RHEL or Fedora" %}} Install Docker using your operating system's bundled package: ```bash yum install -y docker systemctl enable docker && systemctl start docker ``` - -{% endcapture %} - -{% capture docker_coreos %} - +{{% /tab %}} +{{% tab name="Container Linux" %}} Enable and start Docker: ```bash systemctl enable docker && systemctl start docker ``` +{{% /tab %}} +{{< /tabs >}} -{% endcapture %} - -{% assign tab_set_name = "docker_install" %} -{% assign tab_names = "Ubuntu, Debian or HypriotOS;CentOS, RHEL or Fedora; Container Linux" | split: ';' | compact %} -{% assign tab_contents = site.emptyArray | push: docker_ubuntu | push: docker_centos | push: docker_coreos %} - -{% include tabs.md %} Refer to the [official Docker installation guides](https://docs.docker.com/engine/installation/) for more information. @@ -170,9 +153,8 @@ but not vice versa. For more information on version skews, please read our [version skew policy](/docs/setup/independent/create-cluster-kubeadm/#version-skew-policy). -{% capture ubuntu %} - -```bash +{{< tabs name="k8s_install" >}} +{{< tab name="Ubuntu, Debian or HypriotOS" codelang="bash" >}} apt-get update && apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - cat </etc/apt/sources.list.d/kubernetes.list @@ -180,17 +162,13 @@ deb http://apt.kubernetes.io/ kubernetes-xenial main EOF apt-get update apt-get install -y kubelet kubeadm kubectl -``` - -{% endcapture %} - -{% capture centos %} - -```bash +{{< /tab >}} +{{% tab name="CentOS, RHEL or Fedora" %}} +`` cat < /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes -baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch +baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\ enabled=1 gpgcheck=1 repo_gpgcheck=1 @@ -215,17 +193,14 @@ systemctl enable kubelet && systemctl start kubelet EOF sysctl --system ``` - -{% endcapture %} - -{% capture coreos %} - +{{% /tab %}} +{{% tab name="Container Linux" %}} Install CNI plugins (required for most pod network): ```bash CNI_VERSION="v0.6.0" mkdir -p /opt/cni/bin -curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-amd64-${CNI_VERSION}.tgz" | tar -C /opt/cni/bin -xz +curl -L "https://github.com/containernetworking/plugins/releases/download//cni-plugins-amd64-.tgz" | tar -C /opt/cni/bin -xz ``` Install `kubeadm`, `kubelet`, `kubectl` and add a `kubelet` systemd service: @@ -235,12 +210,12 @@ RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)" mkdir -p /opt/bin cd /opt/bin -curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/amd64/{kubeadm,kubelet,kubectl} +curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release//bin/linux/amd64/{kubeadm,kubelet,kubectl} chmod +x {kubeadm,kubelet,kubectl} -curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes/${RELEASE}/build/debs/kubelet.service" | sed "s:/usr/bin:/opt/bin:g" > /etc/systemd/system/kubelet.service +curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes//build/debs/kubelet.service" | sed "s:/usr/bin:/opt/bin:g" > /etc/systemd/system/kubelet.service mkdir -p /etc/systemd/system/kubelet.service.d -curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes/${RELEASE}/build/debs/10-kubeadm.conf" | sed "s:/usr/bin:/opt/bin:g" > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf +curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes//build/debs/10-kubeadm.conf" | sed "s:/usr/bin:/opt/bin:g" > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf ``` Enable and start `kubelet`: @@ -248,14 +223,9 @@ Enable and start `kubelet`: ```bash systemctl enable kubelet && systemctl start kubelet ``` +{{% /tab %}} +{{< /tabs >}} -{% endcapture %} - -{% assign tab_set_name = "k8s_install" %} -{% assign tab_names = "Ubuntu, Debian or HypriotOS;CentOS, RHEL or Fedora;Container Linux" | split: ';' | compact %} -{% assign tab_contents = site.emptyArray | push: ubuntu | push: centos | push: coreos %} - -{% include tabs.md %} The kubelet is now restarting every few seconds, as it waits in a crashloop for kubeadm to tell it what to do. @@ -289,12 +259,12 @@ systemctl restart kubelet If you are running into difficulties with kubeadm, please consult our [troubleshooting docs](/docs/setup/independent/troubleshooting-kubeadm/). -{% capture whatsnext %} +{{% capture whatsnext %}} * [Using kubeadm to Create a Cluster](/docs/setup/independent/create-cluster-kubeadm/) -{% endcapture %} +{{% /capture %}} + + -{% endcapture %} -{% include templates/task.md %} diff --git a/docs/setup/independent/troubleshooting-kubeadm.md b/content/en/docs/setup/independent/troubleshooting-kubeadm.md similarity index 99% rename from docs/setup/independent/troubleshooting-kubeadm.md rename to content/en/docs/setup/independent/troubleshooting-kubeadm.md index 78d07353edf93..16c393f846ad8 100644 --- a/docs/setup/independent/troubleshooting-kubeadm.md +++ b/content/en/docs/setup/independent/troubleshooting-kubeadm.md @@ -2,7 +2,7 @@ title: Troubleshooting kubeadm --- -{% capture overview %} +{{% capture overview %}} As with any program, you might run into an error using or operating it. Below we have listed common failure scenarios and have provided steps that will help you to understand and hopefully @@ -21,7 +21,7 @@ If your problem is not listed below, please follow the following steps: If your cluster is in an error state, you may have trouble in the configuration if you see Pod statuses like `RunContainerError`, `CrashLoopBackOff` or `Error`. If this is the case, please read below. -{% endcapture %} +{{% /capture %}} #### `ebtables` or some similar executable not found during installation diff --git a/docs/setup/pick-right-solution.md b/content/en/docs/setup/pick-right-solution.md similarity index 99% rename from docs/setup/pick-right-solution.md rename to content/en/docs/setup/pick-right-solution.md index 4bd9f1ae02879..cec887e15a68b 100644 --- a/docs/setup/pick-right-solution.md +++ b/content/en/docs/setup/pick-right-solution.md @@ -22,8 +22,7 @@ If you already have a way to configure hosting resources, use [kubeadm](/docs/se [Custom solutions](#custom-solutions) vary from step-by-step instructions to general advice for setting up a Kubernetes cluster from scratch. -* TOC -{:toc} +{{< toc >}} # Local-machine Solutions diff --git a/docs/sitemap.md b/content/en/docs/sitemap.md similarity index 100% rename from docs/sitemap.md rename to content/en/docs/sitemap.md diff --git a/docs/tasks/index.md b/content/en/docs/tasks/_index.md similarity index 98% rename from docs/tasks/index.md rename to content/en/docs/tasks/_index.md index 655a3d551df50..0aaf1d0817c87 100644 --- a/docs/tasks/index.md +++ b/content/en/docs/tasks/_index.md @@ -1,5 +1,7 @@ --- title: Tasks +main_menu: true +weight: 50 --- This section of the Kubernetes documentation contains pages that diff --git a/content/en/docs/tasks/access-application-cluster/_index.md b/content/en/docs/tasks/access-application-cluster/_index.md new file mode 100755 index 0000000000000..71e0cd9166d5a --- /dev/null +++ b/content/en/docs/tasks/access-application-cluster/_index.md @@ -0,0 +1,5 @@ +--- +title: "Access Applications in a Cluster" +weight: 70 +--- + diff --git a/docs/tasks/access-application-cluster/access-cluster.md b/content/en/docs/tasks/access-application-cluster/access-cluster.md similarity index 99% rename from docs/tasks/access-application-cluster/access-cluster.md rename to content/en/docs/tasks/access-application-cluster/access-cluster.md index 7982dda27ccb0..cf6d28337ac51 100644 --- a/docs/tasks/access-application-cluster/access-cluster.md +++ b/content/en/docs/tasks/access-application-cluster/access-cluster.md @@ -2,8 +2,7 @@ title: Accessing Clusters --- -* TOC -{:toc} +{{< toc >}} ## Accessing the cluster API diff --git a/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md b/content/en/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md similarity index 86% rename from docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md rename to content/en/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md index ed59650c51fd9..5aa67fcf90e7e 100644 --- a/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md +++ b/content/en/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md @@ -1,23 +1,24 @@ --- title: Communicate Between Containers in the Same Pod Using a Shared Volume +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to use a Volume to communicate between two Containers running in the same Pod. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Creating a Pod that runs two Containers @@ -25,7 +26,7 @@ In this exercise, you create a Pod that runs two Containers. The two containers share a Volume that they can use to communicate. Here is the configuration file for the Pod: -{% include code.html language="yaml" file="two-container-pod.yaml" ghlink="/docs/tasks/access-application-cluster/two-container-pod.yaml" %} +{{< code file="two-container-pod.yaml" >}} In the configuration file, you can see that the Pod has a Volume named `shared-data`. @@ -106,10 +107,10 @@ The output shows that nginx serves a web page written by the debian container: Hello from the debian container -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Discussion @@ -125,10 +126,10 @@ The Volume in this exercise provides a way for Containers to communicate during the life of the Pod. If the Pod is deleted and recreated, any data stored in the shared Volume is lost. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [patterns for composite containers](http://blog.kubernetes.io/2015/06/the-distributed-system-toolkit-patterns.html). @@ -139,11 +140,11 @@ the shared Volume is lost. * See [Configuring a Pod to Use a Volume for Storage](/docs/tasks/configure-pod-container/configure-volume-storage/). -* See [Volume](/docs/reference/generated/kubernetes-api/{{page.version}}/#volume-v1-core). +* See [Volume](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core). -* See [Pod](/docs/reference/generated/kubernetes-api/{{page.version}}/#pod-v1-core). +* See [Pod](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#pod-v1-core). + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md b/content/en/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md similarity index 97% rename from docs/tasks/access-application-cluster/configure-access-multiple-clusters.md rename to content/en/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md index 679a797bb675e..1dee3ea3b1a11 100644 --- a/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md +++ b/content/en/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md @@ -1,29 +1,31 @@ --- title: Configure Access to Multiple Clusters +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to configure access to multiple clusters by using configuration files. After your clusters, users, and contexts are defined in one or more configuration files, you can quickly switch between clusters by using the `kubectl config use-context` command. +{{< note >}} **Note:** A file that is used to configure access to a cluster is sometimes called a *kubeconfig file*. This is a generic way of referring to configuration files. It does not mean that there is a file named `kubeconfig`. -{: .note} +{{< /note >}} -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} You need to have the [`kubectl`](/docs/tasks/tools/install-kubectl/) command-line tool installed. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Define clusters, users, and contexts @@ -330,14 +332,14 @@ Return your `KUBECONFIG` environment variable to its original value. For example export KUBECONFIG=$KUBECONFIG_SAVED ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [Organizing Cluster Access Using kubeconfig Files](/docs/concepts/configuration/organize-cluster-access-kubeconfig/) * [kubectl config](/docs/reference/generated/kubectl/kubectl-commands/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md b/content/en/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md similarity index 100% rename from docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md rename to content/en/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md diff --git a/docs/tasks/access-application-cluster/connecting-frontend-backend.md b/content/en/docs/tasks/access-application-cluster/connecting-frontend-backend.md similarity index 87% rename from docs/tasks/access-application-cluster/connecting-frontend-backend.md rename to content/en/docs/tasks/access-application-cluster/connecting-frontend-backend.md index e2be7e583c235..09f71a04c90b8 100644 --- a/docs/tasks/access-application-cluster/connecting-frontend-backend.md +++ b/content/en/docs/tasks/access-application-cluster/connecting-frontend-backend.md @@ -1,29 +1,30 @@ --- title: Connect a Front End to a Back End Using a Service +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} This task shows how to create a frontend and a backend microservice. The backend microservice is a hello greeter. The frontend and backend are connected using a Kubernetes Service object. -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Create and run a microservice using a Deployment object. * Route traffic to the backend using a frontend. * Use a Service object to connect the frontend application to the backend application. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * This task uses [Services with external load balancers](/docs/tasks/access-application-cluster/create-external-load-balancer/), which @@ -31,17 +32,17 @@ frontend and backend are connected using a Kubernetes Service object. support this, you can use a Service of type [NodePort](/docs/concepts/services-networking/service/#type-nodeport) instead. -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ### Creating the backend using a Deployment The backend is a simple hello greeter microservice. Here is the configuration file for the backend Deployment: -{% include code.html language="yaml" file="hello.yaml" ghlink="/docs/tasks/access-application-cluster/hello.yaml" %} +{{< code file="hello.yaml" >}} Create the backend Deployment: @@ -101,7 +102,7 @@ selector labels to find the Pods that it routes traffic to. First, explore the Service configuration file: -{% include code.html language="yaml" file="hello-service.yaml" ghlink="/docs/tasks/access-application-cluster/hello-service.yaml" %} +{{< code file="hello-service.yaml" >}} In the configuration file, you can see that the Service routes traffic to Pods that have the labels `app: hello` and `tier: backend`. @@ -125,13 +126,13 @@ of the `name` field in the preceding Service configuration file. The Pods in the frontend Deployment run an nginx image that is configured to find the hello backend Service. Here is the nginx configuration file: -{% include code.html file="frontend/frontend.conf" ghlink="/docs/tasks/access-application-cluster/frontend/frontend.conf" %} +{{< code file="frontend/frontend.conf" >}} Similar to the backend, the frontend has a Deployment and a Service. The configuration for the Service has `type: LoadBalancer`, which means that the Service uses the default load balancer of your cloud provider. -{% include code.html language="yaml" file="frontend.yaml" ghlink="/docs/tasks/access-application-cluster/frontend.yaml" %} +{{< code file="frontend.yaml" >}} Create the frontend Deployment and Service: @@ -191,14 +192,14 @@ The output shows the message generated by the backend: {"message":"Hello"} ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [Services](/docs/concepts/services-networking/service/) * Learn more about [ConfigMaps](/docs/tasks/configure-pod-container/configure-pod-configmap/) -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tasks/access-application-cluster/create-external-load-balancer.md b/content/en/docs/tasks/access-application-cluster/create-external-load-balancer.md similarity index 96% rename from docs/tasks/access-application-cluster/create-external-load-balancer.md rename to content/en/docs/tasks/access-application-cluster/create-external-load-balancer.md index 0de436be1fb21..a2c1fe8417860 100644 --- a/docs/tasks/access-application-cluster/create-external-load-balancer.md +++ b/content/en/docs/tasks/access-application-cluster/create-external-load-balancer.md @@ -1,9 +1,10 @@ --- title: Create an External Load Balancer +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to create an External Load Balancer. @@ -18,15 +19,15 @@ services externally-reachable URLs, load balance the traffic, terminate SSL etc. please check the [Ingress](/docs/concepts/services-networking/ingress/) documentation. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Configuration file @@ -105,8 +106,9 @@ which should produce output like this: The IP address is listed next to `LoadBalancer Ingress`. +{{< note >}} **Note**: If you are running your service on Minikube, you can find the assigned IP address and port with: -{: .note} +{{< /note >}} ```bash minikube service example-service --url ``` @@ -184,9 +186,9 @@ Known issues: * AWS: [kubernetes/kubernetes#35758](https://github.com/kubernetes/kubernetes/issues/35758) * Weave-Net: [weaveworks/weave/#2924](https://github.com/weaveworks/weave/issues/2924) -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## External Load Balancer Providers @@ -212,6 +214,6 @@ Once the external load balancers provide weights, this functionality can be adde Internal pod to pod traffic should behave similar to ClusterIP services, with equal probability across all pods. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/access-application-cluster/frontend.yaml b/content/en/docs/tasks/access-application-cluster/frontend.yaml similarity index 100% rename from docs/tasks/access-application-cluster/frontend.yaml rename to content/en/docs/tasks/access-application-cluster/frontend.yaml diff --git a/docs/tasks/access-application-cluster/frontend/Dockerfile b/content/en/docs/tasks/access-application-cluster/frontend/Dockerfile similarity index 100% rename from docs/tasks/access-application-cluster/frontend/Dockerfile rename to content/en/docs/tasks/access-application-cluster/frontend/Dockerfile diff --git a/docs/tasks/access-application-cluster/frontend/frontend.conf b/content/en/docs/tasks/access-application-cluster/frontend/frontend.conf similarity index 100% rename from docs/tasks/access-application-cluster/frontend/frontend.conf rename to content/en/docs/tasks/access-application-cluster/frontend/frontend.conf diff --git a/docs/tasks/access-application-cluster/hello-service.yaml b/content/en/docs/tasks/access-application-cluster/hello-service.yaml similarity index 100% rename from docs/tasks/access-application-cluster/hello-service.yaml rename to content/en/docs/tasks/access-application-cluster/hello-service.yaml diff --git a/docs/tasks/access-application-cluster/hello.yaml b/content/en/docs/tasks/access-application-cluster/hello.yaml similarity index 100% rename from docs/tasks/access-application-cluster/hello.yaml rename to content/en/docs/tasks/access-application-cluster/hello.yaml diff --git a/docs/tasks/access-application-cluster/hello/Dockerfile b/content/en/docs/tasks/access-application-cluster/hello/Dockerfile similarity index 100% rename from docs/tasks/access-application-cluster/hello/Dockerfile rename to content/en/docs/tasks/access-application-cluster/hello/Dockerfile diff --git a/docs/tasks/access-application-cluster/hello/README b/content/en/docs/tasks/access-application-cluster/hello/README similarity index 100% rename from docs/tasks/access-application-cluster/hello/README rename to content/en/docs/tasks/access-application-cluster/hello/README diff --git a/docs/tasks/access-application-cluster/hello/main.go b/content/en/docs/tasks/access-application-cluster/hello/main.go similarity index 100% rename from docs/tasks/access-application-cluster/hello/main.go rename to content/en/docs/tasks/access-application-cluster/hello/main.go diff --git a/docs/tasks/access-application-cluster/list-all-running-container-images.md b/content/en/docs/tasks/access-application-cluster/list-all-running-container-images.md similarity index 90% rename from docs/tasks/access-application-cluster/list-all-running-container-images.md rename to content/en/docs/tasks/access-application-cluster/list-all-running-container-images.md index 358a93b476b14..cf01c855d3af8 100644 --- a/docs/tasks/access-application-cluster/list-all-running-container-images.md +++ b/content/en/docs/tasks/access-application-cluster/list-all-running-container-images.md @@ -1,21 +1,22 @@ --- title: List All Container Images Running in a Cluster +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to use kubectl to list all of the Container images for Pods running in a cluster. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} In this exercise you will use kubectl to fetch all of the Pods running in a cluster, and format the output to pull out the list @@ -97,26 +98,26 @@ kubectl get pods --namespace kube-system -o jsonpath="{..image}" As an alternative to jsonpath, Kubectl supports using [go-templates](https://golang.org/pkg/text/template/) for formatting the output: -{% raw %} + ```sh kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}" ``` -{% endraw %} -{% endcapture %} -{% capture discussion %} +{{% /capture %}} + +{{% capture discussion %}} -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} ### Reference * [Jsonpath](/docs/user-guide/jsonpath/) reference guide * [Go template](https://golang.org/pkg/text/template/) reference guide -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/access-application-cluster/load-balance-access-application-cluster.md b/content/en/docs/tasks/access-application-cluster/load-balance-access-application-cluster.md similarity index 90% rename from docs/tasks/access-application-cluster/load-balance-access-application-cluster.md rename to content/en/docs/tasks/access-application-cluster/load-balance-access-application-cluster.md index 458dc2062e028..585c3eab562bc 100644 --- a/docs/tasks/access-application-cluster/load-balance-access-application-cluster.md +++ b/content/en/docs/tasks/access-application-cluster/load-balance-access-application-cluster.md @@ -1,32 +1,33 @@ --- title: Provide Load-Balanced Access to an Application in a Cluster +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} This page shows how to create a Kubernetes Service object that provides load-balanced access to an application running in a cluster. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Run two instances of a Hello World application * Create a Service object * Use the Service object to access the running application -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Creating a Service for an application running in two pods @@ -105,14 +106,14 @@ As an alternative to using `kubectl expose`, you can use a to create a Service. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Learn more about [connecting applications with services](/docs/concepts/services-networking/connect-applications-service/). -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md b/content/en/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md similarity index 90% rename from docs/tasks/access-application-cluster/port-forward-access-application-cluster.md rename to content/en/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md index 6f301e80c674d..ed850039f8a2c 100644 --- a/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md +++ b/content/en/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md @@ -1,26 +1,27 @@ --- title: Use Port Forwarding to Access Applications in a Cluster +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to use `kubectl port-forward` to connect to a Redis server running in a Kubernetes cluster. This type of connection can be useful for database debugging. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * Install [redis-cli](http://redis.io/topics/rediscli). -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Creating Redis deployment and service @@ -66,9 +67,9 @@ for database debugging. 3. Verify that the Redis server is running in the pod and listening on port 6379: - {% raw %} + kubectl get pods redis-master-765d459796-258hz --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}' - {% endraw %} + The output displays the port: @@ -112,10 +113,10 @@ for database debugging. A successful ping request returns PONG. -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Discussion @@ -123,17 +124,18 @@ Connections made to local port 6379 are forwarded to port 6379 of the pod that is running the Redis server. With this connection in place you can use your local workstation to debug the database that is running in the pod. +{{< warning >}} **Warning**: Due to known limitations, port forward today only works for TCP protocol. The support to UDP protocol is being tracked in [issue 47862](https://github.com/kubernetes/kubernetes/issues/47862). -{: .warning} +{{< /warning >}} -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Learn more about [kubectl port-forward](/docs/reference/generated/kubectl/kubectl-commands/#port-forward). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/access-application-cluster/redis-master.yaml b/content/en/docs/tasks/access-application-cluster/redis-master.yaml similarity index 100% rename from docs/tasks/access-application-cluster/redis-master.yaml rename to content/en/docs/tasks/access-application-cluster/redis-master.yaml diff --git a/docs/tasks/access-application-cluster/service-access-application-cluster.md b/content/en/docs/tasks/access-application-cluster/service-access-application-cluster.md similarity index 92% rename from docs/tasks/access-application-cluster/service-access-application-cluster.md rename to content/en/docs/tasks/access-application-cluster/service-access-application-cluster.md index fee013ba173d3..6549e7c5d7dfe 100644 --- a/docs/tasks/access-application-cluster/service-access-application-cluster.md +++ b/content/en/docs/tasks/access-application-cluster/service-access-application-cluster.md @@ -1,33 +1,34 @@ --- title: Use a Service to Access an Application in a Cluster +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} This page shows how to create a Kubernetes Service object that external clients can use to access an application running in a cluster. The Service provides load balancing for an application that has two running instances. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Run two instances of a Hello World application. * Create a Service object that exposes a node port. * Use the Service object to access the running application. -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Creating a service for an application running in two pods @@ -122,10 +123,10 @@ As an alternative to using `kubectl expose`, you can use a [service configuration file](/docs/concepts/services-networking/service/) to create a Service. -{% endcapture %} +{{% /capture %}} -{% capture cleanup %} +{{% capture cleanup %}} To delete the Service, enter this command: @@ -136,14 +137,14 @@ the Hello World application, enter this command: kubectl delete deployment hello-world -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Learn more about [connecting applications with services](/docs/concepts/services-networking/connect-applications-service/). -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tasks/access-application-cluster/two-container-pod.yaml b/content/en/docs/tasks/access-application-cluster/two-container-pod.yaml similarity index 100% rename from docs/tasks/access-application-cluster/two-container-pod.yaml rename to content/en/docs/tasks/access-application-cluster/two-container-pod.yaml diff --git a/docs/tasks/access-application-cluster/web-ui-dashboard.md b/content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md similarity index 99% rename from docs/tasks/access-application-cluster/web-ui-dashboard.md rename to content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md index e9b78b3b14e3f..86fbe8f620f74 100644 --- a/docs/tasks/access-application-cluster/web-ui-dashboard.md +++ b/content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md @@ -12,8 +12,7 @@ Dashboard also provides information on the state of Kubernetes resources in your ![Kubernetes Dashboard UI](/images/docs/ui-dashboard.png) -* TOC -{:toc} +{{< toc >}} ## Deploying the Dashboard UI diff --git a/content/en/docs/tasks/access-kubernetes-api/_index.md b/content/en/docs/tasks/access-kubernetes-api/_index.md new file mode 100755 index 0000000000000..f883cdee9db4d --- /dev/null +++ b/content/en/docs/tasks/access-kubernetes-api/_index.md @@ -0,0 +1,5 @@ +--- +title: "Extend Kubernetes" +weight: 90 +--- + diff --git a/docs/tasks/access-kubernetes-api/configure-aggregation-layer.md b/content/en/docs/tasks/access-kubernetes-api/configure-aggregation-layer.md similarity index 87% rename from docs/tasks/access-kubernetes-api/configure-aggregation-layer.md rename to content/en/docs/tasks/access-kubernetes-api/configure-aggregation-layer.md index 577c7e0f05a4f..b7a28240bd35b 100644 --- a/docs/tasks/access-kubernetes-api/configure-aggregation-layer.md +++ b/content/en/docs/tasks/access-kubernetes-api/configure-aggregation-layer.md @@ -4,23 +4,24 @@ reviewers: - lavalamp - cheftako - chenopis +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} Configuring the [aggregation layer](/docs/concepts/api-extension/apiserver-aggregation/) allows the Kubernetes apiserver to be extended with additional APIs, which are not part of the core Kubernetes APIs. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} **Note:** There are a few setup requirements for getting the aggregation layer working in your environment to support mutual TLS auth between the proxy and extension apiservers. Kubernetes and the kube-apiserver have multiple CAs, so make sure that the proxy is signed by the aggregation layer CA and not by something else, like the master CA. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Enable apiserver flags @@ -38,15 +39,15 @@ If you are not running kube-proxy on a host running the API server, then you mus --enable-aggregator-routing=true -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [Setup an extension api-server](/docs/tasks/access-kubernetes-api/setup-extension-api-server/) to work with the aggregation layer. * For a high level overview, see [Extending the Kubernetes API with the aggregation layer](/docs/concepts/api-extension/apiserver-aggregation/). * Learn how to [Extend the Kubernetes API Using Custom Resource Definitions](/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions.md b/content/en/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions.md similarity index 97% rename from docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions.md rename to content/en/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions.md index e84fafff8e716..232cf77f49d3e 100644 --- a/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions.md +++ b/content/en/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions.md @@ -3,26 +3,27 @@ title: Extend the Kubernetes API with CustomResourceDefinitions reviewers: - deads2k - enisoc +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to install a [custom resource](/docs/concepts/api-extension/custom-resources/) into the Kubernetes API by creating a -[CustomResourceDefinition](/docs/reference/generated/kubernetes-api/{{page.version}}/#customresourcedefinition-v1beta1-apiextensions). -{% endcapture %} +[CustomResourceDefinition](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#customresourcedefinition-v1beta1-apiextensions). +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * Make sure your Kubernetes cluster has a master version of 1.7.0 or higher. * Read about [custom resources](/docs/concepts/api-extension/custom-resources/). -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Create a CustomResourceDefinition When you create a new CustomResourceDefinition (CRD), the Kubernetes API Server @@ -172,9 +173,9 @@ Error from server (NotFound): Unable to list "crontabs": the server could not fi If you later recreate the same CustomResourceDefinition, it will start out empty. -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Advanced topics ### Finalizers @@ -540,11 +541,11 @@ NAME AGE crontabs/my-new-cron-object 3s ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn how to [Migrate a ThirdPartyResource to CustomResourceDefinition](/docs/tasks/access-kubernetes-api/migrate-third-party-resource/). -* See [CustomResourceDefinition](/docs/reference/generated/kubernetes-api/{{page.version}}/#customresourcedefinition-v1beta1-apiextensions). -{% endcapture %} +* See [CustomResourceDefinition](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#customresourcedefinition-v1beta1-apiextensions). +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/access-kubernetes-api/extend-api-third-party-resource.md b/content/en/docs/tasks/access-kubernetes-api/extend-api-third-party-resource.md similarity index 98% rename from docs/tasks/access-kubernetes-api/extend-api-third-party-resource.md rename to content/en/docs/tasks/access-kubernetes-api/extend-api-third-party-resource.md index b72825f1b06e0..bd444a02e0e11 100644 --- a/docs/tasks/access-kubernetes-api/extend-api-third-party-resource.md +++ b/content/en/docs/tasks/access-kubernetes-api/extend-api-third-party-resource.md @@ -5,10 +5,9 @@ reviewers: title: Extend the Kubernetes API with ThirdPartyResources --- -{% assign for_k8s_version="1.7" %}{% include feature-state-deprecated.md %} +{{< feature-state for_k8s_version="1.7" state="deprecated" >}} -* TOC -{:toc} +{{< toc >}} ## What is ThirdPartyResource? diff --git a/docs/tasks/access-kubernetes-api/http-proxy-access-api.md b/content/en/docs/tasks/access-kubernetes-api/http-proxy-access-api.md similarity index 87% rename from docs/tasks/access-kubernetes-api/http-proxy-access-api.md rename to content/en/docs/tasks/access-kubernetes-api/http-proxy-access-api.md index b020fceb37599..54200183a43ee 100644 --- a/docs/tasks/access-kubernetes-api/http-proxy-access-api.md +++ b/content/en/docs/tasks/access-kubernetes-api/http-proxy-access-api.md @@ -1,23 +1,24 @@ --- title: Use an HTTP Proxy to Access the Kubernetes API +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to use an HTTP proxy to access the Kubernetes API. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * If you do not already have an application running in your cluster, start a Hello world application by entering this command: kubectl run node-hello --image=gcr.io/google-samples/node-hello:1.0 --port=8080 -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Using kubectl to start a proxy server @@ -75,10 +76,10 @@ Get a list of pods: ... } -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Learn more about [kubectl proxy](/docs/reference/generated/kubectl/kubectl-commands#proxy). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/access-kubernetes-api/migrate-third-party-resource.md b/content/en/docs/tasks/access-kubernetes-api/migrate-third-party-resource.md similarity index 93% rename from docs/tasks/access-kubernetes-api/migrate-third-party-resource.md rename to content/en/docs/tasks/access-kubernetes-api/migrate-third-party-resource.md index 93ec064f5e7d8..80d6a6c271b59 100644 --- a/docs/tasks/access-kubernetes-api/migrate-third-party-resource.md +++ b/content/en/docs/tasks/access-kubernetes-api/migrate-third-party-resource.md @@ -3,11 +3,12 @@ title: Migrate a ThirdPartyResource to CustomResourceDefinition reviewers: - enisoc - deads2k +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to migrate data stored in a ThirdPartyResource (TPR) to a -[CustomResourceDefinition](/docs/reference/generated/kubernetes-api/{{page.version}}/#customresourcedefinition-v1beta1-apiextensions) (CRD). +[CustomResourceDefinition](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#customresourcedefinition-v1beta1-apiextensions) (CRD). Kubernetes does not automatically migrate existing TPRs. This is due to API changes introduced as part of @@ -20,10 +21,10 @@ The simplest way to migrate is to stop all clients that use a given TPR, then de start from scratch with a CRD. This page describes an optional process that eases the transition by migrating existing TPR data for you **on a best-effort basis**. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} -{% include task-tutorial-prereqs.md %} +{{% capture prerequisites %}} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * Make sure your Kubernetes cluster has a **master version of exactly 1.7.x** (any patch release), as this is the only version that supports both TPR and CRD. @@ -35,9 +36,9 @@ you **on a best-effort basis**. * Be familiar with [CustomResourceDefinitions](/docs/concepts/api-extension/custom-resources/#customresourcedefinitions), which are a simple way to implement custom resources. * **Before performing a migration on real data, conduct a dry run by going through these steps in a test cluster.** -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Migrate TPR data 1. **Rewrite the TPR definition** @@ -158,12 +159,12 @@ you **on a best-effort basis**. custom controllers and other watchers. These clients now access CRD data when they make requests on the same API endpoints that the TPR previously served. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [custom resources](/docs/concepts/api-extension/custom-resources/). * Learn more about [using CustomResourceDefinitions](/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/). -* See [CustomResourceDefinition](/docs/reference/generated/kubernetes-api/{{page.version}}/#customresourcedefinition-v1beta1-apiextensions). -{% endcapture %} +* See [CustomResourceDefinition](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#customresourcedefinition-v1beta1-apiextensions). +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/access-kubernetes-api/setup-extension-api-server.md b/content/en/docs/tasks/access-kubernetes-api/setup-extension-api-server.md similarity index 95% rename from docs/tasks/access-kubernetes-api/setup-extension-api-server.md rename to content/en/docs/tasks/access-kubernetes-api/setup-extension-api-server.md index 2889d68b73295..92a234e80c77e 100644 --- a/docs/tasks/access-kubernetes-api/setup-extension-api-server.md +++ b/content/en/docs/tasks/access-kubernetes-api/setup-extension-api-server.md @@ -4,22 +4,23 @@ reviewers: - lavalamp - cheftako - chenopis +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} Setting up an extension API server to work the aggregation layer allows the Kubernetes apiserver to be extended with additional APIs, which are not part of the core Kubernetes APIs. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * You need to have a Kubernetes cluster running. * You must [configure the aggregation layer](/docs/tasks/access-kubernetes-api/configure-aggregation-layer/) and enable the apiserver flags. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Setup an extension api-server to work with the aggregation layer @@ -43,15 +44,15 @@ Alternatively, you can use an existing 3rd party solution, such as [apiserver-bu 1. Create a Kubernetes apiservice. The CA cert above should be base64 encoded, stripped of new lines and used as the spec.caBundle in the apiservice. This should not be namespaced. If using the [kube-aggregator API](https://github.com/kubernetes/kube-aggregator/), only pass in the PEM encoded CA bundle because the base 64 encoding is done for you. 1. Use kubectl to get your resource. It should return "No resources found." Which means that everything worked but you currently have no objects of that resource type created yet. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * If you haven't already, [configure the aggregation layer](/docs/tasks/access-kubernetes-api/configure-aggregation-layer/) and enable the apiserver flags. * For a high level overview, see [Extending the Kubernetes API with the aggregation layer](/docs/concepts/api-extension/apiserver-aggregation). * Learn how to [Extend the Kubernetes API Using Custom Resource Definitions](/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/content/en/docs/tasks/administer-cluster/_index.md b/content/en/docs/tasks/administer-cluster/_index.md new file mode 100755 index 0000000000000..20a53b2c3857a --- /dev/null +++ b/content/en/docs/tasks/administer-cluster/_index.md @@ -0,0 +1,5 @@ +--- +title: "Manage Memory, CPU, and API Resources" +weight: 20 +--- + diff --git a/docs/tasks/administer-cluster/access-cluster-api.md b/content/en/docs/tasks/administer-cluster/access-cluster-api.md similarity index 96% rename from docs/tasks/administer-cluster/access-cluster-api.md rename to content/en/docs/tasks/administer-cluster/access-cluster-api.md index 3c5d0869fb312..e49d488e2f8fc 100644 --- a/docs/tasks/administer-cluster/access-cluster-api.md +++ b/content/en/docs/tasks/administer-cluster/access-cluster-api.md @@ -1,17 +1,18 @@ --- title: Access Clusters Using the Kubernetes API +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to access clusters using the Kubernetes API. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} -{% endcapture %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Accessing the cluster API @@ -31,7 +32,7 @@ Check the location and credentials that kubectl knows about with this command: $ kubectl config view ``` -Many of the [examples](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/) provide an introduction to using +Many of the [examples](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/) provide an introduction to using kubectl. Complete documentation is found in the [kubectl manual](/docs/reference/kubectl/overview/). ### Directly accessing the REST API @@ -209,6 +210,6 @@ From within a Pod, the recommended ways to connect to the Kubernetes API are: In each case, the service account credentials of the Pod are used to communicate securely with the API server. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-cluster/access-cluster-services.md b/content/en/docs/tasks/administer-cluster/access-cluster-services.md similarity index 96% rename from docs/tasks/administer-cluster/access-cluster-services.md rename to content/en/docs/tasks/administer-cluster/access-cluster-services.md index 20aaf1cd2ce6b..542cd28d34ab2 100644 --- a/docs/tasks/administer-cluster/access-cluster-services.md +++ b/content/en/docs/tasks/administer-cluster/access-cluster-services.md @@ -1,17 +1,18 @@ --- title: Access Services Running on Clusters +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to connect to services running on the Kubernetes cluster. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} -{% endcapture %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Accessing services running on the cluster @@ -107,6 +108,6 @@ You may be able to put an apiserver proxy URL into the address bar of a browser. - 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. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-cluster/busybox.yaml b/content/en/docs/tasks/administer-cluster/busybox.yaml similarity index 100% rename from docs/tasks/administer-cluster/busybox.yaml rename to content/en/docs/tasks/administer-cluster/busybox.yaml diff --git a/docs/tasks/administer-cluster/calico-network-policy.md b/content/en/docs/tasks/administer-cluster/calico-network-policy.md similarity index 87% rename from docs/tasks/administer-cluster/calico-network-policy.md rename to content/en/docs/tasks/administer-cluster/calico-network-policy.md index a561af6f27a80..2cec4766359bc 100644 --- a/docs/tasks/administer-cluster/calico-network-policy.md +++ b/content/en/docs/tasks/administer-cluster/calico-network-policy.md @@ -2,17 +2,18 @@ reviewers: - caseydavenport title: Use Calico for NetworkPolicy +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows a couple of quick ways to create a Calico cluster on Kubernetes. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} Decide whether you want to deploy a [cloud](#creating-a-calico-cluster-with-google-kubernetes-engine-gke) or [local](#creating-a-local-calico-cluster-with-kubeadm) cluster. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Creating a Calico cluster with Google Kubernetes Engine (GKE) **Prerequisite**: [gcloud](https://cloud.google.com/sdk/docs/quickstarts). @@ -42,11 +43,10 @@ Decide whether you want to deploy a [cloud](#creating-a-calico-cluster-with-goog To get a local single-host Calico cluster in fifteen minutes using kubeadm, refer to the [Calico Quickstart](https://docs.projectcalico.org/latest/getting-started/kubernetes/). -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Once your cluster is running, you can follow the [Declare Network Policy](/docs/tasks/administer-cluster/declare-network-policy/) to try out Kubernetes NetworkPolicy. -{% endcapture %} +{{% /capture %}} -{% include templates/task.md %} \ No newline at end of file diff --git a/docs/tasks/administer-cluster/change-default-storage-class.md b/content/en/docs/tasks/administer-cluster/change-default-storage-class.md similarity index 91% rename from docs/tasks/administer-cluster/change-default-storage-class.md rename to content/en/docs/tasks/administer-cluster/change-default-storage-class.md index 625d599dfcf68..3e7abda85154f 100644 --- a/docs/tasks/administer-cluster/change-default-storage-class.md +++ b/content/en/docs/tasks/administer-cluster/change-default-storage-class.md @@ -1,20 +1,21 @@ --- title: Change the default StorageClass +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to change the default Storage Class that is used to provision volumes for PersistentVolumeClaims that have no special requirements. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Why change the default storage class? @@ -81,10 +82,10 @@ for details about addon manager and how to disable individual addons. standard kubernetes.io/gce-pd gold (default) kubernetes.io/gce-pd -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [StorageClasses](/docs/concepts/storage/persistent-volumes/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-cluster/change-pv-reclaim-policy.md b/content/en/docs/tasks/administer-cluster/change-pv-reclaim-policy.md similarity index 87% rename from docs/tasks/administer-cluster/change-pv-reclaim-policy.md rename to content/en/docs/tasks/administer-cluster/change-pv-reclaim-policy.md index 5a3e3e0b676ac..bd9437c127ddc 100644 --- a/docs/tasks/administer-cluster/change-pv-reclaim-policy.md +++ b/content/en/docs/tasks/administer-cluster/change-pv-reclaim-policy.md @@ -1,19 +1,20 @@ --- title: Change the Reclaim Policy of a PersistentVolume +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to change the reclaim policy of a Kubernetes PersistentVolume. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Why change reclaim policy of a PersistentVolume @@ -64,17 +65,17 @@ the corresponding `PersistentVolume` is not be deleted. Instead, it is moved to `default/claim3` has reclaim policy `Retain`. It will not be automatically deleted when a user deletes claim `default/claim3`. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [PersistentVolumes](/docs/concepts/storage/persistent-volumes/). * Learn more about [PersistentVolumeClaims](/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims). ### Reference -* [PersistentVolume](/docs/reference/generated/kubernetes-api/{{page.version}}/#persistentvolume-v1-core) -* [PersistentVolumeClaim](/docs/reference/generated/kubernetes-api/{{page.version}}/#persistentvolumeclaim-v1-core) -* See the `persistentVolumeReclaimPolicy` field of [PersistentVolumeSpec](/docs/reference/generated/kubernetes-api/{{page.version}}/#persistentvolumeclaim-v1-core). -{% endcapture %} +* [PersistentVolume](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolume-v1-core) +* [PersistentVolumeClaim](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolumeclaim-v1-core) +* See the `persistentVolumeReclaimPolicy` field of [PersistentVolumeSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolumeclaim-v1-core). +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-cluster/cilium-network-policy.md b/content/en/docs/tasks/administer-cluster/cilium-network-policy.md similarity index 90% rename from docs/tasks/administer-cluster/cilium-network-policy.md rename to content/en/docs/tasks/administer-cluster/cilium-network-policy.md index fa4ed37eb80c6..bf5531efb0df0 100644 --- a/docs/tasks/administer-cluster/cilium-network-policy.md +++ b/content/en/docs/tasks/administer-cluster/cilium-network-policy.md @@ -2,21 +2,22 @@ reviewers: - danwent title: Use Cilium for NetworkPolicy +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to use Cilium for NetworkPolicy. For background on Cilium, read the [Introduction to Cilium](https://cilium.readthedocs.io/en/latest/intro). -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Deploying Cilium on Minikube for Basic Testing To get familiar with Cilium easily you can follow the @@ -48,9 +49,9 @@ For detailed instructions around deploying Cilium for production, see: This documentation includes detailed requirements, instructions and example production DaemonSet files. -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Understanding Cilium components Deploying a cluster with Cilium adds Pods to the `kube-system` namespace. To see @@ -79,14 +80,14 @@ includes an example DaemonSet which can be customized to point to this key-value store cluster. The simple ''all-in-one'' DaemonSet for minikube requires no such configuration because it automatically connects to the minikube's etcd instance. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Once your cluster is running, you can follow the [Declare Network Policy](/docs/tasks/administer-cluster/declare-network-policy/) to try out Kubernetes NetworkPolicy with Cilium. Have fun, and if you have questions, contact us using the [Cilium Slack Channel](https://cilium.herokuapp.com/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-cluster/cloud-controller-manager-daemonset-example.yaml b/content/en/docs/tasks/administer-cluster/cloud-controller-manager-daemonset-example.yaml similarity index 100% rename from docs/tasks/administer-cluster/cloud-controller-manager-daemonset-example.yaml rename to content/en/docs/tasks/administer-cluster/cloud-controller-manager-daemonset-example.yaml diff --git a/docs/tasks/administer-cluster/cluster-management.md b/content/en/docs/tasks/administer-cluster/cluster-management.md similarity index 99% rename from docs/tasks/administer-cluster/cluster-management.md rename to content/en/docs/tasks/administer-cluster/cluster-management.md index 5cea65df16abf..413248cc72227 100644 --- a/docs/tasks/administer-cluster/cluster-management.md +++ b/content/en/docs/tasks/administer-cluster/cluster-management.md @@ -5,8 +5,7 @@ reviewers: title: Cluster Management --- -* TOC -{:toc} +{{< toc >}} This document describes several topics related to the lifecycle of a cluster: creating a new cluster, upgrading your cluster's diff --git a/docs/tasks/administer-cluster/configure-multiple-schedulers.md b/content/en/docs/tasks/administer-cluster/configure-multiple-schedulers.md similarity index 93% rename from docs/tasks/administer-cluster/configure-multiple-schedulers.md rename to content/en/docs/tasks/administer-cluster/configure-multiple-schedulers.md index 61c5cf61ec506..64f72a2f14347 100644 --- a/docs/tasks/administer-cluster/configure-multiple-schedulers.md +++ b/content/en/docs/tasks/administer-cluster/configure-multiple-schedulers.md @@ -13,7 +13,7 @@ learn how to run multiple schedulers in Kubernetes with an example. A detailed description of how to implement a scheduler is outside the scope of this document. Please refer to the kube-scheduler implementation in -[pkg/scheduler](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/pkg/scheduler) +[pkg/scheduler](https://github.com/kubernetes/kubernetes/tree/{{< param "githubbranch" >}}/pkg/scheduler) in the Kubernetes source directory for a canonical example. ### 1. Package the scheduler @@ -58,7 +58,7 @@ for this example. A [Deployment](/docs/concepts/workloads/controllers/deployment thereby making the scheduler resilient to failures. Here is the deployment config. Save it as `my-scheduler.yaml`: -{% include code.html language="yaml" file="my-scheduler.yaml" ghlink="/docs/tasks/administer-cluster/my-scheduler.yaml" %} +{{< code file="my-scheduler.yaml" >}} An important thing to note here is that the name of the scheduler specified as an argument to the scheduler command in the container spec should be unique. This is the name that is matched against the value of the optional `spec.schedulerName` on pods, to determine whether this scheduler is responsible for scheduling a particular pod. @@ -131,7 +131,7 @@ scheduler in that pod spec. Let's look at three examples. - Pod spec without any scheduler name - {% include code.html language="yaml" file="pod1.yaml" ghlink="/docs/tasks/administer-cluster/pod1.yaml" %} + {{< code file="pod1.yaml" >}} When no scheduler name is supplied, the pod is automatically scheduled using the default-scheduler. @@ -144,7 +144,7 @@ kubectl create -f pod1.yaml - Pod spec with `default-scheduler` - {% include code.html language="yaml" file="pod2.yaml" ghlink="/docs/tasks/administer-cluster/pod2.yaml" %} + {{< code file="pod2.yaml" >}} A scheduler is specified by supplying the scheduler name as a value to `spec.schedulerName`. In this case, we supply the name of the default scheduler which is `default-scheduler`. @@ -157,7 +157,7 @@ kubectl create -f pod2.yaml - Pod spec with `my-scheduler` - {% include code.html language="yaml" file="pod3.yaml" ghlink="/docs/tasks/administer-cluster/pod3.yaml" %} + {{< code file="pod3.yaml" >}} In this case, we specify that this pod should be scheduled using the scheduler that we deployed - `my-scheduler`. Note that the value of `spec.schedulerName` should match the name supplied to the scheduler diff --git a/docs/tasks/administer-cluster/configure-upgrade-etcd.md b/content/en/docs/tasks/administer-cluster/configure-upgrade-etcd.md similarity index 98% rename from docs/tasks/administer-cluster/configure-upgrade-etcd.md rename to content/en/docs/tasks/administer-cluster/configure-upgrade-etcd.md index 8ccf8e11c7ec4..238f83310005a 100644 --- a/docs/tasks/administer-cluster/configure-upgrade-etcd.md +++ b/content/en/docs/tasks/administer-cluster/configure-upgrade-etcd.md @@ -5,7 +5,7 @@ reviewers: title: Operating etcd clusters for Kubernetes --- -{% glossary_definition term_id="etcd" length="all" prepend="etcd is a "%} +{{< glossary_definition term_id="etcd" length="all" prepend="etcd is a ">}} x.x.x` with `--force`, which can be used to recover from a bad state. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-1-9.md b/content/en/docs/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-1-9.md similarity index 98% rename from docs/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-1-9.md rename to content/en/docs/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-1-9.md index 641aa50933bf4..dac73e9862ac8 100644 --- a/docs/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-1-9.md +++ b/content/en/docs/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-1-9.md @@ -5,16 +5,17 @@ reviewers: - roberthbailey - jbeda title: Upgrading/downgrading kubeadm clusters between v1.8 to v1.9 +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This guide is for upgrading `kubeadm` clusters from version 1.8.x to 1.9.x, as well as 1.8.x to 1.8.y and 1.9.x to 1.9.y where `y > x`. See also [upgrading kubeadm clusters from 1.7 to 1.8](/docs/tasks/administer-cluster/kubeadm-upgrade-1-8/) if you're on a 1.7 cluster currently. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} Before proceeding: @@ -23,14 +24,15 @@ Before proceeding: - `kubeadm upgrade` now allows you to upgrade etcd. `kubeadm upgrade` will also upgrade of etcd to 3.1.10 as part of upgrading from v1.8 to v1.9 by default. This is due to the fact that etcd 3.1.10 is the officially validated etcd version for Kubernetes v1.9. The upgrade is handled automatically by kubeadm for you. - Note that `kubeadm upgrade` will not touch any of your workloads, only Kubernetes-internal components. As a best-practice you should back up what's important to you. For example, any app-level state, such as a database an app might depend on (like MySQL or MongoDB) must be backed up beforehand. +{{< caution >}} **Caution:** All the containers will get restarted after the upgrade, due to container spec hash value gets changed. -{: .caution} +{{< /caution >}} Also, note that only one minor version upgrade is supported. For example, you can only upgrade from 1.8 to 1.9, not from 1.7 to 1.9. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Upgrading your control plane @@ -45,10 +47,11 @@ curl -sSL https://dl.k8s.io/release/${VERSION}/bin/linux/${ARCH}/kubeadm > /usr/ chmod a+rx /usr/bin/kubeadm ``` +{{< caution >}} **Caution:** Upgrading the `kubeadm` package on your system prior to upgrading the control plane causes a failed upgrade. Even though `kubeadm` ships in the Kubernetes repositories, it's important to install `kubeadm` manually. The kubeadm team is working on fixing this limitation. -{: .caution} +{{< /caution >}} Verify that this download of kubeadm works and has the expected version: @@ -256,6 +259,6 @@ you can run `kubeadm upgrade` again as it is idempotent and should eventually ma You can use `kubeadm upgrade` to change a running cluster with `x.x.x --> x.x.x` with `--force`, which can be used to recover from a bad state. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-ha.md b/content/en/docs/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-ha.md similarity index 97% rename from docs/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-ha.md rename to content/en/docs/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-ha.md index 0da21d9bb15a5..dfa8c127d9a4a 100644 --- a/docs/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-ha.md +++ b/content/en/docs/tasks/administer-cluster/upgrade-downgrade/kubeadm-upgrade-ha.md @@ -5,15 +5,16 @@ reviewers: - timothysc - jbeda title: Upgrading kubeadm HA clusters from 1.9.x to 1.9.y +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This guide is for upgrading `kubeadm` HA clusters from version 1.9.x to 1.9.y where `y > x`. The term "`kubeadm` HA clusters" refers to clusters of more than one master node created with `kubeadm`. To set up an HA cluster for Kubernetes version 1.9.x `kubeadm` requires additional manual steps. See [Creating HA clusters with kubeadm](/docs/setup/independent/high-availability/) for instructions on how to do this. The upgrade procedure described here targets clusters created following those very instructions. See [Upgrading/downgrading kubeadm clusters between v1.8 to v1.9](/docs/tasks/administer-cluster/kubeadm-upgrade-1-9/) for more instructions on how to create an HA cluster with `kubeadm`. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} Before proceeding: @@ -22,9 +23,9 @@ Before proceeding: - Note that `kubeadm upgrade` will not touch any of your workloads, only Kubernetes-internal components. As a best-practice you should back up anything important to you. For example, any application-level state, such as a database and application might depend on (like MySQL or MongoDB) should be backed up beforehand. - Read [Upgrading/downgrading kubeadm clusters between v1.8 to v1.9](/docs/tasks/administer-cluster/kubeadm-upgrade-1-9/) to learn about the relevant prerequisites. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Preparation @@ -57,8 +58,9 @@ If the prerequisites are met you'll get a summary of the software versions kubea Kube DNS 1.14.5 1.14.7 Etcd 3.2.7 3.1.11 +{{< caution >}} **Caution:** Currently the only supported configuration for kubeadm HA clusters requires the use of an externally managed etcd cluster. Upgrading etcd is not supported as a part of the upgrade. If necessary you will have to upgrade the etcd cluster according to [etcd's upgrade instructions](/docs/tasks/administer-cluster/configure-upgrade-etcd/), which is beyond the scope of these instructions. -{: .caution} +{{< /caution >}} ## Upgrading your control plane @@ -88,8 +90,9 @@ Next, manually upgrade your CNI provider Your Container Network Interface (CNI) provider may have its own upgrade instructions to follow. Check the [addons](/docs/concepts/cluster-administration/addons/) page to find your CNI provider and see if there are additional upgrade steps necessary. +{{< note >}} **Note:** The `kubeadm upgrade apply` step has been known to fail when run initially on the secondary masters (timed out waiting for the restarted static pods to come up). It should succeed if retried after a minute or two. -{: .note} +{{< /note >}} ## Upgrade base software packages @@ -128,6 +131,6 @@ If the upgrade fails the situation afterwards depends on the phase in which thin 2. If `/tmp/kubeadm upgrade apply` on one of the secondary masters failed you still have a working, upgraded cluster, but with the secondary masters in a somewhat undefined condition. You will have to find out what went wrong and join the secondaries manually. As mentioned above, sometimes upgrading one of the secondary masters fails waiting for the restarted static pods first, but succeeds when the operation is simply repeated after a little pause of one or two minutes. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-cluster/upgrade-downgrade/upgrade-1-6.md b/content/en/docs/tasks/administer-cluster/upgrade-downgrade/upgrade-1-6.md similarity index 98% rename from docs/tasks/administer-cluster/upgrade-downgrade/upgrade-1-6.md rename to content/en/docs/tasks/administer-cluster/upgrade-downgrade/upgrade-1-6.md index 0eba137bf5b75..036fa2a30dad6 100644 --- a/docs/tasks/administer-cluster/upgrade-downgrade/upgrade-1-6.md +++ b/content/en/docs/tasks/administer-cluster/upgrade-downgrade/upgrade-1-6.md @@ -4,8 +4,7 @@ reviewers: title: Cluster Management Guide for Version 1.6 --- -* TOC -{:toc} +{{< toc >}} This document outlines the potentially disruptive changes that exist in the 1.6 release cycle. Operators, administrators, and developers should take note of the changes below in order to maintain continuity across their upgrade process. diff --git a/docs/tasks/administer-cluster/weave-network-policy.md b/content/en/docs/tasks/administer-cluster/weave-network-policy.md similarity index 90% rename from docs/tasks/administer-cluster/weave-network-policy.md rename to content/en/docs/tasks/administer-cluster/weave-network-policy.md index c7576a99b7406..8f32e0cc0e2d7 100644 --- a/docs/tasks/administer-cluster/weave-network-policy.md +++ b/content/en/docs/tasks/administer-cluster/weave-network-policy.md @@ -2,21 +2,22 @@ reviewers: - bboreham title: Weave Net for NetworkPolicy +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to use Weave Net for NetworkPolicy. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} You need to have a Kubernetes cluster. Follow the [kubeadm getting started guide](/docs/getting-started-guides/kubeadm/) to bootstrap one. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Install the Weave Net addon @@ -46,12 +47,12 @@ weave-net-pmw8w 2/2 Running 0 9d Each Node has a weave Pod, and all Pods are `Running` and `2/2 READY`. (`2/2` means that each Pod has `weave` and `weave-npc`.) -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Once you have installed the Weave Net addon, you can follow the [Declare Network Policy](/docs/tasks/administer-cluster/declare-network-policy/) to try out Kubernetes NetworkPolicy. If you have any question, contact us at [#weave-community on Slack or Weave User Group](https://github.com/weaveworks/weave#getting-help). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/content/en/docs/tasks/administer-federation/_index.md b/content/en/docs/tasks/administer-federation/_index.md new file mode 100755 index 0000000000000..e3cb1fe59da7d --- /dev/null +++ b/content/en/docs/tasks/administer-federation/_index.md @@ -0,0 +1,5 @@ +--- +title: "Federation - Run an App on Multiple Clusters" +weight: 160 +--- + diff --git a/docs/tasks/administer-federation/cluster.md b/content/en/docs/tasks/administer-federation/cluster.md similarity index 94% rename from docs/tasks/administer-federation/cluster.md rename to content/en/docs/tasks/administer-federation/cluster.md index 4859133631033..16c7bf4235e03 100644 --- a/docs/tasks/administer-federation/cluster.md +++ b/content/en/docs/tasks/administer-federation/cluster.md @@ -1,10 +1,11 @@ --- title: Federated Cluster +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} This guide explains how to use Clusters API resource in a Federation control plane. @@ -12,17 +13,17 @@ Different than other Kubernetes resources, such as Deployments, Services and Con clusters only exist in the federation context, i.e. those requests must be submitted to the federation api-server. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include federated-task-tutorial-prereqs.md %} +* {{< include "federated-task-tutorial-prereqs.md" >}} * You should also have a basic [working knowledge of Kubernetes](/docs/setup/pick-right-solution/) in general. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Listing Clusters @@ -111,6 +112,6 @@ Currently, only integers are supported with `Gt` or `Lt`. The full clusters API reference is currently in `federation/v1beta1` and more details can be found in the [Federation API reference page](/docs/reference/generated/federation/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-federation/configmap.md b/content/en/docs/tasks/administer-federation/configmap.md similarity index 91% rename from docs/tasks/administer-federation/configmap.md rename to content/en/docs/tasks/administer-federation/configmap.md index 2df307d245711..0b597d3fddf58 100644 --- a/docs/tasks/administer-federation/configmap.md +++ b/content/en/docs/tasks/administer-federation/configmap.md @@ -1,10 +1,11 @@ --- title: Federated ConfigMap +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} This guide explains how to use ConfigMaps in a Federation control plane. @@ -13,18 +14,18 @@ ConfigMaps](/docs/tasks/configure-pod-container/configure-pod-configmap/) and pr Creating them in the federation control plane ensures that they are synchronized across all the clusters in federation. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include federated-task-tutorial-prereqs.md %} +* {{< include "federated-task-tutorial-prereqs.md" >}} * You should also have a basic [working knowledge of Kubernetes](/docs/setup/pick-right-solution/) in general and [ConfigMaps](/docs/tasks/configure-pod-container/configure-pod-configmap/) in particular. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Creating a Federated ConfigMap @@ -82,6 +83,6 @@ corresponding ConfigMaps from underlying clusters. You must delete the underlying ConfigMaps manually. We intend to fix this in the future. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-federation/daemonset.md b/content/en/docs/tasks/administer-federation/daemonset.md similarity index 90% rename from docs/tasks/administer-federation/daemonset.md rename to content/en/docs/tasks/administer-federation/daemonset.md index 03083631f8686..4ff1a24b07a85 100644 --- a/docs/tasks/administer-federation/daemonset.md +++ b/content/en/docs/tasks/administer-federation/daemonset.md @@ -1,10 +1,11 @@ --- title: Federated DaemonSet +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} This guide explains how to use DaemonSets in a federation control plane. @@ -13,18 +14,18 @@ this guide) are very similar to the traditional Kubernetes [DaemonSets](/docs/concepts/workloads/controllers/daemonset/) and provide the same functionality. Creating them in the federation control plane ensures that they are synchronized across all the clusters in federation. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include federated-task-tutorial-prereqs.md %} +* {{< include "federated-task-tutorial-prereqs.md" >}} * You are also expected to have a basic [working knowledge of Kubernetes](/docs/setup/pick-right-solution/) in general and [DaemonSets](/docs/concepts/workloads/controllers/daemonset/) in particular. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Creating a Federated Daemonset @@ -75,6 +76,6 @@ For example, you can do that using kubectl by running: kubectl --context=federation-cluster delete daemonset mydaemonset ``` -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-federation/deployment.md b/content/en/docs/tasks/administer-federation/deployment.md similarity index 92% rename from docs/tasks/administer-federation/deployment.md rename to content/en/docs/tasks/administer-federation/deployment.md index c5d985c1e3b63..db1a4043dc6d2 100644 --- a/docs/tasks/administer-federation/deployment.md +++ b/content/en/docs/tasks/administer-federation/deployment.md @@ -1,10 +1,11 @@ --- title: Federated Deployment +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} This guide explains how to use Deployments in the Federation control plane. @@ -17,18 +18,18 @@ replicas exist across the registered clusters. **As of Kubernetes version 1.5, Federated Deployment is an Alpha feature. The core functionality of Deployment is present, but some features (such as full rollout compatibility) are still in development.** -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include federated-task-tutorial-prereqs.md %} +* {{< include "federated-task-tutorial-prereqs.md" >}} * You should also have a basic [working knowledge of Kubernetes](/docs/setup/pick-right-solution/) in general and [Deployments](/docs/concepts/workloads/controllers/deployment/) in particular. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Creating a Federated Deployment The API for Federated Deployment is compatible with the @@ -69,7 +70,7 @@ if you have 3 registered clusters and you create a Federated Deployment with `spec.replicas = 9`, then each Deployment in the 3 clusters will have `spec.replicas=3`. To modify the number of replicas in each cluster, you can specify -[FederatedReplicaSetPreference](https://github.com/kubernetes/federation/blob/{{page.githubbranch}}/apis/federation/types.go) +[FederatedReplicaSetPreference](https://github.com/kubernetes/federation/blob/{{< param "githubbranch" >}}/apis/federation/types.go) as an annotation with key `federation.kubernetes.io/deployment-preferences` on Federated Deployment. @@ -102,6 +103,6 @@ For example, you can do that using kubectl by running: kubectl --context=federation-cluster delete deployment mydep ``` -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-federation/events.md b/content/en/docs/tasks/administer-federation/events.md similarity index 95% rename from docs/tasks/administer-federation/events.md rename to content/en/docs/tasks/administer-federation/events.md index 2464ff23839aa..4f1a2f23b5fd1 100644 --- a/docs/tasks/administer-federation/events.md +++ b/content/en/docs/tasks/administer-federation/events.md @@ -2,13 +2,12 @@ title: Federated Events --- -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} This guide explains how to use events in federation control plane to help in debugging. -* TOC -{:toc} +{{< toc >}} ## Prerequisites diff --git a/docs/tasks/administer-federation/hpa.md b/content/en/docs/tasks/administer-federation/hpa.md similarity index 96% rename from docs/tasks/administer-federation/hpa.md rename to content/en/docs/tasks/administer-federation/hpa.md index b227b90052694..839b4d04d3993 100644 --- a/docs/tasks/administer-federation/hpa.md +++ b/content/en/docs/tasks/administer-federation/hpa.md @@ -1,12 +1,13 @@ --- title: Federated Horizontal Pod Autoscalers (HPA) +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} -{% include feature-state-alpha.md %} +{{< feature-state state="alpha" >}} -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} This guide explains how to use federated horizontal pod autoscalers (HPAs) in the federation control plane. @@ -17,11 +18,11 @@ desired number of replicas of the target object are scaled across the registered instead of a single cluster. Also, the control plane keeps monitoring the status of each individual HPA in the federated clusters and ensures the workload replicas move where they are needed most by manipulating the min and max limits of the HPA objects in the federated clusters. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include federated-task-tutorial-prereqs.md %} +* {{< include "federated-task-tutorial-prereqs.md" >}} * You are also expected to have a basic [working knowledge of Kubernetes](/docs/setup/) in general and [HPAs](/docs/tasks/run-application/horizontal-pod-autoscale/) in particular. @@ -31,9 +32,9 @@ federated API server. To use this feature, the user or the admin deploying the f plane needs to run the federated API server with option `--runtime-config=api/all=true` to enable all APIs, including alpha APIs. Additionally, the federated HPA only works when used with CPU utilization metrics. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Creating a federated HPA @@ -83,8 +84,9 @@ except in the number of min and max replicas. The federation control plane ensur max replicas on the federated HPA object, and the sum of minimum replicas will be greater than or equal to the minimum specified on the federated HPA object. +{{< note >}} **Note:** A particular cluster cannot have a minimum replica sum of 0. -{: .note} +{{< /note >}} ### Spreading HPA min and max replicas in underlying clusters @@ -174,6 +176,6 @@ the replicas move (or remain) in the cluster(s) which need them. For more information, see ["federated HPA design proposal"](https://github.com/kubernetes/community/pull/593). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-federation/ingress.md b/content/en/docs/tasks/administer-federation/ingress.md similarity index 98% rename from docs/tasks/administer-federation/ingress.md rename to content/en/docs/tasks/administer-federation/ingress.md index ddbdeb2f3b820..a023a45c8887c 100644 --- a/docs/tasks/administer-federation/ingress.md +++ b/content/en/docs/tasks/administer-federation/ingress.md @@ -1,10 +1,11 @@ --- title: Federated Ingress +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} This page explains how to use Kubernetes Federated Ingress to deploy a common HTTP(S) virtual IP load balancer across a federated service running in @@ -57,9 +58,9 @@ backing the Ingress in their cluster if it exists and is healthy, or the closest different cluster if it does not. Note that this involves a network trip to the HTTP(s) load balancer, which resides outside your local Kubernetes cluster but inside the same GCP region. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} This document assumes that you have a running Kubernetes Cluster Federation installation. If not, then see the [federation admin guide](/docs/admin/federation/) to learn how to @@ -71,9 +72,9 @@ by Kelsey Hightower, are also available to help you. You must also have a basic [working knowledge of Kubernetes](/docs/setup/) in general, and [Ingress](/docs/concepts/services-networking/ingress/) in particular. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Creating a federated ingress You can create a federated ingress in any of the usual ways, for example, using kubectl: @@ -298,11 +299,11 @@ Check that: delete any ingresses created before the cluster joined the federation (and had its GLBC reconfigured), and recreate them if necessary. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * If you need assistance, use one of the [support channels](/docs/tasks/debug-application-cluster/troubleshooting/) to seek assistance. * For details about use cases that motivated this work, see [Federation proposal](https://git.k8s.io/community/contributors/design-proposals/multicluster/federation.md). -{% endcapture %} -{% include templates/task.md %} +{{% /capture %}} + diff --git a/docs/tasks/administer-federation/job.md b/content/en/docs/tasks/administer-federation/job.md similarity index 90% rename from docs/tasks/administer-federation/job.md rename to content/en/docs/tasks/administer-federation/job.md index e45e65e285b5f..84a234ecd6c7e 100644 --- a/docs/tasks/administer-federation/job.md +++ b/content/en/docs/tasks/administer-federation/job.md @@ -1,10 +1,11 @@ --- title: Federated Jobs +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} This guide explains how to use jobs in the federation control plane. @@ -13,17 +14,17 @@ this guide) are similar to the traditional [Kubernetes jobs](/docs/concepts/workloads/controllers/job/), and provide the same functionality. Creating jobs in the federation control plane ensures that the desired number of parallelism and completions exist across the registered clusters. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include federated-task-tutorial-prereqs.md %} +* {{< include "federated-task-tutorial-prereqs.md" >}} * You are also expected to have a basic [working knowledge of Kubernetes](/docs/setup/) in general and [jobs](/docs/concepts/workloads/controllers/jobs-run-to-completion/) in particular. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Creating a federated job @@ -64,7 +65,7 @@ if you have 3 registered clusters and you create a federated job with `spec.parallelism = 9` and `spec.completions = 18`, then each job in the 3 clusters has `spec.parallelism = 3` and `spec.completions = 6`. To modify the number of parallelism and completions in each cluster, you can specify -[ReplicaAllocationPreferences](https://github.com/kubernetes/federation/blob/{{page.githubbranch}}/apis/federation/types.go) +[ReplicaAllocationPreferences](https://github.com/kubernetes/federation/blob/{{< param "githubbranch" >}}/apis/federation/types.go) as an annotation with key `federation.kubernetes.io/job-preferences` on the federated job. @@ -95,11 +96,12 @@ For example, with kubectl: kubectl --context=federation-cluster delete job myjob ``` +{{< note >}} **Note:** Deleting a federated job will not delete the corresponding jobs from underlying clusters. You must delete the underlying jobs manually. -{: .note} +{{< /note >}} + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/docs/tasks/administer-federation/namespaces.md b/content/en/docs/tasks/administer-federation/namespaces.md similarity index 91% rename from docs/tasks/administer-federation/namespaces.md rename to content/en/docs/tasks/administer-federation/namespaces.md index f507f1f138fa3..99d3db5d63c8b 100644 --- a/docs/tasks/administer-federation/namespaces.md +++ b/content/en/docs/tasks/administer-federation/namespaces.md @@ -1,10 +1,11 @@ --- title: Federated Namespaces +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} This guide explains how to use Namespaces in Federation control plane. @@ -13,18 +14,18 @@ this guide) are very similar to the traditional [Kubernetes Namespaces](/docs/concepts/overview/working-with-objects/namespaces/) providing the same functionality. Creating them in the federation control plane ensures that they are synchronized across all the clusters in federation. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include federated-task-tutorial-prereqs.md %} +* {{< include "federated-task-tutorial-prereqs.md" >}} * You are also expected to have a basic [working knowledge of Kubernetes](/docs/setup/pick-right-solution/) in general and [Namespaces](/docs/concepts/overview/working-with-objects/namespaces/) in particular. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Creating a Federated Namespace @@ -85,6 +86,6 @@ corresponding Namespace and resources in those Namespaces from underlying cluste Users are expected to delete them manually. We intend to fix this in the future. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-federation/replicaset.md b/content/en/docs/tasks/administer-federation/replicaset.md similarity index 94% rename from docs/tasks/administer-federation/replicaset.md rename to content/en/docs/tasks/administer-federation/replicaset.md index cd4d8a9fd7cff..4e5528c991a99 100644 --- a/docs/tasks/administer-federation/replicaset.md +++ b/content/en/docs/tasks/administer-federation/replicaset.md @@ -1,10 +1,11 @@ --- title: Federated ReplicaSets +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} This guide explains how to use ReplicaSets in the Federation control plane. @@ -13,17 +14,17 @@ this guide) are very similar to the traditional [Kubernetes ReplicaSets](/docs/concepts/workloads/controllers/replicaset/), and provide the same functionality. Creating them in the federation control plane ensures that the desired number of replicas exist across the registered clusters. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include federated-task-tutorial-prereqs.md %} +* {{< include "federated-task-tutorial-prereqs.md" >}} * You are also expected to have a basic [working knowledge of Kubernetes](/docs/setup/) in general and [ReplicaSets](/docs/concepts/workloads/controllers/replicaset/) in particular. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Creating a Federated ReplicaSet @@ -125,6 +126,6 @@ corresponding ReplicaSets from underlying clusters. You must delete the underlying ReplicaSets manually. We intend to fix this in the future. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/administer-federation/secret.md b/content/en/docs/tasks/administer-federation/secret.md similarity index 98% rename from docs/tasks/administer-federation/secret.md rename to content/en/docs/tasks/administer-federation/secret.md index bd16499cf0777..48795b0dd11d6 100644 --- a/docs/tasks/administer-federation/secret.md +++ b/content/en/docs/tasks/administer-federation/secret.md @@ -2,12 +2,11 @@ title: Federated Secrets --- -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} This guide explains how to use secrets in Federation control plane. -* TOC -{:toc} +{{< toc >}} ## Prerequisites diff --git a/content/en/docs/tasks/configure-pod-container/_index.md b/content/en/docs/tasks/configure-pod-container/_index.md new file mode 100755 index 0000000000000..c797dc19a51a3 --- /dev/null +++ b/content/en/docs/tasks/configure-pod-container/_index.md @@ -0,0 +1,5 @@ +--- +title: "Configure Pods and Containers" +weight: 30 +--- + diff --git a/docs/tasks/configure-pod-container/assign-cpu-resource.md b/content/en/docs/tasks/configure-pod-container/assign-cpu-resource.md similarity index 93% rename from docs/tasks/configure-pod-container/assign-cpu-resource.md rename to content/en/docs/tasks/configure-pod-container/assign-cpu-resource.md index dc0fa5fe2cefa..bfe53504fe7b1 100644 --- a/docs/tasks/configure-pod-container/assign-cpu-resource.md +++ b/content/en/docs/tasks/configure-pod-container/assign-cpu-resource.md @@ -1,20 +1,21 @@ --- title: Assign CPU Resources to Containers and Pods +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to assign a CPU *request* and a CPU *limit* to a Container. A Container is guaranteed to have as much CPU as it requests, but is not allowed to use more CPU than its limit. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} Each node in your cluster must have at least 1 cpu. @@ -42,10 +43,10 @@ NAMESPACE NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-system heapster 10.11.240.9 80/TCP 6d ``` -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Create a namespace @@ -65,7 +66,7 @@ In this exercise, you create a Pod that has one Container. The Container has a C request of 0.5 cpu and a CPU limit of 1 cpu. Here's the configuration file for the Pod: -{% include code.html language="yaml" file="cpu-request-limit.yaml" ghlink="/docs/tasks/configure-pod-container/cpu-request-limit.yaml" %} +{{< code file="cpu-request-limit.yaml" >}} In the configuration file, the `args` section provides arguments for the Container when it starts. The `-cpus "2"` argument tells the Container to attempt to use 2 cpus. @@ -125,11 +126,12 @@ Recall that by setting `-cpu "2"`, you configured the Container to attempt to us But the Container is only being allowed to use about 1 cpu. The Container's CPU use is being throttled, because the Container is attempting to use more CPU resources than its limit. +{{< note >}} **Note:** There's another possible explanation for the CPU throttling. The Node might not have enough CPU resources available. Recall that the prerequisites for this exercise require that each of your Nodes has at least 1 cpu. If your Container is running on a Node that has only 1 cpu, the Container cannot use more than 1 cpu regardless of the CPU limit specified for the Container. -{: .note} +{{< /note >}} ## CPU units @@ -168,7 +170,7 @@ the capacity of any Node in your cluster. Here is the configuration file for a P that has one Container. The Container requests 100 cpu, which is likely to exceed the capacity of any Node in your cluster. -{% include code.html language="yaml" file="cpu-request-limit-2.yaml" ghlink="/docs/tasks/configure-pod-container/cpu-request-limit-2.yaml" %} +{{< code file="cpu-request-limit-2.yaml" >}} Create the Pod: @@ -225,7 +227,7 @@ could use all of the CPU resources available on the Node where it is running. * The Container is running in a namespace that has a default CPU limit, and the Container is automatically assigned the default limit. Cluster administrators can use a -[LimitRange](/docs/reference/generated/kubernetes-api/{{page.version}}/#limitrange-v1-core/) +[LimitRange](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#limitrange-v1-core/) to specify a default value for the CPU limit. ## Motivation for CPU requests and limits @@ -246,9 +248,9 @@ Delete your namespace: kubectl delete namespace cpu-example ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} ### For app developers @@ -273,7 +275,7 @@ kubectl delete namespace cpu-example * [Configure Quotas for API Objects](/docs/tasks/administer-cluster/quota-api-object/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/assign-memory-resource.md b/content/en/docs/tasks/configure-pod-container/assign-memory-resource.md similarity index 93% rename from docs/tasks/configure-pod-container/assign-memory-resource.md rename to content/en/docs/tasks/configure-pod-container/assign-memory-resource.md index 2ecbb41d08142..90aae46c472d9 100644 --- a/docs/tasks/configure-pod-container/assign-memory-resource.md +++ b/content/en/docs/tasks/configure-pod-container/assign-memory-resource.md @@ -1,19 +1,20 @@ --- title: Assign Memory Resources to Containers and Pods +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to assign a memory *request* and a memory *limit* to a Container. A Container is guaranteed to have as much memory as it requests, but is not allowed to use more memory than its limit. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} Each node in your cluster must have at least 300 MiB of memory. @@ -41,10 +42,10 @@ NAMESPACE NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-system heapster 10.11.240.9 80/TCP 6d ``` -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Create a namespace @@ -64,7 +65,7 @@ In this exercise, you create a Pod that has one Container. The Container has a m request of 100 MiB and a memory limit of 200 MiB. Here's the configuration file for the Pod: -{% include code.html language="yaml" file="memory-request-limit.yaml" ghlink="/docs/tasks/configure-pod-container/memory-request-limit.yaml" %} +{{< code file="memory-request-limit.yaml" >}} In the configuration file, the `args` section provides arguments for the Container when it starts. The `"--vm-bytes", "150M"` arguments tell the Container to attempt to allocate 150 MiB of memory. @@ -144,7 +145,7 @@ In this exercise, you create a Pod that attempts to allocate more memory than it Here is the configuration file for a Pod that has one Container. The Container has a memory request of 50 MiB and a memory limit of 100 MiB. -{% include code.html language="yaml" file="memory-request-limit-2.yaml" ghlink="/docs/tasks/configure-pod-container/memory-request-limit-2.yaml" %} +{{< code file="memory-request-limit-2.yaml" >}} In the configuration file, in the `args` section, you can see that the Container will attempt to allocate 250 MiB of memory, which is well above the 100 MiB limit. @@ -255,7 +256,7 @@ capacity of any Node in your cluster. Here is the configuration file for a Pod t Container. The Container requests 1000 GiB of memory, which is likely to exceed the capacity of any Node in your cluster. -{% include code.html language="yaml" file="memory-request-limit-3.yaml" ghlink="/docs/tasks/configure-pod-container/memory-request-limit-3.yaml" %} +{{< code file="memory-request-limit-3.yaml" >}} Create the Pod: @@ -321,7 +322,7 @@ could use all of the memory available on the Node where it is running. * The Container is running in a namespace that has a default memory limit, and the Container is automatically assigned the default limit. Cluster administrators can use a -[LimitRange](/docs/reference/generated/kubernetes-api/{{page.version}}/#limitrange-v1-core) +[LimitRange](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#limitrange-v1-core) to specify a default value for the memory limit. ## Motivation for memory requests and limits @@ -342,9 +343,9 @@ Delete your namespace. This deletes all the Pods that you created for this task: kubectl delete namespace mem-example ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} ### For app developers @@ -368,7 +369,7 @@ kubectl delete namespace mem-example * [Configure Quotas for API Objects](/docs/tasks/administer-cluster/quota-api-object/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/assign-pods-nodes.md b/content/en/docs/tasks/configure-pod-container/assign-pods-nodes.md similarity index 85% rename from docs/tasks/configure-pod-container/assign-pods-nodes.md rename to content/en/docs/tasks/configure-pod-container/assign-pods-nodes.md index 613c731a0ef40..e2e043f929c60 100644 --- a/docs/tasks/configure-pod-container/assign-pods-nodes.md +++ b/content/en/docs/tasks/configure-pod-container/assign-pods-nodes.md @@ -1,19 +1,20 @@ --- title: Assign Pods to Nodes +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to assign a Kubernetes Pod to a particular node in a Kubernetes cluster. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Add a label to a node @@ -55,7 +56,7 @@ This pod configuration file describes a pod that has a node selector, `disktype: ssd`. This means that the pod will get scheduled on a node that has a `disktype=ssd` label. -{% include code.html language="yaml" file="pod.yaml" ghlink="/docs/tasks/configure-pod-container/pod.yaml" %} +{{< code file="pod.yaml" >}} 1. Use the configuration file to create a pod that will get scheduled on your chosen node: @@ -71,11 +72,11 @@ a `disktype=ssd` label. NAME READY STATUS RESTARTS AGE IP NODE nginx 1/1 Running 0 13s 10.200.0.4 worker0 -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Learn more about [labels and selectors](/docs/concepts/overview/working-with-objects/labels/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/attach-handler-lifecycle-event.md b/content/en/docs/tasks/configure-pod-container/attach-handler-lifecycle-event.md similarity index 79% rename from docs/tasks/configure-pod-container/attach-handler-lifecycle-event.md rename to content/en/docs/tasks/configure-pod-container/attach-handler-lifecycle-event.md index d4b00416aa4f1..c632d90f603bc 100644 --- a/docs/tasks/configure-pod-container/attach-handler-lifecycle-event.md +++ b/content/en/docs/tasks/configure-pod-container/attach-handler-lifecycle-event.md @@ -1,25 +1,26 @@ --- title: Attach Handlers to Container Lifecycle Events +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to attach handlers to Container lifecycle events. Kubernetes supports the postStart and preStop events. Kubernetes sends the postStart event immediately after a Container is started, and it sends the preStop event immediately before the Container is terminated. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Define postStart and preStop handlers @@ -28,7 +29,7 @@ for the postStart and preStop events. Here is the configuration file for the Pod: -{% include code.html language="yaml" file="lifecycle-events.yaml" ghlink="/docs/tasks/configure-pod-container/lifecycle-events.yaml" %} +{{< code file="lifecycle-events.yaml" >}} In the configuration file, you can see that the postStart command writes a `message` file to the Container's `/usr/share` directory. The preStop command shuts down @@ -54,11 +55,11 @@ The output shows the text written by the postStart handler: Hello from the postStart handler -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Discussion @@ -74,15 +75,16 @@ Kubernetes' management of the Container blocks until the preStop handler complet unless the Pod's grace period expires. For more details, see [Termination of Pods](/docs/user-guide/pods/#termination-of-pods). +{{< note >}} **Note**: Kubernetes only sends the preStop event when a Pod is *terminated*. This means that the preStop hook is not invoked when the Pod is *completed*. This limitation is tracked in [issue #55087](https://github.com/kubernetes/kubernetes/issues/55807). -{: .note} +{{< /note >}} -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [Container lifecycle hooks](/docs/concepts/containers/container-lifecycle-hooks/). * Learn more about the [lifecycle of a Pod](/docs/concepts/workloads/pods/pod-lifecycle/). @@ -90,10 +92,10 @@ This limitation is tracked in [issue #55087](https://github.com/kubernetes/kuber ### Reference -* [Lifecycle](/docs/reference/generated/kubernetes-api/{{page.version}}/#lifecycle-v1-core) -* [Container](/docs/reference/generated/kubernetes-api/{{page.version}}/#container-v1-core) -* See `terminationGracePeriodSeconds` in [PodSpec](/docs/reference/generated/kubernetes-api/{{page.version}}/#podspec-v1-core) +* [Lifecycle](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#lifecycle-v1-core) +* [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core) +* See `terminationGracePeriodSeconds` in [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core) + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/configmap/kubectl/game.properties b/content/en/docs/tasks/configure-pod-container/configmap/kubectl/game.properties similarity index 100% rename from docs/tasks/configure-pod-container/configmap/kubectl/game.properties rename to content/en/docs/tasks/configure-pod-container/configmap/kubectl/game.properties diff --git a/docs/tasks/configure-pod-container/configmap/kubectl/ui.properties b/content/en/docs/tasks/configure-pod-container/configmap/kubectl/ui.properties similarity index 100% rename from docs/tasks/configure-pod-container/configmap/kubectl/ui.properties rename to content/en/docs/tasks/configure-pod-container/configmap/kubectl/ui.properties diff --git a/docs/tasks/configure-pod-container/configure-liveness-readiness-probes.md b/content/en/docs/tasks/configure-pod-container/configure-liveness-readiness-probes.md similarity index 90% rename from docs/tasks/configure-pod-container/configure-liveness-readiness-probes.md rename to content/en/docs/tasks/configure-pod-container/configure-liveness-readiness-probes.md index 229bf8c732a8a..db9f6e7d2e914 100644 --- a/docs/tasks/configure-pod-container/configure-liveness-readiness-probes.md +++ b/content/en/docs/tasks/configure-pod-container/configure-liveness-readiness-probes.md @@ -1,8 +1,9 @@ --- title: Configure Liveness and Readiness Probes +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to configure liveness and readiness probes for Containers. @@ -17,15 +18,15 @@ accepting traffic. A Pod is considered ready when all of its Containers are read One use of this signal is to control which Pods are used as backends for Services. When a Pod is not ready, it is removed from Service load balancers. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Define a liveness command @@ -36,7 +37,7 @@ liveness probes to detect and remedy such situations. In this exercise, you create a Pod that runs a Container based on the `k8s.gcr.io/busybox` image. Here is the configuration file for the Pod: -{% include code.html language="yaml" file="exec-liveness.yaml" ghlink="/docs/tasks/configure-pod-container/exec-liveness.yaml" %} +{{< code file="exec-liveness.yaml" >}} In the configuration file, you can see that the Pod has a single Container. The `periodSeconds` field specifies that the kubelet should perform a liveness @@ -120,7 +121,7 @@ Another kind of liveness probe uses an HTTP GET request. Here is the configurati file for a Pod that runs a container based on the `k8s.gcr.io/liveness` image. -{% include code.html language="yaml" file="http-liveness.yaml" ghlink="/docs/tasks/configure-pod-container/http-liveness.yaml" %} +{{< code file="http-liveness.yaml" >}} In the configuration file, you can see that the Pod has a single Container. The `periodSeconds` field specifies that the kubelet should perform a liveness @@ -178,7 +179,7 @@ kubelet will attempt to open a socket to your container on the specified port. If it can establish a connection, the container is considered healthy, if it can’t it is considered a failure. -{% include code.html language="yaml" file="tcp-liveness-readiness.yaml" ghlink="/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml" %} +{{< code file="tcp-liveness-readiness.yaml" >}} As you can see, configuration for a TCP check is quite similar to an HTTP check. This example uses both readiness and liveness probes. The kubelet will send the @@ -196,7 +197,7 @@ will be restarted. ## Use a named port You can use a named -[ContainerPort](/docs/reference/generated/kubernetes-api/{{page.version}}/#containerport-v1-core) +[ContainerPort](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#containerport-v1-core) for HTTP or TCP liveness checks: ```yaml @@ -243,11 +244,11 @@ for it, and that containers are restarted when they fail. ## Configure Probes -{% comment %} +{{< comment >}} Eventually, some of this section could be moved to a concept topic. -{% endcomment %} +{{< /comment >}} -[Probes](/docs/reference/generated/kubernetes-api/{{page.version}}/#probe-v1-core) have a number of fields that +[Probes](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#probe-v1-core) have a number of fields that you can use to more precisely control the behavior of liveness and readiness checks: @@ -264,7 +265,7 @@ liveness. Minimum value is 1. try `failureThreshold` times before giving up. Giving up in case of liveness probe means restarting the Pod. In case of readiness probe the Pod will be marked Unready. Defaults to 3. Minimum value is 1. -[HTTP probes](/docs/reference/generated/kubernetes-api/{{page.version}}/#httpgetaction-v1-core) +[HTTP probes](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#httpgetaction-v1-core) have additional fields that can be set on `httpGet`: * `host`: Host name to connect to, defaults to the pod IP. You probably want to @@ -285,19 +286,19 @@ and the Pod's `hostNetwork` field is true. Then `host`, under `httpGet`, should to 127.0.0.1. If your pod relies on virtual hosts, which is probably the more common case, you should not use `host`, but rather set the `Host` header in `httpHeaders`. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [Container Probes](/docs/concepts/workloads/pods/pod-lifecycle/#container-probes). ### Reference -* [Pod](/docs/reference/generated/kubernetes-api/{{page.version}}/#pod-v1-core) -* [Container](/docs/reference/generated/kubernetes-api/{{page.version}}/#container-v1-core) -* [Probe](/docs/reference/generated/kubernetes-api/{{page.version}}/#probe-v1-core) +* [Pod](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#pod-v1-core) +* [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core) +* [Probe](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#probe-v1-core) + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/configure-persistent-volume-storage.md b/content/en/docs/tasks/configure-pod-container/configure-persistent-volume-storage.md similarity index 89% rename from docs/tasks/configure-pod-container/configure-persistent-volume-storage.md rename to content/en/docs/tasks/configure-pod-container/configure-persistent-volume-storage.md index 7c8f1f36ff07e..987254bd44e97 100644 --- a/docs/tasks/configure-pod-container/configure-persistent-volume-storage.md +++ b/content/en/docs/tasks/configure-pod-container/configure-persistent-volume-storage.md @@ -1,8 +1,9 @@ --- title: Configure a Pod to Use a PersistentVolume for Storage +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to configure a Pod to use a PersistentVolumeClaim for storage. Here is a summary of the process: @@ -15,9 +16,9 @@ bound to a suitable PersistentVolume. 1. The user creates a Pod that uses the PersistentVolumeClaim as storage. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * You need to have a Kubernetes cluster that has only one Node, and the kubectl command-line tool must be configured to communicate with your cluster. If you @@ -27,9 +28,9 @@ do not already have a single-node cluster, you can create one by using * Familiarize yourself with the material in [Persistent Volumes](/docs/concepts/storage/persistent-volumes/). -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Create an index.html file on your Node @@ -54,13 +55,13 @@ PersistentVolume uses a file or directory on the Node to emulate network-attache In a production cluster, you would not use hostPath. Instead a cluster administrator would provision a network resource like a Google Compute Engine persistent disk, an NFS share, or an Amazon Elastic Block Store volume. Cluster administrators can also -use [StorageClasses](/docs/reference/generated/kubernetes-api/{{page.version}}/#storageclass-v1-storage) +use [StorageClasses](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#storageclass-v1-storage) to set up [dynamic provisioning](http://blog.kubernetes.io/2016/10/dynamic-provisioning-and-storage-in-kubernetes.html). Here is the configuration file for the hostPath PersistentVolume: -{% include code.html language="yaml" file="task-pv-volume.yaml" ghlink="/docs/tasks/configure-pod-container/task-pv-volume.yaml" %} +{{< code file="task-pv-volume.yaml" >}} The configuration file specifies that the volume is at `/mnt/data` on the cluster's Node. The configuration also specifies a size of 10 gibibytes and @@ -92,7 +93,7 @@ access for at least one Node. Here is the configuration file for the PersistentVolumeClaim: -{% include code.html language="yaml" file="task-pv-claim.yaml" ghlink="/docs/tasks/configure-pod-container/task-pv-claim.yaml" %} +{{< code file="task-pv-claim.yaml" >}} Create the PersistentVolumeClaim: @@ -128,7 +129,7 @@ The next step is to create a Pod that uses your PersistentVolumeClaim as a volum Here is the configuration file for the Pod: -{% include code.html language="yaml" file="task-pv-pod.yaml" ghlink="/docs/tasks/configure-pod-container/task-pv-pod.yaml" %} +{{< code file="task-pv-pod.yaml" >}} Notice that the Pod's configuration file specifies a PersistentVolumeClaim, but it does not specify a PersistentVolume. From the Pod's point of view, the claim @@ -158,10 +159,10 @@ hostPath volume: Hello from Kubernetes storage -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Access control @@ -186,25 +187,26 @@ Pod’s security context are. Every GID, whether it originates from a Persistent annotation or the Pod’s specification, is applied to the first process run in each Container. +{{< note >}} **Note**: When a Pod consumes a PersistentVolume, the GIDs associated with the PersistentVolume are not present on the Pod resource itself. -{: .note} +{{< /note >}} -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [PersistentVolumes](/docs/concepts/storage/persistent-volumes/). * Read the [Persistent Storage design document](https://git.k8s.io/community/contributors/design-proposals/storage/persistent-storage.md). ### Reference -* [PersistentVolume](/docs/reference/generated/kubernetes-api/{{page.version}}/#persistentvolume-v1-core) -* [PersistentVolumeSpec](/docs/reference/generated/kubernetes-api/{{page.version}}/#persistentvolumespec-v1-core) -* [PersistentVolumeClaim](/docs/reference/generated/kubernetes-api/{{page.version}}/#persistentvolumeclaim-v1-core) -* [PersistentVolumeClaimSpec](/docs/reference/generated/kubernetes-api/{{page.version}}/#persistentvolumeclaimspec-v1-core) +* [PersistentVolume](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolume-v1-core) +* [PersistentVolumeSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolumespec-v1-core) +* [PersistentVolumeClaim](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolumeclaim-v1-core) +* [PersistentVolumeClaimSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolumeclaimspec-v1-core) + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/configure-pod-configmap.md b/content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md similarity index 97% rename from docs/tasks/configure-pod-container/configure-pod-configmap.md rename to content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md index 5b7657521425f..2717606c9aa06 100644 --- a/docs/tasks/configure-pod-container/configure-pod-configmap.md +++ b/content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md @@ -1,19 +1,20 @@ --- title: Configure a Pod to Use a ConfigMap +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} ConfigMaps allow you to decouple configuration artifacts from image content to keep containerized applications portable. This page provides a series of usage examples demonstrating how to create ConfigMaps and configure Pods using data stored in ConfigMaps. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Create a ConfigMap @@ -381,8 +382,9 @@ metadata: ## Configure all key-value pairs in a ConfigMap as Pod environment variables + {{< note >}} **Note:** This functionality is available to users running Kubernetes v1.6 and later. - {: .note} + {{< /note >}} 1. Create a ConfigMap containing multiple key-value pairs. @@ -508,8 +510,9 @@ special.level special.type ``` +{{< caution >}} **Caution:** If there are some files in the `/etc/config/` directory, they will be deleted. -{: .caution} +{{< /caution >}} ### Add ConfigMap data to a specific path in the Volume @@ -554,21 +557,23 @@ basis. The [Secrets](/docs/concepts/configuration/secret/#using-secrets-as-files When a ConfigMap already being consumed in a volume is updated, projected keys are eventually updated as well. Kubelet is checking whether the mounted ConfigMap is fresh on every periodic sync. However, it is using its local ttl-based cache for getting the current value of the ConfigMap. As a result, the total delay from the moment when the ConfigMap is updated to the moment when new keys are projected to the pod can be as long as kubelet sync period + ttl of ConfigMaps cache in kubelet. +{{< note >}} **Note:** A container using a ConfigMap as a [subPath](/docs/concepts/storage/volumes/#using-subpath) volume will not receive ConfigMap updates. -{: .note} +{{< /note >}} -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Understanding ConfigMaps and Pods The ConfigMap API resource stores configuration data as key-value pairs. The data can be consumed in pods or provide the configurations for system components such as controllers. ConfigMap is similar to [Secrets](/docs/concepts/configuration/secret/), but provides a means of working with strings that don't contain sensitive information. Users and system components alike can store configuration data in ConfigMap. +{{< note >}} **Note:** ConfigMaps should reference properties files, not replace them. Think of the ConfigMap as representing something similar to the Linux `/etc` directory and its contents. For example, if you create a [Kubernetes Volume](/docs/concepts/storage/volumes/) from a ConfigMap, each data item in the ConfigMap is represented by an individual file in the volume. -{: .note} +{{< /note >}} The ConfigMap's `data` field contains the configuration data. As shown in the example below, this can be simple -- like individual properties defined using `--from-literal` -- or complex -- like configuration files or JSON blobs defined using `--from-file`. @@ -607,14 +612,15 @@ data: 1. Kubelet doesn't support the use of ConfigMaps for pods not found on the API server. This includes pods created via the Kubelet's --manifest-url flag, --config flag, or the Kubelet REST API. + {{< note >}} **Note:** These are not commonly-used ways to create pods. - {: .note} + {{< /note >}} -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Follow a real world example of [Configuring Redis using a ConfigMap](/docs/tutorials/configuration/configure-redis-using-configmap/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/configure-pod-initialization.md b/content/en/docs/tasks/configure-pod-container/configure-pod-initialization.md similarity index 86% rename from docs/tasks/configure-pod-container/configure-pod-initialization.md rename to content/en/docs/tasks/configure-pod-container/configure-pod-initialization.md index fa0ed58b93607..bd4db4174c31d 100644 --- a/docs/tasks/configure-pod-container/configure-pod-initialization.md +++ b/content/en/docs/tasks/configure-pod-container/configure-pod-initialization.md @@ -1,20 +1,21 @@ --- title: Configure Pod Initialization +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to use an Init Container to initialize a Pod before an application Container runs. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Create a Pod that has an Init Container @@ -24,7 +25,7 @@ container starts. Here is the configuration file for the Pod: -{% include code.html language="yaml" file="init-containers.yaml" ghlink="/docs/tasks/configure-pod-container/init-containers.yaml" %} +{{< code file="init-containers.yaml" >}} In the configuration file, you can see that the Pod has a Volume that the init container and the application container share. @@ -76,9 +77,9 @@ The output shows that nginx is serving the web page that was written by the init

Kubernetes is open source giving you the freedom to take advantage ...

... -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [communicating between Containers running in the same Pod](/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/). @@ -86,6 +87,6 @@ The output shows that nginx is serving the web page that was written by the init * Learn more about [Volumes](/docs/concepts/storage/volumes/). * Learn more about [Debugging Init Containers](/docs/tasks/debug-application-cluster/debug-init-containers/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/configure-projected-volume-storage.md b/content/en/docs/tasks/configure-pod-container/configure-projected-volume-storage.md similarity index 79% rename from docs/tasks/configure-pod-container/configure-projected-volume-storage.md rename to content/en/docs/tasks/configure-pod-container/configure-projected-volume-storage.md index 88513ad981086..9b90732c7766d 100644 --- a/docs/tasks/configure-pod-container/configure-projected-volume-storage.md +++ b/content/en/docs/tasks/configure-pod-container/configure-projected-volume-storage.md @@ -3,24 +3,25 @@ reviewers: - jpeeler - pmorie title: Configure a Pod to Use a Projected Volume for Storage +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to use a [`projected`](/docs/concepts/storage/volumes/#projected) volume to mount several existing volume sources into the same directory. Currently, `secret`, `configMap`, and `downwardAPI` volumes can be projected. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} -{% include task-tutorial-prereqs.md %} -{% endcapture %} +{{% capture prerequisites %}} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Configure a projected volume for a pod In this exercise, you create username and password Secrets from local files. You then create a Pod that runs one Container, using a [`projected`](/docs/concepts/storage/volumes/#projected) Volume to mount the Secrets into the same shared directory. Here is the configuration file for the Pod: -{% include code.html language="yaml" file="projected-volume.yaml" ghlink="/docs/tasks/configure-pod-container/projected-volume.yaml" %} +{{< code file="projected-volume.yaml" >}} 1. Create the Secrets: @@ -53,11 +54,11 @@ the Pod: 1. In your shell, verify that the `projected-volume` directory contains your projected sources: / # ls /projected-volume/ -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [`projected`](/docs/concepts/storage/volumes/#projected) volumes. -* Read the [all-in-one volume](https://github.com/kubernetes/community/blob/{{page.githubbranch}}/contributors/design-proposals/node/all-in-one-volume.md) design document. -{% endcapture %} +* Read the [all-in-one volume](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/design-proposals/node/all-in-one-volume.md) design document. +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/configure-service-account.md b/content/en/docs/tasks/configure-pod-container/configure-service-account.md similarity index 99% rename from docs/tasks/configure-pod-container/configure-service-account.md rename to content/en/docs/tasks/configure-pod-container/configure-service-account.md index 7717fbcb66c4a..6863365cd2d2d 100644 --- a/docs/tasks/configure-pod-container/configure-service-account.md +++ b/content/en/docs/tasks/configure-pod-container/configure-service-account.md @@ -11,11 +11,12 @@ A service account provides an identity for processes that run in a Pod. *This is a user introduction to Service Accounts. See also the [Cluster Admin Guide to Service Accounts](/docs/admin/service-accounts-admin/).* +{{< note >}} **Note:** This document describes how service accounts behave in a cluster set up as recommended by the Kubernetes project. Your cluster administrator may have customized the behavior in your cluster, in which case this documentation may not apply. -{: .note} +{{< /note >}} When you (a human) access the cluster (for example, using `kubectl`), you are authenticated by the apiserver as a particular User Account (currently this is @@ -161,8 +162,9 @@ namespace: 7 bytes token: ... ``` +{{< note >}} **Note:** The content of `token` is elided here. -{: .note} +{{< /note >}} ## Add ImagePullSecrets to a service account diff --git a/docs/tasks/configure-pod-container/configure-volume-storage.md b/content/en/docs/tasks/configure-pod-container/configure-volume-storage.md similarity index 83% rename from docs/tasks/configure-pod-container/configure-volume-storage.md rename to content/en/docs/tasks/configure-pod-container/configure-volume-storage.md index ca3b80bb4d8c4..a9ab2d935cf0d 100644 --- a/docs/tasks/configure-pod-container/configure-volume-storage.md +++ b/content/en/docs/tasks/configure-pod-container/configure-volume-storage.md @@ -1,8 +1,9 @@ --- title: Configure a Pod to Use a Volume for Storage +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to configure a Pod to use a Volume for storage. @@ -13,15 +14,15 @@ consistent storage that is independent of the Container, you can use a applications, such as key-value stores and databases. For example, Redis is a key-value cache and store. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Configure a volume for a Pod @@ -31,7 +32,7 @@ Volume of type that lasts for the life of the Pod, even if the Container terminates and restarts. Here is the configuration file for the Pod: -{% include code.html language="yaml" file="pod-redis.yaml" ghlink="/docs/tasks/configure-pod-container/pod-redis.yaml" %} +{{< code file="pod-redis.yaml" >}} 1. Create the Pod: @@ -83,7 +84,7 @@ you will see something like this: At this point, the Container has terminated and restarted. This is because the redis Pod has a -[restartPolicy](/docs/reference/generated/kubernetes-api/{{page.version}}/#podspec-v1-core) +[restartPolicy](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core) of `Always`. 1. Get a shell into the restarted Container: @@ -92,13 +93,13 @@ of `Always`. 1. In your shell, goto `/data/redis`, and verify that `test-file` is still there. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} -* See [Volume](/docs/reference/generated/kubernetes-api/{{page.version}}/#volume-v1-core). +* See [Volume](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core). -* See [Pod](/docs/reference/generated/kubernetes-api/{{page.version}}/#pod-v1-core). +* See [Pod](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#pod-v1-core). * In addition to the local disk storage provided by `emptyDir`, Kubernetes supports many different network-attached storage solutions, including PD on @@ -106,6 +107,6 @@ GCE and EBS on EC2, which are preferred for critical data, and will handle details such as mounting and unmounting the devices on the nodes. See [Volumes](/docs/concepts/storage/volumes/) for more details. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/cpu-request-limit-2.yaml b/content/en/docs/tasks/configure-pod-container/cpu-request-limit-2.yaml similarity index 100% rename from docs/tasks/configure-pod-container/cpu-request-limit-2.yaml rename to content/en/docs/tasks/configure-pod-container/cpu-request-limit-2.yaml diff --git a/docs/tasks/configure-pod-container/cpu-request-limit.yaml b/content/en/docs/tasks/configure-pod-container/cpu-request-limit.yaml similarity index 100% rename from docs/tasks/configure-pod-container/cpu-request-limit.yaml rename to content/en/docs/tasks/configure-pod-container/cpu-request-limit.yaml diff --git a/docs/tasks/configure-pod-container/exec-liveness.yaml b/content/en/docs/tasks/configure-pod-container/exec-liveness.yaml similarity index 100% rename from docs/tasks/configure-pod-container/exec-liveness.yaml rename to content/en/docs/tasks/configure-pod-container/exec-liveness.yaml diff --git a/docs/tasks/configure-pod-container/extended-resource-pod-2.yaml b/content/en/docs/tasks/configure-pod-container/extended-resource-pod-2.yaml similarity index 100% rename from docs/tasks/configure-pod-container/extended-resource-pod-2.yaml rename to content/en/docs/tasks/configure-pod-container/extended-resource-pod-2.yaml diff --git a/docs/tasks/configure-pod-container/extended-resource-pod.yaml b/content/en/docs/tasks/configure-pod-container/extended-resource-pod.yaml similarity index 100% rename from docs/tasks/configure-pod-container/extended-resource-pod.yaml rename to content/en/docs/tasks/configure-pod-container/extended-resource-pod.yaml diff --git a/docs/tasks/configure-pod-container/extended-resource.md b/content/en/docs/tasks/configure-pod-container/extended-resource.md similarity index 83% rename from docs/tasks/configure-pod-container/extended-resource.md rename to content/en/docs/tasks/configure-pod-container/extended-resource.md index 3a5cedefea716..64192f90e891a 100644 --- a/docs/tasks/configure-pod-container/extended-resource.md +++ b/content/en/docs/tasks/configure-pod-container/extended-resource.md @@ -1,28 +1,29 @@ --- title: Assign Extended Resources to a Container +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to assign extended resources to a Container. -{% include feature-state-stable.md %} +{{< feature-state state="stable" >}} -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} Before you do this exercise, do the exercise in [Advertise Extended Resources for a Node](/docs/tasks/administer-cluster/extended-resource-node/). That will configure one of your Nodes to advertise a dongle resource. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Assign an extended resource to a Pod @@ -34,7 +35,7 @@ descriptive resource name. Here is the configuration file for a Pod that has one Container: -{% include code.html language="yaml" file="extended-resource-pod.yaml" ghlink="/docs/tasks/configure-pod-container/extended-resource-pod.yaml" %} +{{< code file="extended-resource-pod.yaml" >}} In the configuration file, you can see that the Container requests 3 dongles. @@ -70,7 +71,7 @@ Requests: Here is the configuration file for a Pod that has one Container. The Container requests two dongles. -{% include code.html language="yaml" file="extended-resource-pod-2.yaml" ghlink="/docs/tasks/configure-pod-container/extended-resource-pod-2.yaml" %} +{{< code file="extended-resource-pod-2.yaml" >}} Kubernetes will not be able to satisfy the request for two dongles, because the first Pod used three of the four available dongles. @@ -124,9 +125,9 @@ Delete the Pod that you created for this exercise: kubectl delete pod extended-resource-demo-2 ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} ### For application developers @@ -137,10 +138,10 @@ kubectl delete pod extended-resource-demo-2 * [Advertise Extended Resources for a Node](/docs/tasks/administer-cluster/extended-resource-node/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/game-env-file.properties b/content/en/docs/tasks/configure-pod-container/game-env-file.properties similarity index 100% rename from docs/tasks/configure-pod-container/game-env-file.properties rename to content/en/docs/tasks/configure-pod-container/game-env-file.properties diff --git a/docs/tasks/configure-pod-container/http-liveness.yaml b/content/en/docs/tasks/configure-pod-container/http-liveness.yaml similarity index 100% rename from docs/tasks/configure-pod-container/http-liveness.yaml rename to content/en/docs/tasks/configure-pod-container/http-liveness.yaml diff --git a/docs/tasks/configure-pod-container/init-containers.yaml b/content/en/docs/tasks/configure-pod-container/init-containers.yaml similarity index 100% rename from docs/tasks/configure-pod-container/init-containers.yaml rename to content/en/docs/tasks/configure-pod-container/init-containers.yaml diff --git a/docs/tasks/configure-pod-container/lifecycle-events.yaml b/content/en/docs/tasks/configure-pod-container/lifecycle-events.yaml similarity index 100% rename from docs/tasks/configure-pod-container/lifecycle-events.yaml rename to content/en/docs/tasks/configure-pod-container/lifecycle-events.yaml diff --git a/docs/tasks/configure-pod-container/mem-limit-range.yaml b/content/en/docs/tasks/configure-pod-container/mem-limit-range.yaml similarity index 100% rename from docs/tasks/configure-pod-container/mem-limit-range.yaml rename to content/en/docs/tasks/configure-pod-container/mem-limit-range.yaml diff --git a/docs/tasks/configure-pod-container/memory-request-limit-2.yaml b/content/en/docs/tasks/configure-pod-container/memory-request-limit-2.yaml similarity index 100% rename from docs/tasks/configure-pod-container/memory-request-limit-2.yaml rename to content/en/docs/tasks/configure-pod-container/memory-request-limit-2.yaml diff --git a/docs/tasks/configure-pod-container/memory-request-limit-3.yaml b/content/en/docs/tasks/configure-pod-container/memory-request-limit-3.yaml similarity index 100% rename from docs/tasks/configure-pod-container/memory-request-limit-3.yaml rename to content/en/docs/tasks/configure-pod-container/memory-request-limit-3.yaml diff --git a/docs/tasks/configure-pod-container/memory-request-limit.yaml b/content/en/docs/tasks/configure-pod-container/memory-request-limit.yaml similarity index 100% rename from docs/tasks/configure-pod-container/memory-request-limit.yaml rename to content/en/docs/tasks/configure-pod-container/memory-request-limit.yaml diff --git a/docs/tasks/configure-pod-container/pod-redis.yaml b/content/en/docs/tasks/configure-pod-container/pod-redis.yaml similarity index 100% rename from docs/tasks/configure-pod-container/pod-redis.yaml rename to content/en/docs/tasks/configure-pod-container/pod-redis.yaml diff --git a/docs/tasks/configure-pod-container/pod.yaml b/content/en/docs/tasks/configure-pod-container/pod.yaml similarity index 100% rename from docs/tasks/configure-pod-container/pod.yaml rename to content/en/docs/tasks/configure-pod-container/pod.yaml diff --git a/docs/tasks/configure-pod-container/private-reg-pod.yaml b/content/en/docs/tasks/configure-pod-container/private-reg-pod.yaml similarity index 100% rename from docs/tasks/configure-pod-container/private-reg-pod.yaml rename to content/en/docs/tasks/configure-pod-container/private-reg-pod.yaml diff --git a/docs/tasks/configure-pod-container/projected-volume.yaml b/content/en/docs/tasks/configure-pod-container/projected-volume.yaml similarity index 100% rename from docs/tasks/configure-pod-container/projected-volume.yaml rename to content/en/docs/tasks/configure-pod-container/projected-volume.yaml diff --git a/docs/tasks/configure-pod-container/pull-image-private-registry.md b/content/en/docs/tasks/configure-pod-container/pull-image-private-registry.md similarity index 88% rename from docs/tasks/configure-pod-container/pull-image-private-registry.md rename to content/en/docs/tasks/configure-pod-container/pull-image-private-registry.md index 74dfb9c210f58..39750d2f3465e 100644 --- a/docs/tasks/configure-pod-container/pull-image-private-registry.md +++ b/content/en/docs/tasks/configure-pod-container/pull-image-private-registry.md @@ -1,24 +1,25 @@ --- title: Pull an Image from a Private Registry +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to create a Pod that uses a Secret to pull an image from a private Docker registry or repository. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * To do this exercise, you need a [Docker ID](https://docs.docker.com/docker-id/) and password. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Log in to Docker @@ -44,8 +45,9 @@ The output contains a section similar to this: } } +{{< note >}} **Note:** If you use a Docker credentials store, you won't see that `auth` entry but a `credsStore` entry with the name of the store as value. -{: .note} +{{< /note >}} ## Create a Secret in the cluster that holds your authorization token @@ -109,7 +111,7 @@ You have successfully set your Docker credentials as a Secret called `regcred` i Here is a configuration file for a Pod that needs access to your Docker credentials in `regcred`: -{% include code.html language="yaml" file="private-reg-pod.yaml" ghlink="/docs/tasks/configure-pod-container/private-reg-pod.yaml" %} +{{< code file="private-reg-pod.yaml" >}} Download the above file: @@ -127,16 +129,16 @@ Create a Pod that uses your Secret, and verify that the Pod is running: kubectl create -f my-private-reg-pod.yaml kubectl get pod private-reg -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [Secrets](/docs/concepts/configuration/secret/). * Learn more about [using a private registry](/docs/concepts/containers/images/#using-a-private-registry). * See [kubectl create secret docker-registry](/docs/reference/generated/kubectl/kubectl-commands/#-em-secret-docker-registry-em-). -* See [Secret](/docs/reference/generated/kubernetes-api/{{page.version}}/#secret-v1-core). -* See the `imagePullSecrets` field of [PodSpec](/docs/reference/generated/kubernetes-api/{{page.version}}/#podspec-v1-core). +* See [Secret](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#secret-v1-core). +* See the `imagePullSecrets` field of [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core). + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/qos-pod-2.yaml b/content/en/docs/tasks/configure-pod-container/qos-pod-2.yaml similarity index 100% rename from docs/tasks/configure-pod-container/qos-pod-2.yaml rename to content/en/docs/tasks/configure-pod-container/qos-pod-2.yaml diff --git a/docs/tasks/configure-pod-container/qos-pod-3.yaml b/content/en/docs/tasks/configure-pod-container/qos-pod-3.yaml similarity index 100% rename from docs/tasks/configure-pod-container/qos-pod-3.yaml rename to content/en/docs/tasks/configure-pod-container/qos-pod-3.yaml diff --git a/docs/tasks/configure-pod-container/qos-pod-4.yaml b/content/en/docs/tasks/configure-pod-container/qos-pod-4.yaml similarity index 100% rename from docs/tasks/configure-pod-container/qos-pod-4.yaml rename to content/en/docs/tasks/configure-pod-container/qos-pod-4.yaml diff --git a/docs/tasks/configure-pod-container/qos-pod.yaml b/content/en/docs/tasks/configure-pod-container/qos-pod.yaml similarity index 100% rename from docs/tasks/configure-pod-container/qos-pod.yaml rename to content/en/docs/tasks/configure-pod-container/qos-pod.yaml diff --git a/docs/tasks/configure-pod-container/quality-service-pod.md b/content/en/docs/tasks/configure-pod-container/quality-service-pod.md similarity index 89% rename from docs/tasks/configure-pod-container/quality-service-pod.md rename to content/en/docs/tasks/configure-pod-container/quality-service-pod.md index e549effb67a4d..20fff410f7cc3 100644 --- a/docs/tasks/configure-pod-container/quality-service-pod.md +++ b/content/en/docs/tasks/configure-pod-container/quality-service-pod.md @@ -1,25 +1,26 @@ --- title: Configure Quality of Service for Pods +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to configure Pods so that they will be assigned particular Quality of Service (QoS) classes. Kubernetes uses QoS classes to make decisions about scheduling and evicting Pods. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## QoS classes @@ -48,7 +49,7 @@ For a Pod to be given a QoS class of Guaranteed: Here is the configuration file for a Pod that has one Container. The Container has a memory limit and a memory request, both equal to 200 MiB. The Container has a cpu limit and a cpu request, both equal to 700 millicpu: -{% include code.html language="yaml" file="qos-pod.yaml" ghlink="/docs/tasks/configure-pod-container/qos-pod.yaml" %} +{{< code file="qos-pod.yaml" >}} Create the Pod: @@ -81,11 +82,12 @@ spec: qosClass: Guaranteed ``` +{{< note >}} **Note:** If a Container specifies its own memory limit, but does not specify a memory request, Kubernetes automatically assigns a memory request that matches the limit. Similarly, if a Container specifies its own cpu limit, but does not specify a cpu request, Kubernetes automatically assigns a cpu request that matches the limit. -{: .note} +{{< /note >}} Delete your Pod: @@ -103,7 +105,7 @@ A Pod is given a QoS class of Burstable if: Here is the configuration file for a Pod that has one Container. The Container has a memory limit of 200 MiB and a memory request of 100 MiB. -{% include code.html language="yaml" file="qos-pod-2.yaml" ghlink="/docs/tasks/configure-pod-container/qos-pod-2.yaml" %} +{{< code file="qos-pod-2.yaml" >}} Create the Pod: @@ -148,7 +150,7 @@ have any memory or cpu limits or requests. Here is the configuration file for a Pod that has one Container. The Container has no memory or cpu limits or requests: -{% include code.html language="yaml" file="qos-pod-3.yaml" ghlink="/docs/tasks/configure-pod-container/qos-pod-3.yaml" %} +{{< code file="qos-pod-3.yaml" >}} Create the Pod: @@ -184,7 +186,7 @@ kubectl delete pod qos-demo-3 --namespace=qos-example Here is the configuration file for a Pod that has two Containers. One container specifies a memory request of 200 MiB. The other Container does not specify any requests or limits. -{% include code.html language="yaml" file="qos-pod-4.yaml" ghlink="/docs/tasks/configure-pod-container/qos-pod-4.yaml" %} +{{< code file="qos-pod-4.yaml" >}} Notice that this Pod meets the criteria for QoS class Burstable. That is, it does not meet the criteria for QoS class Guaranteed, and one of its Containers has a memory request. @@ -232,9 +234,9 @@ Delete your namespace: kubectl delete namespace qos-example ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} ### For app developers @@ -258,9 +260,9 @@ kubectl delete namespace qos-example * [Configure a Pod Quota for a Namespace](/docs/tasks/administer-cluster/quota-pod-namespace/) * [Configure Quotas for API Objects](/docs/tasks/administer-cluster/quota-api-object/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/rq-compute-resources.yaml b/content/en/docs/tasks/configure-pod-container/rq-compute-resources.yaml similarity index 100% rename from docs/tasks/configure-pod-container/rq-compute-resources.yaml rename to content/en/docs/tasks/configure-pod-container/rq-compute-resources.yaml diff --git a/docs/tasks/configure-pod-container/security-context-2.yaml b/content/en/docs/tasks/configure-pod-container/security-context-2.yaml similarity index 100% rename from docs/tasks/configure-pod-container/security-context-2.yaml rename to content/en/docs/tasks/configure-pod-container/security-context-2.yaml diff --git a/docs/tasks/configure-pod-container/security-context-3.yaml b/content/en/docs/tasks/configure-pod-container/security-context-3.yaml similarity index 100% rename from docs/tasks/configure-pod-container/security-context-3.yaml rename to content/en/docs/tasks/configure-pod-container/security-context-3.yaml diff --git a/docs/tasks/configure-pod-container/security-context-4.yaml b/content/en/docs/tasks/configure-pod-container/security-context-4.yaml similarity index 100% rename from docs/tasks/configure-pod-container/security-context-4.yaml rename to content/en/docs/tasks/configure-pod-container/security-context-4.yaml diff --git a/docs/tasks/configure-pod-container/security-context.md b/content/en/docs/tasks/configure-pod-container/security-context.md similarity index 89% rename from docs/tasks/configure-pod-container/security-context.md rename to content/en/docs/tasks/configure-pod-container/security-context.md index 88d58ce3054d8..b2f67588c72cc 100644 --- a/docs/tasks/configure-pod-container/security-context.md +++ b/content/en/docs/tasks/configure-pod-container/security-context.md @@ -4,9 +4,10 @@ reviewers: - mikedanese - thockin title: Configure a Security Context for a Pod or Container +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} A security context defines privilege and access control settings for a Pod or Container. Security context settings include: @@ -29,25 +30,25 @@ a Pod or Container. Security context settings include: For more information about security mechanisms in Linux, see [Overview of Linux Kernel Security Features](https://www.linux.com/learn/overview-linux-kernel-security-features) -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Set the security context for a Pod To specify security settings for a Pod, include the `securityContext` field in the Pod specification. The `securityContext` field is a -[PodSecurityContext](/docs/reference/generated/kubernetes-api/{{page.version}}/#podsecuritycontext-v1-core) object. +[PodSecurityContext](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podsecuritycontext-v1-core) object. The security settings that you specify for a Pod apply to all Containers in the Pod. Here is a configuration file for a Pod that has a `securityContext` and an `emptyDir` volume: -{% include code.html language="yaml" file="security-context.yaml" ghlink="/docs/tasks/configure-pod-container/security-context.yaml" %} +{{< code file="security-context.yaml" >}} In the configuration file, the `runAsUser` field specifies that for any Containers in the Pod, the first process runs with user ID 1000. The `fsGroup` field specifies that @@ -131,7 +132,7 @@ exit To specify security settings for a Container, include the `securityContext` field in the Container manifest. The `securityContext` field is a -[SecurityContext](/docs/reference/generated/kubernetes-api/{{page.version}}/#securitycontext-v1-core) object. +[SecurityContext](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#securitycontext-v1-core) object. Security settings that you specify for a Container apply only to the individual Container, and they override settings made at the Pod level when there is overlap. Container settings do not affect the Pod's Volumes. @@ -139,7 +140,7 @@ there is overlap. Container settings do not affect the Pod's Volumes. Here is the configuration file for a Pod that has one Container. Both the Pod and the Container have a `securityContext` field: -{% include code.html language="yaml" file="security-context-2.yaml" ghlink="/docs/tasks/configure-pod-container/security-context-2.yaml" %} +{{< code file="security-context-2.yaml" >}} Create the Pod: @@ -192,7 +193,7 @@ of the root user. To add or remove Linux capabilities for a Container, include t First, see what happens when you don't include a `capabilities` field. Here is configuration file that does not add or remove any Container capabilities: -{% include code.html language="yaml" file="security-context-3.yaml" ghlink="/docs/tasks/configure-pod-container/security-context-3.yaml" %} +{{< code file="security-context-3.yaml" >}} Create the Pod: @@ -254,7 +255,7 @@ that it has additional capabilities set. Here is the configuration file for a Pod that runs one Container. The configuration adds the `CAP_NET_ADMIN` and `CAP_SYS_TIME` capabilities: -{% include code.html language="yaml" file="security-context-4.yaml" ghlink="/docs/tasks/configure-pod-container/security-context-4.yaml" %} +{{< code file="security-context-4.yaml" >}} Create the Pod: @@ -296,15 +297,16 @@ bits 12 and 25 are set. Bit 12 is `CAP_NET_ADMIN`, and bit 25 is `CAP_SYS_TIME`. See [capability.h](https://github.com/torvalds/linux/blob/master/include/uapi/linux/capability.h) for definitions of the capability constants. +{{< note >}} **Note:** Linux capability constants have the form `CAP_XXX`. But when you list capabilities in your Container manifest, you must omit the `CAP_` portion of the constant. For example, to add `CAP_SYS_TIME`, include `SYS_TIME` in your list of capabilities. -{: .note} +{{< /note >}} ## Assign SELinux labels to a Container To assign SELinux labels to a Container, include the `seLinuxOptions` field in the `securityContext` section of your Pod or Container manifest. The `seLinuxOptions` field is an -[SELinuxOptions](/docs/reference/generated/kubernetes-api/{{page.version}}/#selinuxoptions-v1-core) +[SELinuxOptions](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#selinuxoptions-v1-core) object. Here's an example that applies an SELinux level: ```yaml @@ -314,8 +316,9 @@ securityContext: level: "s0:c123,c456" ``` +{{< note >}} **Note:** To assign SELinux labels, the SELinux security module must be loaded on the host operating system. -{: .note} +{{< /note >}} ## Discussion @@ -334,15 +337,16 @@ need to set the `level` section. This sets the [Multi-Category Security (MCS)](https://selinuxproject.org/page/NB_MLS) label given to all Containers in the Pod as well as the Volumes. +{{< warning >}} **Warning:** After you specify an MCS label for a Pod, all Pods with the same label can access the Volume. If you need inter-Pod protection, you must assign a unique MCS label to each Pod. -{: .warning} +{{< /warning >}} -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} -* [PodSecurityContext](/docs/reference/generated/kubernetes-api/{{page.version}}/#podsecuritycontext-v1-core) -* [SecurityContext](/docs/reference/generated/kubernetes-api/{{page.version}}/#securitycontext-v1-core) +* [PodSecurityContext](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podsecuritycontext-v1-core) +* [SecurityContext](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#securitycontext-v1-core) * [Tuning Docker with the newest security enhancements](https://opensource.com/business/15/3/docker-security-tuning) * [Security Contexts design document](https://git.k8s.io/community/contributors/design-proposals/auth/security_context.md) * [Ownership Management design document](https://git.k8s.io/community/contributors/design-proposals/storage/volume-ownership-management.md) @@ -351,6 +355,6 @@ label given to all Containers in the Pod as well as the Volumes. document](https://git.k8s.io/community/contributors/design-proposals/auth/no-new-privs.md) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/security-context.yaml b/content/en/docs/tasks/configure-pod-container/security-context.yaml similarity index 100% rename from docs/tasks/configure-pod-container/security-context.yaml rename to content/en/docs/tasks/configure-pod-container/security-context.yaml diff --git a/docs/tasks/configure-pod-container/share-process-namespace.md b/content/en/docs/tasks/configure-pod-container/share-process-namespace.md similarity index 88% rename from docs/tasks/configure-pod-container/share-process-namespace.md rename to content/en/docs/tasks/configure-pod-container/share-process-namespace.md index d332835d83abc..f0e1cfc7359a6 100644 --- a/docs/tasks/configure-pod-container/share-process-namespace.md +++ b/content/en/docs/tasks/configure-pod-container/share-process-namespace.md @@ -5,11 +5,12 @@ approvers: - verb - yujuhong - dchen1107 +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} -{% include feature-state-alpha.md %} +{{< feature-state state="alpha" >}} This page shows how to configure process namespace sharing for a pod. When process namespace sharing is enabled, processes in a container are visible @@ -19,25 +20,25 @@ You can use this feature to configure cooperating containers, such as a log handler sidecar container, or to troubleshoot container images that don't include debugging utilities like a shell. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} A special **alpha** feature gate `PodShareProcessNamespace` must be set to true across the system: `--feature-gates=PodShareProcessNamespace=true`. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Configure a Pod Process Namespace Sharing is enabled using the `ShareProcessNamespace` field of `v1.PodSpec`. For example: -{% include code.html language="yaml" file="share-process-namespace.yaml" ghlink="/docs/tasks/configure-pod-container/share-process-namespace.yaml" %} +{{< code file="share-process-namespace.yaml" >}} 1. Create the pod `nginx` on your cluster: @@ -82,9 +83,9 @@ It's even possible to access another container image using the events { worker_connections 1024; -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Understanding Process Namespace Sharing @@ -106,6 +107,6 @@ containers, though, so it's important to understand these differences: `/proc/$pid/root` link.** This makes debugging easier, but it also means that filesystem secrets are protected only by filesystem permissions. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/share-process-namespace.yaml b/content/en/docs/tasks/configure-pod-container/share-process-namespace.yaml similarity index 100% rename from docs/tasks/configure-pod-container/share-process-namespace.yaml rename to content/en/docs/tasks/configure-pod-container/share-process-namespace.yaml diff --git a/docs/tasks/configure-pod-container/task-pv-claim.yaml b/content/en/docs/tasks/configure-pod-container/task-pv-claim.yaml similarity index 100% rename from docs/tasks/configure-pod-container/task-pv-claim.yaml rename to content/en/docs/tasks/configure-pod-container/task-pv-claim.yaml diff --git a/docs/tasks/configure-pod-container/task-pv-pod.yaml b/content/en/docs/tasks/configure-pod-container/task-pv-pod.yaml similarity index 100% rename from docs/tasks/configure-pod-container/task-pv-pod.yaml rename to content/en/docs/tasks/configure-pod-container/task-pv-pod.yaml diff --git a/docs/tasks/configure-pod-container/task-pv-volume.yaml b/content/en/docs/tasks/configure-pod-container/task-pv-volume.yaml similarity index 100% rename from docs/tasks/configure-pod-container/task-pv-volume.yaml rename to content/en/docs/tasks/configure-pod-container/task-pv-volume.yaml diff --git a/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml b/content/en/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml similarity index 100% rename from docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml rename to content/en/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml diff --git a/docs/tasks/configure-pod-container/ui-env-file.properties b/content/en/docs/tasks/configure-pod-container/ui-env-file.properties similarity index 100% rename from docs/tasks/configure-pod-container/ui-env-file.properties rename to content/en/docs/tasks/configure-pod-container/ui-env-file.properties diff --git a/content/en/docs/tasks/debug-application-cluster/_index.md b/content/en/docs/tasks/debug-application-cluster/_index.md new file mode 100755 index 0000000000000..a7f507eff2fb1 --- /dev/null +++ b/content/en/docs/tasks/debug-application-cluster/_index.md @@ -0,0 +1,5 @@ +--- +title: "Monitor, Log, and Debug" +weight: 80 +--- + diff --git a/docs/tasks/debug-application-cluster/audit-policy.yaml b/content/en/docs/tasks/debug-application-cluster/audit-policy.yaml similarity index 100% rename from docs/tasks/debug-application-cluster/audit-policy.yaml rename to content/en/docs/tasks/debug-application-cluster/audit-policy.yaml diff --git a/docs/tasks/debug-application-cluster/audit.md b/content/en/docs/tasks/debug-application-cluster/audit.md similarity index 97% rename from docs/tasks/debug-application-cluster/audit.md rename to content/en/docs/tasks/debug-application-cluster/audit.md index 9e004a980580d..f5c406b9c4f37 100644 --- a/docs/tasks/debug-application-cluster/audit.md +++ b/content/en/docs/tasks/debug-application-cluster/audit.md @@ -6,10 +6,9 @@ reviewers: title: Auditing --- -* TOC -{:toc} +{{< toc >}} -{% include feature-state-beta.md %} +{{< feature-state state="beta" >}} Kubernetes auditing provides a security-relevant chronological set of records documenting the sequence of activities that have affected system by individual users, administrators @@ -42,10 +41,11 @@ Each request can be recorded with an associated "stage". The known stages are: will be sent. - `Panic` - Events generated when a panic occurred. +{{< note >}} **Note** The audit logging feature increases the memory consumption of the API server because some context required for auditing is stored for each request. Additionally, memory consumption depends on the audit logging configuration. -{: .note} +{{< /note >}} ## Audit Policy @@ -70,7 +70,7 @@ A policy with no (0) rules is treated as illegal. Below is an example audit policy file: -{% include code.html language="yaml" file="audit-policy.yaml" ghlink="/docs/tasks/debug-application-cluster/audit-policy.yaml" %} +{{< code file="audit-policy.yaml" >}} You can use a minimal audit policy file to log all requests at the `Metadata` level: @@ -384,8 +384,8 @@ and `audit-log-maxage` options. [kube-apiserver]: /docs/admin/kube-apiserver [auditing-proposal]: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/auditing.md -[auditing-api]: https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/staging/src/k8s.io/apiserver/pkg/apis/audit/v1beta1/types.go -[gce-audit-profile]: https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/cluster/gce/gci/configure-helper.sh#L735 +[auditing-api]: https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/staging/src/k8s.io/apiserver/pkg/apis/audit/v1beta1/types.go +[gce-audit-profile]: https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/cluster/gce/gci/configure-helper.sh#L735 [kubeconfig]: https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/ [fluentd]: http://www.fluentd.org/ [fluentd_install_doc]: http://docs.fluentd.org/v0.12/articles/quickstart#step1-installing-fluentd diff --git a/docs/tasks/debug-application-cluster/core-metrics-pipeline.md b/content/en/docs/tasks/debug-application-cluster/core-metrics-pipeline.md similarity index 100% rename from docs/tasks/debug-application-cluster/core-metrics-pipeline.md rename to content/en/docs/tasks/debug-application-cluster/core-metrics-pipeline.md diff --git a/docs/tasks/debug-application-cluster/counter-pod.yaml b/content/en/docs/tasks/debug-application-cluster/counter-pod.yaml similarity index 100% rename from docs/tasks/debug-application-cluster/counter-pod.yaml rename to content/en/docs/tasks/debug-application-cluster/counter-pod.yaml diff --git a/docs/tasks/debug-application-cluster/debug-application-introspection.md b/content/en/docs/tasks/debug-application-cluster/debug-application-introspection.md similarity index 99% rename from docs/tasks/debug-application-cluster/debug-application-introspection.md rename to content/en/docs/tasks/debug-application-cluster/debug-application-introspection.md index d815f4654d56e..07c8a135e5987 100644 --- a/docs/tasks/debug-application-cluster/debug-application-introspection.md +++ b/content/en/docs/tasks/debug-application-cluster/debug-application-introspection.md @@ -9,14 +9,13 @@ Once your application is running, you'll inevitably need to debug problems with 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. -* TOC -{:toc} +{{< toc >}} ## Using `kubectl describe pod` to fetch details about pods For this example we'll use a Deployment to create two pods, similar to the earlier example. -{% include code.html language="yaml" file="nginx-dep.yaml" ghlink="/docs/tasks/debug-application-cluster/nginx-dep.yaml" %} +{{< code file="nginx-dep.yaml" >}} Create deployment by running following command: diff --git a/docs/tasks/debug-application-cluster/debug-application.md b/content/en/docs/tasks/debug-application-cluster/debug-application.md similarity index 99% rename from docs/tasks/debug-application-cluster/debug-application.md rename to content/en/docs/tasks/debug-application-cluster/debug-application.md index 45f4edaf57123..829b6e2a1e52a 100644 --- a/docs/tasks/debug-application-cluster/debug-application.md +++ b/content/en/docs/tasks/debug-application-cluster/debug-application.md @@ -9,8 +9,7 @@ This guide is to help users debug applications that are deployed into Kubernetes This is *not* a guide for people who want to debug their cluster. For that you should check out [this guide](/docs/admin/cluster-troubleshooting). -* TOC -{:toc} +{{< toc >}} ## Diagnosing the problem diff --git a/docs/tasks/debug-application-cluster/debug-cluster.md b/content/en/docs/tasks/debug-application-cluster/debug-cluster.md similarity index 100% rename from docs/tasks/debug-application-cluster/debug-cluster.md rename to content/en/docs/tasks/debug-application-cluster/debug-cluster.md diff --git a/docs/tasks/debug-application-cluster/debug-init-containers.md b/content/en/docs/tasks/debug-application-cluster/debug-init-containers.md similarity index 91% rename from docs/tasks/debug-application-cluster/debug-init-containers.md rename to content/en/docs/tasks/debug-application-cluster/debug-init-containers.md index 7ef77914a60bc..296f0a064873c 100644 --- a/docs/tasks/debug-application-cluster/debug-init-containers.md +++ b/content/en/docs/tasks/debug-application-cluster/debug-init-containers.md @@ -8,28 +8,29 @@ reviewers: - kow3ns - smarterclayton title: Debug Init Containers +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to investigate problems related to the execution of Init Containers. The example command lines below refer to the Pod as `` and the Init Containers as `` and ``. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * You should be familiar with the basics of [Init Containers](/docs/concepts/abstractions/init-containers/). * You should have [Configured an Init Container](/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod-that-has-an-init-container/). -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Checking the status of Init Containers @@ -91,11 +92,11 @@ Init Containers: You can also access the Init Container statuses programmatically by reading the `status.initContainerStatuses` field on the Pod Spec: -{% raw %} + ```shell kubectl get pod nginx --template '{{.status.initContainerStatuses}}' ``` -{% endraw %} + This command will return the same information as above in raw JSON. @@ -112,9 +113,9 @@ Init Containers that run a shell script print commands as they're executed. For example, you can do this in Bash by running `set -x` at the beginning of the script. -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Understanding Pod status @@ -130,7 +131,7 @@ Status | Meaning `Pending` | The Pod has not yet begun executing Init Containers. `PodInitializing` or `Running` | The Pod has already finished executing Init Containers. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md b/content/en/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md similarity index 99% rename from docs/tasks/debug-application-cluster/debug-pod-replication-controller.md rename to content/en/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md index c583ec06ae0cf..f196853172492 100644 --- a/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md +++ b/content/en/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md @@ -4,8 +4,7 @@ reviewers: title: Debug Pods and Replication Controllers --- -* TOC -{:toc} +{{< toc >}} ## Debugging pods diff --git a/docs/tasks/debug-application-cluster/debug-service.md b/content/en/docs/tasks/debug-application-cluster/debug-service.md similarity index 99% rename from docs/tasks/debug-application-cluster/debug-service.md rename to content/en/docs/tasks/debug-application-cluster/debug-service.md index d6bc9d79e2233..2142b2fd778f2 100644 --- a/docs/tasks/debug-application-cluster/debug-service.md +++ b/content/en/docs/tasks/debug-application-cluster/debug-service.md @@ -10,8 +10,7 @@ that a `Service` is not working properly. You've run your `Deployment` and created a `Service`, but you get no response when you try to access it. This document will hopefully help you to figure out what's going wrong. -* TOC -{:toc} +{{< toc >}} ## Conventions diff --git a/docs/tasks/debug-application-cluster/debug-stateful-set.md b/content/en/docs/tasks/debug-application-cluster/debug-stateful-set.md similarity index 84% rename from docs/tasks/debug-application-cluster/debug-stateful-set.md rename to content/en/docs/tasks/debug-application-cluster/debug-stateful-set.md index 5fa6ab3b3e90a..8bf56bb10ccf5 100644 --- a/docs/tasks/debug-application-cluster/debug-stateful-set.md +++ b/content/en/docs/tasks/debug-application-cluster/debug-stateful-set.md @@ -8,22 +8,23 @@ reviewers: - kow3ns - smarterclayton title: Debug a StatefulSet +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This task shows you how to debug a StatefulSet. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. * You should have a StatefulSet running that you want to investigate. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Debugging a StatefulSet @@ -40,12 +41,12 @@ instructions on how to deal with them. You can debug individual Pods in a StatefulSet using the [Debugging Pods](/docs/tasks/debug-application-cluster/debug-pod-replication-controller/) guide. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Learn more about [debugging an init-container](/docs/tasks/debug-application-cluster/debug-init-containers/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md b/content/en/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md similarity index 84% rename from docs/tasks/debug-application-cluster/determine-reason-pod-failure.md rename to content/en/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md index 4fe7da02ade4b..3b56840ab25fc 100644 --- a/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md +++ b/content/en/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md @@ -1,8 +1,9 @@ --- title: Determine the Reason for Pod Failure +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to write and read a Container termination message. @@ -15,17 +16,17 @@ put in a termination message should also be written to the general [Kubernetes logs](/docs/concepts/cluster-administration/logging/). -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Writing and reading a termination message @@ -33,7 +34,7 @@ In this exercise, you create a Pod that runs one container. The configuration file specifies a command that runs when the container starts. -{% include code.html language="yaml" file="termination.yaml" ghlink="/docs/tasks/debug-application-cluster/termination.yaml" %} +{{< code file="termination.yaml" >}} 1. Create a Pod based on the YAML configuration file: @@ -72,7 +73,7 @@ the container starts. only the termination message: ``` -{% raw %} kubectl get pod termination-demo -o go-template="{{range .status.containerStatuses}}{{.lastState.terminated.message}}{{end}}"{% endraw %} + kubectl get pod termination-demo -o go-template="{{range .status.containerStatuses}}{{.lastState.terminated.message}}{{end}}" ``` ## Customizing the termination message @@ -106,16 +107,16 @@ to use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * See the `terminationMessagePath` field in - [Container](/docs/reference/generated/kubernetes-api/{{page.version}}/#container-v1-core). + [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core). * Learn about [retrieving logs](/docs/concepts/cluster-administration/logging/). * Learn about [Go templates](https://golang.org/pkg/text/template/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/debug-application-cluster/event-exporter-deploy.yaml b/content/en/docs/tasks/debug-application-cluster/event-exporter-deploy.yaml similarity index 100% rename from docs/tasks/debug-application-cluster/event-exporter-deploy.yaml rename to content/en/docs/tasks/debug-application-cluster/event-exporter-deploy.yaml diff --git a/docs/tasks/debug-application-cluster/events-stackdriver.md b/content/en/docs/tasks/debug-application-cluster/events-stackdriver.md similarity index 95% rename from docs/tasks/debug-application-cluster/events-stackdriver.md rename to content/en/docs/tasks/debug-application-cluster/events-stackdriver.md index 08625ca4ea24f..0c3ba613bed6a 100644 --- a/docs/tasks/debug-application-cluster/events-stackdriver.md +++ b/content/en/docs/tasks/debug-application-cluster/events-stackdriver.md @@ -33,8 +33,7 @@ of the potential inaccuracy. [sdLogMetrics]: https://cloud.google.com/logging/docs/view/logs_based_metrics [sdAlerts]: https://cloud.google.com/logging/docs/view/logs_based_metrics#creating_an_alerting_policy -* TOC -{:toc} +{{< toc >}} ## Deployment @@ -64,7 +63,7 @@ to allow event exporter to read events. To make sure that event exporter pod will not be evicted from the node, you can additionally set up resource requests. As mentioned earlier, 100Mb RAM and 100m CPU should be enough. -{% include code.html language="yaml" file="event-exporter-deploy.yaml" ghlink="/docs/tasks/debug-application-cluster/event-exporter-deploy.yaml" %} +{{< code file="event-exporter-deploy.yaml" >}} ## User Guide diff --git a/docs/tasks/debug-application-cluster/fluentd-gcp-configmap.yaml b/content/en/docs/tasks/debug-application-cluster/fluentd-gcp-configmap.yaml similarity index 100% rename from docs/tasks/debug-application-cluster/fluentd-gcp-configmap.yaml rename to content/en/docs/tasks/debug-application-cluster/fluentd-gcp-configmap.yaml diff --git a/docs/tasks/debug-application-cluster/fluentd-gcp-ds.yaml b/content/en/docs/tasks/debug-application-cluster/fluentd-gcp-ds.yaml similarity index 100% rename from docs/tasks/debug-application-cluster/fluentd-gcp-ds.yaml rename to content/en/docs/tasks/debug-application-cluster/fluentd-gcp-ds.yaml diff --git a/docs/tasks/debug-application-cluster/get-shell-running-container.md b/content/en/docs/tasks/debug-application-cluster/get-shell-running-container.md similarity index 87% rename from docs/tasks/debug-application-cluster/get-shell-running-container.md rename to content/en/docs/tasks/debug-application-cluster/get-shell-running-container.md index bc0b3385e0b6f..41b3ab94e9228 100644 --- a/docs/tasks/debug-application-cluster/get-shell-running-container.md +++ b/content/en/docs/tasks/debug-application-cluster/get-shell-running-container.md @@ -3,31 +3,32 @@ reviewers: - caesarxuchao - mikedanese title: Get a Shell to a Running Container +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to use `kubectl exec` to get a shell to a running Container. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Getting a shell to a Container In this exercise, you create a Pod that has one Container. The Container runs the nginx image. Here is the configuration file for the Pod: -{% include code.html language="yaml" file="shell-demo.yaml" ghlink="/docs/tasks/debug-application-cluster/shell-demo.yaml" %} +{{< code file="shell-demo.yaml" >}} Create the Pod: @@ -116,9 +117,9 @@ kubectl exec shell-demo ls / kubectl exec shell-demo cat /proc/1/mounts ``` -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Opening a shell when a Pod has more than one Container @@ -132,14 +133,14 @@ shell to the main-app Container. kubectl exec -it my-pod --container main-app -- /bin/bash ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [kubectl exec](/docs/reference/generated/kubectl/kubectl-commands/#exec) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/debug-application-cluster/local-debugging.md b/content/en/docs/tasks/debug-application-cluster/local-debugging.md similarity index 93% rename from docs/tasks/debug-application-cluster/local-debugging.md rename to content/en/docs/tasks/debug-application-cluster/local-debugging.md index 343e2514f95e8..92d68aad987e4 100644 --- a/docs/tasks/debug-application-cluster/local-debugging.md +++ b/content/en/docs/tasks/debug-application-cluster/local-debugging.md @@ -1,8 +1,9 @@ --- title: Developing and debugging services locally +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} Kubernetes applications usually consist of multiple, separate services, each running in its own container. Developing and debugging these services on a remote Kubernetes cluster can be cumbersome, requiring you to [get a shell on a running container](https://kubernetes.io/docs/tasks/debug-application-cluster/get-shell-running-container/) and running your tools inside the remote shell. @@ -11,17 +12,17 @@ Kubernetes applications usually consist of multiple, separate services, each run This document describes using `telepresence` to develop and debug services running on a remote cluster locally. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * Kubernetes cluster is installed * `kubectl` is configured to communicate with the cluster * [Telepresence](https://www.telepresence.io/reference/install) is installed -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Getting a shell on a remote cluster @@ -45,9 +46,9 @@ where $DEPLOYMENT_NAME is the name of your existing deployment. Running this command spawns a shell. In the shell, start your service. You can then make edits to the source code locally, save, and see the changes take effect immediately. You can also run your service in a debugger, or any other local development tool. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} If you're interested in a hands-on tutorial, check out [this tutorial](https://cloud.google.com/community/tutorials/developing-services-with-k8s) that walks through locally developing the Guestbook application on Google Kubernetes Engine. @@ -55,6 +56,6 @@ Telepresence has [numerous proxying options](https://www.telepresence.io/referen For further reading, visit the [Telepresence website](https://www.telepresence.io). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/debug-application-cluster/logging-elasticsearch-kibana.md b/content/en/docs/tasks/debug-application-cluster/logging-elasticsearch-kibana.md similarity index 100% rename from docs/tasks/debug-application-cluster/logging-elasticsearch-kibana.md rename to content/en/docs/tasks/debug-application-cluster/logging-elasticsearch-kibana.md diff --git a/docs/tasks/debug-application-cluster/logging-stackdriver.md b/content/en/docs/tasks/debug-application-cluster/logging-stackdriver.md similarity index 98% rename from docs/tasks/debug-application-cluster/logging-stackdriver.md rename to content/en/docs/tasks/debug-application-cluster/logging-stackdriver.md index a7d8e28828d81..9085d4cf946dc 100644 --- a/docs/tasks/debug-application-cluster/logging-stackdriver.md +++ b/content/en/docs/tasks/debug-application-cluster/logging-stackdriver.md @@ -41,9 +41,10 @@ The `DaemonSet` and `ConfigMap` are configured as addons. If you're not using `k consider starting a cluster without a pre-configured logging solution and then deploying Stackdriver Logging agents to the running cluster. +{{< warning >}} **Warning:** The Stackdriver logging daemon has known issues on platforms other than Google Kubernetes Engine. Proceed at your own risk. -{: .warning} +{{< /warning >}} ### Deploying to an existing cluster @@ -119,7 +120,7 @@ default fluentd-gcp-v2.0 3 3 3 beta.kubernetes.i To understand how logging with Stackdriver works, consider the following synthetic log generator pod specification [counter-pod.yaml](/docs/tasks/debug-application-cluster/counter-pod.yaml): -{% include code.html language="yaml" file="counter-pod.yaml" ghlink="/docs/tasks/debug-application-cluster/counter-pod.yaml" %} +{{< code file="counter-pod.yaml" >}} This pod specification has one container that runs a bash script that writes out the value of a counter and the date once per diff --git a/docs/tasks/debug-application-cluster/monitor-node-health.md b/content/en/docs/tasks/debug-application-cluster/monitor-node-health.md similarity index 93% rename from docs/tasks/debug-application-cluster/monitor-node-health.md rename to content/en/docs/tasks/debug-application-cluster/monitor-node-health.md index 44a700853dd83..beab96da8e285 100644 --- a/docs/tasks/debug-application-cluster/monitor-node-health.md +++ b/content/en/docs/tasks/debug-application-cluster/monitor-node-health.md @@ -5,15 +5,14 @@ reviewers: title: Monitor Node Health --- -* TOC -{:toc} +{{< toc >}} ## Node Problem Detector *Node problem detector* is a [DaemonSet](/docs/concepts/workloads/controllers/daemonset/) monitoring the node health. It collects node problems from various daemons and reports them to the apiserver as [NodeCondition](/docs/concepts/architecture/nodes/#condition) -and [Event](/docs/reference/generated/kubernetes-api/{{page.version}}/#event-v1-core). +and [Event](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#event-v1-core). It supports some known kernel issue detection now, and will detect more and more node problems over time. @@ -56,7 +55,7 @@ customized node problems. * **Step 1:** `node-problem-detector.yaml`: -{% include code.html language="yaml" file="node-problem-detector.yaml" ghlink="/docs/tasks/debug-application-cluster/node-problem-detector.yaml" %} +{{< code file="node-problem-detector.yaml" >}} ***Notice that you should make sure the system log directory is right for your @@ -90,7 +89,7 @@ following the steps: node-problem-detector-config --from-file=config/`. * **Step 3:** Change the `node-problem-detector.yaml` to use the ConfigMap: -{% include code.html language="yaml" file="node-problem-detector-configmap.yaml" ghlink="/docs/tasks/debug-application-cluster/node-problem-detector-configmap.yaml" %} +{{< code file="node-problem-detector-configmap.yaml" >}} * **Step 4:** Re-create the node problem detector with the new yaml file: diff --git a/docs/tasks/debug-application-cluster/nginx-dep.yaml b/content/en/docs/tasks/debug-application-cluster/nginx-dep.yaml similarity index 100% rename from docs/tasks/debug-application-cluster/nginx-dep.yaml rename to content/en/docs/tasks/debug-application-cluster/nginx-dep.yaml diff --git a/docs/tasks/debug-application-cluster/node-problem-detector-configmap.yaml b/content/en/docs/tasks/debug-application-cluster/node-problem-detector-configmap.yaml similarity index 100% rename from docs/tasks/debug-application-cluster/node-problem-detector-configmap.yaml rename to content/en/docs/tasks/debug-application-cluster/node-problem-detector-configmap.yaml diff --git a/docs/tasks/debug-application-cluster/node-problem-detector.yaml b/content/en/docs/tasks/debug-application-cluster/node-problem-detector.yaml similarity index 100% rename from docs/tasks/debug-application-cluster/node-problem-detector.yaml rename to content/en/docs/tasks/debug-application-cluster/node-problem-detector.yaml diff --git a/docs/tasks/debug-application-cluster/resource-usage-monitoring.md b/content/en/docs/tasks/debug-application-cluster/resource-usage-monitoring.md similarity index 100% rename from docs/tasks/debug-application-cluster/resource-usage-monitoring.md rename to content/en/docs/tasks/debug-application-cluster/resource-usage-monitoring.md diff --git a/docs/tasks/debug-application-cluster/shell-demo.yaml b/content/en/docs/tasks/debug-application-cluster/shell-demo.yaml similarity index 100% rename from docs/tasks/debug-application-cluster/shell-demo.yaml rename to content/en/docs/tasks/debug-application-cluster/shell-demo.yaml diff --git a/docs/tasks/debug-application-cluster/termination.yaml b/content/en/docs/tasks/debug-application-cluster/termination.yaml similarity index 100% rename from docs/tasks/debug-application-cluster/termination.yaml rename to content/en/docs/tasks/debug-application-cluster/termination.yaml diff --git a/docs/tasks/debug-application-cluster/troubleshooting.md b/content/en/docs/tasks/debug-application-cluster/troubleshooting.md similarity index 98% rename from docs/tasks/debug-application-cluster/troubleshooting.md rename to content/en/docs/tasks/debug-application-cluster/troubleshooting.md index d27d7315123fa..073884d16f909 100644 --- a/docs/tasks/debug-application-cluster/troubleshooting.md +++ b/content/en/docs/tasks/debug-application-cluster/troubleshooting.md @@ -28,7 +28,7 @@ practical instructions for getting started. [Tasks](/docs/tasks/) show how to accomplish commonly used tasks, and [Tutorials](/docs/tutorials/) are more comprehensive walkthroughs of real-world, industry-specific, or end-to-end development scenarios. The [Reference](/docs/reference/) section provides -detailed documentation on the [Kubernetes API](/docs/reference/generated/kubernetes-api/{{page.version}}/) +detailed documentation on the [Kubernetes API](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/) and command-line interfaces (CLIs), such as [`kubectl`](/docs/user-guide/kubectl-overview/). You may also find the Stack Overflow topics relevant: diff --git a/docs/tasks/example-task-template.md b/content/en/docs/tasks/example-task-template.md similarity index 70% rename from docs/tasks/example-task-template.md rename to content/en/docs/tasks/example-task-template.md index 7b27a26dd0f71..af4c10b9872ce 100644 --- a/docs/tasks/example-task-template.md +++ b/content/en/docs/tasks/example-task-template.md @@ -2,49 +2,50 @@ title: Example Task Template reviewers: - chenopis +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} **NOTE:** Be sure to also [create an entry in the table of contents](/docs/home/contribute/write-new-topic/#creating-an-entry-in-the-table-of-contents) for your new document. This page shows how to ... -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * Do this. * Do this too. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Doing ... 1. Do this. 1. Do this next. Possibly read this [related explanation](...). -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Understanding ... **[Optional Section]** Here's an interesting thing to know about the steps you just did. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} **[Optional Section]** * Learn more about [Writing a New Topic](/docs/home/contribute/write-new-topic/). * See [Using Page Templates - Task template](/docs/home/contribute/page-templates/#task_template) for how to use this template. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/extend-kubectl/kubectl-plugins.md b/content/en/docs/tasks/extend-kubectl/kubectl-plugins.md similarity index 97% rename from docs/tasks/extend-kubectl/kubectl-plugins.md rename to content/en/docs/tasks/extend-kubectl/kubectl-plugins.md index eb2438435208d..b647b7e3c71c1 100644 --- a/docs/tasks/extend-kubectl/kubectl-plugins.md +++ b/content/en/docs/tasks/extend-kubectl/kubectl-plugins.md @@ -3,25 +3,26 @@ title: Extend kubectl with plugins reviewers: - fabianofranz description: With kubectl plugins, you can extend the functionality of the kubectl command by adding new subcommands. +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} -{% include feature-state-alpha.md %} +{{< feature-state state="alpha" >}} This guide shows you how to install and write extensions for [kubectl](/docs/user-guide/kubectl/). Usually called *plugins* or *binary extensions*, this feature allows you to extend the default set of commands available in `kubectl` by adding new subcommands to perform new tasks and extend the set of features available in the main distribution of `kubectl`. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} You need to have a working `kubectl` binary installed. Note that plugins were officially introduced as an alpha feature in the v1.8.0 release. So, while some parts of the plugins feature were already available in previous versions, a `kubectl` version of 1.8.0 or later is recommended. Until a GA version is released, plugins will only be available under the `kubectl plugin` subcommand. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Installing kubectl plugins @@ -124,14 +125,14 @@ For example, `KUBECTL_PLUGINS_GLOBAL_FLAG_NAMESPACE`, `KUBECTL_PLUGINS_GLOBAL_FL * `KUBECTL_PLUGINS_LOCAL_FLAG_*`: One environment variable for every local flag declared in the `plugin.yaml` descriptor. For example, `KUBECTL_PLUGINS_LOCAL_FLAG_HEAT` in the preceding `targaryen` example. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Check the repository for [some more examples](https://github.com/kubernetes/kubernetes/tree/master/pkg/kubectl/plugins/examples) of plugins. * In case of any questions, feel free to reach out to the [CLI SIG team](https://github.com/kubernetes/community/tree/master/sig-cli). * Binary plugins is still an alpha feature, so this is the time to contribute ideas and improvements to the codebase. We're also excited to hear about what you're planning to implement with plugins, so [let us know](https://github.com/kubernetes/community/tree/master/sig-cli)! -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/federation/Values.yaml b/content/en/docs/tasks/federation/Values.yaml similarity index 100% rename from docs/tasks/federation/Values.yaml rename to content/en/docs/tasks/federation/Values.yaml diff --git a/content/en/docs/tasks/federation/_index.md b/content/en/docs/tasks/federation/_index.md new file mode 100755 index 0000000000000..fc7458f1d92c0 --- /dev/null +++ b/content/en/docs/tasks/federation/_index.md @@ -0,0 +1,5 @@ +--- +title: "Federation - Run an App on Multiple Clusters" +weight: 120 +--- + diff --git a/docs/tasks/federation/federation-service-discovery.md b/content/en/docs/tasks/federation/federation-service-discovery.md similarity index 99% rename from docs/tasks/federation/federation-service-discovery.md rename to content/en/docs/tasks/federation/federation-service-discovery.md index d0a97dd57bb2d..01d0e4b396aae 100644 --- a/docs/tasks/federation/federation-service-discovery.md +++ b/content/en/docs/tasks/federation/federation-service-discovery.md @@ -5,7 +5,7 @@ reviewers: title: Cross-cluster Service Discovery using Federated Services --- -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} This guide explains how to use Kubernetes Federated Services to deploy a common Service across multiple Kubernetes clusters. This makes it @@ -13,8 +13,7 @@ easy to achieve cross-cluster service discovery and availability zone fault tolerance for your Kubernetes applications. -* TOC -{:toc} +{{< toc >}} ## Prerequisites diff --git a/docs/tasks/federation/policy-engine-deployment.yaml b/content/en/docs/tasks/federation/policy-engine-deployment.yaml similarity index 100% rename from docs/tasks/federation/policy-engine-deployment.yaml rename to content/en/docs/tasks/federation/policy-engine-deployment.yaml diff --git a/docs/tasks/federation/policy-engine-service.yaml b/content/en/docs/tasks/federation/policy-engine-service.yaml similarity index 100% rename from docs/tasks/federation/policy-engine-service.yaml rename to content/en/docs/tasks/federation/policy-engine-service.yaml diff --git a/docs/tasks/federation/policy.rego b/content/en/docs/tasks/federation/policy.rego similarity index 100% rename from docs/tasks/federation/policy.rego rename to content/en/docs/tasks/federation/policy.rego diff --git a/docs/tasks/federation/replicaset-example-policy.yaml b/content/en/docs/tasks/federation/replicaset-example-policy.yaml similarity index 100% rename from docs/tasks/federation/replicaset-example-policy.yaml rename to content/en/docs/tasks/federation/replicaset-example-policy.yaml diff --git a/docs/tasks/federation/scheduling-policy-admission.yaml b/content/en/docs/tasks/federation/scheduling-policy-admission.yaml similarity index 100% rename from docs/tasks/federation/scheduling-policy-admission.yaml rename to content/en/docs/tasks/federation/scheduling-policy-admission.yaml diff --git a/docs/tasks/federation/set-up-cluster-federation-kubefed.md b/content/en/docs/tasks/federation/set-up-cluster-federation-kubefed.md similarity index 99% rename from docs/tasks/federation/set-up-cluster-federation-kubefed.md rename to content/en/docs/tasks/federation/set-up-cluster-federation-kubefed.md index ac895886e0449..a9f7553b30b36 100644 --- a/docs/tasks/federation/set-up-cluster-federation-kubefed.md +++ b/content/en/docs/tasks/federation/set-up-cluster-federation-kubefed.md @@ -4,10 +4,9 @@ reviewers: title: Set up Cluster Federation with Kubefed --- -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} -* TOC -{:toc} +{{< toc >}} Kubernetes version 1.5 and above includes a new command line tool called [`kubefed`](/docs/admin/kubefed/) to help you administrate your federated diff --git a/docs/tasks/federation/set-up-coredns-provider-federation.md b/content/en/docs/tasks/federation/set-up-coredns-provider-federation.md similarity index 92% rename from docs/tasks/federation/set-up-coredns-provider-federation.md rename to content/en/docs/tasks/federation/set-up-coredns-provider-federation.md index b57e64f59c53b..7895e0a329615 100644 --- a/docs/tasks/federation/set-up-coredns-provider-federation.md +++ b/content/en/docs/tasks/federation/set-up-coredns-provider-federation.md @@ -1,27 +1,28 @@ --- title: Set up CoreDNS as DNS provider for Cluster Federation +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} This page shows how to configure and deploy CoreDNS to be used as the DNS provider for Cluster Federation. -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Configure and deploy CoreDNS server * Bring up federation with CoreDNS as dns provider * Setup CoreDNS server in nameserver lookup chain -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * You need to have a running Kubernetes cluster (which is referenced as host cluster). Please see one of the @@ -30,10 +31,10 @@ installation instructions for your platform. * Support for `LoadBalancer` services in member clusters of federation is mandatory to enable `CoreDNS` for service discovery across federated clusters. -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Deploying CoreDNS and etcd charts @@ -59,7 +60,7 @@ The CoreDNS default configuration should be customized to suit the federation. Shown below is the Values.yaml, which overrides the default configuration parameters on the CoreDNS chart. -{% include code.html language="yaml" file="Values.yaml" ghlink="/docs/tasks/federation/Values.yaml" %} +{{< code file="Values.yaml" >}} The above configuration file needs some explanation: @@ -129,6 +130,6 @@ Replace `example.com` above with federation domain. Now the federated cluster is ready for cross-cluster service discovery! -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tasks/federation/set-up-placement-policies-federation.md b/content/en/docs/tasks/federation/set-up-placement-policies-federation.md similarity index 83% rename from docs/tasks/federation/set-up-placement-policies-federation.md rename to content/en/docs/tasks/federation/set-up-placement-policies-federation.md index fe3b497d8227a..2e75180ee2b04 100644 --- a/docs/tasks/federation/set-up-placement-policies-federation.md +++ b/content/en/docs/tasks/federation/set-up-placement-policies-federation.md @@ -1,25 +1,26 @@ --- title: Set up placement policies in Federation +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} -{% include federation-current-state.md %} +{{< include "federation-current-state.md" >}} This page shows how to enforce policy-based placement decisions over Federated resources using an external policy engine. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} You need to have a running Kubernetes cluster (which is referenced as host cluster). Please see one of the [getting started](/docs/setup/) guides for installation instructions for your platform. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Deploying Federation and configuring an external policy engine @@ -33,7 +34,7 @@ received from the external policy engine. Shown below is an example ConfigMap for the Admission Controller: -{% include code.html language="yaml" file="scheduling-policy-admission.yaml" ghlink="/docs/tasks/federation/scheduling-policy-admission.yaml" %} +{{< code file="scheduling-policy-admission.yaml" >}} The ConfigMap contains three files: @@ -83,7 +84,7 @@ Create a Service in the host cluster to contact the external policy engine: Shown below is an example Service for OPA. -{% include code.html language="yaml" file="policy-engine-service.yaml" ghlink="/docs/tasks/federation/policy-engine-service.yaml" %} +{{< code file="policy-engine-service.yaml" >}} Create a Deployment in the host cluster with the Federation control plane: @@ -91,7 +92,7 @@ Create a Deployment in the host cluster with the Federation control plane: Shown below is an example Deployment for OPA. -{% include code.html language="yaml" file="policy-engine-deployment.yaml" ghlink="/docs/tasks/federation/policy-engine-deployment.yaml" %} +{{< code file="policy-engine-deployment.yaml" >}} ## Configuring placement policies via ConfigMaps @@ -104,7 +105,7 @@ Create the namespace if it does not already exist: Configure a sample policy to test the external policy engine: -{% include code.html language="yaml" file="policy.rego" ghlink="/docs/tasks/federation/policy.rego" %} +{{< code file="policy.rego" >}} Shown below is the command to create the sample policy: @@ -127,7 +128,7 @@ Annotate one of the clusters to indicate that it is PCI certified. Deploy a Federated ReplicaSet to test the placement policy. -{% include code.html language="yaml" file="replicaset-example-policy.yaml" ghlink="/docs/tasks/federation/replicaset-example-policy.yaml" %} +{{< code file="replicaset-example-policy.yaml" >}} Shown below is the command to deploy a ReplicaSet that *does* match the policy. @@ -137,6 +138,6 @@ Inspect the ReplicaSet to confirm the appropriate annotations have been applied: kubectl --context=federation get rs nginx-pci -o jsonpath='{.metadata.annotations}' -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/content/en/docs/tasks/inject-data-application/_index.md b/content/en/docs/tasks/inject-data-application/_index.md new file mode 100755 index 0000000000000..b81ded3ad1a0f --- /dev/null +++ b/content/en/docs/tasks/inject-data-application/_index.md @@ -0,0 +1,5 @@ +--- +title: "Inject Data Into Applications" +weight: 40 +--- + diff --git a/docs/tasks/inject-data-application/commands.yaml b/content/en/docs/tasks/inject-data-application/commands.yaml similarity index 100% rename from docs/tasks/inject-data-application/commands.yaml rename to content/en/docs/tasks/inject-data-application/commands.yaml diff --git a/docs/tasks/inject-data-application/dapi-envars-container.yaml b/content/en/docs/tasks/inject-data-application/dapi-envars-container.yaml similarity index 100% rename from docs/tasks/inject-data-application/dapi-envars-container.yaml rename to content/en/docs/tasks/inject-data-application/dapi-envars-container.yaml diff --git a/docs/tasks/inject-data-application/dapi-envars-pod.yaml b/content/en/docs/tasks/inject-data-application/dapi-envars-pod.yaml similarity index 100% rename from docs/tasks/inject-data-application/dapi-envars-pod.yaml rename to content/en/docs/tasks/inject-data-application/dapi-envars-pod.yaml diff --git a/docs/tasks/inject-data-application/dapi-volume-resources.yaml b/content/en/docs/tasks/inject-data-application/dapi-volume-resources.yaml similarity index 100% rename from docs/tasks/inject-data-application/dapi-volume-resources.yaml rename to content/en/docs/tasks/inject-data-application/dapi-volume-resources.yaml diff --git a/docs/tasks/inject-data-application/dapi-volume.yaml b/content/en/docs/tasks/inject-data-application/dapi-volume.yaml similarity index 100% rename from docs/tasks/inject-data-application/dapi-volume.yaml rename to content/en/docs/tasks/inject-data-application/dapi-volume.yaml diff --git a/docs/tasks/inject-data-application/define-command-argument-container.md b/content/en/docs/tasks/inject-data-application/define-command-argument-container.md similarity index 90% rename from docs/tasks/inject-data-application/define-command-argument-container.md rename to content/en/docs/tasks/inject-data-application/define-command-argument-container.md index f92286606fb70..76ff8daeaafd4 100644 --- a/docs/tasks/inject-data-application/define-command-argument-container.md +++ b/content/en/docs/tasks/inject-data-application/define-command-argument-container.md @@ -1,23 +1,24 @@ --- title: Define a Command and Arguments for a Container +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to define commands and arguments when you run a container -in a {% glossary_tooltip term_id="pod" %}. +in a {{< glossary_tooltip term_id="pod" >}}. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Define a command and arguments when you create a Pod @@ -35,7 +36,7 @@ with your new arguments. In this exercise, you create a Pod that runs one container. The configuration file for the Pod defines a command and two arguments: -{% include code.html language="yaml" file="commands.yaml" ghlink="/docs/tasks/inject-data-application/commands.yaml" %} +{{< code file="commands.yaml" >}} 1. Create a Pod based on the YAML configuration file: @@ -77,9 +78,10 @@ the techniques available for defining environment variables, including and [Secrets](/docs/concepts/configuration/secret/). +{{< note >}} **Note:** The environment variable appears in parentheses, `"$(VAR)"`. This is required for the variable to be expanded in the `command` or `args` field. -{: .note} +{{< /note >}} ## Run a command in a shell @@ -125,16 +127,16 @@ Here are some examples: | `[/ep-1]` | `[foo bar]` | `[/ep-2]` | `[zoo boo]` | `[ep-2 zoo boo]` | -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [containers and commands](/docs/user-guide/containers/). * Learn more about [configuring pods and containers](/docs/tasks/). * Learn more about [running commands in a container](/docs/tasks/debug-application-cluster/get-shell-running-container/). -* See [Container](/docs/reference/generated/kubernetes-api/{{page.version}}/#container-v1-core). +* See [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core). + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/docs/tasks/inject-data-application/define-environment-variable-container.md b/content/en/docs/tasks/inject-data-application/define-environment-variable-container.md similarity index 83% rename from docs/tasks/inject-data-application/define-environment-variable-container.md rename to content/en/docs/tasks/inject-data-application/define-environment-variable-container.md index 01ed7319c7812..644c8b344cb5e 100644 --- a/docs/tasks/inject-data-application/define-environment-variable-container.md +++ b/content/en/docs/tasks/inject-data-application/define-environment-variable-container.md @@ -1,23 +1,24 @@ --- title: Define Environment Variables for a Container +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to define environment variables when you run a container in a Kubernetes Pod. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Define an environment variable for a container @@ -30,7 +31,7 @@ file for the Pod defines an environment variable with name `DEMO_GREETING` and value `"Hello from the environment"`. Here is the configuration file for the Pod: -{% include code.html language="yaml" file="envars.yaml" ghlink="/docs/tasks/inject-data-application/envars.yaml" %} +{{< code file="envars.yaml" >}} 1. Create a Pod based on the YAML configuration file: @@ -64,19 +65,20 @@ Pod: 1. To exit the shell, enter `exit`. +{{< note >}} **Note:** The environment variables set using the `env` or `envFrom` field will override any environment variables specified in the container image. -{: .note} +{{< /note >}} -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [environment variables](/docs/tasks/configure-pod-container/environment-variable-expose-pod-information/). * Learn about [using secrets as environment variables](/docs/user-guide/secrets/#using-secrets-as-environment-variables). -* See [EnvVarSource](/docs/reference/generated/kubernetes-api/{{page.version}}/#envvarsource-v1-core). +* See [EnvVarSource](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#envvarsource-v1-core). + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/docs/tasks/inject-data-application/distribute-credentials-secure.md b/content/en/docs/tasks/inject-data-application/distribute-credentials-secure.md similarity index 81% rename from docs/tasks/inject-data-application/distribute-credentials-secure.md rename to content/en/docs/tasks/inject-data-application/distribute-credentials-secure.md index 2d64d59fed848..a57277992667c 100644 --- a/docs/tasks/inject-data-application/distribute-credentials-secure.md +++ b/content/en/docs/tasks/inject-data-application/distribute-credentials-secure.md @@ -1,19 +1,20 @@ --- title: Distribute Credentials Securely Using Secrets +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to securely inject sensitive data, such as passwords and encryption keys, into Pods. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Convert your secret data to a base-64 representation @@ -33,15 +34,16 @@ and the base-64 representation of your password is `Mzk1MjgkdmRnN0pi`. Here is a configuration file you can use to create a Secret that holds your username and password: -{% include code.html language="yaml" file="secret.yaml" ghlink="/docs/tasks/inject-data-application/secret.yaml" %} +{{< code file="secret.yaml" >}} 1. Create the Secret kubectl create -f https://k8s.io/docs/tasks/inject-data-application/secret.yaml + {{< note >}} **Note:** If you want to skip the Base64 encoding step, you can create a Secret by using the `kubectl create secret` command: - {: .note} + {{< /note >}} kubectl create secret generic test-secret --from-literal=username='my-app' --from-literal=password='39528$vdg7Jb' @@ -77,7 +79,7 @@ username and password: Here is a configuration file you can use to create a Pod: -{% include code.html language="yaml" file="secret-pod.yaml" ghlink="/docs/tasks/inject-data-application/secret-pod.yaml" %} +{{< code file="secret-pod.yaml" >}} 1. Create the Pod: @@ -124,7 +126,7 @@ is exposed: Here is a configuration file you can use to create a Pod: -{% include code.html language="yaml" file="secret-envars-pod.yaml" ghlink="/docs/tasks/inject-data-application/secret-envars-pod.yaml" %} +{{< code file="secret-envars-pod.yaml" >}} 1. Create the Pod: @@ -154,19 +156,19 @@ Here is a configuration file you can use to create a Pod: ... SECRET_PASSWORD=39528$vdg7Jb -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [Secrets](/docs/concepts/configuration/secret/). * Learn about [Volumes](/docs/concepts/storage/volumes/). ### Reference -* [Secret](/docs/reference/generated/kubernetes-api/{{page.version}}/#secret-v1-core) -* [Volume](/docs/reference/generated/kubernetes-api/{{page.version}}/#volume-v1-core) -* [Pod](/docs/reference/generated/kubernetes-api/{{page.version}}/#pod-v1-core) +* [Secret](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#secret-v1-core) +* [Volume](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core) +* [Pod](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#pod-v1-core) + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md b/content/en/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md similarity index 88% rename from docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md rename to content/en/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md index b5971ea2a8114..2af3360858ad0 100644 --- a/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md +++ b/content/en/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md @@ -1,23 +1,24 @@ --- title: Expose Pod Information to Containers Through Files +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how a Pod can use a DownwardAPIVolumeFile to expose information about itself to Containers running in the Pod. A DownwardAPIVolumeFile can expose Pod fields and Container fields. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## The Downward API @@ -34,21 +35,22 @@ Together, these two ways of exposing Pod and Container fields are called the In this exercise, you create a Pod that has one Container. Here is the configuration file for the Pod: -{% include code.html language="yaml" file="dapi-volume.yaml" ghlink="/docs/tasks/inject-data-application/dapi-volume.yaml" %} +{{< code file="dapi-volume.yaml" >}} In the configuration file, you can see that the Pod has a `downwardAPI` Volume, and the Container mounts the Volume at `/etc/podinfo`. Look at the `items` array under `downwardAPI`. Each element of the array is a -[DownwardAPIVolumeFile](/docs/reference/generated/kubernetes-api/{{page.version}}/#downwardapivolumefile-v1-core). +[DownwardAPIVolumeFile](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumefile-v1-core). The first element specifies that the value of the Pod's `metadata.labels` field should be stored in a file named `labels`. The second element specifies that the value of the Pod's `annotations` field should be stored in a file named `annotations`. +{{< note >}} **Note:** The fields in this example are Pod fields. They are not fields of the Container in the Pod. -{: .note} +{{< /note >}} Create the Pod: @@ -135,10 +137,11 @@ written to a new temporary directory, and the `..data` symlink is updated atomically using [rename(2)](http://man7.org/linux/man-pages/man2/rename.2.html). +{{< note >}} **Note:** A container using Downward API as a [subPath](/docs/concepts/storage/volumes/#using-subpath) volume mount will not receive Downward API updates. -{: .note} +{{< /note >}} Exit the shell: @@ -152,7 +155,7 @@ The preceding exercise, you stored Pod fields in a DownwardAPIVolumeFile. In this next exercise, you store Container fields. Here is the configuration file for a Pod that has one Container: -{% include code.html language="yaml" file="dapi-volume-resources.yaml" ghlink="/docs/tasks/inject-data-application/dapi-volume-resources.yaml" %} +{{< code file="dapi-volume-resources.yaml" >}} In the configuration file, you can see that the Pod has a `downwardAPI` Volume, and the Container mounts the Volume at `/etc/podinfo`. @@ -184,9 +187,9 @@ In your shell, view the `cpu_limit` file: You can use similar commands to view the `cpu_request`, `mem_limit` and `mem_request` files. -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Capabilities of the Downward API @@ -215,9 +218,10 @@ In addition, the following information is available through * `metadata.labels` - all of the pod’s labels, formatted as `label-key="escaped-label-value"` with one label per line * `metadata.annotations` - all of the pod’s annotations, formatted as `annotation-key="escaped-annotation-value"` with one annotation per line +{{< note >}} **Note:** If CPU and memory limits are not specified for a Container, the Downward API defaults to the node allocatable value for CPU and memory. -{: .note} +{{< /note >}} ## Project keys to specific paths and file permissions @@ -238,18 +242,18 @@ application, but that is tedious and error prone, and it violates the goal of lo coupling. A better option would be to use the Pod's name as an identifier, and inject the Pod's name into the well-known environment variable. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} -* [PodSpec](/docs/reference/generated/kubernetes-api/{{page.version}}/#podspec-v1-core) -* [Volume](/docs/reference/generated/kubernetes-api/{{page.version}}/#volume-v1-core) -* [DownwardAPIVolumeSource](/docs/reference/generated/kubernetes-api/{{page.version}}/#downwardapivolumesource-v1-core) -* [DownwardAPIVolumeFile](/docs/reference/generated/kubernetes-api/{{page.version}}/#downwardapivolumefile-v1-core) -* [ResourceFieldSelector](/docs/reference/generated/kubernetes-api/{{page.version}}/#resourcefieldselector-v1-core) +* [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core) +* [Volume](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core) +* [DownwardAPIVolumeSource](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumesource-v1-core) +* [DownwardAPIVolumeFile](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumefile-v1-core) +* [ResourceFieldSelector](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#resourcefieldselector-v1-core) + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/docs/tasks/inject-data-application/envars.yaml b/content/en/docs/tasks/inject-data-application/envars.yaml similarity index 100% rename from docs/tasks/inject-data-application/envars.yaml rename to content/en/docs/tasks/inject-data-application/envars.yaml diff --git a/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md b/content/en/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md similarity index 74% rename from docs/tasks/inject-data-application/environment-variable-expose-pod-information.md rename to content/en/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md index b98ddb3cba9d8..129325e7f83f5 100644 --- a/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md +++ b/content/en/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md @@ -1,31 +1,32 @@ --- title: Expose Pod Information to Containers Through Environment Variables +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how a Pod can use environment variables to expose information about itself to Containers running in the Pod. Environment variables can expose Pod fields and Container fields. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## The Downward API There are two ways to expose Pod and Container fields to a running Container: * Environment variables -* [DownwardAPIVolumeFiles](/docs/reference/generated/kubernetes-api/{{page.version}}/#downwardapivolumefile-v1-core) +* [DownwardAPIVolumeFiles](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumefile-v1-core) Together, these two ways of exposing Pod and Container fields are called the *Downward API*. @@ -36,18 +37,19 @@ Together, these two ways of exposing Pod and Container fields are called the In this exercise, you create a Pod that has one Container. Here is the configuration file for the Pod: -{% include code.html language="yaml" file="dapi-envars-pod.yaml" ghlink="/docs/tasks/inject-data-application/dapi-envars-pod.yaml" %} +{{< code file="dapi-envars-pod.yaml" >}} In the configuration file, you can see five environment variables. The `env` field is an array of -[EnvVars](/docs/reference/generated/kubernetes-api/{{page.version}}/#envvar-v1-core). +[EnvVars](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#envvar-v1-core). The first element in the array specifies that the `MY_NODE_NAME` environment variable gets its value from the Pod's `spec.nodeName` field. Similarly, the other environment variables get their names from Pod fields. +{{< note >}} **Note:** The fields in this example are Pod fields. They are not fields of the Container in the Pod. -{: .note} +{{< /note >}} Create the Pod: @@ -114,11 +116,11 @@ variables. In this next exercise, you use Container fields as the values for environment variables. Here is the configuration file for a Pod that has one container: -{% include code.html language="yaml" file="dapi-envars-container.yaml" ghlink="/docs/tasks/inject-data-application/dapi-envars-container.yaml" %} +{{< code file="dapi-envars-container.yaml" >}} In the configuration file, you can see four environment variables. The `env` field is an array of -[EnvVars](/docs/reference/generated/kubernetes-api/{{page.version}}/#envvar-v1-core). +[EnvVars](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#envvar-v1-core). The first element in the array specifies that the `MY_CPU_REQUEST` environment variable gets its value from the `requests.cpu` field of a Container named `test-container`. Similarly, the other environment variables get their values @@ -151,20 +153,20 @@ The output shows the values of selected environment variables: 67108864 ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [Defining Environment Variables for a Container](/docs/tasks/inject-data-application/define-environment-variable-container/) -* [PodSpec](/docs/reference/generated/kubernetes-api/{{page.version}}/#podspec-v1-core) -* [Container](/docs/reference/generated/kubernetes-api/{{page.version}}/#container-v1-core) -* [EnvVar](/docs/reference/generated/kubernetes-api/{{page.version}}/#envvar-v1-core) -* [EnvVarSource](/docs/reference/generated/kubernetes-api/{{page.version}}/#envvarsource-v1-core) -* [ObjectFieldSelector](/docs/reference/generated/kubernetes-api/{{page.version}}/#objectfieldselector-v1-core) -* [ResourceFieldSelector](/docs/reference/generated/kubernetes-api/{{page.version}}/#resourcefieldselector-v1-core) +* [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core) +* [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core) +* [EnvVar](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#envvar-v1-core) +* [EnvVarSource](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#envvarsource-v1-core) +* [ObjectFieldSelector](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#objectfieldselector-v1-core) +* [ResourceFieldSelector](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#resourcefieldselector-v1-core) + +{{% /capture %}} -{% endcapture %} -{% include templates/task.md %} diff --git a/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml b/content/en/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml similarity index 100% rename from docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml rename to content/en/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml diff --git a/docs/tasks/inject-data-application/podpreset-allow-db.yaml b/content/en/docs/tasks/inject-data-application/podpreset-allow-db.yaml similarity index 100% rename from docs/tasks/inject-data-application/podpreset-allow-db.yaml rename to content/en/docs/tasks/inject-data-application/podpreset-allow-db.yaml diff --git a/docs/tasks/inject-data-application/podpreset-configmap.yaml b/content/en/docs/tasks/inject-data-application/podpreset-configmap.yaml similarity index 100% rename from docs/tasks/inject-data-application/podpreset-configmap.yaml rename to content/en/docs/tasks/inject-data-application/podpreset-configmap.yaml diff --git a/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml b/content/en/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml similarity index 100% rename from docs/tasks/inject-data-application/podpreset-conflict-pod.yaml rename to content/en/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml diff --git a/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml b/content/en/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml similarity index 100% rename from docs/tasks/inject-data-application/podpreset-conflict-preset.yaml rename to content/en/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml diff --git a/docs/tasks/inject-data-application/podpreset-merged.yaml b/content/en/docs/tasks/inject-data-application/podpreset-merged.yaml similarity index 100% rename from docs/tasks/inject-data-application/podpreset-merged.yaml rename to content/en/docs/tasks/inject-data-application/podpreset-merged.yaml diff --git a/docs/tasks/inject-data-application/podpreset-multi-merged.yaml b/content/en/docs/tasks/inject-data-application/podpreset-multi-merged.yaml similarity index 100% rename from docs/tasks/inject-data-application/podpreset-multi-merged.yaml rename to content/en/docs/tasks/inject-data-application/podpreset-multi-merged.yaml diff --git a/docs/tasks/inject-data-application/podpreset-pod.yaml b/content/en/docs/tasks/inject-data-application/podpreset-pod.yaml similarity index 100% rename from docs/tasks/inject-data-application/podpreset-pod.yaml rename to content/en/docs/tasks/inject-data-application/podpreset-pod.yaml diff --git a/docs/tasks/inject-data-application/podpreset-preset.yaml b/content/en/docs/tasks/inject-data-application/podpreset-preset.yaml similarity index 100% rename from docs/tasks/inject-data-application/podpreset-preset.yaml rename to content/en/docs/tasks/inject-data-application/podpreset-preset.yaml diff --git a/docs/tasks/inject-data-application/podpreset-proxy.yaml b/content/en/docs/tasks/inject-data-application/podpreset-proxy.yaml similarity index 100% rename from docs/tasks/inject-data-application/podpreset-proxy.yaml rename to content/en/docs/tasks/inject-data-application/podpreset-proxy.yaml diff --git a/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml b/content/en/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml similarity index 100% rename from docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml rename to content/en/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml diff --git a/docs/tasks/inject-data-application/podpreset-replicaset.yaml b/content/en/docs/tasks/inject-data-application/podpreset-replicaset.yaml similarity index 100% rename from docs/tasks/inject-data-application/podpreset-replicaset.yaml rename to content/en/docs/tasks/inject-data-application/podpreset-replicaset.yaml diff --git a/docs/tasks/inject-data-application/podpreset.md b/content/en/docs/tasks/inject-data-application/podpreset.md similarity index 55% rename from docs/tasks/inject-data-application/podpreset.md rename to content/en/docs/tasks/inject-data-application/podpreset.md index 02d108df8cc0f..a5b015261f533 100644 --- a/docs/tasks/inject-data-application/podpreset.md +++ b/content/en/docs/tasks/inject-data-application/podpreset.md @@ -10,8 +10,7 @@ This task shows some examples on using the `PodPreset` resource. You can get an overview of PodPresets at [Understanding Pod Presets](/docs/concepts/workloads/pods/podpreset/). -* TOC -{:toc} +{{< toc >}} ## Create a Pod Preset @@ -20,7 +19,7 @@ You can get an overview of PodPresets at This is a simple example to show how a Pod spec is modified by the Pod Preset. -{% include code.html language="yaml" file="podpreset-preset.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-preset.yaml" %} +{{< code file="podpreset-preset.yaml" >}} Create the PodPreset: @@ -38,7 +37,7 @@ allow-database 1m The new PodPreset will act upon any pod that has label `role: frontend`. -{% include code.html language="yaml" file="podpreset-pod.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-pod.yaml" %} +{{< code file="podpreset-pod.yaml" >}} Create a pod: @@ -56,7 +55,7 @@ website 1/1 Running 0 4m **Pod spec after admission controller:** -{% include code.html language="yaml" file="podpreset-merged.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-merged.yaml" %} +{{< code file="podpreset-merged.yaml" >}} To see above output, run the following command: @@ -71,19 +70,19 @@ that defines a `ConfigMap` for Environment Variables. **User submitted pod spec:** -{% include code.html language="yaml" file="podpreset-pod.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-pod.yaml" %} +{{< code file="podpreset-pod.yaml" >}} **User submitted `ConfigMap`:** -{% include code.html language="yaml" file="podpreset-configmap.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-configmap.yaml" %} +{{< code file="podpreset-configmap.yaml" >}} **Example Pod Preset:** -{% include code.html language="yaml" file="podpreset-allow-db.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-allow-db.yaml" %} +{{< code file="podpreset-allow-db.yaml" >}} **Pod spec after admission controller:** -{% include code.html language="yaml" file="podpreset-allow-db-merged.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-allow-db-merged.yaml" %} +{{< code file="podpreset-allow-db-merged.yaml" >}} ### ReplicaSet with Pod Spec Example @@ -92,18 +91,18 @@ Preset. **User submitted ReplicaSet:** -{% include code.html language="yaml" file="podpreset-replicaset.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-replicaset.yaml" %} +{{< code file="podpreset-replicaset.yaml" >}} **Example Pod Preset:** -{% include code.html language="yaml" file="podpreset-preset.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-preset.yaml" %} +{{< code file="podpreset-preset.yaml" >}} **Pod spec after admission controller:** Note that the ReplicaSet spec was not changed, users have to check individual pods to validate that the PodPreset has been applied. -{% include code.html language="yaml" file="podpreset-replicaset-merged.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-replicaset-merged.yaml" %} +{{< code file="podpreset-replicaset-merged.yaml" >}} ### Multiple PodPreset Example @@ -112,19 +111,19 @@ Injection Policies. **User submitted pod spec:** -{% include code.html language="yaml" file="podpreset-pod.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-pod.yaml" %} +{{< code file="podpreset-pod.yaml" >}} **Example Pod Preset:** -{% include code.html language="yaml" file="podpreset-preset.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-preset.yaml" %} +{{< code file="podpreset-preset.yaml" >}} **Another Pod Preset:** -{% include code.html language="yaml" file="podpreset-proxy.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-proxy.yaml" %} +{{< code file="podpreset-proxy.yaml" >}} **Pod spec after admission controller:** -{% include code.html language="yaml" file="podpreset-multi-merged.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-multi-merged.yaml" %} +{{< code file="podpreset-multi-merged.yaml" >}} ### Conflict Example @@ -133,15 +132,15 @@ when there is a conflict. **User submitted pod spec:** -{% include code.html language="yaml" file="podpreset-conflict-pod.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml" %} +{{< code file="podpreset-conflict-pod.yaml" >}} **Example Pod Preset:** -{% include code.html language="yaml" file="podpreset-conflict-preset.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-conflict-preset.yaml" %} +{{< code file="podpreset-conflict-preset.yaml" >}} **Pod spec after admission controller will not change because of the conflict:** -{% include code.html language="yaml" file="podpreset-conflict-pod.yaml" ghlink="/docs/tasks/inject-data-application/podpreset-conflict-pod.yaml" %} +{{< code file="podpreset-conflict-pod.yaml" >}} **If we run `kubectl describe...` we can see the event:** diff --git a/docs/tasks/inject-data-application/secret-envars-pod.yaml b/content/en/docs/tasks/inject-data-application/secret-envars-pod.yaml similarity index 100% rename from docs/tasks/inject-data-application/secret-envars-pod.yaml rename to content/en/docs/tasks/inject-data-application/secret-envars-pod.yaml diff --git a/docs/tasks/inject-data-application/secret-pod.yaml b/content/en/docs/tasks/inject-data-application/secret-pod.yaml similarity index 100% rename from docs/tasks/inject-data-application/secret-pod.yaml rename to content/en/docs/tasks/inject-data-application/secret-pod.yaml diff --git a/docs/tasks/inject-data-application/secret.yaml b/content/en/docs/tasks/inject-data-application/secret.yaml similarity index 100% rename from docs/tasks/inject-data-application/secret.yaml rename to content/en/docs/tasks/inject-data-application/secret.yaml diff --git a/content/en/docs/tasks/job/_index.md b/content/en/docs/tasks/job/_index.md new file mode 100755 index 0000000000000..639a19e8b50dd --- /dev/null +++ b/content/en/docs/tasks/job/_index.md @@ -0,0 +1,5 @@ +--- +title: "Run Jobs" +weight: 60 +--- + diff --git a/docs/tasks/job/coarse-parallel-processing-work-queue/Dockerfile b/content/en/docs/tasks/job/coarse-parallel-processing-work-queue/Dockerfile similarity index 100% rename from docs/tasks/job/coarse-parallel-processing-work-queue/Dockerfile rename to content/en/docs/tasks/job/coarse-parallel-processing-work-queue/Dockerfile diff --git a/docs/tasks/job/coarse-parallel-processing-work-queue/index.md b/content/en/docs/tasks/job/coarse-parallel-processing-work-queue/_index.md similarity index 97% rename from docs/tasks/job/coarse-parallel-processing-work-queue/index.md rename to content/en/docs/tasks/job/coarse-parallel-processing-work-queue/_index.md index 08ab38e8a0e86..63d58279ff7a0 100644 --- a/docs/tasks/job/coarse-parallel-processing-work-queue/index.md +++ b/content/en/docs/tasks/job/coarse-parallel-processing-work-queue/_index.md @@ -1,9 +1,9 @@ --- title: Coarse Parallel Processing Using a Work Queue +toc_hide: true --- -* TOC -{:toc} +{{< toc >}} # Example: Job with Work Queue with Pod Per Work Item @@ -167,7 +167,7 @@ We will use the `amqp-consume` utility to read the message from the queue and run our actual program. Here is a very simple example program: -{% include code.html language="python" file="worker.py" ghlink="/docs/tasks/job/coarse-parallel-processing-work-queue/worker.py" %} +{{< code language="python" file="worker.py" >}} Now, build an image. If you are working in the source tree, then change directory to `examples/job/work-queue-1`. @@ -205,7 +205,7 @@ Here is a job definition. You'll need to make a copy of the Job and edit the image to match the name you used, and call it `./job.yaml`. -{% include code.html language="yaml" file="job.yaml" ghlink="/docs/tasks/job/coarse-parallel-processing-work-queue/job.yaml" %} +{{< code file="job.yaml" >}} In this example, each pod works on one item from the queue and then exits. So, the completion count of the Job corresponds to the number of work items diff --git a/docs/tasks/job/coarse-parallel-processing-work-queue/job.yaml b/content/en/docs/tasks/job/coarse-parallel-processing-work-queue/job.yaml similarity index 100% rename from docs/tasks/job/coarse-parallel-processing-work-queue/job.yaml rename to content/en/docs/tasks/job/coarse-parallel-processing-work-queue/job.yaml diff --git a/docs/tasks/job/coarse-parallel-processing-work-queue/worker.py b/content/en/docs/tasks/job/coarse-parallel-processing-work-queue/worker.py old mode 100755 new mode 100644 similarity index 100% rename from docs/tasks/job/coarse-parallel-processing-work-queue/worker.py rename to content/en/docs/tasks/job/coarse-parallel-processing-work-queue/worker.py diff --git a/docs/tasks/job/fine-parallel-processing-work-queue/Dockerfile b/content/en/docs/tasks/job/fine-parallel-processing-work-queue/Dockerfile similarity index 100% rename from docs/tasks/job/fine-parallel-processing-work-queue/Dockerfile rename to content/en/docs/tasks/job/fine-parallel-processing-work-queue/Dockerfile diff --git a/docs/tasks/job/fine-parallel-processing-work-queue/index.md b/content/en/docs/tasks/job/fine-parallel-processing-work-queue/_index.md similarity index 96% rename from docs/tasks/job/fine-parallel-processing-work-queue/index.md rename to content/en/docs/tasks/job/fine-parallel-processing-work-queue/_index.md index 8384b7e337471..9ab28e36a573e 100644 --- a/docs/tasks/job/fine-parallel-processing-work-queue/index.md +++ b/content/en/docs/tasks/job/fine-parallel-processing-work-queue/_index.md @@ -1,9 +1,9 @@ --- title: Fine Parallel Processing Using a Work Queue +toc_hide: true --- -* TOC -{:toc} +{{< toc >}} # Example: Job with Work Queue with Multiple Work Items Per Pod @@ -111,7 +111,7 @@ called rediswq.py ([Download](rediswq.py?raw=true)). The "worker" program in each Pod of the Job uses the work queue client library to get work. Here it is: -{% include code.html language="python" file="worker.py" ghlink="/docs/tasks/job/fine-parallel-processing-work-queue/worker.py" %} +{{< code language="python" file="worker.py" >}} If you are working from the source tree, change directory to the `docs/tasks/job/fine-parallel-processing-work-queue/` directory. @@ -150,7 +150,7 @@ gcloud docker -- push gcr.io//job-wq-2 Here is the job definition: -{% include code.html language="yaml" file="job.yaml" ghlink="/docs/tasks/job/fine-parallel-processing-work-queue/job.yaml" %} +{{< code file="job.yaml" >}} Be sure to edit the job template to change `gcr.io/myproject` to your own path. diff --git a/docs/tasks/job/fine-parallel-processing-work-queue/job.yaml b/content/en/docs/tasks/job/fine-parallel-processing-work-queue/job.yaml similarity index 100% rename from docs/tasks/job/fine-parallel-processing-work-queue/job.yaml rename to content/en/docs/tasks/job/fine-parallel-processing-work-queue/job.yaml diff --git a/docs/tasks/job/fine-parallel-processing-work-queue/redis-pod.yaml b/content/en/docs/tasks/job/fine-parallel-processing-work-queue/redis-pod.yaml similarity index 100% rename from docs/tasks/job/fine-parallel-processing-work-queue/redis-pod.yaml rename to content/en/docs/tasks/job/fine-parallel-processing-work-queue/redis-pod.yaml diff --git a/docs/tasks/job/fine-parallel-processing-work-queue/redis-service.yaml b/content/en/docs/tasks/job/fine-parallel-processing-work-queue/redis-service.yaml similarity index 100% rename from docs/tasks/job/fine-parallel-processing-work-queue/redis-service.yaml rename to content/en/docs/tasks/job/fine-parallel-processing-work-queue/redis-service.yaml diff --git a/docs/tasks/job/fine-parallel-processing-work-queue/rediswq.py b/content/en/docs/tasks/job/fine-parallel-processing-work-queue/rediswq.py similarity index 100% rename from docs/tasks/job/fine-parallel-processing-work-queue/rediswq.py rename to content/en/docs/tasks/job/fine-parallel-processing-work-queue/rediswq.py diff --git a/docs/tasks/job/fine-parallel-processing-work-queue/worker.py b/content/en/docs/tasks/job/fine-parallel-processing-work-queue/worker.py old mode 100755 new mode 100644 similarity index 100% rename from docs/tasks/job/fine-parallel-processing-work-queue/worker.py rename to content/en/docs/tasks/job/fine-parallel-processing-work-queue/worker.py diff --git a/docs/tasks/job/job.yaml b/content/en/docs/tasks/job/job.yaml similarity index 100% rename from docs/tasks/job/job.yaml rename to content/en/docs/tasks/job/job.yaml diff --git a/docs/tasks/job/parallel-processing-expansion.md b/content/en/docs/tasks/job/parallel-processing-expansion.md similarity index 97% rename from docs/tasks/job/parallel-processing-expansion.md rename to content/en/docs/tasks/job/parallel-processing-expansion.md index 639867a7ba3e0..c2f62b2928b80 100644 --- a/docs/tasks/job/parallel-processing-expansion.md +++ b/content/en/docs/tasks/job/parallel-processing-expansion.md @@ -2,8 +2,7 @@ title: Parallel Processing using Expansions --- -* TOC -{:toc} +{{< toc >}} # Example: Multiple Job Objects from Template Expansion @@ -15,7 +14,7 @@ non-parallel, use of [Jobs](/docs/concepts/jobs/run-to-completion-finite-workloa First, download the following template of a job to a file called `job.yaml` -{% include code.html language="yaml" file="job.yaml" ghlink="/docs/tasks/job/job.yaml" %} +{{< code file="job.yaml" >}} Unlike a *pod template*, our *job template* is not a Kubernetes API type. It is just a yaml representation of a Job object that has some placeholders that need to be filled @@ -117,7 +116,7 @@ We will use a one-line python script to convert the template to a file. First, copy and paste the following template of a Job object, into a file called `job.yaml.jinja2`: -```liquid{% raw %} +```liquid {%- set params = [{ "name": "apple", "url": "http://www.orangepippin.com/apples", }, { "name": "banana", "url": "https://en.wikipedia.org/wiki/Banana", }, { "name": "raspberry", "url": "https://www.raspberrypi.org/" }] @@ -145,7 +144,7 @@ spec: restartPolicy: Never --- {%- endfor %} -{% endraw %} + ``` The above template defines parameters for each job object using a list of diff --git a/content/en/docs/tasks/manage-daemon/_index.md b/content/en/docs/tasks/manage-daemon/_index.md new file mode 100755 index 0000000000000..1cdbf06368c6e --- /dev/null +++ b/content/en/docs/tasks/manage-daemon/_index.md @@ -0,0 +1,5 @@ +--- +title: "Manage Cluster Daemons" +weight: 130 +--- + diff --git a/docs/tasks/manage-daemon/rollback-daemon-set.md b/content/en/docs/tasks/manage-daemon/rollback-daemon-set.md similarity index 95% rename from docs/tasks/manage-daemon/rollback-daemon-set.md rename to content/en/docs/tasks/manage-daemon/rollback-daemon-set.md index 4333fdc26146f..fe220c1a6b89e 100644 --- a/docs/tasks/manage-daemon/rollback-daemon-set.md +++ b/content/en/docs/tasks/manage-daemon/rollback-daemon-set.md @@ -2,26 +2,27 @@ reviewers: - janetkuo title: Performing a Rollback on a DaemonSet +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to perform a rollback on a DaemonSet. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * The DaemonSet rollout history and DaemonSet rollback features are only supported in `kubectl` in Kubernetes version 1.7 or later. * Make sure you know how to [perform a rolling update on a DaemonSet](/docs/tasks/manage-daemon/update-daemon-set/). -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Performing a Rollback on a DaemonSet @@ -102,10 +103,10 @@ When the rollback is complete, the output is similar to this: daemonset "" successfully rolled out ``` -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Understanding DaemonSet Revisions @@ -149,6 +150,6 @@ have revision 1 and 2 in the system, and roll back from revision 2 to revision * See [troubleshooting DaemonSet rolling update](/docs/tasks/manage-daemon/update-daemon-set/#troubleshooting). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/manage-daemon/update-daemon-set.md b/content/en/docs/tasks/manage-daemon/update-daemon-set.md similarity index 95% rename from docs/tasks/manage-daemon/update-daemon-set.md rename to content/en/docs/tasks/manage-daemon/update-daemon-set.md index fecd2574dd742..c2f6f506bdc0c 100644 --- a/docs/tasks/manage-daemon/update-daemon-set.md +++ b/content/en/docs/tasks/manage-daemon/update-daemon-set.md @@ -2,23 +2,24 @@ reviewers: - janetkuo title: Perform a Rolling Update on a DaemonSet +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to perform a rolling update on a DaemonSet. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * The DaemonSet rolling update feature is only supported in Kubernetes version 1.6 or later. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## DaemonSet Update Strategy @@ -58,16 +59,16 @@ to 1) and `.spec.minReadySeconds` (default to 0) as well. First, check the update strategy of your DaemonSet, and make sure it's set to `RollingUpdate`: -```shell{% raw %} +```shell kubectl get ds/ -o go-template='{{.spec.updateStrategy.type}}{{"\n"}}' -``` {% endraw %} +``` If you haven't created the DaemonSet in the system, check your DaemonSet manifest with the following command instead: -```shell{% raw %} +```shell kubectl create -f ds.yaml --dry-run -o go-template='{{.spec.updateStrategy.type}}{{"\n"}}' -``` {% endraw %} +``` The output from both commands should be: @@ -191,16 +192,16 @@ master and nodes will make DaemonSet unable to detect the right rollout progress. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * See [Task: Performing a rollback on a DaemonSet](/docs/tasks/manage-daemon/rollback-daemon-set/) * See [Concepts: Creating a DaemonSet to adopt existing DaemonSet pods](/docs/concepts/workloads/controllers/daemonset/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/manage-gpus/scheduling-gpus.md b/content/en/docs/tasks/manage-gpus/scheduling-gpus.md similarity index 100% rename from docs/tasks/manage-gpus/scheduling-gpus.md rename to content/en/docs/tasks/manage-gpus/scheduling-gpus.md diff --git a/docs/tasks/manage-hugepages/scheduling-hugepages.md b/content/en/docs/tasks/manage-hugepages/scheduling-hugepages.md similarity index 91% rename from docs/tasks/manage-hugepages/scheduling-hugepages.md rename to content/en/docs/tasks/manage-hugepages/scheduling-hugepages.md index 71d46b9202204..e8bb5ef3192e5 100644 --- a/docs/tasks/manage-hugepages/scheduling-hugepages.md +++ b/content/en/docs/tasks/manage-hugepages/scheduling-hugepages.md @@ -2,18 +2,19 @@ reviewers: - derekwaynecarr title: Manage HugePages +content_template: templates/task --- -{% capture overview %} -{% include feature-state-beta.md %} +{{% capture overview %}} +{{< feature-state state="beta" >}} Kubernetes supports the allocation and consumption of pre-allocated huge pages by applications in a Pod as a **beta** feature. This page describes how users can consume huge pages and the current limitations. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} 1. Kubernetes nodes must pre-allocate huge pages in order for the node to report its huge page capacity. A node may only pre-allocate huge pages for a single @@ -22,9 +23,9 @@ can consume huge pages and the current limitations. The nodes will automatically discover and report all huge page resources as a schedulable resource. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## API @@ -76,6 +77,6 @@ token. - NUMA locality guarantees as a feature of quality of service. - LimitRange support. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/content/en/docs/tasks/run-application/_index.md b/content/en/docs/tasks/run-application/_index.md new file mode 100755 index 0000000000000..a1c7320df8c44 --- /dev/null +++ b/content/en/docs/tasks/run-application/_index.md @@ -0,0 +1,5 @@ +--- +title: "Run Applications" +weight: 50 +--- + diff --git a/docs/tasks/run-application/configure-pdb.md b/content/en/docs/tasks/run-application/configure-pdb.md similarity index 97% rename from docs/tasks/run-application/configure-pdb.md rename to content/en/docs/tasks/run-application/configure-pdb.md index 8556cbb7b4cc8..41b99e11368dd 100644 --- a/docs/tasks/run-application/configure-pdb.md +++ b/content/en/docs/tasks/run-application/configure-pdb.md @@ -1,17 +1,18 @@ --- title: Specifying a Disruption Budget for your Application +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to limit the number of concurrent disruptions that your application experiences, allowing for higher availability while permitting the cluster administrator to manage the clusters nodes. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * You are the owner of an application running on a Kubernetes cluster that requires high availability. * You should know how to deploy [Replicated Stateless Applications](/docs/tasks/run-application/run-stateless-application-deployment/) @@ -19,9 +20,9 @@ nodes. * You should have read about [Pod Disruptions](/docs/concepts/workloads/pods/disruptions/). * You should confirm with your cluster owner or service provider that they respect Pod Disruption Budgets. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Protecting an Application with a PodDisruptionBudget @@ -30,9 +31,9 @@ nodes. 1. Create a PDB definition as a YAML file. 1. Create the PDB object from the YAML file. -{% endcapture %} +{{% /capture %}} -{% capture discussion %} +{{% capture discussion %}} ## Identify an Application to Protect @@ -88,10 +89,11 @@ of the evicted pod. `minAvailable` can be either an absolute number or a percent of the number of pods from that set that can be unavailable after the eviction. It can be either an absolute number or a percentage. +{{< note >}} **Note:** For versions 1.8 and earlier: When creating a `PodDisruptionBudget` object using the `kubectl` command line tool, the `minAvailable` field has a default value of 1 if neither `minAvailable` nor `maxUnavailable` is specified. -{: .note} +{{< /note >}} You can specify only one of `maxUnavailable` and `minAvailable` in a single `PodDisruptionBudget`. `maxUnavailable` can only be used to control the eviction of pods @@ -226,6 +228,6 @@ You can use a selector which selects a subset or superset of the pods belonging controller. However, when there are multiple PDBs in a namespace, you must be careful not to create PDBs whose selectors overlap. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/run-application/delete-stateful-set.md b/content/en/docs/tasks/run-application/delete-stateful-set.md similarity index 92% rename from docs/tasks/run-application/delete-stateful-set.md rename to content/en/docs/tasks/run-application/delete-stateful-set.md index d7331f42a2324..7dd8fab803a32 100644 --- a/docs/tasks/run-application/delete-stateful-set.md +++ b/content/en/docs/tasks/run-application/delete-stateful-set.md @@ -6,21 +6,22 @@ reviewers: - janetkuo - smarterclayton title: Delete a StatefulSet +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This task shows you how to delete a StatefulSet. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * This task assumes you have an application running on your cluster represented by a StatefulSet. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Deleting a StatefulSet @@ -63,12 +64,12 @@ Deleting the Pods in a StatefulSet will not delete the associated volumes. This To simply delete everything in a StatefulSet, including the associated pods, you can run a series of commands similar to the following: -```shell{% raw %} +```shell grace=$(kubectl get pods --template '{{.spec.terminationGracePeriodSeconds}}') kubectl delete statefulset -l app=myapp sleep $grace kubectl delete pvc -l app=myapp -{% endraw %} + ``` In the example above, the Pods have the label `app=myapp`; substitute your own label as appropriate. @@ -77,12 +78,12 @@ In the example above, the Pods have the label `app=myapp`; substitute your own l If you find that some pods in your StatefulSet are stuck in the 'Terminating' or 'Unknown' states for an extended period of time, you may need to manually intervene to forcefully delete the pods from the apiserver. This is a potentially dangerous task. Refer to [Deleting StatefulSet Pods](/docs/tasks/manage-stateful-set/delete-pods/) for details. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Learn more about [force deleting StatefulSet Pods](/docs/tasks/run-application/force-delete-stateful-set-pod/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/run-application/deployment-patch-demo.yaml b/content/en/docs/tasks/run-application/deployment-patch-demo.yaml similarity index 100% rename from docs/tasks/run-application/deployment-patch-demo.yaml rename to content/en/docs/tasks/run-application/deployment-patch-demo.yaml diff --git a/docs/tasks/run-application/deployment-scale.yaml b/content/en/docs/tasks/run-application/deployment-scale.yaml similarity index 100% rename from docs/tasks/run-application/deployment-scale.yaml rename to content/en/docs/tasks/run-application/deployment-scale.yaml diff --git a/docs/tasks/run-application/deployment-update.yaml b/content/en/docs/tasks/run-application/deployment-update.yaml similarity index 100% rename from docs/tasks/run-application/deployment-update.yaml rename to content/en/docs/tasks/run-application/deployment-update.yaml diff --git a/docs/tasks/run-application/deployment.yaml b/content/en/docs/tasks/run-application/deployment.yaml similarity index 100% rename from docs/tasks/run-application/deployment.yaml rename to content/en/docs/tasks/run-application/deployment.yaml diff --git a/docs/tasks/run-application/force-delete-stateful-set-pod.md b/content/en/docs/tasks/run-application/force-delete-stateful-set-pod.md similarity index 95% rename from docs/tasks/run-application/force-delete-stateful-set-pod.md rename to content/en/docs/tasks/run-application/force-delete-stateful-set-pod.md index 351fdbc83aeda..2b51ddf263047 100644 --- a/docs/tasks/run-application/force-delete-stateful-set-pod.md +++ b/content/en/docs/tasks/run-application/force-delete-stateful-set-pod.md @@ -5,20 +5,21 @@ reviewers: - foxish - smarterclayton title: Force Delete StatefulSet Pods +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to delete Pods which are part of a stateful set, and explains the considerations to keep in mind when doing so. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * This is a fairly advanced task and has the potential to violate some of the properties inherent to StatefulSet. * Before proceeding, make yourself familiar with the considerations enumerated below. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## StatefulSet considerations @@ -67,12 +68,12 @@ kubectl delete pods --grace-period=0 Always perform force deletion of StatefulSet Pods carefully and with complete knowledge of the risks involved. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Learn more about [debugging a StatefulSet](/docs/tasks/manage-stateful-set/debugging-a-statefulset/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md b/content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md similarity index 97% rename from docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md rename to content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md index 81b440fb54da1..07c6bbd87db27 100644 --- a/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md +++ b/content/en/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md @@ -7,8 +7,7 @@ reviewers: title: Horizontal Pod Autoscaler Walkthrough --- -* TOC -{:toc} +{{< toc >}} Horizontal Pod Autoscaler automatically scales the number of pods in a replication controller, deployment or replica set based on observed CPU utilization @@ -65,12 +64,12 @@ deployment "php-apache" created ## Step Two: Create Horizontal Pod Autoscaler Now that the server is running, we will create the autoscaler using -[kubectl autoscale](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/user-guide/kubectl/kubectl_autoscale.md). +[kubectl autoscale](https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/docs/user-guide/kubectl/kubectl_autoscale.md). The following command will create a Horizontal Pod Autoscaler that maintains between 1 and 10 replicas of the Pods controlled by the php-apache deployment we created in the first step of these instructions. Roughly speaking, HPA will increase and decrease the number of replicas (via the deployment) to maintain an average CPU utilization across all Pods of 50% -(since each pod requests 200 milli-cores by [kubectl run](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/user-guide/kubectl/kubectl_run.md), this means average CPU usage of 100 milli-cores). +(since each pod requests 200 milli-cores by [kubectl run](https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/docs/user-guide/kubectl/kubectl_run.md), this means average CPU usage of 100 milli-cores). See [here](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md#autoscaling-algorithm) for more details on the algorithm. ```shell @@ -369,7 +368,7 @@ HorizontalPodAutoscaler. Instead of using `kubectl autoscale` command to create a HorizontalPodAutoscaler imperatively we can use the following file to create it declaratively: -{% include code.html language="yaml" file="hpa-php-apache.yaml" ghlink="/docs/tasks/run-application/hpa-php-apache.yaml" %} +{{< code file="hpa-php-apache.yaml" >}} We will create the autoscaler by executing the following command: diff --git a/docs/tasks/run-application/horizontal-pod-autoscale.md b/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md similarity index 99% rename from docs/tasks/run-application/horizontal-pod-autoscale.md rename to content/en/docs/tasks/run-application/horizontal-pod-autoscale.md index 0baf62865e189..6343937c2cb1e 100644 --- a/docs/tasks/run-application/horizontal-pod-autoscale.md +++ b/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md @@ -6,8 +6,7 @@ reviewers: title: Horizontal Pod Autoscaler --- -* TOC -{:toc} +{{< toc >}} This document describes the current state of the Horizontal Pod Autoscaler in Kubernetes. @@ -129,12 +128,13 @@ the global HPA settings exposed as flags for the `kube-controller-manager` compo upscale operation can be performed after the current one has completed. The default value is 3 minutes (`3m0s`). +{{< note >}} **Note**: When tuning these parameter values, a cluster operator should be aware of the possible consequences. If the delay (cooldown) value is set too long, there could be complaints that the Horizontal Pod Autoscaler is not responsive to workload changes. However, if the delay value is set too short, the scale of the replicas set may keep thrashing as usual. -{: .note} +{{< /note >}} ## Support for multiple metrics diff --git a/docs/tasks/run-application/hpa-php-apache.yaml b/content/en/docs/tasks/run-application/hpa-php-apache.yaml similarity index 100% rename from docs/tasks/run-application/hpa-php-apache.yaml rename to content/en/docs/tasks/run-application/hpa-php-apache.yaml diff --git a/docs/tasks/run-application/mysql-configmap.yaml b/content/en/docs/tasks/run-application/mysql-configmap.yaml similarity index 100% rename from docs/tasks/run-application/mysql-configmap.yaml rename to content/en/docs/tasks/run-application/mysql-configmap.yaml diff --git a/docs/tasks/run-application/mysql-deployment.yaml b/content/en/docs/tasks/run-application/mysql-deployment.yaml similarity index 100% rename from docs/tasks/run-application/mysql-deployment.yaml rename to content/en/docs/tasks/run-application/mysql-deployment.yaml diff --git a/docs/tasks/run-application/mysql-services.yaml b/content/en/docs/tasks/run-application/mysql-services.yaml similarity index 100% rename from docs/tasks/run-application/mysql-services.yaml rename to content/en/docs/tasks/run-application/mysql-services.yaml diff --git a/docs/tasks/run-application/mysql-statefulset.yaml b/content/en/docs/tasks/run-application/mysql-statefulset.yaml similarity index 100% rename from docs/tasks/run-application/mysql-statefulset.yaml rename to content/en/docs/tasks/run-application/mysql-statefulset.yaml diff --git a/docs/tasks/run-application/rolling-update-replication-controller.md b/content/en/docs/tasks/run-application/rolling-update-replication-controller.md similarity index 97% rename from docs/tasks/run-application/rolling-update-replication-controller.md rename to content/en/docs/tasks/run-application/rolling-update-replication-controller.md index e3dad34cfd33d..171cf42a6dc5f 100644 --- a/docs/tasks/run-application/rolling-update-replication-controller.md +++ b/content/en/docs/tasks/run-application/rolling-update-replication-controller.md @@ -4,18 +4,18 @@ reviewers: title: Perform Rolling Update Using a Replication Controller --- -* TOC -{:toc} +{{< toc >}} ## Overview +{{< note >}} **Note**: The preferred way to create a replicated application is to use a -[Deployment](/docs/reference/generated/kubernetes-api/{{page.version}}/#deployment-v1-apps), +[Deployment](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#deployment-v1-apps), which in turn uses a -[ReplicaSet](/docs/reference/generated/kubernetes-api/{{page.version}}/#replicaset-v1-apps). +[ReplicaSet](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#replicaset-v1-apps). For more information, see [Running a Stateless Application Using a Deployment](/docs/tasks/run-application/run-stateless-application-deployment/). -{: .note} +{{< /note >}} To update a service without an outage, `kubectl` supports what is called [rolling update](/docs/reference/generated/kubectl/kubectl-commands/#rolling-update), which updates one pod at a time, rather than taking down the entire service at the same time. See the [rolling update design document](https://git.k8s.io/community/contributors/design-proposals/cli/simple-rolling-update.md) for more information. diff --git a/docs/tasks/run-application/run-replicated-stateful-application.md b/content/en/docs/tasks/run-application/run-replicated-stateful-application.md similarity index 95% rename from docs/tasks/run-application/run-replicated-stateful-application.md rename to content/en/docs/tasks/run-application/run-replicated-stateful-application.md index be62f5af9a42e..637aa1ee167a9 100644 --- a/docs/tasks/run-application/run-replicated-stateful-application.md +++ b/content/en/docs/tasks/run-application/run-replicated-stateful-application.md @@ -7,9 +7,10 @@ reviewers: - kow3ns - smarterclayton title: Run a Replicated Stateful Application +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} This page shows how to run a replicated stateful application using a [StatefulSet](/docs/concepts/workloads/controllers/statefulset/) controller. @@ -20,12 +21,12 @@ Note that **this is not a production configuration**. In particular, MySQL settings remain on insecure defaults to keep the focus on general patterns for running stateful applications in Kubernetes. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} -* {% include default-storage-class-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} +* {{< include "default-storage-class-prereqs.md" >}} * This tutorial assumes you are familiar with [PersistentVolumes](/docs/concepts/storage/persistent-volumes/) and [StatefulSets](/docs/concepts/workloads/controllers/statefulset/), @@ -35,18 +36,18 @@ on general patterns for running stateful applications in Kubernetes. * Some familiarity with MySQL helps, but this tutorial aims to present general patterns that should be useful for other systems. -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Deploy a replicated MySQL topology with a StatefulSet controller. * Send MySQL client traffic. * Observe resistance to downtime. * Scale the StatefulSet up and down. -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Deploy MySQL @@ -61,7 +62,7 @@ Create the ConfigMap from the following YAML configuration file: kubectl create -f https://k8s.io/docs/tasks/run-application/mysql-configmap.yaml ``` -{% include code.html language="yaml" file="mysql-configmap.yaml" ghlink="/docs/tasks/run-application/mysql-configmap.yaml" %} +{{< code file="mysql-configmap.yaml" >}} This ConfigMap provides `my.cnf` overrides that let you independently control configuration on the MySQL master and slaves. @@ -81,7 +82,7 @@ Create the Services from the following YAML configuration file: kubectl create -f https://k8s.io/docs/tasks/run-application/mysql-services.yaml ``` -{% include code.html language="yaml" file="mysql-services.yaml" ghlink="/docs/tasks/run-application/mysql-services.yaml" %} +{{< code file="mysql-services.yaml" >}} The Headless Service provides a home for the DNS entries that the StatefulSet controller creates for each Pod that's part of the set. @@ -107,7 +108,7 @@ Finally, create the StatefulSet from the following YAML configuration file: kubectl create -f https://k8s.io/docs/tasks/run-application/mysql-statefulset.yaml ``` -{% include code.html language="yaml" file="mysql-statefulset.yaml" ghlink="/docs/tasks/run-application/mysql-statefulset.yaml" %} +{{< code file="mysql-statefulset.yaml" >}} You can watch the startup progress by running: @@ -476,9 +477,9 @@ kubectl delete pvc data-mysql-3 kubectl delete pvc data-mysql-4 ``` -{% endcapture %} +{{% /capture %}} -{% capture cleanup %} +{{% capture cleanup %}} 1. Cancel the `SELECT @@server_id` loop by pressing **Ctrl+C** in its terminal, or running the following from another terminal: @@ -519,14 +520,14 @@ kubectl delete pvc data-mysql-4 Some dynamic provisioners (such as those for EBS and PD) also release the underlying resources upon deleting the PersistentVolumes. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Look in the [Helm Charts repository](https://github.com/kubernetes/charts) for other stateful application examples. -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tasks/run-application/run-single-instance-stateful-application.md b/content/en/docs/tasks/run-application/run-single-instance-stateful-application.md similarity index 93% rename from docs/tasks/run-application/run-single-instance-stateful-application.md rename to content/en/docs/tasks/run-application/run-single-instance-stateful-application.md index 2a585f1b338d4..15c0f3af83620 100644 --- a/docs/tasks/run-application/run-single-instance-stateful-application.md +++ b/content/en/docs/tasks/run-application/run-single-instance-stateful-application.md @@ -1,35 +1,36 @@ --- title: Run a Single-Instance Stateful Application +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} This page shows you how to run a single-instance stateful application in Kubernetes using a PersistentVolume and a Deployment. The application is MySQL. -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Create a PersistentVolume referencing a disk in your environment. * Create a MySQL Deployment. * Expose MySQL to other pods in the cluster at a known DNS name. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -* {% include default-storage-class-prereqs.md %} +* {{< include "default-storage-class-prereqs.md" >}} -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Deploy MySQL @@ -46,7 +47,7 @@ Note: The password is defined in the config yaml, and this is insecure. See [Kubernetes Secrets](/docs/concepts/configuration/secret/) for a secure solution. -{% include code.html language="yaml" file="mysql-deployment.yaml" ghlink="/docs/tasks/run-application/mysql-deployment.yaml" %} +{{< code file="mysql-deployment.yaml" >}} 1. Deploy the contents of the YAML file: @@ -172,10 +173,10 @@ PersistentVolume when it sees that you deleted the PersistentVolumeClaim. Some dynamic provisioners (such as those for EBS and PD) also release the underlying resource upon deleting the PersistentVolume. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [Deployment objects](/docs/concepts/workloads/controllers/deployment/). @@ -185,6 +186,6 @@ underlying resource upon deleting the PersistentVolume. * [Volumes](/docs/concepts/storage/volumes/) and [Persistent Volumes](/docs/concepts/storage/persistent-volumes/) -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tasks/run-application/run-stateless-application-deployment.md b/content/en/docs/tasks/run-application/run-stateless-application-deployment.md similarity index 86% rename from docs/tasks/run-application/run-stateless-application-deployment.md rename to content/en/docs/tasks/run-application/run-stateless-application-deployment.md index 1c40b88f0eae3..78b4a79fd7a68 100644 --- a/docs/tasks/run-application/run-stateless-application-deployment.md +++ b/content/en/docs/tasks/run-application/run-stateless-application-deployment.md @@ -1,32 +1,33 @@ --- title: Run a Stateless Application Using a Deployment min-kubernetes-server-version: v1.9 +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} This page shows how to run an application using a Kubernetes Deployment object. -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Create an nginx deployment. * Use kubectl to list information about the deployment. * Update the deployment. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Creating and exploring an nginx deployment @@ -34,7 +35,7 @@ You can run an application by creating a Kubernetes Deployment object, and you can describe a Deployment in a YAML file. For example, this YAML file describes a Deployment that runs the nginx:1.7.9 Docker image: -{% include code.html language="yaml" file="deployment.yaml" ghlink="/docs/tasks/run-application/deployment.yaml" %} +{{< code file="deployment.yaml" >}} 1. Create a Deployment based on the YAML file: @@ -97,7 +98,7 @@ a Deployment that runs the nginx:1.7.9 Docker image: You can update the deployment by applying a new YAML file. This YAML file specifies that the deployment should be updated to use nginx 1.8. -{% include code.html language="yaml" file="deployment-update.yaml" ghlink="/docs/tasks/run-application/deployment-update.yaml" %} +{{< code file="deployment-update.yaml" >}} 1. Apply the new YAML file: @@ -113,7 +114,7 @@ You can increase the number of pods in your Deployment by applying a new YAML file. This YAML file sets `replicas` to 4, which specifies that the Deployment should have four pods: -{% include code.html language="yaml" file="deployment-scale.yaml" ghlink="/docs/tasks/run-application/deployment-scale.yaml" %} +{{< code file="deployment-scale.yaml" >}} 1. Apply the new YAML file: @@ -144,13 +145,13 @@ which in turn uses a ReplicaSet. Before the Deployment and ReplicaSet were added to Kubernetes, replicated applications were configured by using a [ReplicationController](/docs/concepts/workloads/controllers/replicationcontroller/). -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [Deployment objects](/docs/concepts/workloads/controllers/deployment/). -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tasks/run-application/scale-stateful-set.md b/content/en/docs/tasks/run-application/scale-stateful-set.md similarity index 93% rename from docs/tasks/run-application/scale-stateful-set.md rename to content/en/docs/tasks/run-application/scale-stateful-set.md index e45df28cc3ac1..425b396a17def 100644 --- a/docs/tasks/run-application/scale-stateful-set.md +++ b/content/en/docs/tasks/run-application/scale-stateful-set.md @@ -8,22 +8,23 @@ reviewers: - kow3ns - smarterclayton title: Scale a StatefulSet +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to scale a StatefulSet. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * StatefulSets are only available in Kubernetes version 1.5 or later. * **Not all stateful applications scale nicely.** You need to understand your StatefulSets well before continuing. If you're unsure, remember that it might not be safe to scale your StatefulSets. * You should perform scaling only when you're sure that your stateful application cluster is completely healthy. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Use `kubectl` to scale StatefulSets @@ -90,12 +91,12 @@ perform scaling only when you're sure that your stateful application cluster is completely healthy. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Learn more about [deleting a StatefulSet](/docs/tasks/manage-stateful-set/deleting-a-statefulset/). -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/run-application/update-api-object-kubectl-patch.md b/content/en/docs/tasks/run-application/update-api-object-kubectl-patch.md similarity index 95% rename from docs/tasks/run-application/update-api-object-kubectl-patch.md rename to content/en/docs/tasks/run-application/update-api-object-kubectl-patch.md index 6903a41daabc2..540eb18de54d7 100644 --- a/docs/tasks/run-application/update-api-object-kubectl-patch.md +++ b/content/en/docs/tasks/run-application/update-api-object-kubectl-patch.md @@ -1,30 +1,31 @@ --- title: Update API Objects in Place Using kubectl patch description: Use kubectl patch to update Kubernetes API objects in place. Do a strategic merge patch or a JSON merge patch. +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This task shows how to use `kubectl patch` to update an API object in place. The exercises in this task demonstrate a strategic merge patch and a JSON merge patch. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Use a strategic merge patch to update a Deployment Here's the configuration file for a Deployment that has two replicas. Each replica is a Pod that has one container: -{% include code.html language="yaml" file="deployment-patch-demo.yaml" ghlink="/docs/tasks/run-application/deployment-patch-demo.yaml" %} +{{< code file="deployment-patch-demo.yaml" >}} Create the Deployment: @@ -158,7 +159,7 @@ You can also see the patch strategy in the ``` And you can see the patch strategy in the -[Kubernetes API documentation](/docs/reference/generated/kubernetes-api/{{page.version}}/#podspec-v1-core). +[Kubernetes API documentation](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core). Create a file named `patch-file-tolerations.yaml` that has this content: @@ -323,16 +324,16 @@ create the Deployment object. Other commands for updating API objects include and [kubectl apply](/docs/reference/generated/kubectl/kubectl-commands/#apply). -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [Kubernetes Object Management](/docs/concepts/overview/object-management-kubectl/overview/) * [Managing Kubernetes Objects Using Imperative Commands](/docs/concepts/overview/object-management-kubectl/imperative-command/) * [Imperative Management of Kubernetes Objects Using Configuration Files](/docs/concepts/overview/object-management-kubectl/imperative-config/) * [Declarative Management of Kubernetes Objects Using Configuration Files](/docs/concepts/overview/object-management-kubectl/declarative-config/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/content/en/docs/tasks/service-catalog/_index.md b/content/en/docs/tasks/service-catalog/_index.md new file mode 100755 index 0000000000000..7cdab5077a251 --- /dev/null +++ b/content/en/docs/tasks/service-catalog/_index.md @@ -0,0 +1,5 @@ +--- +title: "Extend Kubernetes" +weight: 150 +--- + diff --git a/docs/tasks/service-catalog/install-service-catalog-using-helm.md b/content/en/docs/tasks/service-catalog/install-service-catalog-using-helm.md similarity index 87% rename from docs/tasks/service-catalog/install-service-catalog-using-helm.md rename to content/en/docs/tasks/service-catalog/install-service-catalog-using-helm.md index e8274e3f54bca..5b5c7e562da52 100644 --- a/docs/tasks/service-catalog/install-service-catalog-using-helm.md +++ b/content/en/docs/tasks/service-catalog/install-service-catalog-using-helm.md @@ -2,31 +2,32 @@ title: Install Service Catalog using Helm reviewers: - chenopis +content_template: templates/task --- -{% capture overview %} -{% glossary_definition term_id="service-catalog" length="all" prepend="Service Catalog is" %} +{{% capture overview %}} +{{< glossary_definition term_id="service-catalog" length="all" prepend="Service Catalog is" >}} Use [Helm](https://helm.sh/) to install Service Catalog on your Kubernetes cluster. Up to date information on this process can be found at the [kubernetes-incubator/service-catalog](https://github.com/kubernetes-incubator/service-catalog/blob/master/docs/install.md) repo. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * Understand the key concepts of [Service Catalog](/docs/concepts/service-catalog/). * Service Catalog requires a Kubernetes cluster running version 1.7 or higher. * You must have a Kubernetes cluster with cluster DNS enabled. - * If you are using a cloud-based Kubernetes cluster or {% glossary_tooltip text="Minikube" term_id="minikube" %}, you may already have cluster DNS enabled. + * If you are using a cloud-based Kubernetes cluster or {{< glossary_tooltip text="Minikube" term_id="minikube" >}}, you may already have cluster DNS enabled. * If you are using `hack/local-up-cluster.sh`, ensure that the `KUBE_ENABLE_CLUSTER_DNS` environment variable is set, then run the install script. * [Install and setup kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) v1.7 or higher. Make sure it is configured to connect to the Kubernetes cluster. * Install [Helm](http://helm.sh/) v2.7.0 or newer. * Follow the [Helm install instructions](https://github.com/kubernetes/helm/blob/master/docs/install.md). * If you already have an appropriate version of Helm installed, execute `helm init` to install Tiller, the server-side component of Helm. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Add the service-catalog Helm repository Once Helm is installed, add the *service-catalog* Helm repository to your local machine by executing the following command: @@ -66,8 +67,9 @@ AUTHORIZATION_MODE=Node,RBAC hack/local-up-cluster.sh -O By default, `helm init` installs the Tiller Pod into the `kube-system` namespace, with Tiller configured to use the `default` service account. +{{< note >}} **NOTE:** If you used the `--tiller-namespace` or `--service-account` flags when running `helm init`, the `--serviceaccount` flag in the following command needs to be adjusted to reference the appropriate namespace and ServiceAccount name. -{: .note} +{{< /note >}} Configure Tiller to have `cluster-admin` access: @@ -87,14 +89,14 @@ helm install svc-cat/catalog \ --name catalog --namespace catalog ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * View [sample service brokers](https://github.com/openservicebrokerapi/servicebroker/blob/master/gettingStarted.md#sample-service-brokers). * Explore the [kubernetes-incubator/service-catalog](https://github.com/kubernetes-incubator/service-catalog) project. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/service-catalog/install-service-catalog-using-sc.md b/content/en/docs/tasks/service-catalog/install-service-catalog-using-sc.md similarity index 87% rename from docs/tasks/service-catalog/install-service-catalog-using-sc.md rename to content/en/docs/tasks/service-catalog/install-service-catalog-using-sc.md index 56a60511c8274..68a565779def1 100644 --- a/docs/tasks/service-catalog/install-service-catalog-using-sc.md +++ b/content/en/docs/tasks/service-catalog/install-service-catalog-using-sc.md @@ -2,17 +2,18 @@ title: Install Service Catalog using SC reviewers: - chenopis +content_template: templates/task --- -{% capture overview %} -{% glossary_definition term_id="service-catalog" length="all" prepend="Service Catalog is" %} +{{% capture overview %}} +{{< glossary_definition term_id="service-catalog" length="all" prepend="Service Catalog is" >}} Use the [Service Catalog Installer](https://github.com/GoogleCloudPlatform/k8s-service-catalog#installation) tool to easily install or uninstall Service Catalog on your Kubernetes cluster. This CLI tool is installed as `sc` in your local environment. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * Understand the key concepts of [Service Catalog](/docs/concepts/service-catalog/). * Install [Go 1.6+](https://golang.org/dl/) and set the `GOPATH`. * Install the [cfssl](https://github.com/cloudflare/cfssl) tool needed for generating SSL artifacts. @@ -22,10 +23,10 @@ Use the [Service Catalog Installer](https://github.com/GoogleCloudPlatform/k8s-s kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user= -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Install `sc` in your local environment Install the `sc` CLI tool using the `go get` command: @@ -64,14 +65,14 @@ If you would like to uninstall Service Catalog from your Kubernetes cluster usin sc uninstall ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * View [sample service brokers](https://github.com/openservicebrokerapi/servicebroker/blob/master/gettingStarted.md#sample-service-brokers). * Explore the [kubernetes-incubator/service-catalog](https://github.com/kubernetes-incubator/service-catalog) project. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/content/en/docs/tasks/tls/_index.md b/content/en/docs/tasks/tls/_index.md new file mode 100755 index 0000000000000..8607aa28d29b6 --- /dev/null +++ b/content/en/docs/tasks/tls/_index.md @@ -0,0 +1,5 @@ +--- +title: "TLS" +weight: 100 +--- + diff --git a/docs/tasks/tls/certificate-rotation.md b/content/en/docs/tasks/tls/certificate-rotation.md similarity index 94% rename from docs/tasks/tls/certificate-rotation.md rename to content/en/docs/tasks/tls/certificate-rotation.md index 1cf66350a7491..3e2f4e553b6df 100644 --- a/docs/tasks/tls/certificate-rotation.md +++ b/content/en/docs/tasks/tls/certificate-rotation.md @@ -3,21 +3,22 @@ reviewers: - jcbsmpsn - mikedanese title: Certificate Rotation +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to enable and configure certificate rotation for the kubelet. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * Kubernetes version 1.8.0 or later is required * Kubelet certificate rotation is beta in 1.8.0 which means it may change without notice. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Overview @@ -76,6 +77,6 @@ kubelet will retrieve the new signed certificate from the Kubernetes API and write that to disk. Then it will update the connections it has to the Kubernetes API to reconnect using the new certificate. -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/docs/tasks/tls/managing-tls-in-a-cluster.md b/content/en/docs/tasks/tls/managing-tls-in-a-cluster.md similarity index 99% rename from docs/tasks/tls/managing-tls-in-a-cluster.md rename to content/en/docs/tasks/tls/managing-tls-in-a-cluster.md index 5915ff2ddd456..ce9bc6c0ae53f 100644 --- a/docs/tasks/tls/managing-tls-in-a-cluster.md +++ b/content/en/docs/tasks/tls/managing-tls-in-a-cluster.md @@ -6,8 +6,7 @@ reviewers: - liggit --- -* TOC -{:toc} +{{< toc >}} ## Overview @@ -40,8 +39,9 @@ build a configmap containing the certificate bundle that you have access to use. The following section demonstrates how to create a TLS certificate for a Kubernetes service accessed through DNS. +{{< note >}} **Note:** This tutorial uses CFSSL: Cloudflare's PKI and TLS toolkit [click here](https://blog.cloudflare.com/introducing-cfssl/) to know more. -{: .note} +{{< /note >}} ### Step 0. Download and install CFSSL diff --git a/content/en/docs/tasks/tools/_index.md b/content/en/docs/tasks/tools/_index.md new file mode 100755 index 0000000000000..4b7c6df5df5a5 --- /dev/null +++ b/content/en/docs/tasks/tools/_index.md @@ -0,0 +1,5 @@ +--- +title: "Install Tools" +weight: 20 +--- + diff --git a/docs/tasks/tools/install-kubectl.md b/content/en/docs/tasks/tools/install-kubectl.md similarity index 80% rename from docs/tasks/tools/install-kubectl.md rename to content/en/docs/tasks/tools/install-kubectl.md index e55f5a8462ccd..aefb0c679b7f2 100644 --- a/docs/tasks/tools/install-kubectl.md +++ b/content/en/docs/tasks/tools/install-kubectl.md @@ -3,27 +3,27 @@ reviewers: - bgrant0607 - mikedanese title: Install and Set Up kubectl +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} Use the Kubernetes command-line tool, [kubectl](/docs/user-guide/kubectl/), to deploy and manage applications on Kubernetes. Using kubectl, you can inspect cluster resources; create, delete, and update components; and look at your new cluster and bring up example apps. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} Use a version of kubectl that is the same version as your server or later. Using an older kubectl with a newer server might produce validation errors. -{% endcapture %} +{{% /capture %}} ## Install kubectl Here are a few methods to install kubectl. -{% capture steps %} +{{% capture steps %}} ## Install kubectl binary via native package management -{% capture ubuntu %} - -```bash +{{< tabs name="kubectl_install" >}} +{{< tab name="Ubuntu, Debian or HypriotOS" codelang="bash" >}} apt-get update && apt-get install -y apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - cat </etc/apt/sources.list.d/kubernetes.list @@ -31,14 +31,8 @@ deb http://apt.kubernetes.io/ kubernetes-xenial main EOF apt-get update apt-get install -y kubectl -``` - -{% endcapture %} - -{% capture centos %} - -```bash -cat < /etc/yum.repos.d/kubernetes.repo +{{< /tab >}} +{{< tab name="CentOS, RHEL or Fedora" codelang="bash" >}}cat < /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 @@ -48,15 +42,9 @@ repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF yum install -y kubectl -``` +{{< /tab >}} +{{< /tabs >}} -{% endcapture %} - -{% assign tab_set_name = "kubectl_install" %} -{% assign tab_names = "Ubuntu, Debian or HypriotOS;CentOS, RHEL or Fedora" | split: ';' | compact %} -{% assign tab_contents = site.emptyArray | push: ubuntu | push: centos %} - -{% include tabs.md %} ## Install with snap on Ubuntu @@ -118,16 +106,21 @@ kubectl can be installed as part of the Google Cloud SDK. ## Install kubectl binary via curl -{% capture macos %} +{{< tabs name="kubectl_install_curl" >}} +{{% tab name="macos" %}} 1. Download the latest release with the command: - curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl + ``` + curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl + ``` To download a specific version, replace the `$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)` portion of the command with the specific version. - For example, to download version {{page.fullversion}} on MacOS, type: - - curl -LO https://storage.googleapis.com/kubernetes-release/release/{{page.fullversion}}/bin/darwin/amd64/kubectl + For example, to download version {{< param "fullversion" >}} on MacOS, type: + + ``` + curl -LO https://storage.googleapis.com/kubernetes-release/release/{{< param "fullversion" >}}/bin/darwin/amd64/kubectl + ``` 2. Make the kubectl binary executable. @@ -140,18 +133,22 @@ kubectl can be installed as part of the Google Cloud SDK. ``` sudo mv ./kubectl /usr/local/bin/kubectl ``` -{% endcapture %} +{{% /tab %}} +{{% tab name="linux" %}} -{% capture linux %} 1. Download the latest release with the command: - curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl + ``` + curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl + ``` To download a specific version, replace the `$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)` portion of the command with the specific version. - For example, to download version {{page.fullversion}} on Linux, type: - - curl -LO https://storage.googleapis.com/kubernetes-release/release/{{page.fullversion}}/bin/linux/amd64/kubectl + For example, to download version {{< param "fullversion" >}} on Linux, type: + + ``` + curl -LO https://storage.googleapis.com/kubernetes-release/release/{{< param "fullversion" >}}/bin/linux/amd64/kubectl + ``` 2. Make the kubectl binary executable. @@ -164,26 +161,23 @@ kubectl can be installed as part of the Google Cloud SDK. ``` sudo mv ./kubectl /usr/local/bin/kubectl ``` -{% endcapture %} - -{% capture win %} -1. Download the latest release {{page.fullversion}} from [this link](https://storage.googleapis.com/kubernetes-release/release/{{page.fullversion}}/bin/windows/amd64/kubectl.exe). +{{% /tab %}} +{{% tab name="win" %}} +1. Download the latest release {{< param "fullversion" >}} from [this link](https://storage.googleapis.com/kubernetes-release/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe). Or if you have `curl` installed, use this command: - curl -LO https://storage.googleapis.com/kubernetes-release/release/{{page.fullversion}}/bin/windows/amd64/kubectl.exe + ``` + curl -LO https://storage.googleapis.com/kubernetes-release/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe + ``` To find out the latest stable version (for example, for scripting), take a look at [https://storage.googleapis.com/kubernetes-release/release/stable.txt](https://storage.googleapis.com/kubernetes-release/release/stable.txt). 2. Add the binary in to your PATH. +{{% /tab %}} +{{< /tabs >}} -{% endcapture %} - -{% assign tab_set_name = "kubectl_install_curl" %} -{% assign tab_names = "macOS,Linux,Windows" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: macos | push: linux | push: win %} -{% include tabs.md %} ## Configure kubectl @@ -267,8 +261,8 @@ Or when using [Oh-My-Zsh](http://ohmyz.sh/), edit the ~/.zshrc file and update t source <(kubectl completion zsh) ``` -{% endcapture %} -{% capture whatsnext %} + +{{% capture whatsnext %}} [Learn how to launch and expose your application.](/docs/tasks/access-application-cluster/service-access-application-cluster/) -{% endcapture %} -{% include templates/task.md %} +{{% /capture %}} + diff --git a/docs/tasks/tools/install-minikube.md b/content/en/docs/tasks/tools/install-minikube.md similarity index 84% rename from docs/tasks/tools/install-minikube.md rename to content/en/docs/tasks/tools/install-minikube.md index d8a47e37fe199..73ee16ca54eb7 100644 --- a/docs/tasks/tools/install-minikube.md +++ b/content/en/docs/tasks/tools/install-minikube.md @@ -1,20 +1,21 @@ --- title: Install Minikube +content_template: templates/task --- -{% capture overview %} +{{% capture overview %}} This page shows how to install Minikube. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} VT-x or AMD-v virtualization must be enabled in your computer's BIOS. -{% endcapture %} +{{% /capture %}} -{% capture steps %} +{{% capture steps %}} ## Install a Hypervisor @@ -29,8 +30,9 @@ If you do not already have a hypervisor installed, install one now. [VirtualBox](https://www.virtualbox.org/wiki/Downloads) or [KVM](http://www.linux-kvm.org/). + {{< note >}} **Note:** Minikube also supports a `--vm-driver=none` option that runs the Kubernetes components on the host and not in a VM. Docker is required to use this driver but a hypervisor is not required. - {: .note} + {{< /note >}} * For Windows, install [VirtualBox](https://www.virtualbox.org/wiki/Downloads) or @@ -45,12 +47,12 @@ If you do not already have a hypervisor installed, install one now. * Install Minikube according to the instructions for the [latest release](https://github.com/kubernetes/minikube/releases). -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * [Running Kubernetes Locally via Minikube](/docs/getting-started-guides/minikube/) -{% endcapture %} +{{% /capture %}} + -{% include templates/task.md %} diff --git a/_includes/feature-state-alpha.md b/content/en/docs/templates/feature-state-alpha.txt similarity index 70% rename from _includes/feature-state-alpha.md rename to content/en/docs/templates/feature-state-alpha.txt index ac2262acb69a9..24b28a7e92373 100644 --- a/_includes/feature-state-alpha.md +++ b/content/en/docs/templates/feature-state-alpha.txt @@ -1,5 +1,3 @@ -{% assign dialog_title = "alpha" %} -{% capture dialog_content %} This feature is currently in a *alpha* state, meaning: * The version names contain alpha (e.g. v1alpha1). @@ -8,6 +6,3 @@ This feature is currently in a *alpha* state, meaning: * 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. -{% endcapture %} - -**FEATURE STATE:** `Kubernetes {{ for_k8s_version | default: page.version }}` {% include feature-dialog.md %} diff --git a/_includes/feature-state-beta.md b/content/en/docs/templates/feature-state-beta.txt similarity index 84% rename from _includes/feature-state-beta.md rename to content/en/docs/templates/feature-state-beta.txt index da78faf27af37..25bd7ca72935e 100644 --- a/_includes/feature-state-beta.md +++ b/content/en/docs/templates/feature-state-beta.txt @@ -1,5 +1,3 @@ -{% assign dialog_title = "beta" %} -{% capture dialog_content %} This feature is currently in a *beta* state, meaning: * The version names contain beta (e.g. v2beta3). @@ -8,7 +6,3 @@ This feature is currently in a *beta* state, meaning: * 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 applications 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 that can be upgraded independently, you may be able to relax this restriction. * **Please do try our beta features and give feedback on them! After they exit beta, it may not be practical for us to make more changes.** - -{% endcapture %} - -**FEATURE STATE:** `Kubernetes {{ for_k8s_version | default: page.version }}` {% include feature-dialog.md %} diff --git a/content/en/docs/templates/feature-state-deprecated.txt b/content/en/docs/templates/feature-state-deprecated.txt new file mode 100644 index 0000000000000..f2a38e44bb7c8 --- /dev/null +++ b/content/en/docs/templates/feature-state-deprecated.txt @@ -0,0 +1,2 @@ + +This feature is *deprecated*. For more information on this state, see the [Kubernetes Deprecation Policy](/docs/reference/deprecation-policy/). diff --git a/content/en/docs/templates/feature-state-stable.txt b/content/en/docs/templates/feature-state-stable.txt new file mode 100644 index 0000000000000..6d6d580c5c213 --- /dev/null +++ b/content/en/docs/templates/feature-state-stable.txt @@ -0,0 +1,5 @@ + +This feature is *stable*, meaning: + +* The version name is vX where X is an integer. +* Stable versions of features will appear in released software for many subsequent versions. diff --git a/content/en/docs/templates/index.md b/content/en/docs/templates/index.md new file mode 100644 index 0000000000000..9d7bccd143f5f --- /dev/null +++ b/content/en/docs/templates/index.md @@ -0,0 +1,13 @@ +--- +headless: true + +resources: +- src: "*alpha*" + title: "alpha" +- src: "*beta*" + title: "beta" +- src: "*deprecated*" + title: "deprecated" +- src: "*stable*" + title: "stable" +--- diff --git a/docs/tools/index.md b/content/en/docs/tools/_index.md similarity index 100% rename from docs/tools/index.md rename to content/en/docs/tools/_index.md diff --git a/docs/tools/kompose/index.md b/content/en/docs/tools/kompose/_index.md similarity index 100% rename from docs/tools/kompose/index.md rename to content/en/docs/tools/kompose/_index.md diff --git a/docs/tools/kompose/user-guide.md b/content/en/docs/tools/kompose/user-guide.md similarity index 99% rename from docs/tools/kompose/user-guide.md rename to content/en/docs/tools/kompose/user-guide.md index b50f53ec40a95..73eece6769a80 100644 --- a/docs/tools/kompose/user-guide.md +++ b/content/en/docs/tools/kompose/user-guide.md @@ -9,8 +9,7 @@ redirect_from: - "/docs/tools/kompose/index.html" --- -* TOC -{:toc} +{{< toc >}} # Kubernetes + Compose = Kompose diff --git a/docs/tutorials/index.md b/content/en/docs/tutorials/_index.md similarity index 99% rename from docs/tutorials/index.md rename to content/en/docs/tutorials/_index.md index 1ad68700392d1..da4d82ef7e1d3 100644 --- a/docs/tutorials/index.md +++ b/content/en/docs/tutorials/_index.md @@ -1,5 +1,7 @@ --- title: Tutorials +main_menu: true +weight: 60 --- This section of the Kubernetes documentation contains tutorials. diff --git a/content/en/docs/tutorials/clusters/_index.md b/content/en/docs/tutorials/clusters/_index.md new file mode 100755 index 0000000000000..c02865f3ce85f --- /dev/null +++ b/content/en/docs/tutorials/clusters/_index.md @@ -0,0 +1,5 @@ +--- +title: "Clusters" +weight: 100 +--- + diff --git a/docs/tutorials/clusters/apparmor.md b/content/en/docs/tutorials/clusters/apparmor.md similarity index 97% rename from docs/tutorials/clusters/apparmor.md rename to content/en/docs/tutorials/clusters/apparmor.md index 4f8ecca51989d..6140a470e2330 100644 --- a/docs/tutorials/clusters/apparmor.md +++ b/content/en/docs/tutorials/clusters/apparmor.md @@ -2,11 +2,12 @@ reviewers: - stclair title: AppArmor +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} -{% assign for_k8s_version="v1.4" %}{% include feature-state-beta.md %} +{{< feature-state for_k8s_version="v1.4" state="beta" >}} AppArmor is a Linux kernel security module that supplements the standard Linux user and group based @@ -23,9 +24,9 @@ that AppArmor is not a silver bullet and can only do so much to protect against application code. It is important to provide good, restrictive profiles, and harden your applications and cluster from other angles as well. -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * See an example of how to load a profile on a node * Learn how to enforce the profile on a Pod @@ -33,9 +34,9 @@ applications and cluster from other angles as well. * See what happens when a profile is violated * See what happens when a profile cannot be loaded -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} Make sure: @@ -110,9 +111,9 @@ gke-test-default-pool-239f5d02-x1kf: kubelet is posting ready status. AppArmor e gke-test-default-pool-239f5d02-xwux: kubelet is posting ready status. AppArmor enabled ``` -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Securing a Pod @@ -161,7 +162,7 @@ k8s-apparmor-example-deny-write (enforce) First, we need to load the profile we want to use onto our nodes. The profile we'll use simply denies all file writes: -{% include code.html language="text" file="deny-write.profile" ghlink="/docs/tutorials/clusters/deny-write.profile" %} +{{< code language="text" file="deny-write.profile" >}} Since we don't know where the Pod will be scheduled, we'll need to load the profile on all our nodes. For this example we'll just use SSH to install the profiles, but other approaches are @@ -190,7 +191,7 @@ done Next, we'll run a simple "Hello AppArmor" pod with the deny-write profile: -{% include code.html language="yaml" file="hello-apparmor-pod.yaml" ghlink="/docs/tutorials/clusters/hello-apparmor-pod.yaml" %} +{{< code file="hello-apparmor-pod.yaml" >}} ```shell $ kubectl create -f ./hello-apparmor-pod.yaml @@ -428,15 +429,15 @@ Specifying the list of profiles Pod containers is allowed to specify: - Although an escaped comma is a legal character in a profile name, it cannot be explicitly allowed here. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Additional resources: * [Quick guide to the AppArmor profile language](http://wiki.apparmor.net/index.php/QuickProfileLanguage) * [AppArmor core policy reference](http://wiki.apparmor.net/index.php/ProfileLanguage) -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tutorials/clusters/deny-write.profile b/content/en/docs/tutorials/clusters/deny-write.profile similarity index 100% rename from docs/tutorials/clusters/deny-write.profile rename to content/en/docs/tutorials/clusters/deny-write.profile diff --git a/docs/tutorials/clusters/hello-apparmor-pod.yaml b/content/en/docs/tutorials/clusters/hello-apparmor-pod.yaml similarity index 100% rename from docs/tutorials/clusters/hello-apparmor-pod.yaml rename to content/en/docs/tutorials/clusters/hello-apparmor-pod.yaml diff --git a/content/en/docs/tutorials/configuration/_index.md b/content/en/docs/tutorials/configuration/_index.md new file mode 100755 index 0000000000000..00cf8e8c0fab1 --- /dev/null +++ b/content/en/docs/tutorials/configuration/_index.md @@ -0,0 +1,5 @@ +--- +title: "Configuration" +weight: 70 +--- + diff --git a/docs/tutorials/configuration/configmap/redis/redis-config b/content/en/docs/tutorials/configuration/configmap/redis/redis-config similarity index 100% rename from docs/tutorials/configuration/configmap/redis/redis-config rename to content/en/docs/tutorials/configuration/configmap/redis/redis-config diff --git a/docs/tutorials/configuration/configmap/redis/redis-pod.yaml b/content/en/docs/tutorials/configuration/configmap/redis/redis-pod.yaml similarity index 100% rename from docs/tutorials/configuration/configmap/redis/redis-pod.yaml rename to content/en/docs/tutorials/configuration/configmap/redis/redis-pod.yaml diff --git a/docs/tutorials/configuration/configure-redis-using-configmap.md b/content/en/docs/tutorials/configuration/configure-redis-using-configmap.md similarity index 90% rename from docs/tutorials/configuration/configure-redis-using-configmap.md rename to content/en/docs/tutorials/configuration/configure-redis-using-configmap.md index aeefbc2e9807f..2c11bbff1ed2a 100644 --- a/docs/tutorials/configuration/configure-redis-using-configmap.md +++ b/content/en/docs/tutorials/configuration/configure-redis-using-configmap.md @@ -3,31 +3,32 @@ reviewers: - eparis - pmorie title: Configuring Redis using a ConfigMap +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} This page provides a real world example of how to configure Redis using a ConfigMap and builds upon the [Configure Containers Using a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/) task. -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Create a ConfigMap. * Create a pod specification using the ConfigMap. * Create the pod. * Verify that the configuration was correctly applied. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * Understand [Configure Containers Using a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/). -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Real World Example: Configuring Redis using a ConfigMap @@ -114,12 +115,12 @@ You can follow the steps below to configure a Redis cache using data stored in a 2) "allkeys-lru" ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [ConfigMaps](/docs/tasks/configure-pod-container/configure-pod-configmap/). -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tutorials/example-tutorial-template.md b/content/en/docs/tutorials/example-tutorial-template.md similarity index 70% rename from docs/tutorials/example-tutorial-template.md rename to content/en/docs/tutorials/example-tutorial-template.md index 0d3dba89be785..5795140d87b05 100644 --- a/docs/tutorials/example-tutorial-template.md +++ b/content/en/docs/tutorials/example-tutorial-template.md @@ -2,33 +2,34 @@ title: Example Tutorial Template reviewers: - chenopis +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} **NOTE:** Be sure to also [create an entry in the table of contents](/docs/home/contribute/write-new-topic/#creating-an-entry-in-the-table-of-contents) for your new document. This page shows how to ... -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -* {% include task-tutorial-prereqs.md %} +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} * Do this. * Do this too. -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Learn this. * Build this. * Run this. -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Building ... @@ -43,24 +44,24 @@ This page shows how to ... ## Understanding the code Here's something interesting about the code you ran in the preceding steps. -{% endcapture %} +{{% /capture %}} -{% capture cleanup %} +{{% capture cleanup %}} **[Optional Section]** * Delete this. * Stop this. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} **[Optional Section]** * Learn more about [Writing a New Topic](/docs/home/contribute/write-new-topic/). * See [Using Page Templates - Tutorial template](/docs/home/contribute/page-templates/#tutorial_template) for how to use this template. -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tutorials/kubernetes-basics/index.html b/content/en/docs/tutorials/kubernetes-basics/_index.html similarity index 99% rename from docs/tutorials/kubernetes-basics/index.html rename to content/en/docs/tutorials/kubernetes-basics/_index.html index cd753a58189e1..54a2ada2b21d3 100644 --- a/docs/tutorials/kubernetes-basics/index.html +++ b/content/en/docs/tutorials/kubernetes-basics/_index.html @@ -1,5 +1,6 @@ --- title: Overview +linkTitle: Try Our Interactive Tutorials --- diff --git a/docs/tutorials/kubernetes-basics/cluster-interactive.html b/content/en/docs/tutorials/kubernetes-basics/cluster-interactive.html similarity index 100% rename from docs/tutorials/kubernetes-basics/cluster-interactive.html rename to content/en/docs/tutorials/kubernetes-basics/cluster-interactive.html diff --git a/docs/tutorials/kubernetes-basics/cluster-intro.html b/content/en/docs/tutorials/kubernetes-basics/cluster-intro.html similarity index 100% rename from docs/tutorials/kubernetes-basics/cluster-intro.html rename to content/en/docs/tutorials/kubernetes-basics/cluster-intro.html diff --git a/docs/tutorials/kubernetes-basics/deploy-interactive.html b/content/en/docs/tutorials/kubernetes-basics/deploy-interactive.html similarity index 100% rename from docs/tutorials/kubernetes-basics/deploy-interactive.html rename to content/en/docs/tutorials/kubernetes-basics/deploy-interactive.html diff --git a/docs/tutorials/kubernetes-basics/deploy-intro.html b/content/en/docs/tutorials/kubernetes-basics/deploy-intro.html similarity index 100% rename from docs/tutorials/kubernetes-basics/deploy-intro.html rename to content/en/docs/tutorials/kubernetes-basics/deploy-intro.html diff --git a/docs/tutorials/kubernetes-basics/explore-interactive.html b/content/en/docs/tutorials/kubernetes-basics/explore-interactive.html similarity index 100% rename from docs/tutorials/kubernetes-basics/explore-interactive.html rename to content/en/docs/tutorials/kubernetes-basics/explore-interactive.html diff --git a/docs/tutorials/kubernetes-basics/explore-intro.html b/content/en/docs/tutorials/kubernetes-basics/explore-intro.html similarity index 100% rename from docs/tutorials/kubernetes-basics/explore-intro.html rename to content/en/docs/tutorials/kubernetes-basics/explore-intro.html diff --git a/docs/tutorials/kubernetes-basics/expose-interactive.html b/content/en/docs/tutorials/kubernetes-basics/expose-interactive.html similarity index 100% rename from docs/tutorials/kubernetes-basics/expose-interactive.html rename to content/en/docs/tutorials/kubernetes-basics/expose-interactive.html diff --git a/docs/tutorials/kubernetes-basics/expose-intro.html b/content/en/docs/tutorials/kubernetes-basics/expose-intro.html similarity index 100% rename from docs/tutorials/kubernetes-basics/expose-intro.html rename to content/en/docs/tutorials/kubernetes-basics/expose-intro.html diff --git a/docs/tutorials/kubernetes-basics/public/css/overrides.css b/content/en/docs/tutorials/kubernetes-basics/public/css/overrides.css similarity index 100% rename from docs/tutorials/kubernetes-basics/public/css/overrides.css rename to content/en/docs/tutorials/kubernetes-basics/public/css/overrides.css diff --git a/docs/tutorials/kubernetes-basics/public/css/styles.css b/content/en/docs/tutorials/kubernetes-basics/public/css/styles.css similarity index 100% rename from docs/tutorials/kubernetes-basics/public/css/styles.css rename to content/en/docs/tutorials/kubernetes-basics/public/css/styles.css diff --git a/docs/tutorials/kubernetes-basics/public/images/badge-01.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/badge-01.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/badge-01.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/badge-01.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/badge-02.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/badge-02.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/badge-02.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/badge-02.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/badge-03.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/badge-03.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/badge-03.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/badge-03.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/badge-04.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/badge-04.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/badge-04.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/badge-04.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/badge-05.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/badge-05.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/badge-05.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/badge-05.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/badge-06.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/badge-06.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/badge-06.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/badge-06.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/badge-07.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/badge-07.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/badge-07.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/badge-07.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/badge-08.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/badge-08.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/badge-08.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/badge-08.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/badge-09.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/badge-09.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/badge-09.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/badge-09.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/badge-1.png b/content/en/docs/tutorials/kubernetes-basics/public/images/badge-1.png similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/badge-1.png rename to content/en/docs/tutorials/kubernetes-basics/public/images/badge-1.png diff --git a/docs/tutorials/kubernetes-basics/public/images/dislike.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/dislike.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/dislike.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/dislike.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/like.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/like.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/like.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/like.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/logo.png b/content/en/docs/tutorials/kubernetes-basics/public/images/logo.png similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/logo.png rename to content/en/docs/tutorials/kubernetes-basics/public/images/logo.png diff --git a/docs/tutorials/kubernetes-basics/public/images/logo.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/logo.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/logo.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/logo.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/logo_2.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/logo_2.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/logo_2.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/logo_2.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/logo_mobile.png b/content/en/docs/tutorials/kubernetes-basics/public/images/logo_mobile.png similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/logo_mobile.png rename to content/en/docs/tutorials/kubernetes-basics/public/images/logo_mobile.png diff --git a/docs/tutorials/kubernetes-basics/public/images/module_01.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_01.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_01.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_01.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_01_cluster.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_01_cluster.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_01_cluster.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_01_cluster.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_02.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_02.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_02.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_02.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_02_first_app.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_02_first_app.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_02_first_app.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_02_first_app.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_03.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_03.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_03.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_03.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_03_nodes.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_03_nodes.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_03_nodes.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_03_nodes.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_03_pods.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_03_pods.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_03_pods.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_03_pods.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_04.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_04.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_04.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_04.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_04_labels.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_04_labels.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_04_labels.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_04_labels.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_04_services.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_04_services.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_04_services.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_04_services.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_05.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_05.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_05.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_05.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_05_scaling1.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_05_scaling1.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_05_scaling1.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_05_scaling1.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_05_scaling2.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_05_scaling2.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_05_scaling2.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_05_scaling2.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_06.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_06.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_06.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_06.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates1.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates1.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates1.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates1.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates2.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates2.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates2.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates2.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates3.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates3.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates3.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates3.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates4.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates4.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates4.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates4.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/nav_point.png b/content/en/docs/tutorials/kubernetes-basics/public/images/nav_point.png similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/nav_point.png rename to content/en/docs/tutorials/kubernetes-basics/public/images/nav_point.png diff --git a/docs/tutorials/kubernetes-basics/public/images/nav_point.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/nav_point.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/nav_point.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/nav_point.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/nav_point_active.png b/content/en/docs/tutorials/kubernetes-basics/public/images/nav_point_active.png similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/nav_point_active.png rename to content/en/docs/tutorials/kubernetes-basics/public/images/nav_point_active.png diff --git a/docs/tutorials/kubernetes-basics/public/images/nav_point_active.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/nav_point_active.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/nav_point_active.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/nav_point_active.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/nav_point_sub.svg b/content/en/docs/tutorials/kubernetes-basics/public/images/nav_point_sub.svg similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/nav_point_sub.svg rename to content/en/docs/tutorials/kubernetes-basics/public/images/nav_point_sub.svg diff --git a/docs/tutorials/kubernetes-basics/public/images/quiz_false.png b/content/en/docs/tutorials/kubernetes-basics/public/images/quiz_false.png similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/quiz_false.png rename to content/en/docs/tutorials/kubernetes-basics/public/images/quiz_false.png diff --git a/docs/tutorials/kubernetes-basics/public/images/quiz_true.png b/content/en/docs/tutorials/kubernetes-basics/public/images/quiz_true.png similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/quiz_true.png rename to content/en/docs/tutorials/kubernetes-basics/public/images/quiz_true.png diff --git a/docs/tutorials/kubernetes-basics/public/images/twitter.png b/content/en/docs/tutorials/kubernetes-basics/public/images/twitter.png similarity index 100% rename from docs/tutorials/kubernetes-basics/public/images/twitter.png rename to content/en/docs/tutorials/kubernetes-basics/public/images/twitter.png diff --git a/docs/tutorials/kubernetes-basics/scale-interactive.html b/content/en/docs/tutorials/kubernetes-basics/scale-interactive.html similarity index 100% rename from docs/tutorials/kubernetes-basics/scale-interactive.html rename to content/en/docs/tutorials/kubernetes-basics/scale-interactive.html diff --git a/docs/tutorials/kubernetes-basics/scale-intro.html b/content/en/docs/tutorials/kubernetes-basics/scale-intro.html similarity index 100% rename from docs/tutorials/kubernetes-basics/scale-intro.html rename to content/en/docs/tutorials/kubernetes-basics/scale-intro.html diff --git a/docs/tutorials/kubernetes-basics/update-interactive.html b/content/en/docs/tutorials/kubernetes-basics/update-interactive.html similarity index 100% rename from docs/tutorials/kubernetes-basics/update-interactive.html rename to content/en/docs/tutorials/kubernetes-basics/update-interactive.html diff --git a/docs/tutorials/kubernetes-basics/update-intro.html b/content/en/docs/tutorials/kubernetes-basics/update-intro.html similarity index 100% rename from docs/tutorials/kubernetes-basics/update-intro.html rename to content/en/docs/tutorials/kubernetes-basics/update-intro.html diff --git a/content/en/docs/tutorials/online-training/_index.md b/content/en/docs/tutorials/online-training/_index.md new file mode 100755 index 0000000000000..32b6cc4db18d2 --- /dev/null +++ b/content/en/docs/tutorials/online-training/_index.md @@ -0,0 +1,5 @@ +--- +title: "Online Training Courses" +weight: 30 +--- + diff --git a/docs/tutorials/online-training/overview.md b/content/en/docs/tutorials/online-training/overview.md similarity index 76% rename from docs/tutorials/online-training/overview.md rename to content/en/docs/tutorials/online-training/overview.md index 3d22729940121..3943ac6959d07 100644 --- a/docs/tutorials/online-training/overview.md +++ b/content/en/docs/tutorials/online-training/overview.md @@ -1,21 +1,22 @@ --- title: Overview of Kubernetes Online Training +content_template: templates/concept --- -{% capture overview %} +{{% capture overview %}} Here are some of the sites that offer online training for Kubernetes: -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} * [Scalable Microservices with Kubernetes (Udacity)](https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615) * [Introduction to Kubernetes (edX)](https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x) -{% endcapture %} +{{% /capture %}} + -{% include templates/concept.md %} diff --git a/content/en/docs/tutorials/services/_index.md b/content/en/docs/tutorials/services/_index.md new file mode 100755 index 0000000000000..98e647be6156f --- /dev/null +++ b/content/en/docs/tutorials/services/_index.md @@ -0,0 +1,5 @@ +--- +title: "Services" +weight: 110 +--- + diff --git a/docs/tutorials/services/source-ip.md b/content/en/docs/tutorials/services/source-ip.md similarity index 96% rename from docs/tutorials/services/source-ip.md rename to content/en/docs/tutorials/services/source-ip.md index 7ee2b364f2ee7..01cc9d5dba3da 100644 --- a/docs/tutorials/services/source-ip.md +++ b/content/en/docs/tutorials/services/source-ip.md @@ -1,19 +1,20 @@ --- title: Using Source IP +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} Applications running in a Kubernetes cluster find and communicate with each other, and the outside world, through the Service abstraction. This document explains what happens to the source IP of packets sent to different types of Services, and how you can toggle this behavior according to your needs. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} ## Terminology @@ -37,18 +38,18 @@ $ kubectl run source-ip-app --image=k8s.gcr.io/echoserver:1.4 deployment "source-ip-app" created ``` -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Expose a simple application through various types of Services * Understand how each Service type handles source IP NAT * Understand the tradeoffs involved in preserving source IP -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Source IP for Services with Type=ClusterIP @@ -314,9 +315,9 @@ Loadbalancers in the second category can leverage the feature described above by simply creating an HTTP health check pointing at the port stored in the `service.spec.healthCheckNodePort` field on the Service. -{% endcapture %} +{{% /capture %}} -{% capture cleanup %} +{{% capture cleanup %}} Delete the Services: @@ -330,11 +331,11 @@ Delete the Deployment, ReplicaSet and Pod: $ kubectl delete deployment source-ip-app ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [connecting applications via services](/docs/concepts/services-networking/connect-applications-service/) * Learn more about [loadbalancing](/docs/user-guide/load-balancer) -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tutorials/stateful-application/Dockerfile b/content/en/docs/tutorials/stateful-application/Dockerfile similarity index 100% rename from docs/tutorials/stateful-application/Dockerfile rename to content/en/docs/tutorials/stateful-application/Dockerfile diff --git a/content/en/docs/tutorials/stateful-application/_index.md b/content/en/docs/tutorials/stateful-application/_index.md new file mode 100755 index 0000000000000..70b478ea94c57 --- /dev/null +++ b/content/en/docs/tutorials/stateful-application/_index.md @@ -0,0 +1,5 @@ +--- +title: "Stateful Applications" +weight: 90 +--- + diff --git a/docs/tutorials/stateful-application/basic-stateful-set.md b/content/en/docs/tutorials/stateful-application/basic-stateful-set.md similarity index 98% rename from docs/tutorials/stateful-application/basic-stateful-set.md rename to content/en/docs/tutorials/stateful-application/basic-stateful-set.md index 9f4694b223980..0ec612aa9ead4 100644 --- a/docs/tutorials/stateful-application/basic-stateful-set.md +++ b/content/en/docs/tutorials/stateful-application/basic-stateful-set.md @@ -7,15 +7,16 @@ reviewers: - kow3ns - smarterclayton title: StatefulSet Basics +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} This tutorial provides an introduction to managing applications with [StatefulSets](/docs/concepts/workloads/controllers/statefulset/). It demonstrates how to create, delete, scale, and update the Pods of StatefulSets. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} Before you begin this tutorial, you should familiarize yourself with the following Kubernetes concepts. @@ -23,7 +24,7 @@ following Kubernetes concepts. * [Cluster DNS](/docs/concepts/services-networking/dns-pod-service/) * [Headless Services](/docs/concepts/services-networking/service/#headless-services) * [PersistentVolumes](/docs/concepts/storage/persistent-volumes/) -* [PersistentVolume Provisioning](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/persistent-volume-provisioning/) +* [PersistentVolume Provisioning](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/persistent-volume-provisioning/) * [StatefulSets](/docs/concepts/workloads/controllers/statefulset/) * [kubectl CLI](/docs/user-guide/kubectl/) @@ -31,9 +32,9 @@ This tutorial assumes that your cluster is configured to dynamically provision PersistentVolumes. If your cluster is not configured to do so, you will have to manually provision two 1 GiB volumes prior to starting this tutorial. -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} StatefulSets are intended to be used with stateful applications and distributed systems. However, the administration of stateful applications and distributed systems on Kubernetes is a broad, complex topic. In order to @@ -47,9 +48,9 @@ After this tutorial, you will be familiar with the following. * How to delete a StatefulSet * How to scale a StatefulSet * How to update a StatefulSet's Pods -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Creating a StatefulSet Begin by creating a StatefulSet using the example below. It is similar to the @@ -58,7 +59,7 @@ example presented in the It creates a [Headless Service](/docs/concepts/services-networking/service/#headless-services), `nginx`, to publish the IP addresses of Pods in the StatefulSet, `web`. -{% include code.html language="yaml" file="web.yaml" ghlink="/docs/tutorials/stateful-application/web.yaml" %} +{{< code file="web.yaml" >}} Download the example above, and save it to a file named `web.yaml` @@ -520,12 +521,12 @@ in the presence of intermittent failures. Get the Pods to view their container images. -```shell{% raw %} +```shell for p in 0 1 2; do kubectl get po web-$p --template '{{range $i, $c := .spec.containers}}{{$c.image}}{{end}}'; echo; done k8s.gcr.io/nginx-slim:0.8 k8s.gcr.io/nginx-slim:0.8 k8s.gcr.io/nginx-slim:0.8 -{% endraw %} + ``` All the Pods in the StatefulSet are now running the previous container image. @@ -573,10 +574,10 @@ web-2 1/1 Running 0 18s Get the Pod's container. -```shell{% raw %} +```shell kubectl get po web-2 --template '{{range $i, $c := .spec.containers}}{{$c.image}}{{end}}' k8s.gcr.io/nginx-slim:0.8 -{% endraw %} + ``` Notice that, even though the update strategy is `RollingUpdate` the StatefulSet @@ -608,10 +609,10 @@ web-2 1/1 Running 0 18s Get the Pod's container. -```shell{% raw %} +```shell kubectl get po web-2 --template '{{range $i, $c := .spec.containers}}{{$c.image}}{{end}}' k8s.gcr.io/nginx-slim:0.7 -{% endraw %} + ``` When you changed the `partition`, the StatefulSet controller automatically @@ -644,10 +645,10 @@ web-1 1/1 Running 0 18s Get the `web-1` Pods container. -```shell{% raw %} +```shell kubectl get po web-1 --template '{{range $i, $c := .spec.containers}}{{$c.image}}{{end}}' k8s.gcr.io/nginx-slim:0.8 -{% endraw %} + ``` `web-1` was restored to its original configuration because the Pod's ordinal was less than the partition. When a partition is specified, all Pods with an @@ -693,12 +694,12 @@ web-0 1/1 Running 0 3s Get the Pod's containers. -```shell{% raw %} +```shell for p in 0 1 2; do kubectl get po web-$p --template '{{range $i, $c := .spec.containers}}{{$c.image}}{{end}}'; echo; done k8s.gcr.io/nginx-slim:0.7 k8s.gcr.io/nginx-slim:0.7 k8s.gcr.io/nginx-slim:0.7 -{% endraw %} + ``` By moving the `partition` to `0`, you allowed the StatefulSet controller to @@ -925,7 +926,7 @@ terminate all Pods in parallel, and not to wait for Pods to become Running and Ready or completely terminated prior to launching or terminating another Pod. -{% include code.html language="yaml" file="webp.yaml" ghlink="/docs/tutorials/stateful-application/webp.yaml" %} +{{< code file="webp.yaml" >}} Download the example above, and save it to a file named `webp.yaml` @@ -1029,13 +1030,13 @@ Service. ```shell kubectl delete svc nginx ``` -{% endcapture %} +{{% /capture %}} -{% capture cleanup %} +{{% capture cleanup %}} You will need to delete the persistent storage media for the PersistentVolumes used in this tutorial. Follow the necessary steps, based on your environment, storage configuration, and provisioning method, to ensure that all storage is reclaimed. -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tutorials/stateful-application/cassandra.md b/content/en/docs/tutorials/stateful-application/cassandra.md similarity index 92% rename from docs/tutorials/stateful-application/cassandra.md rename to content/en/docs/tutorials/stateful-application/cassandra.md index 9f75b40c1dd1e..56e5098e4002c 100644 --- a/docs/tutorials/stateful-application/cassandra.md +++ b/content/en/docs/tutorials/stateful-application/cassandra.md @@ -2,9 +2,10 @@ title: "Example: Deploying Cassandra with Stateful Sets" reviewers: - ahmetb +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} This tutorial shows you how to develop a native cloud [Cassandra](http://cassandra.apache.org/) deployment on Kubernetes. In this instance, a custom Cassandra `SeedProvider` enables Cassandra to discover new Cassandra nodes as they join the cluster. Deploying stateful distributed applications, like Cassandra, within a clustered environment can be challenging. StatefulSets greatly simplify this process. Please read about [StatefulSets](/docs/concepts/workloads/controllers/statefulset/) for more information about the features used in this tutorial. @@ -21,17 +22,17 @@ The docker image above is based on [debian-base](https://github.com/kubernetes/k | CASSANDRA_NUM_TOKENS | 32 | | CASSANDRA_RPC_ADDRESS | 0.0.0.0 | -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Create and Validate a Cassandra headless [Services](/docs/concepts/services-networking/service/). * Use a [StatefulSet](/docs/concepts/workloads/controllers/statefulset/) to create a Cassandra ring. * Validate the [StatefulSet](/docs/concepts/workloads/controllers/statefulset/). * Modify the [StatefulSet](/docs/concepts/workloads/controllers/statefulset/). * Delete the [StatefulSet](/docs/concepts/workloads/controllers/statefulset/) and its [Pods](/docs/concepts/workloads/pods/pod/). -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} To complete this tutorial, you should already have a basic familiarity with [Pods](/docs/concepts/workloads/pods/pod/), [Services](/docs/concepts/services-networking/service/), and [StatefulSets](/docs/concepts/workloads/controllers/statefulset/). In addition, you should: * [Install and Configure](/docs/tasks/tools/install-kubectl/) the `kubectl` command line @@ -40,21 +41,23 @@ To complete this tutorial, you should already have a basic familiarity with [Pod * Have a supported Kubernetes Cluster running +{{< note >}} **Note:** Please read the [getting started guides](/docs/setup/pick-right-solution/) if you do not already have a cluster. -{: .note} +{{< /note >}} ### Additional Minikube Setup Instructions +{{< caution >}} **Caution:** [Minikube](/docs/getting-started-guides/minikube/) defaults to 1024MB of memory and 1 CPU which results in an insufficient resource errors during this tutorial. -{: .caution} +{{< /caution >}} To avoid these errors, run minikube with: minikube start --memory 5120 --cpus=4 -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Creating a Cassandra Headless Service A Kubernetes [Service](/docs/concepts/services-networking/service/) describes a set of [Pods](/docs/concepts/workloads/pods/pod/) that perform the same task. @@ -65,7 +68,7 @@ The following `Service` is used for DNS lookups between Cassandra Pods and clien kubectl create -f cassandra-service.yaml -{% include code.html language="yaml" file="cassandra/cassandra-service.yaml" ghlink="/docs/tutorials/stateful-application/cassandra/cassandra-service.yaml" %} +{{< code file="cassandra/cassandra-service.yaml" >}} ### Validating (optional) @@ -84,15 +87,16 @@ If anything else returns, the service was not successfully created. Read [Debug The StatefulSet manifest, included below, creates a Cassandra ring that consists of three Pods. +{{< note >}} **Note:** This example uses the default provisioner for Minikube. Please update the following StatefulSet for the cloud you are working with. -{: .note} +{{< /note >}} 1. Update the StatefulSet if necessary. 2. Create the Cassandra StatefulSet from the `cassandra-statefulset.yaml` file: kubectl create -f cassandra-statefulset.yaml -{% include code.html language="yaml" file="cassandra/cassandra-statefulset.yaml" ghlink="/docs/tutorials/stateful-application/cassandra/cassandra-statefulset.yaml" %} +{{< code file="cassandra/cassandra-statefulset.yaml" >}} ## Validating The Cassandra StatefulSet @@ -117,8 +121,9 @@ The StatefulSet manifest, included below, creates a Cassandra ring that consists cassandra-0 1/1 Running 0 1m cassandra-1 0/1 ContainerCreating 0 8s + {{< note >}} **Note:** It can take up to ten minutes for all three Pods to deploy. - {: .note} + {{< /note >}} Once all Pods are deployed, the same command returns: @@ -151,8 +156,9 @@ Use `kubectl edit` to modify the size of a Cassandra StatefulSet. This command opens an editor in your terminal. The line you need to change is the `replicas` field. + {{< note >}} **Note:** The following sample is an excerpt of the StatefulSet file. - {: .note} + {{< /note >}} # Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be @@ -186,13 +192,14 @@ Use `kubectl edit` to modify the size of a Cassandra StatefulSet. NAME DESIRED CURRENT AGE cassandra 4 4 36m -{% endcapture %} +{{% /capture %}} -{% capture cleanup %} +{{% capture cleanup %}} Deleting or scaling a StatefulSet down does not delete the volumes associated with the StatefulSet. This ensures safety first: your data is more valuable than an auto purge of all related StatefulSet resources. +{{< warning >}} **Warning:** Depending on the storage class and reclaim policy, deleting the Persistent Volume Claims may cause the associated volumes to also be deleted. Never assume you’ll be able to access data if its volume claims are deleted. -{: .warning} +{{< /warning >}} 1. Run the following commands to delete everything in a `StatefulSet`: @@ -206,13 +213,13 @@ Deleting or scaling a StatefulSet down does not delete the volumes associated wi kubectl delete service -l app=cassandra -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn how to [Scale a StatefulSet](/docs/tasks/run-application/scale-stateful-set/). * Learn more about the [KubernetesSeedProvider](https://github.com/kubernetes/examples/blob/master/cassandra/java/src/main/java/io/k8s/cassandra/KubernetesSeedProvider.java) * See more custom [Seed Provider Configurations](https://git.k8s.io/examples/cassandra/java/README.md) -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tutorials/stateful-application/cassandra/cassandra-service.yaml b/content/en/docs/tutorials/stateful-application/cassandra/cassandra-service.yaml similarity index 100% rename from docs/tutorials/stateful-application/cassandra/cassandra-service.yaml rename to content/en/docs/tutorials/stateful-application/cassandra/cassandra-service.yaml diff --git a/docs/tutorials/stateful-application/cassandra/cassandra-statefulset.yaml b/content/en/docs/tutorials/stateful-application/cassandra/cassandra-statefulset.yaml similarity index 100% rename from docs/tutorials/stateful-application/cassandra/cassandra-statefulset.yaml rename to content/en/docs/tutorials/stateful-application/cassandra/cassandra-statefulset.yaml diff --git a/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md b/content/en/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md similarity index 89% rename from docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md rename to content/en/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md index f5158a3aca023..d84d40df210bc 100644 --- a/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md +++ b/content/en/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md @@ -2,33 +2,36 @@ title: "Example: Deploying WordPress and MySQL with Persistent Volumes" reviewers: - ahmetb +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} This tutorial shows you how to deploy a WordPress site and a MySQL database using Minikube. Both applications use PersistentVolumes and PersistentVolumeClaims to store data. A [PersistentVolume](/docs/concepts/storage/persistent-volumes/) (PV) is a piece of storage in the cluster that has been manually provisioned by an administrator, or dynamically provisioned by Kubernetes using a [StorageClass](/docs/concepts/storage/storage-classes). A [PersistentVolumeClaim](/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims) (PVC) is a request for storage by a user that can be fulfilled by a PV. PersistentVolumes and PersistentVolumeClaims are independent from Pod lifecycles and preserve data through restarting, rescheduling, and even deleting Pods. +{{< warning >}} **Warning:** This deployment is not suitable for production use cases, as it uses single instance WordPress and MySQL Pods. Consider using [WordPress Helm Chart](https://github.com/kubernetes/charts/tree/master/stable/wordpress) to deploy WordPress in production. -{: .warning} +{{< /warning >}} +{{< note >}} **Note:** The files provided in this tutorial are using GA Deployment APIs and are specific to kubernetes version 1.9 and later. If you wish to use this tutorial with an earlier version of Kubernetes, please update the API version appropriately, or reference earlier versions of this tutorial. -{: .note} +{{< /note >}} -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Create PersistentVolumeClaims and PersistentVolumes * Create a Secret * Deploy MySQL * Deploy WordPress * Clean up -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} Download the following configuration files: @@ -36,9 +39,9 @@ Download the following configuration files: 1. [wordpress-deployment.yaml](/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml) -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Create PersistentVolumeClaims and PersistentVolumes @@ -48,14 +51,17 @@ Many cluster environments have a default StorageClass installed. When a Storage When a PersistentVolumeClaim is created, a PersistentVolume is dynamically provisioned based on the StorageClass configuration. +{{< warning >}} **Warning:** In local clusters, the default StorageClass uses the `hostPath` provisioner. `hostPath` volumes are only suitable for development and testing. With `hostPath` volumes, your data lives in `/tmp` on the node the Pod is scheduled onto and does not move between nodes. If a Pod dies and gets scheduled to another node in the cluster, or the node is rebooted, the data is lost. -{: .warning} +{{< /warning >}} +{{< note >}} **Note:** If you are bringing up a cluster that needs to use the `hostPath` provisioner, the `--enable-hostpath-provisioner` flag must be set in the `controller-manager` component. -{: .note} +{{< /note >}} +{{< note >}} **Note:** If you have a Kubernetes cluster running on Google Kubernetes Engine, please follow [this guide](https://cloud.google.com/kubernetes-engine/docs/tutorials/persistent-disk). -{: .note} +{{< /note >}} ## Create a Secret for MySQL Password @@ -65,8 +71,9 @@ A [Secret](/docs/concepts/configuration/secret/) is an object that stores a piec kubectl create secret generic mysql-pass --from-literal=password=YOUR_PASSWORD + {{< note >}} **Note:** Replace `YOUR_PASSWORD` with the password you want to apply. - {: .note} + {{< /note >}} 2. Verify that the Secret exists by running the following command: @@ -77,14 +84,15 @@ A [Secret](/docs/concepts/configuration/secret/) is an object that stores a piec NAME TYPE DATA AGE mysql-pass Opaque 1 42s + {{< note >}} **Note:** To protect the Secret from exposure, neither `get` nor `describe` show its contents. - {: .note} + {{< /note >}} ## Deploy MySQL The following manifest describes a single-instance MySQL Deployment. The MySQL container mounts the PersistentVolume at /var/lib/mysql. The `MYSQL_ROOT_PASSWORD` environment variable sets the database password from the Secret. -{% include code.html language="yaml" file="mysql-wordpress-persistent-volume/mysql-deployment.yaml" ghlink="/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml" %} +{{< code file="mysql-wordpress-persistent-volume/mysql-deployment.yaml" >}} 1. Deploy MySQL from the `mysql-deployment.yaml` file: @@ -94,8 +102,9 @@ The following manifest describes a single-instance MySQL Deployment. The MySQL c kubectl get pvc + {{< note >}} **Note:** It can take up to a few minutes for the PVs to be provisioned and bound. - {: .note} + {{< /note >}} The response should be like this: @@ -106,8 +115,9 @@ The following manifest describes a single-instance MySQL Deployment. The MySQL c kubectl get pods + {{< note >}} **Note:** It can take up to a few minutes for the Pod's Status to be `RUNNING`. - {: .note} + {{< /note >}} The response should be like this: @@ -118,7 +128,7 @@ The following manifest describes a single-instance MySQL Deployment. The MySQL c The following manifest describes a single-instance WordPress Deployment and Service. It uses many of the same features like a PVC for persistent storage and a Secret for the password. But it also uses a different setting: `type: NodePort`. This setting exposes WordPress to traffic from outside of the cluster. -{% include code.html language="yaml" file="mysql-wordpress-persistent-volume/wordpress-deployment.yaml" ghlink="/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml" %} +{{< code file="mysql-wordpress-persistent-volume/wordpress-deployment.yaml" >}} 1. Create a WordPress Service and Deployment from the `wordpress-deployment.yaml` file: @@ -128,8 +138,9 @@ The following manifest describes a single-instance WordPress Deployment and Serv kubectl get pvc + {{< note >}} **Note:** It can take up to a few minutes for the PVs to be provisioned and bound. - {: .note} + {{< /note >}} The response should be like this: @@ -145,8 +156,9 @@ The following manifest describes a single-instance WordPress Deployment and Serv NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE wordpress 10.0.0.89 80:32406/TCP 4m + {{< note >}} **Note:** Minikube can only expose Services through `NodePort`.

The `EXTERNAL-IP` is always ``. - {: .note} + {{< /note >}} 4. Run the following command to get the IP Address for the WordPress Service: @@ -162,12 +174,13 @@ The following manifest describes a single-instance WordPress Deployment and Serv ![wordpress-init](https://raw.githubusercontent.com/kubernetes/examples/master/mysql-wordpress-pd/WordPress.png) + {{< warning >}} **Warning:** Do not leave your WordPress installation on this page. If another user finds it, they can set up a website on your instance and use it to serve malicious content.

Either install WordPress by creating a username and password or delete your instance. - {: .warning} + {{< /warning >}} -{% endcapture %} +{{% /capture %}} -{% capture cleanup %} +{{% capture cleanup %}} 1. Run the following command to delete your Secret: @@ -182,15 +195,15 @@ The following manifest describes a single-instance WordPress Deployment and Serv kubectl delete pvc -l app=wordpress -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [Introspection and Debugging](/docs/tasks/debug-application-cluster/debug-application-introspection/) * Learn more about [Jobs](/docs/concepts/workloads/controllers/jobs-run-to-completion/) * Learn more about [Port Forwarding](/docs/tasks/access-application-cluster/port-forward-access-application-cluster/) * Learn how to [Get a Shell to a Container](/docs/tasks/debug-application-cluster/get-shell-running-container/) -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml b/content/en/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml similarity index 100% rename from docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml rename to content/en/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml diff --git a/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml b/content/en/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml similarity index 100% rename from docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml rename to content/en/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml diff --git a/docs/tutorials/stateful-application/web.yaml b/content/en/docs/tutorials/stateful-application/web.yaml similarity index 100% rename from docs/tutorials/stateful-application/web.yaml rename to content/en/docs/tutorials/stateful-application/web.yaml diff --git a/docs/tutorials/stateful-application/webp.yaml b/content/en/docs/tutorials/stateful-application/webp.yaml similarity index 100% rename from docs/tutorials/stateful-application/webp.yaml rename to content/en/docs/tutorials/stateful-application/webp.yaml diff --git a/docs/tutorials/stateful-application/zookeeper.md b/content/en/docs/tutorials/stateful-application/zookeeper.md similarity index 98% rename from docs/tutorials/stateful-application/zookeeper.md rename to content/en/docs/tutorials/stateful-application/zookeeper.md index cf72295b685f8..5c40b966c634b 100644 --- a/docs/tutorials/stateful-application/zookeeper.md +++ b/content/en/docs/tutorials/stateful-application/zookeeper.md @@ -8,16 +8,17 @@ reviewers: - kow3ns - smarterclayton title: Running ZooKeeper, A Distributed System Coordinator +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} This tutorial demonstrates running [Apache Zookeeper](https://zookeeper.apache.org) on Kubernetes using [StatefulSets](/docs/concepts/workloads/controllers/statefulset/), [PodDisruptionBudgets](/docs/concepts/workloads/pods/disruptions/#specifying-a-poddisruptionbudget), and [PodAntiAffinity](/docs/user-guide/node-selection/#inter-pod-affinity-and-anti-affinity-beta-feature). -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} Before starting this tutorial, you should be familiar with the following Kubernetes concepts. @@ -26,7 +27,7 @@ Kubernetes concepts. - [Cluster DNS](/docs/concepts/services-networking/dns-pod-service/) - [Headless Services](/docs/concepts/services-networking/service/#headless-services) - [PersistentVolumes](/docs/concepts/storage/volumes/) -- [PersistentVolume Provisioning](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/staging/persistent-volume-provisioning/) +- [PersistentVolume Provisioning](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/persistent-volume-provisioning/) - [StatefulSets](/docs/concepts/workloads/controllers/statefulset/) - [PodDisruptionBudgets](/docs/concepts/workloads/pods/disruptions/#specifying-a-poddisruptionbudget) - [PodAntiAffinity](/docs/user-guide/node-selection/#inter-pod-affinity-and-anti-affinity-beta-feature) @@ -38,18 +39,18 @@ This tutorial assumes that you have configured your cluster to dynamically provi PersistentVolumes. If your cluster is not configured to do so, you will have to manually provision three 20 GiB volumes before starting this tutorial. -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} After this tutorial, you will know the following. - How to deploy a ZooKeeper ensemble using StatefulSet. - How to consistently configure the ensemble using ConfigMaps. - How to spread the deployment of ZooKeeper servers in the ensemble. - How to use PodDisruptionBudgets to ensure service availability during planned maintenance. - {% endcapture %} + {{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ### ZooKeeper Basics @@ -74,7 +75,7 @@ a [Service](/docs/concepts/services-networking/service/), a [PodDisruptionBudget](/docs/concepts/workloads/pods/disruptions//#specifying-a-poddisruptionbudget), and a [StatefulSet](/docs/concepts/workloads/controllers/statefulset/). -{% include code.html language="yaml" file="zookeeper.yaml" ghlink="/docs/tutorials/stateful-application/zookeeper.yaml" %} +{{< code file="zookeeper.yaml" >}} Open a terminal, and use the [`kubectl apply`](/docs/reference/generated/kubectl/kubectl-commands/#apply) command to create the @@ -1083,14 +1084,14 @@ node "kubernetes-minion-group-ixsl" uncordoned You can use `kubectl drain` in conjunction with `PodDisruptionBudgets` to ensure that your services remain available during maintenance. If drain is used to cordon nodes and evict pods prior to taking the node offline for maintenance, services that express a disruption budget will have that budget respected. You should always allocate additional capacity for critical services so that their Pods can be immediately rescheduled. -{% endcapture %} +{{% /capture %}} -{% capture cleanup %} +{{% capture cleanup %}} - Use `kubectl uncordon` to uncordon all the nodes in your cluster. - You will need to delete the persistent storage media for the PersistentVolumes used in this tutorial. Follow the necessary steps, based on your environment, storage configuration, and provisioning method, to ensure that all storage is reclaimed. - {% endcapture %} - {% include templates/tutorial.md %} + {{% /capture %}} + diff --git a/docs/tutorials/stateful-application/zookeeper.yaml b/content/en/docs/tutorials/stateful-application/zookeeper.yaml similarity index 100% rename from docs/tutorials/stateful-application/zookeeper.yaml rename to content/en/docs/tutorials/stateful-application/zookeeper.yaml diff --git a/docs/tutorials/stateless-application/Dockerfile b/content/en/docs/tutorials/stateless-application/Dockerfile similarity index 100% rename from docs/tutorials/stateless-application/Dockerfile rename to content/en/docs/tutorials/stateless-application/Dockerfile diff --git a/content/en/docs/tutorials/stateless-application/_index.md b/content/en/docs/tutorials/stateless-application/_index.md new file mode 100755 index 0000000000000..5bc25fcd339f5 --- /dev/null +++ b/content/en/docs/tutorials/stateless-application/_index.md @@ -0,0 +1,5 @@ +--- +title: "Stateless Applications" +weight: 90 +--- + diff --git a/docs/tutorials/stateless-application/deployment.yaml b/content/en/docs/tutorials/stateless-application/deployment.yaml similarity index 100% rename from docs/tutorials/stateless-application/deployment.yaml rename to content/en/docs/tutorials/stateless-application/deployment.yaml diff --git a/docs/tutorials/stateless-application/expose-external-ip-address.md b/content/en/docs/tutorials/stateless-application/expose-external-ip-address.md similarity index 94% rename from docs/tutorials/stateless-application/expose-external-ip-address.md rename to content/en/docs/tutorials/stateless-application/expose-external-ip-address.md index 9dd6366e1af0c..ed7d0aceb34d4 100644 --- a/docs/tutorials/stateless-application/expose-external-ip-address.md +++ b/content/en/docs/tutorials/stateless-application/expose-external-ip-address.md @@ -1,16 +1,17 @@ --- title: Exposing an External IP Address to Access an Application in a Cluster +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} This page shows how to create a Kubernetes Service object that exposes an external IP address. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * Install [kubectl](/docs/tasks/tools/install-kubectl/). @@ -22,19 +23,19 @@ external IP address. * Configure `kubectl` to communicate with your Kubernetes API server. For instructions, see the documentation for your cloud provider. -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Run five instances of a Hello World application. * Create a Service object that exposes an external IP address. * Use the Service object to access the running application. -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Creating a service for an application running in five pods @@ -132,10 +133,10 @@ external IP address. Hello Kubernetes! -{% endcapture %} +{{% /capture %}} -{% capture cleanup %} +{{% capture cleanup %}} To delete the Service, enter this command: @@ -146,15 +147,15 @@ the Hello World application, enter this command: kubectl delete deployment hello-world -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} Learn more about [connecting applications with services](/docs/concepts/services-networking/connect-applications-service/). -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tutorials/stateless-application/guestbook.md b/content/en/docs/tutorials/stateless-application/guestbook.md similarity index 89% rename from docs/tutorials/stateless-application/guestbook.md rename to content/en/docs/tutorials/stateless-application/guestbook.md index a482cf7b42526..32796f507f516 100644 --- a/docs/tutorials/stateless-application/guestbook.md +++ b/content/en/docs/tutorials/stateless-application/guestbook.md @@ -2,28 +2,29 @@ title: "Example: Deploying PHP Guestbook application with Redis" reviewers: - ahmetb +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} This tutorial shows you how to build and deploy a simple, multi-tier web application using Kubernetes and [Docker](https://www.docker.com/). This example consists of the following components: * A single-instance [Redis](https://redis.io/) master to store guestbook entries * Multiple replicated Redis instances to serve reads * Multiple web frontend instances -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Start up a Redis master. * Start up Redis slaves. * Start up the guestbook frontend. * Expose and view the Frontend Service. * Clean up. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} Download the following configuration files: 1. [redis-master-deployment.yaml](/docs/tutorials/stateless-application/guestbook/redis-master-deployment.yaml) @@ -33,9 +34,9 @@ Download the following configuration files: 1. [frontend-deployment.yaml](/docs/tutorials/stateless-application/guestbook/frontend-deployment.yaml) 1. [frontend-service.yaml](/docs/tutorials/stateless-application/guestbook/frontend-service.yaml) -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Start up the Redis Master @@ -50,7 +51,7 @@ The manifest file, included below, specifies a Deployment controller that runs a kubectl apply -f redis-master-deployment.yaml - {% include code.html language="yaml" file="guestbook/redis-master-deployment.yaml" ghlink="/docs/tutorials/stateless-application/guestbook/redis-master-deployment.yaml" %} + {{< code file="guestbook/redis-master-deployment.yaml" >}} 3. Query the list of Pods to verify that the Redis Master Pod is running: @@ -65,8 +66,9 @@ The manifest file, included below, specifies a Deployment controller that runs a kubectl logs -f POD-NAME +{{< note >}} **Note:** Replace POD-NAME with the name of your Pod. -{: .note} +{{< /note >}} ### Creating the Redis Master Service @@ -76,10 +78,11 @@ The guestbook applications needs to communicate to the Redis master to write its kubectl apply -f redis-master-service.yaml - {% include code.html language="yaml" file="guestbook/redis-master-service.yaml" ghlink="/docs/tutorials/stateless-application/guestbook/redis-master-service.yaml" %} + {{< code file="guestbook/redis-master-service.yaml" >}} +{{< note >}} **Note:** This manifest file creates a Service named `redis-master` with a set of labels that match the labels previously defined, so the Service routes network traffic to the Redis master Pod. -{: .note} +{{< /note >}} 2. Query the list of Services to verify that the Redis Master Service is running: @@ -105,7 +108,7 @@ If there are not any replicas running, this Deployment would start the two repli kubectl apply -f redis-slave-deployment.yaml - {% include code.html language="yaml" file="guestbook/redis-slave-deployment.yaml" ghlink="/docs/tutorials/stateless-application/guestbook/redis-slave-deployment.yaml" %} + {{< code file="guestbook/redis-slave-deployment.yaml" >}} 2. Query the list of Pods to verify that the Redis Slave Pods are running: @@ -126,7 +129,7 @@ The guestbook application needs to communicate to Redis slaves to read data. To kubectl apply -f redis-slave-service.yaml - {% include code.html language="yaml" file="guestbook/redis-slave-service.yaml" ghlink="/docs/tutorials/stateless-application/guestbook/redis-slave-service.yaml" %} + {{< code file="guestbook/redis-slave-service.yaml" >}} 2. Query the list of Services to verify that the Redis Slave Service is running: @@ -149,7 +152,7 @@ The guestbook application has a web frontend serving the HTTP requests written i kubectl apply -f frontend-deployment.yaml - {% include code.html language="yaml" file="guestbook/frontend-deployment.yaml" ghlink="/docs/tutorials/stateless-application/guestbook/frontend-deployment.yaml" %} + {{< code file="guestbook/frontend-deployment.yaml" >}} 2. Query the list of Pods to verify that the three frontend replicas are running: @@ -168,14 +171,15 @@ The `redis-slave` and `redis-master` Services you applied are only accessible wi If you want guests to be able to access your guestbook, you must configure the frontend Service to be externally visible, so a client can request the Service from outside the container cluster. Minikube can only expose Services through `NodePort`. +{{< note >}} **Note:** Some cloud providers, like Google Compute Engine or Google Kubernetes Engine, support external load balancers. If your cloud provider supports load balancers and you want to use it, simply delete or comment out `type: NodePort`, and uncomment `type: LoadBalancer`. -{: .note} +{{< /note >}} 1. Apply the frontend Service from the following `frontend-service.yaml` file: kubectl apply -f frontend-service.yaml - {% include code.html language="yaml" file="guestbook/frontend-service.yaml" ghlink="/docs/tutorials/stateless-application/guestbook/frontend-service.yaml" %} + {{< code file="guestbook/frontend-service.yaml" >}} 2. Query the list of Services to verify that the frontend Service is running: @@ -259,9 +263,9 @@ Scaling up or down is easy because your servers are defined as a Service that us redis-slave-2005841000-fpvqc 1/1 Running 0 1h redis-slave-2005841000-phfv9 1/1 Running 0 1h -{% endcapture %} +{{% /capture %}} -{% capture cleanup %} +{{% capture cleanup %}} Deleting the Deployments and Services also deletes any running Pods. Use labels to delete multiple resources with one command. 1. Run the following commands to delete all Pods, Deployments, and Services. @@ -288,13 +292,13 @@ Deleting the Deployments and Services also deletes any running Pods. Use labels No resources found. -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Complete the [Kubernetes Basics](/docs/tutorials/kubernetes-basics/) Interactive Tutorials * Use Kubernetes to create a blog using [Persistent Volumes for MySQL and Wordpress](/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/#visit-your-new-wordpress-blog) * Read more about [connecting applications](/docs/concepts/services-networking/connect-applications-service/) * Read more about [Managing Resources](/docs/concepts/cluster-administration/manage-deployment/#using-labels-effectively) -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tutorials/stateless-application/guestbook/frontend-deployment.yaml b/content/en/docs/tutorials/stateless-application/guestbook/frontend-deployment.yaml similarity index 100% rename from docs/tutorials/stateless-application/guestbook/frontend-deployment.yaml rename to content/en/docs/tutorials/stateless-application/guestbook/frontend-deployment.yaml diff --git a/docs/tutorials/stateless-application/guestbook/frontend-service.yaml b/content/en/docs/tutorials/stateless-application/guestbook/frontend-service.yaml similarity index 100% rename from docs/tutorials/stateless-application/guestbook/frontend-service.yaml rename to content/en/docs/tutorials/stateless-application/guestbook/frontend-service.yaml diff --git a/docs/tutorials/stateless-application/guestbook/redis-master-deployment.yaml b/content/en/docs/tutorials/stateless-application/guestbook/redis-master-deployment.yaml similarity index 100% rename from docs/tutorials/stateless-application/guestbook/redis-master-deployment.yaml rename to content/en/docs/tutorials/stateless-application/guestbook/redis-master-deployment.yaml diff --git a/docs/tutorials/stateless-application/guestbook/redis-master-service.yaml b/content/en/docs/tutorials/stateless-application/guestbook/redis-master-service.yaml similarity index 100% rename from docs/tutorials/stateless-application/guestbook/redis-master-service.yaml rename to content/en/docs/tutorials/stateless-application/guestbook/redis-master-service.yaml diff --git a/docs/tutorials/stateless-application/guestbook/redis-slave-deployment.yaml b/content/en/docs/tutorials/stateless-application/guestbook/redis-slave-deployment.yaml similarity index 100% rename from docs/tutorials/stateless-application/guestbook/redis-slave-deployment.yaml rename to content/en/docs/tutorials/stateless-application/guestbook/redis-slave-deployment.yaml diff --git a/docs/tutorials/stateless-application/guestbook/redis-slave-service.yaml b/content/en/docs/tutorials/stateless-application/guestbook/redis-slave-service.yaml similarity index 100% rename from docs/tutorials/stateless-application/guestbook/redis-slave-service.yaml rename to content/en/docs/tutorials/stateless-application/guestbook/redis-slave-service.yaml diff --git a/docs/tutorials/stateless-application/hello-minikube.md b/content/en/docs/tutorials/stateless-application/hello-minikube.md similarity index 95% rename from docs/tutorials/stateless-application/hello-minikube.md rename to content/en/docs/tutorials/stateless-application/hello-minikube.md index 55100e364cca4..69761690d0757 100644 --- a/docs/tutorials/stateless-application/hello-minikube.md +++ b/content/en/docs/tutorials/stateless-application/hello-minikube.md @@ -1,8 +1,9 @@ --- title: Hello Minikube +content_template: templates/tutorial --- -{% capture overview %} +{{% capture overview %}} The goal of this tutorial is for you to turn a simple Hello World Node.js app into an application running on Kubernetes. The tutorial shows you how to @@ -10,9 +11,9 @@ take code that you have developed on your machine, turn it into a Docker container image and then run that image on [Minikube](/docs/getting-started-guides/minikube). Minikube provides a simple way of running Kubernetes on your local machine for free. -{% endcapture %} +{{% /capture %}} -{% capture objectives %} +{{% capture objectives %}} * Run a hello world Node.js application. * Deploy the application to Minikube. @@ -20,9 +21,9 @@ Minikube provides a simple way of running Kubernetes on your local machine for f * Update the application image. -{% endcapture %} +{{% /capture %}} -{% capture prerequisites %} +{{% capture prerequisites %}} * For OS X, you need [Homebrew](https://brew.sh) to install the `xhyve` driver. @@ -33,9 +34,9 @@ driver. [Docker for Mac](https://docs.docker.com/engine/installation/mac/). -{% endcapture %} +{{% /capture %}} -{% capture lessoncontent %} +{{% capture lessoncontent %}} ## Create a Minikube cluster @@ -133,7 +134,7 @@ minikube dashboard The next step is to write the application. Save this code in a folder named `hellonode` with the filename `server.js`: -{% include code.html language="js" file="server.js" ghlink="/docs/tutorials/stateless-application/server.js" %} +{{< code language="js" file="server.js" >}} Run your application: @@ -153,7 +154,7 @@ Create a file, also in the `hellonode` folder, named `Dockerfile`. A Dockerfile the image that you want to build. You can build a Docker container image by extending an existing image. The image in this tutorial extends an existing Node.js image. -{% include code.html language="conf" file="Dockerfile" ghlink="/docs/tutorials/stateless-application/Dockerfile" %} +{{< code language="conf" file="Dockerfile" >}} This recipe for the Docker image starts from the official Node.js LTS image found in the Docker registry, exposes port 8080, copies your `server.js` file @@ -412,15 +413,15 @@ Optionally, delete the Minikube VM: minikube delete ``` -{% endcapture %} +{{% /capture %}} -{% capture whatsnext %} +{{% capture whatsnext %}} * Learn more about [Deployment objects](/docs/concepts/workloads/controllers/deployment/). * Learn more about [Deploying applications](/docs/user-guide/deploying-applications/). * Learn more about [Service objects](/docs/concepts/services-networking/service/). -{% endcapture %} +{{% /capture %}} + -{% include templates/tutorial.md %} diff --git a/docs/tutorials/stateless-application/server.js b/content/en/docs/tutorials/stateless-application/server.js similarity index 100% rename from docs/tutorials/stateless-application/server.js rename to content/en/docs/tutorials/stateless-application/server.js diff --git a/docs/update-user-guide-links.py b/content/en/docs/update-user-guide-links.py similarity index 100% rename from docs/update-user-guide-links.py rename to content/en/docs/update-user-guide-links.py diff --git a/docs/user-guide/OWNERS b/content/en/docs/user-guide/OWNERS similarity index 100% rename from docs/user-guide/OWNERS rename to content/en/docs/user-guide/OWNERS diff --git a/content/en/docs/user-guide/_index.md b/content/en/docs/user-guide/_index.md new file mode 100644 index 0000000000000..cfcbab5728fcb --- /dev/null +++ b/content/en/docs/user-guide/_index.md @@ -0,0 +1,3 @@ +--- +toc_hide: true +--- diff --git a/docs/user-guide/walkthrough/OWNERS b/content/en/docs/user-guide/walkthrough/OWNERS similarity index 100% rename from docs/user-guide/walkthrough/OWNERS rename to content/en/docs/user-guide/walkthrough/OWNERS diff --git a/docs/user-guide/walkthrough/index.md b/content/en/docs/user-guide/walkthrough/_index.md similarity index 94% rename from docs/user-guide/walkthrough/index.md rename to content/en/docs/user-guide/walkthrough/_index.md index 9923e1fd02d85..a76e501197622 100644 --- a/docs/user-guide/walkthrough/index.md +++ b/content/en/docs/user-guide/walkthrough/_index.md @@ -3,18 +3,18 @@ reviewers: - eparis - mikedanese title: Kubernetes 101 +toc_hide: true --- ## Kubectl CLI and Pods For Kubernetes 101, we will cover kubectl, pods, volumes, and multiple containers -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} In order for the kubectl usage examples to work, make sure you have an example directory locally, either from [a release](https://github.com/kubernetes/kubernetes/releases) or the latest `.yaml` files located [here](https://github.com/kubernetes/website/tree/master/docs/user-guide/walkthrough). -* TOC -{:toc} +{{< toc >}} ## Kubectl CLI @@ -36,7 +36,7 @@ For more information, see [Pods](/docs/concepts/workloads/pods/pod/). The simplest pod definition describes the deployment of a single container. For example, an nginx web server pod might be defined as: -{% include code.html language="yaml" file="pod-nginx.yaml" ghlink="/docs/user-guide/walkthrough/pod-nginx.yaml" %} +{{< code file="pod-nginx.yaml" >}} A pod definition is a declaration of a _desired state_. Desired state is a very important concept in the Kubernetes model. Many things present a desired state to the system, and Kubernetes' ensures that the current state matches the desired state. For example, when you create a pod and declare that the containers in it to be running. If the containers happen not to be running because of a program failure, Kubernetes continues to (re-)create the pod in order to drive the pod to the desired state. This process continues until you delete the pod. @@ -62,12 +62,11 @@ On most providers, the pod IPs are not externally accessible. The easiest way to If the IP of the pod is accessible, you can access its http endpoint with wget on port 80: ```shell -{% raw %} $ kubectl run busybox --image=busybox --restart=Never --tty -i --generator=run-pod/v1 --env "POD_IP=$(kubectl get pod nginx -o go-template='{{.status.podIP}}')" u@busybox$ wget -qO- http://$POD_IP # Run in the busybox container u@busybox$ exit # Exit the busybox container $ kubectl delete pod busybox # Clean up the pod we created with "kubectl run" -{% endraw %} + ``` To delete a pod named nginx: @@ -107,7 +106,7 @@ volumeMounts: Here is an example of Redis pod definition with a persistent storage volume ([pod-redis.yaml](/docs/user-guide/walkthrough/pod-redis.yaml)): -{% include code.html language="yaml" file="pod-redis.yaml" ghlink="/docs/user-guide/walkthrough/pod-redis.yaml" %} +{{< code file="pod-redis.yaml" >}} Where: @@ -164,4 +163,4 @@ Finally, we have also introduced an environment variable to the `git-monitor` co ## What's Next? Continue on to [Kubernetes 201](/docs/user-guide/walkthrough/k8s201/) or -for a complete application see the [guestbook example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/guestbook/) +for a complete application see the [guestbook example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/guestbook/) diff --git a/docs/user-guide/walkthrough/deployment-update.yaml b/content/en/docs/user-guide/walkthrough/deployment-update.yaml similarity index 100% rename from docs/user-guide/walkthrough/deployment-update.yaml rename to content/en/docs/user-guide/walkthrough/deployment-update.yaml diff --git a/docs/user-guide/walkthrough/deployment.yaml b/content/en/docs/user-guide/walkthrough/deployment.yaml similarity index 100% rename from docs/user-guide/walkthrough/deployment.yaml rename to content/en/docs/user-guide/walkthrough/deployment.yaml diff --git a/docs/user-guide/walkthrough/k8s201.md b/content/en/docs/user-guide/walkthrough/k8s201.md similarity index 89% rename from docs/user-guide/walkthrough/k8s201.md rename to content/en/docs/user-guide/walkthrough/k8s201.md index 8774b718f442b..8fbb6017fc7a4 100644 --- a/docs/user-guide/walkthrough/k8s201.md +++ b/content/en/docs/user-guide/walkthrough/k8s201.md @@ -11,12 +11,12 @@ If you went through [Kubernetes 101](/docs/user-guide/walkthrough/), you learned For Kubernetes 201, we will pick up where 101 left off and cover some slightly more advanced topics in Kubernetes, related to application productionization, Deployment and scaling. -{% include task-tutorial-prereqs.md %} +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} In order for the kubectl usage examples to work, make sure you have an examples directory locally, either from [a release](https://github.com/kubernetes/kubernetes/releases) or [the source](https://github.com/kubernetes/kubernetes). * TOC -{:toc} +{{< toc >}} ## Labels @@ -32,7 +32,7 @@ To add a label, add a labels section under metadata in the Pod definition: For example, here is the nginx Pod definition with labels ([pod-nginx-with-label.yaml](/docs/user-guide/walkthrough/pod-nginx-with-label.yaml)): -{% include code.html language="yaml" file="pod-nginx-with-label.yaml" ghlink="/docs/user-guide/walkthrough/pod-nginx-with-label.yaml" %} +{{< code file="pod-nginx-with-label.yaml" >}} Create the labeled Pod ([pod-nginx-with-label.yaml](/docs/user-guide/walkthrough/pod-nginx-with-label.yaml)): @@ -66,7 +66,7 @@ A Deployment object defines a Pod creation template (a "cookie-cutter" if you wi Here is a Deployment that instantiates two nginx Pods: -{% include code.html language="yaml" file="deployment.yaml" ghlink="/docs/user-guide/walkthrough/deployment.yaml" %} +{{< code file="deployment.yaml" >}} #### Deployment Management @@ -92,7 +92,7 @@ kubectl get pods -l app=nginx Upgrade the nginx container from 1.7.9 to 1.8 by changing the Deployment and calling `apply`. The following config contains the desired changes: -{% include code.html language="yaml" file="deployment-update.yaml" ghlink="/docs/user-guide/walkthrough/deployment-update.yaml" %} +{{< code file="deployment-update.yaml" >}} ```shell kubectl apply -f https://k8s.io/docs/user-guide/walkthrough//deployment-update.yaml @@ -119,7 +119,7 @@ Once you have a replicated set of Pods, you need an abstraction that enables con For example, here is a service that balances across the Pods created in the previous nginx Deployment example ([service.yaml](/docs/user-guide/walkthrough/service.yaml)): -{% include code.html language="yaml" file="service.yaml" ghlink="/docs/user-guide/walkthrough/service.yaml" %} +{{< code file="service.yaml" >}} #### Service Management @@ -141,7 +141,7 @@ On most providers, the service IPs are not externally accessible. The easiest wa Provided the service IP is accessible, you should be able to access its http endpoint with wget on the exposed port: ```shell -{% raw %} + $ export SERVICE_IP=$(kubectl get service nginx-service -o go-template='{{.spec.clusterIP}}') $ export SERVICE_PORT=$(kubectl get service nginx-service -o go-template='{{(index .spec.ports 0).port}}') $ echo "$SERVICE_IP:$SERVICE_PORT" @@ -149,7 +149,7 @@ $ kubectl run busybox --generator=run-pod/v1 --image=busybox --restart=Never -- u@busybox$ wget -qO- http://$SERVICE_IP:$SERVICE_PORT # Run in the busybox container u@busybox$ exit # Exit the busybox container $ kubectl delete pod busybox # Clean up the pod we created with "kubectl run" -{% endraw %} + ``` The service definition [exposed the Nginx Service](/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/) as port 8000 (`$SERVCE_PORT`). We can also access the service from a host running Kubernetes using that port: @@ -224,15 +224,15 @@ The container health checks are configured in the `livenessProbe` section of you Here is an example config for a Pod with an HTTP health check ([pod-with-http-healthcheck.yaml](/docs/user-guide/walkthrough/pod-with-http-healthcheck.yaml)): -{% include code.html language="yaml" file="pod-with-http-healthcheck.yaml" ghlink="/docs/user-guide/walkthrough/pod-with-http-healthcheck.yaml" %} +{{< code file="pod-with-http-healthcheck.yaml" >}} And here is an example config for a Pod with a TCP Socket health check ([pod-with-tcp-socket-healthcheck.yaml](/docs/user-guide/walkthrough/pod-with-tcp-socket-healthcheck.yaml)): -{% include code.html language="yaml" file="pod-with-tcp-socket-healthcheck.yaml" ghlink="/docs/user-guide/walkthrough/pod-with-tcp-socket-healthcheck.yaml" %} +{{< code file="pod-with-tcp-socket-healthcheck.yaml" >}} For more information about health checking, see [Container Probes](/docs/user-guide/pod-states/#container-probes). ## What's Next? -For a complete application see the [guestbook example](https://github.com/kubernetes/examples/tree/{{page.githubbranch}}/guestbook/). +For a complete application see the [guestbook example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/guestbook/). diff --git a/docs/user-guide/walkthrough/pod-nginx-with-label.yaml b/content/en/docs/user-guide/walkthrough/pod-nginx-with-label.yaml similarity index 100% rename from docs/user-guide/walkthrough/pod-nginx-with-label.yaml rename to content/en/docs/user-guide/walkthrough/pod-nginx-with-label.yaml diff --git a/docs/user-guide/walkthrough/pod-nginx.yaml b/content/en/docs/user-guide/walkthrough/pod-nginx.yaml similarity index 100% rename from docs/user-guide/walkthrough/pod-nginx.yaml rename to content/en/docs/user-guide/walkthrough/pod-nginx.yaml diff --git a/docs/user-guide/walkthrough/pod-redis.yaml b/content/en/docs/user-guide/walkthrough/pod-redis.yaml similarity index 100% rename from docs/user-guide/walkthrough/pod-redis.yaml rename to content/en/docs/user-guide/walkthrough/pod-redis.yaml diff --git a/docs/user-guide/walkthrough/pod-with-http-healthcheck.yaml b/content/en/docs/user-guide/walkthrough/pod-with-http-healthcheck.yaml similarity index 100% rename from docs/user-guide/walkthrough/pod-with-http-healthcheck.yaml rename to content/en/docs/user-guide/walkthrough/pod-with-http-healthcheck.yaml diff --git a/docs/user-guide/walkthrough/pod-with-tcp-socket-healthcheck.yaml b/content/en/docs/user-guide/walkthrough/pod-with-tcp-socket-healthcheck.yaml similarity index 100% rename from docs/user-guide/walkthrough/pod-with-tcp-socket-healthcheck.yaml rename to content/en/docs/user-guide/walkthrough/pod-with-tcp-socket-healthcheck.yaml diff --git a/docs/user-guide/walkthrough/service.yaml b/content/en/docs/user-guide/walkthrough/service.yaml similarity index 100% rename from docs/user-guide/walkthrough/service.yaml rename to content/en/docs/user-guide/walkthrough/service.yaml diff --git a/content/en/docs/user-journeys/_index.md b/content/en/docs/user-journeys/_index.md new file mode 100644 index 0000000000000..cfcbab5728fcb --- /dev/null +++ b/content/en/docs/user-journeys/_index.md @@ -0,0 +1,3 @@ +--- +toc_hide: true +--- diff --git a/content/en/docs/user-journeys/users/application-developer/_index.md b/content/en/docs/user-journeys/users/application-developer/_index.md new file mode 100755 index 0000000000000..cb7beac793b94 --- /dev/null +++ b/content/en/docs/user-journeys/users/application-developer/_index.md @@ -0,0 +1,5 @@ +--- +title: "Application Developer" +weight: 10 +--- + diff --git a/content/en/docs/user-journeys/users/application-developer/advanced.md b/content/en/docs/user-journeys/users/application-developer/advanced.md new file mode 100644 index 0000000000000..c298645d6fad7 --- /dev/null +++ b/content/en/docs/user-journeys/users/application-developer/advanced.md @@ -0,0 +1,118 @@ +--- +reviewers: +- chenopis +layout: docsportal +css: /css/style_user_journeys.css +js: https://use.fontawesome.com/4bcc658a89.js, https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js +title: Advanced Topics +track: "USERS › APPLICATION DEVELOPER › ADVANCED" +content_template: templates/user-journey-content +--- + +{{% capture overview %}} + +{{< note >}} +This page assumes that you're familiar with core Kubernetes concepts, and are comfortable deploying your own apps. If not, you should review the {{< link text="Intermediate App Developer" url="/docs/user-journeys/users/application-developer/intermediate/" >}} topics first. +{{< /note >}} +After checking out the current page and its linked sections, you should have a better understanding of the following: +* Advanced features that you can leverage in your application +* The various ways of extending the Kubernetes API + +{{% /capture %}} + + +{{% capture body %}} + +## Deploy an application with advanced features + +Now you know the set of API objects that Kubernetes provides. Understanding the difference between a {{< glossary_tooltip term_id="daemonset" >}} and a {{< glossary_tooltip term_id="deployment" >}} is oftentimes sufficient for app deployment. That being said, it's also worth familiarizing yourself with Kubernetes's lesser known features. They can be quite powerful when applied to the right use cases. + +#### Container-level features + +As you may know, it's an antipattern to migrate an entire app (e.g. containerized Rails app, MySQL database, and all) into a single Pod. That being said, there are some very useful patterns that go beyond a 1:1 correspondence between a container and its Pod: +* **Sidecar container**: Although your Pod should still have a single main container, you can add a secondary container that acts as a helper (see a {{< link text="logging example" url="/docs/concepts/cluster-administration/logging/#sidecar-container-with-a-logging-agent" >}}). Two containers within a single Pod can communicate {{< link text="via a shared volume" url="/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/" >}}. +* **Init containers**: *Init containers* run before any of a Pod's *app containers* (such as main and sidecar containers). {{< link text="Read more" url="/docs/concepts/workloads/pods/init-containers/" >}}, see an {{< link text="nginx server example" url="/docs/tasks/configure-pod-container/configure-pod-initialization/" >}}, and {{< link text="learn how to debug these containers" url="/docs/tasks/debug-application-cluster/debug-init-containers/" >}}. + +#### Pod configuration + +Usually, you use {{< glossary_tooltip text="labels" term_id="label" >}} and {{< glossary_tooltip text="annotations" term_id="annotation" >}} to attach metadata to your resources. To inject data into your resources, you'd likely create {{< glossary_tooltip text="ConfigMaps" term_id="configmap" >}} (for nonconfidential data) or {{< glossary_tooltip text="Secrets" term_id="secret" >}} (for confidential data). + +Below are some other, lesser-known ways of configuring your resources' Pods: + +* **Taints and Tolerations** - These provide a way for nodes to "attract" or "repel" your Pods. They are often used when an application needs to be deployed onto specific hardware, such as GPUs for scientific computing. {{< link text="Read more" url="/docs/concepts/configuration/taint-and-toleration/" >}}. +* **Downward API** - This allows your containers to consume information about themselves or the cluster, without being overly coupled to the Kubernetes API server. This can be achieved with {{< link text="environment variables" url="/docs/tasks/inject-data-application/environment-variable-expose-pod-information/" >}} or {{< link text="DownwardAPIVolumeFiles" url="/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/" >}}. +* **Pod Presets** - Normally, to mount runtime requirements (such as environmental variables, ConfigMaps, and Secrets) into a resource, you specify them in the resource's configuration file. {{< link text="PodPresets" url="/docs/concepts/workloads/pods/podpreset/" >}} allow you to dynamically inject these requirements instead, when the resource is created. For instance, this allows team A to mount any number of new Secrets into the resources created by teams B and C, without requiring action from B and C. {{< link text="See an example" url="/docs/tasks/inject-data-application/podpreset/" >}}. + +#### Additional API Objects + +{{< note >}} +Before setting up the following resources, check to see if they are the responsibility of your organization's {{< glossary_tooltip text="cluster operators" term_id="cluster-operator" >}}. +{{< /note >}} +* **{{< glossary_tooltip text="Horizontal Pod Autoscaler (HPA)" term_id="horizontal-pod-autoscaler" >}}** - These resources are a great way to automate the process of scaling your application when CPU usage or other {{< link text="custom metrics" url="https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/custom-metrics-api.md" >}} spike. {{< link text="See an example" url="/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/" >}} to understand how HPAs are set up. + +* **Federated cluster objects** - If you are running an application on multiple Kubernetes clusters using *federation*, you need to deploy the federated version of the standard Kubernetes API objects. For reference, check out the guides for setting up {{< link text="Federated ConfigMaps" url="/docs/tasks/administer-federation/configmap/" >}} and {{< link text="Federated Deployments" url="/docs/tasks/administer-federation/deployment/" >}}. + +## Extend the Kubernetes API + +Kubernetes is designed with extensibility in mind. If the API resources and features mentioned above are not enough for your needs, there are ways to customize its behavior without having to modify core Kubernetes code. + +#### Understand Kubernetes's default behavior + +Before making any customizations, it's important that you understand the general abstraction behind Kubernetes API objects. Although Deployments and Secrets may seem quite different, the following concepts are true for *any* object: + +* **Kubernetes objects are a way of storing structured data about your cluster.** + In the case of Deployments, this data represents desired state (such as "How many replicas should be running?"), but it can also be general metadata (such as database credentials). +* **Kubernetes objects are modified via the {{< glossary_tooltip text="Kubernetes API" term_id="kubernetes-api" >}}**. + In other words, you can make `GET` and `POST` requests to a specific resource path (such as `/api/v1/namespaces/default/deployments`) to read and write the corresponding object type. +* **By leveraging the {{< link text="Controller pattern" url="/docs/concepts/api-extension/custom-resources/#custom-controllers" >}}, Kubernetes objects can be used to enforce desired state**. For simplicity, you can think of the Controller pattern as the following continuous loop: + +
+ 1. Check current state (number of replicas, container image, etc) + 2. Compare current state to desired state + 3. Update if there's a mismatch +
+ + These states are obtained from the Kubernetes API. + + {{< note >}} + Not all Kubernetes objects need to have a Controller. Though Deployments trigger the cluster to make state changes, ConfigMaps act purely as storage. + {{< /note >}} +#### Create Custom Resources + +Based on the ideas above, you can define a new {{< link text="Custom Resource" url="/docs/concepts/api-extension/custom-resources/#custom-resources" >}} that is just as legitimate as a Deployment. For example, you might want to define a `Backup` object for periodic backups, if `CronJobs` don't provide all the functionality you need. + +There are two main ways of setting up custom resources: +1. **Custom Resource Definitions (CRDs)** - This method requires the least amount of implementation work. See {{< link text="an example" url="/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/" >}}. +2. **API aggregation** - This method requires some {{< link text="pre-configuration" url="/docs/tasks/access-kubernetes-api/configure-aggregation-layer/" >}} before you actually {{< link text="set up a separate, extension API server" url="/docs/tasks/access-kubernetes-api/setup-extension-api-server/" >}}. + +Note that unlike standard Kubernetes objects, which rely on the built-in {{< link text="`kube-controller-manager`" url="/docs/reference/generated/kube-controller-manager/" >}}, you'll need to write and run your own {{< link text="custom controllers" url="https://github.com/kubernetes/sample-controller" >}}. + +You may also find the following info helpful: +* {{< link text="How to know if custom resources are right for your use case" url="/docs/concepts/api-extension/custom-resources/#should-i-use-a-configmap-or-a-custom-resource" >}} +* {{< link text="How to decide between CRDs and API aggregation" url="/docs/concepts/api-extension/custom-resources/#choosing-a-method-for-adding-custom-resources" >}} + +#### Service Catalog + +If you want to consume or provide complete services (rather than individual resources), **{{< glossary_tooltip text="Service Catalog" term_id="service-catalog" >}}** provides a {{< link text="specification" url="https://github.com/openservicebrokerapi/servicebroker" >}} for doing so. These services are registered using {{< glossary_tooltip text="Service Brokers" term_id="service-broker" >}} (see {{< link text="some examples" url="https://github.com/openservicebrokerapi/servicebroker/blob/master/gettingStarted.md#example-service-brokers" >}}). + +If you do not have a {{< glossary_tooltip text="cluster operator" term_id="cluster-operator" >}} to manage the installation of Service Catalog, you can do so using {{< link text="Helm" url="/docs/tasks/service-catalog/install-service-catalog-using-helm/" >}} or an {{< link text="installer binary" url="/docs/tasks/service-catalog/install-service-catalog-using-sc/" >}}. + + +## Explore additional resources + +#### References + +The following topics are also useful for building more complex applications: +* {{< link text="Other points of extensibility within Kubernetes" url="/docs/concepts/overview/extending/" >}} - A conceptual overview of where you can hook into the Kubernetes architecture. +* {{< link text="Kubernetes Client Libraries" url="/docs/reference/client-libraries/" >}} - Useful for building apps that need to interact heavily with the Kubernetes API. + +#### What's next +Congrats on completing the Application Developer user journey! You've covered the majority of features that Kubernetes has to offer. What now? + +* If you'd like to suggest new features or keep up with the latest developments around Kubernetes app development, consider joining a {{< glossary_tooltip term_id="sig" >}} such as {{< link text="SIG Apps" url="https://github.com/kubernetes/community/tree/master/sig-apps" >}}. + +* If you are interested in learning more about the inner workings of Kubernetes (e.g. networking), consider checking out the {{< link text="Cluster Operator journey" url="/docs/user-journeys/users/cluster-operator/foundational/" >}}. + +{{% /capture %}} + + diff --git a/content/en/docs/user-journeys/users/application-developer/foundational.md b/content/en/docs/user-journeys/users/application-developer/foundational.md new file mode 100644 index 0000000000000..7a57e025c5ba8 --- /dev/null +++ b/content/en/docs/user-journeys/users/application-developer/foundational.md @@ -0,0 +1,233 @@ +--- +reviewers: +- chenopis +layout: docsportal +css: /css/style_user_journeys.css +js: https://use.fontawesome.com/4bcc658a89.js, https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js +title: Foundational +track: "USERS › APPLICATION DEVELOPER › FOUNDATIONAL" +content_template: templates/user-journey-content +--- + +{{% capture overview %}} +If you're a developer looking to run applications on Kubernetes, this page and its linked topics can help you get started with the fundamentals. Though this page primarily describes development workflows, {{< link text="the subsequent page in the series" url="/docs/home/?path=users&persona=app-developer&level=intermediate" >}} covers more advanced, production setups. + +{{< note >}} +**A quick note**
This app developer "user journey" is *not* a comprehensive overview of Kubernetes. It focuses more on *what* you develop, test, and deploy to Kubernetes, rather than *how* the underlying infrastructure works.

Though it's possible for a single person to manage both, in many organizations, it’s common to assign the latter to a dedicated {{< glossary_tooltip text="cluster operator" term_id="cluster-operator" >}}. +{{< /note >}} +{{% /capture %}} + + +{{% capture body %}} +## Get started with a cluster + +#### Web-based environment + +If you're brand new to Kubernetes and simply want to experiment without setting up a full development environment, *web-based environments* are a good place to start: + +* {{< link text="Kubernetes Basics" url="/docs/tutorials/kubernetes-basics/#basics-modules" >}} - Introduces you to six common Kubernetes workflows. Each section walks you through browser-based, interactive exercises complete with their own Kubernetes environment. + +* {{< link text="Katacoda" url="https://www.katacoda.com/courses/kubernetes/playground" >}} - The playground equivalent of the environment used in *Kubernetes Basics* above. Katacoda also provides {{< link text="more advanced tutorials" url="https://www.katacoda.com/courses/kubernetes/" >}}, such as "Liveness and Readiness Healthchecks". + + +* {{< link text="Play with Kubernetes" url="http://labs.play-with-k8s.com/" >}} - A less structured environment than the *Katacoda* playground, for those who are more comfortable with Kubernetes concepts and want to explore further. It supports the ability to spin up multiple nodes. + + +#### Minikube (recommended) + +Web-based environments are easy to access, but are not persistent. If you want to continue exploring Kubernetes in a workspace that you can come back to and change, *Minikube* is a good option. + +Minikube can be installed locally, and runs a simple, single-node Kubernetes cluster inside a virtual machine (VM). This cluster is fully functioning and contains all core Kubernetes components. Many developers have found this sufficient for local application development. + +* {{< link text="Install Minikube" url="/docs/tasks/tools/install-minikube/" >}}. + +* {{< link text="Install kubectl" url="/docs/tasks/tools/install-kubectl/" >}}. ({{< glossary_tooltip text="What is kubectl?" term_id="kubectl" >}}) + +* *(Optional)* {{< link text="Install Docker" url="/docs/setup/independent/install-kubeadm/#installing-docker" >}} if you plan to run your Minikube cluster as part of a local development environment. + + Minikube includes a Docker daemon, but if you're developing applications locally, you'll want an independent Docker instance to support your workflow. This allows you to create {{< glossary_tooltip text="containers" term_id="container" >}} and push them to a container registry. + + {{< note >}} + Version 1.12 is recommended for full compatibility with Kubernetes, but a few other versions are tested and known to work. + {{< /note >}} + +You can get basic information about your cluster with the commands `kubectl cluster-info` and `kubectl get nodes`. However, to get a good idea of what's really going on, you need to deploy an application to your cluster. This is covered in the next section. + +## Deploy an application + +#### Basic workloads + +The following examples demonstrate the fundamentals of deploying Kubernetes apps: + * **Stateless apps**: {{< link text="Deploy a simple nginx server" url="/docs/tasks/run-application/run-stateless-application-deployment/" >}}. + + * **Stateful apps**: {{< link text="Deploy a MySQL database" url="/docs/tasks/run-application/run-single-instance-stateful-application/" >}}. + +Through these deployment tasks, you'll gain familiarity with the following: +* General concepts + + * **Configuration files** - Written in YAML or JSON, these files describe the desired state of your application in terms of Kubernetes API objects. A file can include one or more API object descriptions (*manifests*). (See [the example YAML](/docs/tasks/run-application/run-stateless-application-deployment/#creating-and-exploring-an-nginx-deployment) from the stateless app). + + * **{{< glossary_tooltip text="Pods" term_id="pod" >}}** - This is the basic unit for all of the workloads you run on Kubernetes. These workloads, such as *Deployments* and *Jobs*, are composed of one or more Pods. To learn more, check out {{< link text="this explanation of Pods and Nodes" url="/docs/tutorials/kubernetes-basics/explore-intro/" >}}. + +* Common workload objects + * **{{< glossary_tooltip text="Deployment" term_id="deployment" >}}** - The most common way of running *X* copies (Pods) of your application. Supports rolling updates to your container images. + + * **{{< glossary_tooltip text="Service" term_id="service" >}}** - By itself, a Deployment can't receive traffic. Setting up a Service is one of the simplest ways to configure a Deployment to receive and loadbalance requests. Depending on the `type` of Service used, these requests can come from external client apps or be limited to apps within the same cluster. A Service is tied to a specific Deployment using {{< glossary_tooltip text="label" term_id="label" >}} selection. + +The subsequent topics are also useful to know for basic application deployment. + +#### Metadata + +You can also specify custom information about your Kubernetes API objects by attaching key/value fields. Kubernetes provides two ways of doing this: + +* **{{< glossary_tooltip text="Labels" term_id="label" >}}** - Identifying metadata that you can use to sort and select sets of API objects. Labels have many applications, including the following: + + * *To keep the right number of replicas (Pods) running in a Deployment.* The specified label (`app: nginx` in the {{< link text="stateless app example" url="/docs/tasks/run-application/run-stateless-application-deployment/#creating-and-exploring-an-nginx-deployment" >}}) is used to stamp the Deployment's newly created Pods (as the value of the `spec.template.labels` configuration field), and to query which Pods it already manages (as the value of `spec.selector.matchLabels`). + + * *To tie a Service to a Deployment* using the `selector` field, which is demonstrated in the {{< link text="stateful app example" url="/docs/tasks/run-application/run-single-instance-stateful-application/#deploy-mysql" >}}. + + * *To look for specific subset of Kubernetes objects, when you are using {{< glossary_tooltip text="kubectl" term_id="kubectl" >}}.* For instance, the command `kubectl get deployments --selector=app=nginx` only displays Deployments from the nginx app. + +* **{{< glossary_tooltip text="Annotations" term_id="annotation" >}}** - Nonidentifying metadata that you can attach to API objects, usually if you don't intend to use them for sorting purposes. These often serve as supplementary data about an app's deployment, such as Git SHAs, PR numbers, or URL pointers to observability dashboards. + + +#### Storage + +You'll also want to think about storage. Kubernetes provides different types of storage API objects for different storage needs: + +* **{{< glossary_tooltip text="Volumes" term_id="volume" >}}** - Let you define storage for your cluster that is tied to the lifecycle of a Pod. It is therefore more persistent than container storage. Learn {{< link text="how to configure volume storage" url="/docs/tasks/configure-pod-container/configure-volume-storage/" >}}, or {{< link text="read more about volume storage" url="/docs/concepts/storage/volumes/" >}}. + +* **{{< glossary_tooltip text="PersistentVolumes" term_id="persistent-volume" >}}** and **{{< glossary_tooltip text="PersistentVolumeClaims" term_id="persistent-volume-claim" >}}** - Let you define storage at the cluster level. Typically a cluster operator defines the PersistentVolume objects for the cluster, and cluster users (application developers, you) define the PersistentVolumeClaim objects that your application requires. Learn {{< link text="how to set up persistent storage for your cluster" url="/docs/tasks/configure-pod-container/configure-persistent-volume-storage/" >}} or {{< link text="read more about persistent volumes" url="/docs/concepts/storage/persistent-volumes/" >}}. + +#### Configuration + +To avoid having to unnecessarily rebuild your container images, you should decouple your application's *configuration data* from the code required to run it. There are a couple ways of doing this, which you should choose according to your use case: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ApproachType of DataHow it's mountedExample
Using a manifest's container definitionNon-confidentialEnvironment variableCommand-line flag
Using {{< glossary_tooltip text="ConfigMaps" term_id="configmap" >}}Non-confidentialEnvironment variable OR local filenginx configuration
Using {{< glossary_tooltip text="Secrets" term_id="secret" >}}ConfidentialEnvironment variable OR local fileDatabase credentials
+ +{{< note >}} +If you have any data that you want to keep private, you should be using a Secret. Otherwise there is nothing stopping that data from being exposed to malicious users. +{{< /note >}} +## Understand basic Kubernetes architecture + +As an app developer, you don't need to know everything about the inner workings of Kubernetes, but you may find it helpful to understand it at a high level. + +#### What Kubernetes offers + +Say that your team is deploying an ordinary Rails application. You've run some calculations and determined that you need five instances of your app running at any given time, in order to handle external traffic. + +If you're not running Kubernetes or a similar automated system, you might find the following scenario familiar: + +
+ +1. One instance of your app (a complete machine instance or just a container) goes down. +2. Because your team has monitoring set up, this pages the person on call. +3. The on-call person has to go in, investigate, and manually spin up a new instance. +4. Depending how your team handles DNS/networking, the on-call person may also need to also update the service discovery mechanism to point at the IP of the new Rails instance rather than the old. + +
+ +This process can be tedious and also inconvenient, especially if (2) happens in the early hours of the morning! + +**If you have Kubernetes set up, however, manual intervention is not as necessary.** The Kubernetes {{< link text="control plane" url="/docs/concepts/overview/components/#master-components" >}}, which runs on your cluster's master node, gracefully handles (3) and (4) on your behalf. As a result, Kubernetes is often referred to as a *self-healing* system. + +There are two key parts of the control plane that facilitate this behavior: the *Kubernetes API server* and the *Controllers*. + +#### Kubernetes API server + +For Kubernetes to be useful, it needs to know *what* sort of cluster state you want it to maintain. Your YAML or JSON *configuration files* declare this desired state in terms of one or more API objects, such as {{< glossary_tooltip text="Deployments" term_id="deployment" >}}. To make updates to your cluster's state, you submit these files to the {{< glossary_tooltip text="Kubernetes API" term_id="kubernetes-api" >}} server (`kube-apiserver`). + +Examples of state include but are not limited to the following: + +* The applications or other workloads to run +* The container images for your applications and workloads +* Allocation of network and disk resources + +Note that the API server is just the gateway, and that object data is actually stored in a highly available datastore called {{< link text="*etcd*" url="https://github.com/coreos/etcd" >}}. For most intents and purposes, though, you can focus on the API server. Most reads and writes to cluster state take place as API requests. + +You can read more about the Kubernetes API {{< link text="here" url="/docs/concepts/overview/working-with-objects/kubernetes-objects/" >}}. + +#### Controllers + +Once you’ve declared your desired state through the Kubernetes API, the *controllers* work to make the cluster’s current state match this desired state. + +The standard controller processes are {{< link text="`kube-controller-manager`" url="/docs/reference/generated/kube-controller-manager/" >}} and {{< link text="`cloud-controller-manager`" url="/docs/concepts/overview/components/#cloud-controller-manager" >}}, but you can also write your own controllers as well. + +All of these controllers implement a *control loop*. For simplicity, you can think of this as the following: + +
+ 1. What is the current state of the cluster (X)? + 2. What is the desired state of the cluster (Y)? + 3. X == Y ? + * `true` - Do nothing. + * `false` - Perform tasks to get to Y (such as starting or restarting containers, +or scaling the number of replicas of a given application).
+ + *(Return to 1)* +
+ +By continuously looping, these controllers ensure the cluster can pick up new updates and avoid drifting from the desired state. These ideas are covered in more detail {{< link text="here" url="https://kubernetes.io/docs/concepts/" >}}. + +## Additional resources + +The Kubernetes documentation is rich in detail. Here's a curated list of resources to help you start digging deeper. + +### Basic concepts + +* {{< link text="More about the components that run Kubernetes" url="/docs/concepts/overview/components/" >}} + +* {{< link text="Understanding Kubernetes objects" url="/docs/concepts/overview/working-with-objects/kubernetes-objects/" >}} + +* {{< link text="More about Node objects" url="/docs/concepts/architecture/nodes/" >}} + +* {{< link text="More about Pod objects" url="/docs/concepts/workloads/pods/pod-overview/" >}} + +### Tutorials + +* {{< link text="Kubernetes Basics" url="/docs/tutorials/kubernetes-basics/" >}} + +* {{< link text="Hello Minikube" url="/docs/tutorials/stateless-application/hello-minikube/" >}} *(Runs on Mac only)* + +* {{< link text="Kubernetes 101" url="/docs/user-guide/walkthrough/" >}} + +* {{< link text="Kubernetes 201" url="/docs/user-guide/walkthrough/k8s201/" >}} + +* {{< link text="Kubernetes object management" url="/docs/tutorials/object-management-kubectl/object-management/" >}} + +### What's next +If you feel fairly comfortable with the topics on this page and want to learn more, check out the following user journeys: +* {{< link text="Intermediate App Developer" url="/docs/user-journeys/users/application-developer/intermediate/" >}} - Dive deeper, with the next level of this journey. +* {{< link text="Foundational Cluster Operator" url="/docs/user-journeys/users/cluster-operator/foundational/" >}} - Build breadth, by exploring other journeys. + +{{% /capture %}} + + + diff --git a/content/en/docs/user-journeys/users/application-developer/intermediate.md b/content/en/docs/user-journeys/users/application-developer/intermediate.md new file mode 100644 index 0000000000000..ac8568308ad8f --- /dev/null +++ b/content/en/docs/user-journeys/users/application-developer/intermediate.md @@ -0,0 +1,158 @@ +--- +reviewers: +- chenopis +layout: docsportal +css: /css/style_user_journeys.css +js: https://use.fontawesome.com/4bcc658a89.js, https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js +title: Intermediate +track: "USERS › APPLICATION DEVELOPER › INTERMEDIATE" +content_template: templates/user-journey-content +--- + + +{{% capture overview %}} + +{{< note >}} + This page assumes that you've experimented with Kubernetes before. At this point, you should have basic experience interacting with a Kubernetes cluster (locally with Minikube, or elsewhere), and using API objects like Deployments to run your applications.

If not, you should review the {{< link text="Beginner App Developer" url="/docs/user-journeys/users/application-developer/foundational/" >}} topics first. +{{< /note >}} +After checking out the current page and its linked sections, you should have a better understanding of the following: +* Additional Kubernetes workload patterns, beyond Deployments +* What it takes to make a Kubernetes application production-ready +* Community tools that can improve your development workflow + +{{% /capture %}} + + +{{% capture body %}} + +## Learn additional workload patterns + +As your Kubernetes use cases become more complex, you may find it helpful to familiarize yourself with more of the toolkit that Kubernetes provides. {{< link text="Basic workload" url="/docs/user-journeys/users/application-developer/foundational/#section-2" >}} objects like {{< glossary_tooltip text="Deployments" term_id="deployment" >}} make it straightforward to run, update, and scale applications, but they are not ideal for every scenario. + +The following API objects provide functionality for additional workload types, whether they are *persistent* or *terminating*. + +#### Persistent workloads + +Like Deployments, these API objects run indefinitely on a cluster until they are manually terminated. They are best for long-running applications. + +* **{{< glossary_tooltip text="StatefulSets" term_id="statefulset" >}}** - Like Deployments, StatefulSets allow you to specify that a certain number of replicas should be running for your application. + + {{< note >}} + It's misleading to say that Deployments can't handle stateful workloads. Using {{< glossary_tooltip text="PersistentVolumes" term_id="persistent-volume" >}}, you can persist data beyond the lifecycle of any individual Pod in your Deployment. + {{< /note >}} + However, StatefulSets can provide stronger guarantees about "recovery" behavior than Deployments. StatefulSets maintain a sticky, stable identity for their Pods. The following table provides some concrete examples of what this might look like: + + | | Deployment | StatefulSet | + |---|---|---| + | **Example Pod name** | `example-b1c4` | `example-0` | + | **When a Pod dies** | Reschedule on *any* node, with new name `example-a51z` | Reschedule on same node, as `example-0` | + | **When a node becomes unreachable** | Pod(s) are scheduled onto new node, with new names | Pod(s) are marked as "Unknown", and aren't rescheduled unless the Node object is forcefully deleted | + + In practice, this means that StatefulSets are best suited for scenarios where replicas (Pods) need to coordinate their workloads in a strongly consistent manner. Guaranteeing an identity for each Pod helps avoid {{< link text="split-brain" url="https://en.wikipedia.org/wiki/Split-brain_(computing)" >}} side effects in the case when a node becomes unreachable ({{< link text="network partition" url="https://en.wikipedia.org/wiki/Network_partition" >}}). This makes StatefulSets a great fit for distributed datastores like Cassandra or Elasticsearch. + + +* **{{< glossary_tooltip text="DaemonSets" term_id="daemonset" >}}** - DaemonSets run continuously on every node in your cluster, even as nodes are added or swapped in. This guarantee is particularly useful for setting up global behavior across your cluster, such as: + + * Logging and monitoring, from applications like `fluentd` + * Network proxy or {{< link text="service mesh" url="https://www.linux.com/news/whats-service-mesh-and-why-do-i-need-one" >}} + + +#### Terminating workloads + +In contrast to Deployments, these API objects are finite. They stop once the specified number of Pods have completed successfully. + +* **{{< glossary_tooltip text="Jobs" term_id="job" >}}** - You can use these for one-off tasks like running a script or setting up a work queue. These tasks can be executed sequentially or in parallel. These tasks should be relatively independent, as Jobs do not support closely communicating parallel processes. {{< link text="Read more about Job patterns" url="/docs/concepts/workloads/controllers/jobs-run-to-completion/#job-patterns" >}}. + +* **{{< glossary_tooltip text="CronJobs" term_id="cronjob" >}}** - These are similar to Jobs, but allow you to schedule their execution for a specific time or for periodic recurrence. You might use CronJobs to send reminder emails or to run backup jobs. They are set up with a similar syntax as *crontab*. + +#### Other resources + +For more info, you can check out {{< link text="a list of additional Kubernetes resource types" url="/docs/reference/kubectl/overview/#resource-types" >}} as well as the {{< link text="API reference docs" url="{{ reference_docs_url }}" >}}. + +There may be additional features not mentioned here that you may find useful, which are covered in the {{< link text="full Kubernetes documentation" url="/docs/home/?path=browse" >}}. + +## Deploy a production-ready workload + +The beginner tutorials on this site, such as the {{< link text="Guestbook app" url="/docs/tutorials/stateless-application/guestbook/" >}}, are geared towards getting workloads up and running on your cluster. This prototyping is great for building your intuition around Kubernetes! However, in order to reliably and securely promote your workloads to production, you need to follow some additional best practices. + +#### Declarative configuration + +You are likely interacting with your Kubernetes cluster via {{< glossary_tooltip text="kubectl" term_id="kubectl" >}}. kubectl can be used to debug the current state of your cluster (such as checking the number of nodes), or to modify live Kubernetes objects (such as updating a workload's replica count with `kubectl scale`). + +When using kubectl to update your Kubernetes objects, it's important to be aware that different commands correspond to different approaches: +* {{< link text="Purely imperative" url="/docs/tutorials/object-management-kubectl/imperative-object-management-command/" >}} +* {{< link text="Imperative with local configuration files" url="/docs/tutorials/object-management-kubectl/imperative-object-management-configuration/" >}} (typically YAML) +* {{< link text="Declarative with local configuration files" url="/docs/tutorials/object-management-kubectl/declarative-object-management-configuration/" >}} (typically YAML) + +There are pros and cons to each approach, though the declarative approach (such as `kubectl apply -f`) may be most helpful in production. With this approach, you rely on local YAML files as the source of truth about your desired state. This enables you to version control your configuration, which is helpful for code reviews and audit tracking. + +For additional configuration best practices, familiarize yourself with {{< link text="this guide" url="/docs/concepts/configuration/overview/" >}}. + +#### Security + +You may be familiar with the *principle of least privilege*---if you are too generous with permissions when writing or using software, the negative effects of a compromise can escalate out of control. Would you be cautious handing out `sudo` privileges to software on your OS? If so, you should be just as careful when granting your workload permissions to the {{< glossary_tooltip text="Kubernetes API" term_id="kubernetes-api" >}} server! The API server is the gateway for your cluster's source of truth; it provides endpoints to read or modify cluster state. + +You (or your {{< glossary_tooltip text="cluster operator" term_id="cluster-operator" >}}) can lock down API access with the following: +* **{{< glossary_tooltip text="ServiceAccounts" term_id="service-account" >}}** - An "identity" that your Pods can be tied to +* **{{< glossary_tooltip text="RBAC" term_id="rbac" >}}** - One way of granting your ServiceAccount explicit permissions + +For even more comprehensive reading about security best practices, consider checking out the following topics: +* {{< link text="Authentication" url="/docs/admin/authentication/" >}} (Is the user who they say they are?) +* {{< link text="Authorization" url="/docs/admin/authorization/" >}} (Does the user actually have permissions to do what they're asking?) + +#### Resource isolation and management + +If your workloads are operating in a *multi-tenant* environment with multiple teams or projects, your container(s) are not necessarily running alone on their node(s). They are sharing node resources with other containers which you do not own. + +Even if your cluster operator is managing the cluster on your behalf, it is helpful to be aware of the following: +* **{{< glossary_tooltip text="Namespaces" term_id="namespace" >}}**, used for isolation +* **{{< link text="Resource quotas" url="/docs/concepts/policy/resource-quotas/" >}}**, which affect what your team's workloads can use +* **{{< link text="Memory" url="/docs/tasks/configure-pod-container/assign-memory-resource/" >}} and {{< link text="CPU" url="/docs/tasks/configure-pod-container/assign-cpu-resource/" >}} requests**, for a given Pod or container +* **{{< link text="Monitoring" url="/docs/tasks/debug-application-cluster/resource-usage-monitoring/" >}}**, both on the cluster level and the app level + +This list may not be completely comprehensive, but many teams have existing processes that take care of all this. If this is not the case, you'll find the Kubernetes documentation fairly rich in detail. + +## Improve your dev workflow with tooling + +As an app developer, you'll likely encounter the following tools in your workflow. + +#### kubectl + +`kubectl` is a command-line tool that allows you to easily read or modify your Kubernetes cluster. It provides convenient, short commands for common operations like scaling app instances and getting node info. How does kubectl do this? It's basically just a user-friendly wrapper for making API requests. It's written using {{< link text="client-go" url="https://github.com/kubernetes/client-go/#client-go" >}}, the Go library for the Kubernetes API. + +To learn about the most commonly used kubectl commands, check out the {{< link text="kubectl cheatsheet" url="/docs/reference/kubectl/cheatsheet/" >}}. It explains topics such as the following: +* {{< link text="kubeconfig files" url="/docs/tasks/access-application-cluster/configure-access-multiple-clusters/" >}} - Your kubeconfig file tells kubectl what cluster to talk to, and can reference multiple clusters (such as dev and prod). +* {{< link text="The various output formats available" url="/docs/reference/kubectl/cheatsheet/#formatting-output" >}} - This is useful to know when you are using `kubectl get` to list information about certain API objects. + +* {{< link text="The JSONPath output format" url="/docs/reference/kubectl/jsonpath/" >}} - This is related to the output formats above. JSONPath is especially useful for parsing specific subfields out of `kubectl get` output (such as the URL of a {{< glossary_tooltip text="Service" term_id="service" >}}). + +* {{< link text="`kubectl run` vs `kubectl apply`" url="/docs/reference/kubectl/conventions/" >}} - This ties into the [declarative configuration](#declarative-configuration) discussion in the previous section. + +For the full list of kubectl commands and their options, check out {{< link text="the reference guide" url="/docs/reference/generated/kubectl/kubectl-commands" >}}. + +#### Helm + +To leverage pre-packaged configurations from the community, you can use **{{< glossary_tooltip text="Helm charts" term_id="helm-chart" >}}**. + +Helm charts package up YAML configurations for specific apps like Jenkins and Postgres. You can then install and run these apps on your cluster with minimal extra configuration. This approach makes the most sense for "off-the-shelf" components which do not require much custom implementation logic. + +For writing your own Kubernetes app configurations, there is a {{< link text="thriving ecosystem of tools" url="https://docs.google.com/a/heptio.com/spreadsheets/d/1FCgqz1Ci7_VCz_wdh8vBitZ3giBtac_H8SBw4uxnrsE/edit?usp=drive_web" >}} that you may find useful. + +## Explore additional resources + +#### References +Now that you're fairly familiar with Kubernetes, you may find it useful to browse the following reference pages. Doing so provides a high level view of what other features may exist: + +* {{< link text="Commonly used `kubectl` commands" url="/docs/reference/kubectl/cheatsheet/" >}} +* {{< link text="Kubernetes API reference" url="{{ reference_docs_url }}" >}} +* {{< link text="Standardized Glossary" url="/docs/reference/glossary/" >}} + +In addition, {{< link text="the Kubernetes blog" url="http://blog.kubernetes.io/" >}} often has helpful posts on Kubernetes design patterns and case studies. + +#### What's next +If you feel fairly comfortable with the topics on this page and want to learn more, check out the following user journeys: +* {{< link text="Advanced App Developer" url="/docs/user-journeys/users/application-developer/advanced/" >}} - Dive deeper, with the next level of this journey. +* {{< link text="Foundational Cluster Operator" url="/docs/user-journeys/users/cluster-operator/foundational/" >}} - Build breadth, by exploring other journeys. +{{% /capture %}} + + diff --git a/docs/user-journeys/users/cluster-operator/_advanced.md b/content/en/docs/user-journeys/users/cluster-operator/_advanced.md similarity index 99% rename from docs/user-journeys/users/cluster-operator/_advanced.md rename to content/en/docs/user-journeys/users/cluster-operator/_advanced.md index cc5755d6bcb74..eee67a972cc60 100644 --- a/docs/user-journeys/users/cluster-operator/_advanced.md +++ b/content/en/docs/user-journeys/users/cluster-operator/_advanced.md @@ -6,13 +6,14 @@ css: /css/style_user_journeys.css js: https://use.fontawesome.com/4bcc658a89.js, https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js title: Advanced Topics track: "USERS > CLUSTER OPERATOR > ADVANCED" +content_template: templates/user-journey-content --- -{% capture overview %} +{{% capture overview %}} Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id felis non enim faucibus lacinia. Aliquam massa mauris, interdum a ex ut, sagittis rutrum nulla. In pellentesque est at molestie fringilla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec eu mi at velit lacinia venenatis ac nec sem. In volutpat pellentesque dui ut commodo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sollicitudin eleifend felis non facilisis. Pellentesque leo urna, congue id auctor non, varius a nunc. Duis ultrices, odio ut hendrerit suscipit, nisi mauris dignissim mauris, nec bibendum ante neque ut augue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam condimentum libero sit amet rutrum fermentum. Proin posuere condimentum odio. Aenean volutpat, ex vel tincidunt tincidunt, massa odio condimentum lectus, vel iaculis libero dolor in nisi. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Setup federated clusters Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id felis non enim faucibus lacinia. Aliquam massa mauris, interdum a ex ut, sagittis rutrum nulla. In pellentesque est at molestie fringilla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec eu mi at velit lacinia venenatis ac nec sem. In volutpat pellentesque dui ut commodo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sollicitudin eleifend felis non facilisis. Pellentesque leo urna, congue id auctor non, varius a nunc. Duis ultrices, odio ut hendrerit suscipit, nisi mauris dignissim mauris, nec bibendum ante neque ut augue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam condimentum libero sit amet rutrum fermentum. Proin posuere condimentum odio. Aenean volutpat, ex vel tincidunt tincidunt, massa odio condimentum lectus, vel iaculis libero dolor in nisi. @@ -79,6 +80,6 @@ Curabitur bibendum tempor mi, vel lacinia nisi vulputate ac. Nulla dignissim con Aenean suscipit arcu ac leo tincidunt tempus. Donec maximus tellus libero, ac ullamcorper magna lobortis ac. Integer mollis nisl vitae magna gravida, nec ornare ex consectetur. Sed mattis tincidunt nisi, at consequat tellus malesuada non. Integer vel semper nisi, ut fringilla velit. Nam felis ex, congue non dui vitae, sollicitudin convallis turpis. Phasellus porttitor maximus turpis, in varius nibh fermentum aliquam. Cras finibus lacus non diam porttitor porttitor. Nulla fringilla sagittis nibh nec condimentum. Duis egestas mauris nec dolor hendrerit ullamcorper sit amet in mi. Phasellus sollicitudin justo diam. -{% endcapture %} +{{% /capture %}} + -{% include templates/user-journey-content.md %} diff --git a/content/en/docs/user-journeys/users/cluster-operator/_index.md b/content/en/docs/user-journeys/users/cluster-operator/_index.md new file mode 100755 index 0000000000000..1748e90fb4da0 --- /dev/null +++ b/content/en/docs/user-journeys/users/cluster-operator/_index.md @@ -0,0 +1,5 @@ +--- +title: "Cluster Operator" +weight: 20 +--- + diff --git a/docs/user-journeys/users/cluster-operator/foundational.md b/content/en/docs/user-journeys/users/cluster-operator/foundational.md similarity index 98% rename from docs/user-journeys/users/cluster-operator/foundational.md rename to content/en/docs/user-journeys/users/cluster-operator/foundational.md index 3d8f8ed6b72b4..08d00300ca1b7 100644 --- a/docs/user-journeys/users/cluster-operator/foundational.md +++ b/content/en/docs/user-journeys/users/cluster-operator/foundational.md @@ -6,14 +6,15 @@ css: /css/style_user_journeys.css js: https://use.fontawesome.com/4bcc658a89.js, https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js title: Foundational track: "USERS › CLUSTER OPERATOR › FOUNDATIONAL" +content_template: templates/user-journey-content --- -{% capture overview %} +{{% capture overview %}} If you want to learn how to get started managing and operating a Kubernetes cluster, this page and the linked topics introduce you to the foundational concepts and tasks. This page introduces you to a Kubernetes cluster and key concepts to understand and manage it. The content focuses primarily on the cluster itself rather than the software running within the cluster. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Get an overview of Kubernetes @@ -93,6 +94,6 @@ Some additional resources for getting information about your cluster and how it * [Deploying PHP Guestbook with Redis](/docs/tutorials/stateless-application/guestbook/) * [Expose an External IP address to access an application](/docs/tutorials/stateless-application/expose-external-ip-address/) -{% endcapture %} +{{% /capture %}} + -{% include templates/user-journey-content.md %} diff --git a/docs/user-journeys/users/cluster-operator/intermediate.md b/content/en/docs/user-journeys/users/cluster-operator/intermediate.md similarity index 98% rename from docs/user-journeys/users/cluster-operator/intermediate.md rename to content/en/docs/user-journeys/users/cluster-operator/intermediate.md index 8c6289a72de7a..68761eb7399e9 100644 --- a/docs/user-journeys/users/cluster-operator/intermediate.md +++ b/content/en/docs/user-journeys/users/cluster-operator/intermediate.md @@ -6,15 +6,16 @@ css: /css/style_user_journeys.css js: https://use.fontawesome.com/4bcc658a89.js, https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js title: Intermediate track: "USERS > CLUSTER OPERATOR > INTERMEDIATE" +content_template: templates/user-journey-content --- -{% capture overview %} +{{% capture overview %}} If you are a cluster operator looking to expand your grasp of Kubernetes, this page and its linked topics extend the information provided on the [foundational cluster operator page](/docs/user-journeys/users/cluster-operator/foundational). From this page you can get information on key Kubernetes tasks needed to manage a complete production cluster. -{% endcapture %} +{{% /capture %}} -{% capture body %} +{{% capture body %}} ## Work with ingress, networking, storage, and workloads @@ -103,6 +104,6 @@ Cluster Administration: * [Debug Applications](/docs/tasks/debug-application-cluster/debug-application/) * [Using explorer to investigate your cluster](https://github.com/kubernetes/examples/blob/master/staging/explorer/README.md) -{% endcapture %} +{{% /capture %}} + -{% include templates/user-journey-content.md %} diff --git a/content/en/includes/default-storage-class-prereqs.md b/content/en/includes/default-storage-class-prereqs.md new file mode 100644 index 0000000000000..ef4823318dcab --- /dev/null +++ b/content/en/includes/default-storage-class-prereqs.md @@ -0,0 +1,6 @@ +You need to either have a dynamic PersistentVolume provisioner with a default +[StorageClass](/docs/concepts/storage/storage-classes/), +or [statically provision PersistentVolumes](/docs/user-guide/persistent-volumes/#provisioning) +yourself to satisfy the [PersistentVolumeClaims](/docs/user-guide/persistent-volumes/#persistentvolumeclaims) +used here. + diff --git a/content/en/includes/federated-task-tutorial-prereqs.md b/content/en/includes/federated-task-tutorial-prereqs.md new file mode 100644 index 0000000000000..c5ec939c07894 --- /dev/null +++ b/content/en/includes/federated-task-tutorial-prereqs.md @@ -0,0 +1,8 @@ +This guide assumes that you have a running Kubernetes Cluster +Federation installation. If not, then head over to the +[federation admin guide](/docs/tutorials/federation/set-up-cluster-federation-kubefed/) to learn how to +bring up a cluster federation (or have your cluster administrator do +this for you). +Other tutorials, such as Kelsey Hightower's +[Federated Kubernetes Tutorial](https://github.com/kelseyhightower/kubernetes-cluster-federation), +might also help you create a Federated Kubernetes cluster. \ No newline at end of file diff --git a/content/en/includes/federation-content-moved.md b/content/en/includes/federation-content-moved.md new file mode 100644 index 0000000000000..87a10e7199193 --- /dev/null +++ b/content/en/includes/federation-content-moved.md @@ -0,0 +1,2 @@ +The topics in the [Federation API](/docs/federation/api-reference/) section of the Kubernetes docs +are being moved to the [Reference](/docs/reference/) section. The content in this topic has moved to: diff --git a/content/en/includes/federation-current-state.md b/content/en/includes/federation-current-state.md new file mode 100644 index 0000000000000..56e4decdf3c2e --- /dev/null +++ b/content/en/includes/federation-current-state.md @@ -0,0 +1,7 @@ +**Note:** `Federation V1`, the current Kubernetes federation API which reuses the Kubernetes API +resources 'as is', is currently considered alpha for many of its features, and there is no clear +path to evolve the API to GA. However, there is a `Federation V2` effort in progress to implement +a dedicated federation API apart from the Kubernetes API. The details can be found at +[sig-multicluster community page](https://github.com/kubernetes/community/tree/master/sig-multicluster). +{: .note} + diff --git a/content/en/includes/index.md b/content/en/includes/index.md new file mode 100644 index 0000000000000..ca03031f1ee91 --- /dev/null +++ b/content/en/includes/index.md @@ -0,0 +1,3 @@ +--- +headless: true +--- diff --git a/_includes/partner-script.js b/content/en/includes/partner-script.js similarity index 99% rename from _includes/partner-script.js rename to content/en/includes/partner-script.js index 36d1f66bcc083..9041a5617fe60 100644 --- a/_includes/partner-script.js +++ b/content/en/includes/partner-script.js @@ -29,7 +29,7 @@ blurb: 'CockroachDB is a distributed SQL database whose built-in replication and survivability model pair with Kubernetes to truly make data easy.' }, { - type: 2, + type: 0, name: 'Weaveworks', logo: 'weave_works', link: ' https://weave.works/kubernetes', @@ -271,7 +271,7 @@ name: 'Emerging Technology Advisors', logo: 'eta', link: 'https://www.emergingtechnologyadvisors.com/services/kubernetes.html', - blurb: 'ETA helps companies architect, implement, and manage scalable applications using Kubernetes on public or private cloud.' + blurb: 'ETA helps companies architect, implement, and manage scalable applications using Kubernetes on on public or private cloud.' }, { type: 0, @@ -1456,13 +1456,6 @@ link: 'http://www.mobilise.cloud/services/serverless-application-delivery', blurb: 'Mobilise helps organisations adopt Kubernetes and integrate with their CI/CD tooling.' }, - { - type: 3, - name: 'AWS', - logo: 'aws', - link: 'https://aws.amazon.com/eks/', - blurb: 'Amazon Elastic Container Service for Kubernetes (Amazon EKS) is a managed service that makes it easy for you to run Kubernetes on AWS without needing to install and operate your own Kubernetes clusters.' - }, { type: 0, name: 'Logdna', diff --git a/_includes/partner-style.css b/content/en/includes/partner-style.css similarity index 100% rename from _includes/partner-style.css rename to content/en/includes/partner-style.css diff --git a/content/en/includes/task-tutorial-prereqs.md b/content/en/includes/task-tutorial-prereqs.md new file mode 100644 index 0000000000000..6f1407fe45913 --- /dev/null +++ b/content/en/includes/task-tutorial-prereqs.md @@ -0,0 +1,8 @@ +You need to have a Kubernetes cluster, and the kubectl command-line tool must +be configured to communicate with your cluster. If you do not already have a +cluster, you can create one by using +[Minikube](/docs/getting-started-guides/minikube), +or you can use one of these Kubernetes playgrounds: + +* [Katacoda](https://www.katacoda.com/courses/kubernetes/playground) +* [Play with Kubernetes](http://labs.play-with-k8s.com/) diff --git a/content/en/includes/user-guide-content-moved.md b/content/en/includes/user-guide-content-moved.md new file mode 100644 index 0000000000000..8b93e29f125f7 --- /dev/null +++ b/content/en/includes/user-guide-content-moved.md @@ -0,0 +1,3 @@ +The topics in the [User Guide](/docs/user-guide/) section of the Kubernetes docs +are being moved to the [Tasks](/docs/tasks/), [Tutorials](/docs/tutorials/), and +[Concepts](/docs/concepts) sections. The content in this topic has moved to: diff --git a/content/en/includes/user-guide-migration-notice.md b/content/en/includes/user-guide-migration-notice.md new file mode 100644 index 0000000000000..366a05907cda5 --- /dev/null +++ b/content/en/includes/user-guide-migration-notice.md @@ -0,0 +1,12 @@ + + + + + + +
+

NOTICE

+

As of March 14, 2017, the Kubernetes SIG-Docs-Maintainers group have begun migration of the User Guide content as announced previously to the SIG Docs community through the kubernetes-sig-docs group and kubernetes.slack.com #sig-docs channel.

+

The user guides within this section are being refactored into topics within Tutorials, Tasks, and Concepts. Anything that has been moved will have a notice placed in its previous location as well as a link to its new location. The reorganization implements a new table of contents and should improve the documentation's findability and readability for a wider range of audiences.

+

For any questions, please contact: kubernetes-sig-docs@googlegroups.com

+
diff --git a/partners/index.html b/content/en/partners/_index.html similarity index 93% rename from partners/index.html rename to content/en/partners/_index.html index 14f39332d0d04..3e3ee30864002 100644 --- a/partners/index.html +++ b/content/en/partners/_index.html @@ -1,16 +1,11 @@ --- title: Partners -layout: basic +bigheader: Kubernetes Partners +abstract: Growing the Kubernetes ecosystem. class: gridPage cid: partners --- -
-

Kubernetes Partners

-
Growing the Kubernetes ecosystem.
- -
-
Kubernetes works with partners to create a strong, vibrant codebase that supports a spectrum of complementary platforms.
@@ -48,9 +43,9 @@

Service Partners

diff --git a/_data/canonical-tags/architecture.yaml b/data/canonical-tags/architecture.yaml similarity index 100% rename from _data/canonical-tags/architecture.yaml rename to data/canonical-tags/architecture.yaml diff --git a/_data/canonical-tags/community.yaml b/data/canonical-tags/community.yaml similarity index 100% rename from _data/canonical-tags/community.yaml rename to data/canonical-tags/community.yaml diff --git a/_data/canonical-tags/core-object.yaml b/data/canonical-tags/core-object.yaml similarity index 100% rename from _data/canonical-tags/core-object.yaml rename to data/canonical-tags/core-object.yaml diff --git a/_data/canonical-tags/extension.yaml b/data/canonical-tags/extension.yaml similarity index 100% rename from _data/canonical-tags/extension.yaml rename to data/canonical-tags/extension.yaml diff --git a/_data/canonical-tags/fundamental.yaml b/data/canonical-tags/fundamental.yaml similarity index 100% rename from _data/canonical-tags/fundamental.yaml rename to data/canonical-tags/fundamental.yaml diff --git a/_data/canonical-tags/networking.yaml b/data/canonical-tags/networking.yaml similarity index 100% rename from _data/canonical-tags/networking.yaml rename to data/canonical-tags/networking.yaml diff --git a/_data/canonical-tags/operation.yaml b/data/canonical-tags/operation.yaml similarity index 100% rename from _data/canonical-tags/operation.yaml rename to data/canonical-tags/operation.yaml diff --git a/_data/canonical-tags/security.yaml b/data/canonical-tags/security.yaml similarity index 100% rename from _data/canonical-tags/security.yaml rename to data/canonical-tags/security.yaml diff --git a/_data/canonical-tags/storage.yaml b/data/canonical-tags/storage.yaml similarity index 100% rename from _data/canonical-tags/storage.yaml rename to data/canonical-tags/storage.yaml diff --git a/_data/canonical-tags/tool.yaml b/data/canonical-tags/tool.yaml similarity index 100% rename from _data/canonical-tags/tool.yaml rename to data/canonical-tags/tool.yaml diff --git a/_data/canonical-tags/user-type.yaml b/data/canonical-tags/user-type.yaml similarity index 100% rename from _data/canonical-tags/user-type.yaml rename to data/canonical-tags/user-type.yaml diff --git a/_data/canonical-tags/workload.yaml b/data/canonical-tags/workload.yaml similarity index 100% rename from _data/canonical-tags/workload.yaml rename to data/canonical-tags/workload.yaml diff --git a/_data/concepts.yml b/data/concepts.yml similarity index 100% rename from _data/concepts.yml rename to data/concepts.yml diff --git a/_data/docs-home.yml b/data/docs-home.yml similarity index 100% rename from _data/docs-home.yml rename to data/docs-home.yml diff --git a/_data/globals.yml b/data/globals.yml similarity index 100% rename from _data/globals.yml rename to data/globals.yml diff --git a/_data/glossary/_example.yml b/data/glossary/_example.yml similarity index 100% rename from _data/glossary/_example.yml rename to data/glossary/_example.yml diff --git a/_data/glossary/annotation.yaml b/data/glossary/annotation.yaml similarity index 100% rename from _data/glossary/annotation.yaml rename to data/glossary/annotation.yaml diff --git a/_data/glossary/application-architect.yaml b/data/glossary/application-architect.yaml similarity index 100% rename from _data/glossary/application-architect.yaml rename to data/glossary/application-architect.yaml diff --git a/_data/glossary/application-developer.yaml b/data/glossary/application-developer.yaml similarity index 100% rename from _data/glossary/application-developer.yaml rename to data/glossary/application-developer.yaml diff --git a/_data/glossary/approver.yaml b/data/glossary/approver.yaml similarity index 100% rename from _data/glossary/approver.yaml rename to data/glossary/approver.yaml diff --git a/_data/glossary/certificate.yaml b/data/glossary/certificate.yaml similarity index 100% rename from _data/glossary/certificate.yaml rename to data/glossary/certificate.yaml diff --git a/_data/glossary/cla.yaml b/data/glossary/cla.yaml similarity index 100% rename from _data/glossary/cla.yaml rename to data/glossary/cla.yaml diff --git a/_data/glossary/cloud-controller-manager.yml b/data/glossary/cloud-controller-manager.yml similarity index 100% rename from _data/glossary/cloud-controller-manager.yml rename to data/glossary/cloud-controller-manager.yml diff --git a/_data/glossary/cloud-provider.yaml b/data/glossary/cloud-provider.yaml similarity index 100% rename from _data/glossary/cloud-provider.yaml rename to data/glossary/cloud-provider.yaml diff --git a/_data/glossary/cluster-architect.yaml b/data/glossary/cluster-architect.yaml similarity index 100% rename from _data/glossary/cluster-architect.yaml rename to data/glossary/cluster-architect.yaml diff --git a/_data/glossary/cluster-operator.yaml b/data/glossary/cluster-operator.yaml similarity index 100% rename from _data/glossary/cluster-operator.yaml rename to data/glossary/cluster-operator.yaml diff --git a/_data/glossary/cluster.yaml b/data/glossary/cluster.yaml similarity index 100% rename from _data/glossary/cluster.yaml rename to data/glossary/cluster.yaml diff --git a/_data/glossary/code-contributor.yaml b/data/glossary/code-contributor.yaml similarity index 100% rename from _data/glossary/code-contributor.yaml rename to data/glossary/code-contributor.yaml diff --git a/_data/glossary/configmap.yaml b/data/glossary/configmap.yaml similarity index 100% rename from _data/glossary/configmap.yaml rename to data/glossary/configmap.yaml diff --git a/_data/glossary/container-env-variables.yaml b/data/glossary/container-env-variables.yaml similarity index 100% rename from _data/glossary/container-env-variables.yaml rename to data/glossary/container-env-variables.yaml diff --git a/_data/glossary/container.yaml b/data/glossary/container.yaml similarity index 100% rename from _data/glossary/container.yaml rename to data/glossary/container.yaml diff --git a/_data/glossary/contributor.yaml b/data/glossary/contributor.yaml similarity index 100% rename from _data/glossary/contributor.yaml rename to data/glossary/contributor.yaml diff --git a/_data/glossary/controller.yaml b/data/glossary/controller.yaml similarity index 100% rename from _data/glossary/controller.yaml rename to data/glossary/controller.yaml diff --git a/_data/glossary/cronjob.yaml b/data/glossary/cronjob.yaml similarity index 100% rename from _data/glossary/cronjob.yaml rename to data/glossary/cronjob.yaml diff --git a/_data/glossary/customresourcedefinition.yaml b/data/glossary/customresourcedefinition.yaml similarity index 100% rename from _data/glossary/customresourcedefinition.yaml rename to data/glossary/customresourcedefinition.yaml diff --git a/_data/glossary/daemonset.yaml b/data/glossary/daemonset.yaml similarity index 100% rename from _data/glossary/daemonset.yaml rename to data/glossary/daemonset.yaml diff --git a/_data/glossary/deployment.yaml b/data/glossary/deployment.yaml similarity index 100% rename from _data/glossary/deployment.yaml rename to data/glossary/deployment.yaml diff --git a/_data/glossary/developer.yaml b/data/glossary/developer.yaml similarity index 100% rename from _data/glossary/developer.yaml rename to data/glossary/developer.yaml diff --git a/_data/glossary/docker.yaml b/data/glossary/docker.yaml similarity index 100% rename from _data/glossary/docker.yaml rename to data/glossary/docker.yaml diff --git a/_data/glossary/downstream.yaml b/data/glossary/downstream.yaml similarity index 100% rename from _data/glossary/downstream.yaml rename to data/glossary/downstream.yaml diff --git a/_data/glossary/dynamic-volume-provisioning.yaml b/data/glossary/dynamic-volume-provisioning.yaml similarity index 100% rename from _data/glossary/dynamic-volume-provisioning.yaml rename to data/glossary/dynamic-volume-provisioning.yaml diff --git a/_data/glossary/etcd.yaml b/data/glossary/etcd.yaml similarity index 100% rename from _data/glossary/etcd.yaml rename to data/glossary/etcd.yaml diff --git a/_data/glossary/helm-chart.yaml b/data/glossary/helm-chart.yaml similarity index 100% rename from _data/glossary/helm-chart.yaml rename to data/glossary/helm-chart.yaml diff --git a/_data/glossary/horizontal-pod-autoscaler.yaml b/data/glossary/horizontal-pod-autoscaler.yaml similarity index 100% rename from _data/glossary/horizontal-pod-autoscaler.yaml rename to data/glossary/horizontal-pod-autoscaler.yaml diff --git a/_data/glossary/image.yaml b/data/glossary/image.yaml similarity index 100% rename from _data/glossary/image.yaml rename to data/glossary/image.yaml diff --git a/_data/glossary/ingress.yaml b/data/glossary/ingress.yaml similarity index 100% rename from _data/glossary/ingress.yaml rename to data/glossary/ingress.yaml diff --git a/_data/glossary/init-container.yaml b/data/glossary/init-container.yaml similarity index 100% rename from _data/glossary/init-container.yaml rename to data/glossary/init-container.yaml diff --git a/_data/glossary/istio.yaml b/data/glossary/istio.yaml similarity index 100% rename from _data/glossary/istio.yaml rename to data/glossary/istio.yaml diff --git a/_data/glossary/job.yaml b/data/glossary/job.yaml similarity index 100% rename from _data/glossary/job.yaml rename to data/glossary/job.yaml diff --git a/_data/glossary/kops.yaml b/data/glossary/kops.yaml similarity index 100% rename from _data/glossary/kops.yaml rename to data/glossary/kops.yaml diff --git a/_data/glossary/kube-apiserver.yaml b/data/glossary/kube-apiserver.yaml similarity index 100% rename from _data/glossary/kube-apiserver.yaml rename to data/glossary/kube-apiserver.yaml diff --git a/_data/glossary/kube-controller-manager.yaml b/data/glossary/kube-controller-manager.yaml similarity index 100% rename from _data/glossary/kube-controller-manager.yaml rename to data/glossary/kube-controller-manager.yaml diff --git a/_data/glossary/kube-proxy.yaml b/data/glossary/kube-proxy.yaml similarity index 100% rename from _data/glossary/kube-proxy.yaml rename to data/glossary/kube-proxy.yaml diff --git a/_data/glossary/kube-scheduler.yaml b/data/glossary/kube-scheduler.yaml similarity index 100% rename from _data/glossary/kube-scheduler.yaml rename to data/glossary/kube-scheduler.yaml diff --git a/_data/glossary/kubeadm.yaml b/data/glossary/kubeadm.yaml similarity index 100% rename from _data/glossary/kubeadm.yaml rename to data/glossary/kubeadm.yaml diff --git a/_data/glossary/kubectl.yaml b/data/glossary/kubectl.yaml similarity index 100% rename from _data/glossary/kubectl.yaml rename to data/glossary/kubectl.yaml diff --git a/_data/glossary/kubelet.yaml b/data/glossary/kubelet.yaml similarity index 100% rename from _data/glossary/kubelet.yaml rename to data/glossary/kubelet.yaml diff --git a/_data/glossary/kubernetes-api.yaml b/data/glossary/kubernetes-api.yaml similarity index 100% rename from _data/glossary/kubernetes-api.yaml rename to data/glossary/kubernetes-api.yaml diff --git a/_data/glossary/label.yaml b/data/glossary/label.yaml similarity index 100% rename from _data/glossary/label.yaml rename to data/glossary/label.yaml diff --git a/_data/glossary/maintainer.yaml b/data/glossary/maintainer.yaml similarity index 100% rename from _data/glossary/maintainer.yaml rename to data/glossary/maintainer.yaml diff --git a/_data/glossary/managed-service.yaml b/data/glossary/managed-service.yaml similarity index 100% rename from _data/glossary/managed-service.yaml rename to data/glossary/managed-service.yaml diff --git a/_data/glossary/member.yaml b/data/glossary/member.yaml similarity index 100% rename from _data/glossary/member.yaml rename to data/glossary/member.yaml diff --git a/_data/glossary/minikube.yaml b/data/glossary/minikube.yaml similarity index 100% rename from _data/glossary/minikube.yaml rename to data/glossary/minikube.yaml diff --git a/_data/glossary/name.yaml b/data/glossary/name.yaml similarity index 100% rename from _data/glossary/name.yaml rename to data/glossary/name.yaml diff --git a/_data/glossary/namespace.yaml b/data/glossary/namespace.yaml similarity index 100% rename from _data/glossary/namespace.yaml rename to data/glossary/namespace.yaml diff --git a/_data/glossary/network-policy.yaml b/data/glossary/network-policy.yaml similarity index 100% rename from _data/glossary/network-policy.yaml rename to data/glossary/network-policy.yaml diff --git a/_data/glossary/node.yaml b/data/glossary/node.yaml similarity index 100% rename from _data/glossary/node.yaml rename to data/glossary/node.yaml diff --git a/_data/glossary/persistent-volume-claim.yaml b/data/glossary/persistent-volume-claim.yaml similarity index 100% rename from _data/glossary/persistent-volume-claim.yaml rename to data/glossary/persistent-volume-claim.yaml diff --git a/_data/glossary/persistent-volume.yaml b/data/glossary/persistent-volume.yaml similarity index 100% rename from _data/glossary/persistent-volume.yaml rename to data/glossary/persistent-volume.yaml diff --git a/_data/glossary/platform-developer.yaml b/data/glossary/platform-developer.yaml similarity index 100% rename from _data/glossary/platform-developer.yaml rename to data/glossary/platform-developer.yaml diff --git a/_data/glossary/pod-security-policy.yaml b/data/glossary/pod-security-policy.yaml similarity index 100% rename from _data/glossary/pod-security-policy.yaml rename to data/glossary/pod-security-policy.yaml diff --git a/_data/glossary/pod.yaml b/data/glossary/pod.yaml similarity index 100% rename from _data/glossary/pod.yaml rename to data/glossary/pod.yaml diff --git a/_data/glossary/podpreset.yaml b/data/glossary/podpreset.yaml similarity index 100% rename from _data/glossary/podpreset.yaml rename to data/glossary/podpreset.yaml diff --git a/_data/glossary/rbac.yaml b/data/glossary/rbac.yaml similarity index 100% rename from _data/glossary/rbac.yaml rename to data/glossary/rbac.yaml diff --git a/_data/glossary/replica-set.yml b/data/glossary/replica-set.yml similarity index 100% rename from _data/glossary/replica-set.yml rename to data/glossary/replica-set.yml diff --git a/_data/glossary/replication-controller.yaml b/data/glossary/replication-controller.yaml similarity index 100% rename from _data/glossary/replication-controller.yaml rename to data/glossary/replication-controller.yaml diff --git a/_data/glossary/resource-quota.yaml b/data/glossary/resource-quota.yaml similarity index 100% rename from _data/glossary/resource-quota.yaml rename to data/glossary/resource-quota.yaml diff --git a/_data/glossary/reviewer.yaml b/data/glossary/reviewer.yaml similarity index 100% rename from _data/glossary/reviewer.yaml rename to data/glossary/reviewer.yaml diff --git a/_data/glossary/secret.yml b/data/glossary/secret.yml similarity index 100% rename from _data/glossary/secret.yml rename to data/glossary/secret.yml diff --git a/_data/glossary/security-context.yaml b/data/glossary/security-context.yaml similarity index 100% rename from _data/glossary/security-context.yaml rename to data/glossary/security-context.yaml diff --git a/_data/glossary/selector.yaml b/data/glossary/selector.yaml similarity index 100% rename from _data/glossary/selector.yaml rename to data/glossary/selector.yaml diff --git a/_data/glossary/service-account.yaml b/data/glossary/service-account.yaml similarity index 100% rename from _data/glossary/service-account.yaml rename to data/glossary/service-account.yaml diff --git a/_data/glossary/service-broker.yaml b/data/glossary/service-broker.yaml similarity index 100% rename from _data/glossary/service-broker.yaml rename to data/glossary/service-broker.yaml diff --git a/_data/glossary/service-catalog.yaml b/data/glossary/service-catalog.yaml similarity index 100% rename from _data/glossary/service-catalog.yaml rename to data/glossary/service-catalog.yaml diff --git a/_data/glossary/service.yaml b/data/glossary/service.yaml similarity index 100% rename from _data/glossary/service.yaml rename to data/glossary/service.yaml diff --git a/_data/glossary/sig.yaml b/data/glossary/sig.yaml similarity index 100% rename from _data/glossary/sig.yaml rename to data/glossary/sig.yaml diff --git a/_data/glossary/statefulset.yml b/data/glossary/statefulset.yml similarity index 100% rename from _data/glossary/statefulset.yml rename to data/glossary/statefulset.yml diff --git a/_data/glossary/storage-class.yaml b/data/glossary/storage-class.yaml similarity index 100% rename from _data/glossary/storage-class.yaml rename to data/glossary/storage-class.yaml diff --git a/_data/glossary/uid.yaml b/data/glossary/uid.yaml similarity index 100% rename from _data/glossary/uid.yaml rename to data/glossary/uid.yaml diff --git a/_data/glossary/upstream.yaml b/data/glossary/upstream.yaml similarity index 100% rename from _data/glossary/upstream.yaml rename to data/glossary/upstream.yaml diff --git a/_data/glossary/volume-plugin.yaml b/data/glossary/volume-plugin.yaml similarity index 100% rename from _data/glossary/volume-plugin.yaml rename to data/glossary/volume-plugin.yaml diff --git a/_data/glossary/volume.yaml b/data/glossary/volume.yaml similarity index 100% rename from _data/glossary/volume.yaml rename to data/glossary/volume.yaml diff --git a/_data/glossary/wg.yaml b/data/glossary/wg.yaml similarity index 100% rename from _data/glossary/wg.yaml rename to data/glossary/wg.yaml diff --git a/_data/imported.yml b/data/imported.yml similarity index 100% rename from _data/imported.yml rename to data/imported.yml diff --git a/_data/overrides.yml b/data/overrides.yml similarity index 100% rename from _data/overrides.yml rename to data/overrides.yml diff --git a/_data/reference.yml b/data/reference.yml similarity index 100% rename from _data/reference.yml rename to data/reference.yml diff --git a/_data/search.yml b/data/search.yml similarity index 100% rename from _data/search.yml rename to data/search.yml diff --git a/_data/setup.yml b/data/setup.yml similarity index 96% rename from _data/setup.yml rename to data/setup.yml index ec85fcd791aff..f09b31417d87f 100644 --- a/_data/setup.yml +++ b/data/setup.yml @@ -11,6 +11,11 @@ toc: - docs/imported/release/notes.md - docs/setup/building-from-source.md +- title: Version 1.10 Troubleshooting + landing page: /docs/reference/pvc-finalizer-downgrade-issue/ + section: + - docs/reference/pvc-finalizer-downgrade-issue.md + - title: Independent Solutions landing_page: /docs/getting-started-guides/minikube/ section: diff --git a/_data/tasks.yml b/data/tasks.yml similarity index 100% rename from _data/tasks.yml rename to data/tasks.yml diff --git a/_data/tools.yml b/data/tools.yml similarity index 100% rename from _data/tools.yml rename to data/tools.yml diff --git a/_data/tutorials.yml b/data/tutorials.yml similarity index 100% rename from _data/tutorials.yml rename to data/tutorials.yml diff --git a/_data/user-personas/contributors/code-contributor.yaml b/data/user-personas/contributors/code-contributor.yaml similarity index 100% rename from _data/user-personas/contributors/code-contributor.yaml rename to data/user-personas/contributors/code-contributor.yaml diff --git a/_data/user-personas/contributors/community-contributor.yaml b/data/user-personas/contributors/community-contributor.yaml similarity index 100% rename from _data/user-personas/contributors/community-contributor.yaml rename to data/user-personas/contributors/community-contributor.yaml diff --git a/_data/user-personas/contributors/docs-contributor.yaml b/data/user-personas/contributors/docs-contributor.yaml similarity index 100% rename from _data/user-personas/contributors/docs-contributor.yaml rename to data/user-personas/contributors/docs-contributor.yaml diff --git a/_data/user-personas/migrators/docker-compose-swarm.yaml b/data/user-personas/migrators/docker-compose-swarm.yaml similarity index 100% rename from _data/user-personas/migrators/docker-compose-swarm.yaml rename to data/user-personas/migrators/docker-compose-swarm.yaml diff --git a/_data/user-personas/migrators/heroku.yaml b/data/user-personas/migrators/heroku.yaml similarity index 100% rename from _data/user-personas/migrators/heroku.yaml rename to data/user-personas/migrators/heroku.yaml diff --git a/_data/user-personas/migrators/mesos.yaml b/data/user-personas/migrators/mesos.yaml similarity index 100% rename from _data/user-personas/migrators/mesos.yaml rename to data/user-personas/migrators/mesos.yaml diff --git a/_data/user-personas/migrators/vmware-openstack.yaml b/data/user-personas/migrators/vmware-openstack.yaml similarity index 100% rename from _data/user-personas/migrators/vmware-openstack.yaml rename to data/user-personas/migrators/vmware-openstack.yaml diff --git a/_data/user-personas/users/app-developer.yaml b/data/user-personas/users/app-developer.yaml similarity index 100% rename from _data/user-personas/users/app-developer.yaml rename to data/user-personas/users/app-developer.yaml diff --git a/_data/user-personas/users/cluster-operator.yaml b/data/user-personas/users/cluster-operator.yaml similarity index 100% rename from _data/user-personas/users/cluster-operator.yaml rename to data/user-personas/users/cluster-operator.yaml diff --git a/docs/home/contribute/includes.md b/docs/home/contribute/includes.md deleted file mode 100644 index c7da92716286a..0000000000000 --- a/docs/home/contribute/includes.md +++ /dev/null @@ -1,205 +0,0 @@ ---- -approvers: -- chenopis -title: Custom Jekyll Include Snippets ---- - -{% capture overview %} -This page explains the custom Jekyll include snippets that can be used in -Kubernetes documentation markdown. - -Read more about includes in the [Jekyll documentation](https://jekyllrb.com/docs/includes/). -{% endcapture %} - -{% capture body %} -## Feature state - -In a markdown page (.md file) on this site, you can add a tag to display -version and state of the documented feature. - -### Feature state demo - -Below is a demo of the feature state snippet. Here it is used to display the feature as stable in Kubernetes version 1.6. - -{% assign for_k8s_version = "1.6" %} -{% include feature-state-stable.md %} - -### Feature state code - -Below is the template code for each available feature state. - -The displayed Kubernetes version defaults to that of the page. This can be -changed by setting the for_k8s_version variable. - -````liquid -{{ "{% assign for_k8s_version = " }} "1.6" %} -{{ "{% include feature-state-stable.md " }}%} -```` - -#### Alpha feature - -````liquid -{{ "{% include feature-state-alpha.md " }}%} -```` - -#### Beta feature - -````liquid -{{ "{% include feature-state-beta.md " }}%} -```` - -#### Stable feature - -````liquid -{{ "{% include feature-state-stable.md " }}%} -```` - -#### Deprecated feature - -````liquid -{{ "{% include feature-state-deprecated.md " }}%} -```` - -## Glossary - -You can reference glossary terms with an inclusion that will automatically update and replace content with the relevant links from [our glossary](/docs/reference/glossary/). When the term is moused-over by someone -using the online documentation, the glossary entry will display a tooltip. - -The raw data for glossary terms is stored at [https://github.com/kubernetes/website/tree/master/_data/glossary](https://github.com/kubernetes/website/tree/master/_data/glossary), with a YAML file for each glossary term. - -### Glossary Demo - -For example, the following include within the markdown will render to {% glossary_tooltip text="cluster" term_id="cluster" %} with a tooltip: - -````liquid -{{ "{% glossary_tooltip text=" }}"cluster" term_id="cluster" %} -```` - -## Tabs - -In a markdown page (`.md` file) on this site, you can add a tab set to display multiple flavors of a given solution. - -### Tabs demo - -Below is a demo of the tabs snippet. Here it is used to display each of the installation commands for the various Kubernetes network solutions. - -{% capture default_tab %} -Select one of the tabs. -{% endcapture %} - -{% capture calico %} -```shell -kubectl apply -f "http://docs.projectcalico.org/v2.4/getting-started/kubernetes/installation/hosted/kubeadm/calico.yaml" -``` -{% endcapture %} - -{% capture flannel %} -```shell -kubectl apply -f "https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml?raw=true" -``` -{% endcapture %} - -{% capture romana %} -```shell -kubectl apply -f "https://raw.githubusercontent.com/romana/romana/master/containerize/specs/romana-kubeadm.yml" -``` -{% endcapture %} - -{% capture weave_net %} -```shell -kubectl apply -f "https://git.io/weave-kube" -``` -{% endcapture %} - -{% assign tab_names = "Default,Calico,Flannel,Romana,Weave Net" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: default_tab | push: calico | push: flannel | push: romana | push: weave_net %} - -{% include tabs.md %} - -### Example Liquid template code for tabs - -Below is the [Liquid](https://shopify.github.io/liquid/) template code for the tabs demo above to illustrate how to specify the contents of each tab. The [`/_includes/tabs.md`](https://git.k8s.io/website/_includes/tabs.md) file included at the end then uses those elements to render the actual tab set. - -The following sections break down each of the individual features used. - -````liquid -{{ "{% capture default_tab " }}%} -Select one of the tabs. -{{ "{% endcapture " }}%} - -{{ "{% capture calico " }}%} -```shell -kubectl apply -f "http://docs.projectcalico.org/v2.4/getting-started/kubernetes/installation/hosted/kubeadm/calico.yaml" -``` -{{ "{% endcapture " }}%} - -{{ "{% capture flannel " }}%} -```shell -kubectl apply -f "https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml?raw=true" -``` -{{ "{% endcapture " }}%} - -{{ "{% capture romana " }}%} -```shell -kubectl apply -f "https://raw.githubusercontent.com/romana/romana/master/containerize/specs/romana-kubeadm.yml" -``` -{{ "{% endcapture " }}%} - -{{ "{% capture weave_net " }}%} -```shell -kubectl apply -f "https://git.io/weave-kube" -``` -{{ "{% endcapture " }}%} - -{{ "{% assign tab_names = 'Default,Calico,Flannel,Romana,Weave Net' | split: ',' | compact " }}%} -{{ "{% assign tab_contents = site.emptyArray | push: default_tab | push: calico | push: flannel | push: romana | push: weave_net " }}%} - -{{ "{% include tabs.md " }}%} -```` - -#### Capturing tab content - -````liquid -{{ "{% capture calico " }}%} -```shell -kubectl apply -f "http://docs.projectcalico.org/v2.4/getting-started/kubernetes/installation/hosted/kubeadm/calico.yaml" -``` -{{ "{% endcapture " }}%} -```` - -The `capture [variable_name]` tags store text or markdown content and assign them to the specified variable. - -#### Assigning tab names - -````liquid -{{ "{% assign tab_names = 'Default,Calico,Flannel,Romana,Weave Net' | split: ',' | compact " }}%} -```` - -The `assign tab_names` tag takes a list of labels to use for the tabs. Label text can include spaces. The given comma delimited string is split into an array and assigned to the `tab_names` variable. - -#### Assigning tab contents - -````liquid -{{ "{% assign tab_contents = site.emptyArray | push: default_tab | push: calico | push: flannel | push: romana | push: weave_net " }}%} -```` - -The `assign tab_contents` tag adds the contents of each tab pane, captured above, as elements to the `tab_contents` array. - -#### Including the tabs.md template - -````liquid -{{ "{% include tabs.md " }}%} -```` - -`{{ "{% include tabs.md " }}%}` pulls in the tabs template code, which uses the `tab_names` and `tab_contents` variables to render the tab set. -{% endcapture %} - -{% capture whatsnext %} -* Learn about [Jekyll](https://jekyllrb.com/docs). -* Learn about [writing a new topic](/docs/home/contribute/write-new-topic/). -* Learn about [using page templates](/docs/home/contribute/page-templates/). -* Learn about [staging your changes](/docs/home/contribute/stage-documentation-changes/) -* Learn about [creating a pull request](/docs/home/contribute/create-pull-request/). -{% endcapture %} - -{% include templates/concept.md %} diff --git a/docs/home/index.md b/docs/home/index.md deleted file mode 100644 index c065f0823ac5b..0000000000000 --- a/docs/home/index.md +++ /dev/null @@ -1,161 +0,0 @@ ---- -approvers: -- chenopis -title: Kubernetes Documentation -layout: docsportal -noedit: true -cid: userJourneys -css: /css/style_user_journeys.css -js: /js/user-journeys/home.js, https://use.fontawesome.com/4bcc658a89.js -display_browse_numbers: true ---- - -{% unless page.notitle %} -

{{ page.title }}

-{% endunless %} - -
- {{ site.data.user-personas | json | replace: "=>", ": " }} -
- -
-{% assign skip_uj_paths = "migrators" | split: "," %} -{% for path in site.data.user-personas %} - {% if skip_uj_paths contains path[0] %} - {% else %} - {% for persona in path[1] %} -
- {% assign persona_info = persona[1] %} - {% if persona_info.glossary_id %} - {{ site.data.glossary[persona_info.glossary_id].short-description }} - {% else if persona_info.short_desc %} - {{ persona_info.short_desc }} - {% endif %} -
- {% endfor %} - {% endif %} -{% endfor %} -
- -
-
- -Kubernetes is an open source system for managing [containerized applications](https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/) -across multiple hosts, providing basic mechanisms for deployment, maintenance, and scaling of applications. -The open source project is hosted by the Cloud Native Computing Foundation ([CNCF](https://www.cncf.io/about)). - -
-[Download Current Release](/docs/imported/release/notes/) -
-
-[Supported Doc Versions](/docs/home/supported-doc-versions/) -
- -
-
- -
- - - - -
- -
-
I AM...
-
-
.
-
-
- -
-
LEVEL
-
-
- -
-
- Foundational -
-
-
- -
- -
- Intermediate -
-
-
- -
-
- Advanced Topics -
-
-
-
- -
-
- I want to... - -
-
- - -
- - -
- -{% assign sections = "setup,concepts,tasks,tutorials,reference,docs-home" | split: "," %} - -{% for section_id in sections %} - - {% assign section_data = site.data[section_id] %} - {% assign section_toc = section_data.toc %} - -
- - - {% assign section_toc = section_toc | where_exp: "elt", "elt.title != null" %} - {% assign num_pages = section_toc | size %} - {% assign column_size = num_pages | divided_by: 3.0 | ceil %} - -
- - {% for i in (1..num_pages) %} - {% assign index = i | minus: 1 %} - {% assign offset = index | modulo: column_size | plus: 1 %} - {% assign section_elt = section_toc[index] %} - - {% if page.display_browse_numbers %} - {% assign browse_number = i | prepend: "0" | slice: -2, 2 | append: " - " %} - {% else %} - {% assign browse_number = "" %} - {% endif %} - - {% if offset == 1 %} -
- {% endif %} - - {% assign elt_url = section_elt.path | default: section_elt.landing_page | default: "#" %} - {{ section_elt.title | prepend: browse_number }}
- {% if offset == column_size or i == num_pages %} -
- {% endif %} - {% endfor %} - -
- -
- -{% endfor %} - -
-
diff --git a/docs/reference/generated/cloud-controller-manager.md b/docs/reference/generated/cloud-controller-manager.md deleted file mode 100644 index d671aa8452e1c..0000000000000 --- a/docs/reference/generated/cloud-controller-manager.md +++ /dev/null @@ -1,326 +0,0 @@ ---- -title: cloud-controller-manager -notitle: true ---- -## cloud-controller-manager - - - -### Synopsis - - -The Cloud controller manager is a daemon that embeds -the cloud specific control loops shipped with Kubernetes. - -``` -cloud-controller-manager [flags] -``` - -### Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--address ip     Default: 0.0.0.0
DEPRECATED: the IP address on which to listen for the --port port. See --bind-address instead.
--allocate-node-cidrs
Should CIDRs for Pods be allocated and set on the cloud provider.
--azure-container-registry-config string
Path to the file containing Azure container registry configuration information.
--bind-address ip     Default: 0.0.0.0
The IP address on which to listen for the --secure-port port. 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 for all IPv4 interfaces and :: for all IPv6 interfaces).
--cert-dir string     Default: "/var/run/kubernetes"
The directory where the TLS certs are located. If --tls-cert-file and --tls-private-key-file are provided, this flag will be ignored.
--cidr-allocator-type string     Default: "RangeAllocator"
Type of CIDR allocator to use
--cloud-config string
The path to the cloud provider configuration file. Empty string for no configuration file.
--cloud-provider string
The provider of cloud services. Cannot be empty.
--cluster-cidr string
CIDR Range for Pods in cluster. Requires --allocate-node-cidrs to be true
--cluster-name string     Default: "kubernetes"
The instance prefix for the cluster.
--concurrent-service-syncs int32     Default: 1
The number of services that are allowed to sync concurrently. Larger number = more responsive service management, but more CPU (and network) load
--configure-cloud-routes     Default: true
Should CIDRs allocated by allocate-node-cidrs be configured on the cloud provider.
--contention-profiling
Enable lock contention profiling, if profiling is enabled.
--controller-start-interval duration
Interval between starting controller managers.
--feature-gates mapStringBool
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
Accelerators=true|false (ALPHA - default=false)
AdvancedAuditing=true|false (BETA - default=true)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (ALPHA - default=false)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (ALPHA - default=false)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
MountPropagation=true|false (BETA - default=true)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (ALPHA - default=false)
PodShareProcessNamespace=true|false (ALPHA - default=false)
ReadOnlyAPIDataVolumes=true|false (DEPRECATED - default=true)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (ALPHA - default=false)
RunAsGroup=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (ALPHA - default=false)
ServiceNodeExclusion=true|false (ALPHA - default=false)
ServiceProxyAllowExternalIPs=true|false (DEPRECATED - default=false)
StorageObjectInUseProtection=true|false (BETA - default=true)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportIPVSProxyMode=true|false (BETA - default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (ALPHA - default=false)
TokenRequest=true|false (ALPHA - default=false)
VolumeScheduling=true|false (BETA - default=true)
VolumeSubpath=true|false (default=true)
-h, --help
help for cloud-controller-manager
--http2-max-streams-per-connection int
The limit that the server gives to clients for the maximum number of streams in an HTTP/2 connection. Zero means to use golang's default.
--kube-api-burst int32     Default: 30
Burst to use while talking with kubernetes apiserver.
--kube-api-content-type string     Default: "application/vnd.kubernetes.protobuf"
Content type of requests sent to apiserver.
--kube-api-qps float32     Default: 20
QPS to use while talking with kubernetes apiserver.
--kubeconfig string
Path to kubeconfig file with authorization and master location information.
--leader-elect     Default: true
Start a leader election client and gain leadership before executing the main loop. Enable this when running replicated components for high availability.
--leader-elect-lease-duration duration     Default: 15s
The duration that non-leader candidates will wait after observing a leadership renewal until attempting to acquire leadership of a led but unrenewed leader slot. This is effectively the maximum duration that a leader can be stopped before it is replaced by another candidate. This is only applicable if leader election is enabled.
--leader-elect-renew-deadline duration     Default: 10s
The interval between attempts by the acting master to renew a leadership slot before it stops leading. This must be less than or equal to the lease duration. This is only applicable if leader election is enabled.
--leader-elect-resource-lock endpoints     Default: "endpoints"
The type of resource object that is used for locking during leader election. Supported options are endpoints (default) and `configmaps`.
--leader-elect-retry-period duration     Default: 2s
The duration the clients should wait between attempting acquisition and renewal of a leadership. This is only applicable if leader election is enabled.
--log-flush-frequency duration     Default: 5s
Maximum number of seconds between log flushes
--master string
The address of the Kubernetes API server (overrides any value in kubeconfig).
--min-resync-period duration     Default: 12h0m0s
The resync period in reflectors will be random between MinResyncPeriod and 2*MinResyncPeriod.
--node-monitor-period duration     Default: 5s
The period for syncing NodeStatus in NodeController.
--node-status-update-frequency duration     Default: 5m0s
Specifies how often the controller updates nodes' status.
--port int     Default: 10253
DEPRECATED: the port on which to serve HTTP insecurely without authentication and authorization. If 0, don't serve HTTPS at all. See --secure-port instead.
--profiling     Default: true
Enable profiling via web interface host:port/debug/pprof/
--route-reconciliation-period duration     Default: 10s
The period for reconciling routes created for Nodes by cloud provider.
--secure-port int
The port on which to serve HTTPS with authentication and authorization. If 0, don't serve HTTPS at all.
--tls-cert-file string
File containing the default 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 the directory specified by --cert-dir.
--tls-cipher-suites stringSlice
Comma-separated list of cipher suites for the server. Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants). If omitted, the default Go cipher suites will be used
--tls-min-version string
Minimum TLS version supported. Value must match version names from https://golang.org/pkg/crypto/tls/#pkg-constants.
--tls-private-key-file string
File containing the default x509 private key matching --tls-cert-file.
--tls-sni-cert-key namedCertKey     Default: []
A pair of x509 certificate and private key file paths, optionally suffixed with a list of domain patterns which are fully qualified domain names, possibly with prefixed wildcard segments. If no domain patterns are provided, the names of the certificate are extracted. Non-wildcard matches trump over wildcard matches, explicit domain patterns trump over extracted names. For multiple key/certificate pairs, use the --tls-sni-cert-key multiple times. Examples: "example.crt,example.key" or "foo.crt,foo.key:*.foo.com,foo.com".
--use-service-account-credentials
If true, use individual service account credentials for each controller.
--version version[=true]
Print version information and quit
- - - diff --git a/docs/reference/generated/federation-apiserver.md b/docs/reference/generated/federation-apiserver.md deleted file mode 100644 index dad7dc4ae2d71..0000000000000 --- a/docs/reference/generated/federation-apiserver.md +++ /dev/null @@ -1,152 +0,0 @@ ---- -title: federation-apiserver -notitle: true ---- -## federation-apiserver - - - -### Synopsis - - -The Kubernetes federation 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. - -``` -federation-apiserver [flags] -``` - -### Options - -``` - --admission-control-config-file string File with admission control configuration. - --advertise-address ip 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. - --anonymous-auth Enables anonymous requests to the secure port of the API server. Requests that are not rejected by another authentication method are treated as anonymous requests. Anonymous requests have a username of system:anonymous, and a group name of system:unauthenticated. (default true) - --audit-log-format string Format of saved audits. "legacy" indicates 1-line text format for each event. "json" indicates structured json format. Requires the 'AdvancedAuditing' feature gate. Known formats are legacy,json. (default "json") - --audit-log-maxage int The maximum number of days to retain old audit log files based on the timestamp encoded in their filename. - --audit-log-maxbackup int The maximum number of old audit log files to retain. - --audit-log-maxsize int The maximum size in megabytes of the audit log file before it gets rotated. - --audit-log-path string If set, all requests coming to the apiserver will be logged to this file. '-' means standard out. - --audit-policy-file string Path to the file that defines the audit policy configuration. Requires the 'AdvancedAuditing' feature gate. With AdvancedAuditing, a profile is required to enable auditing. - --audit-webhook-batch-buffer-size int The size of the buffer to store events before batching and sending to the webhook. Only used in batch mode. (default 10000) - --audit-webhook-batch-initial-backoff duration The amount of time to wait before retrying the first failed requests. Only used in batch mode. (default 10s) - --audit-webhook-batch-max-size int The maximum size of a batch sent to the webhook. Only used in batch mode. (default 400) - --audit-webhook-batch-max-wait duration The amount of time to wait before force sending the batch that hadn't reached the max size. Only used in batch mode. (default 30s) - --audit-webhook-batch-throttle-burst int Maximum number of requests sent at the same moment if ThrottleQPS was not utilized before. Only used in batch mode. (default 15) - --audit-webhook-batch-throttle-qps float32 Maximum average number of requests per second. Only used in batch mode. (default 10) - --audit-webhook-config-file string Path to a kubeconfig formatted file that defines the audit webhook configuration. Requires the 'AdvancedAuditing' feature gate. - --audit-webhook-mode string Strategy for sending audit events. Blocking indicates sending events should block server responses. Batch causes the webhook to buffer and send events asynchronously. Known modes are batch,blocking. (default "batch") - --authentication-token-webhook-cache-ttl duration The duration to cache responses from the webhook token authenticator. (default 2m0s) - --authentication-token-webhook-config-file string File with webhook configuration for token authentication in kubeconfig format. The API server will query the remote service to determine authentication for bearer tokens. - --authorization-mode string Ordered list of plug-ins to do authorization on secure port. Comma-delimited list of: AlwaysAllow,AlwaysDeny,ABAC,Webhook,RBAC,Node. (default "AlwaysAllow") - --authorization-policy-file string File with authorization policy in csv format, used with --authorization-mode=ABAC, on the secure port. - --authorization-webhook-cache-authorized-ttl duration The duration to cache 'authorized' responses from the webhook authorizer. (default 5m0s) - --authorization-webhook-cache-unauthorized-ttl duration The duration to cache 'unauthorized' responses from the webhook authorizer. (default 30s) - --authorization-webhook-config-file string File with webhook configuration in kubeconfig format, used with --authorization-mode=Webhook. The API server will query the remote service to determine access on the API server's secure port. - --basic-auth-file string 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 ip The IP address on which to listen for the --secure-port port. 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). (default 0.0.0.0) - --cert-dir string The directory where the TLS certs are located. If --tls-cert-file and --tls-private-key-file are provided, this flag will be ignored. (default "/var/run/kubernetes") - --client-ca-file string 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. - --contention-profiling Enable lock contention profiling, if profiling is enabled - --cors-allowed-origins strings 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. - --default-watch-cache-size int Default watch cache size. If zero, watch cache will be disabled for resources that do not have a default watch size set. (default 100) - --delete-collection-workers int Number of workers spawned for DeleteCollection call. These are used to speed up namespace cleanup. (default 1) - --deserialization-cache-size int Number of deserialized json objects to cache in memory. - --disable-admission-plugins strings admission plugins that should be disabled although they are in the default enabled plugins list. Comma-delimited list of admission plugins: Initializers, MutatingAdmissionWebhook, NamespaceLifecycle, ValidatingAdmissionWebhook. The order of plugins in this flag does not matter. - --enable-admission-plugins strings admission plugins that should be enabled in addition to default enabled ones. Comma-delimited list of admission plugins: Initializers, MutatingAdmissionWebhook, NamespaceLifecycle, ValidatingAdmissionWebhook. The order of plugins in this flag does not matter. - --enable-bootstrap-token-auth Enable to allow secrets of type 'bootstrap.kubernetes.io/token' in the 'kube-system' namespace to be used for TLS bootstrapping authentication. - --enable-garbage-collector Enables the generic garbage collector. MUST be synced with the corresponding flag of the kube-controller-manager. (default true) - --enable-swagger-ui Enables swagger ui on the apiserver at /swagger-ui - --etcd-cafile string SSL Certificate Authority file used to secure etcd communication. - --etcd-certfile string SSL certification file used to secure etcd communication. - --etcd-compaction-interval duration The interval of compaction requests. If 0, the compaction request from apiserver is disabled. (default 5m0s) - --etcd-keyfile string SSL key file used to secure etcd communication. - --etcd-prefix string The prefix to prepend to all resource paths in etcd. (default "/registry") - --etcd-servers strings List of etcd servers to connect with (scheme://ip:port), comma separated. - --etcd-servers-overrides strings Per-resource etcd servers overrides, comma separated. The individual override format: group/resource#servers, where servers are http://ip:port, semicolon separated. - --event-ttl duration Amount of time to retain events. (default 1h0m0s) - --experimental-encryption-provider-config string The file containing configuration for encryption providers to be used for storing secrets in etcd - --experimental-keystone-ca-file string If set, the Keystone server's certificate will be verified by one of the authorities in the experimental-keystone-ca-file, otherwise the host's root CA set will be used. - --experimental-keystone-url string If passed, activates the keystone authentication plugin. - --external-hostname string The hostname to use when generating externalized URLs for this master (e.g. Swagger API Docs). - --feature-gates mapStringBool A set of key=value pairs that describe feature gates for alpha/experimental features. Options are: -APIListChunking=true|false (BETA - default=true) -APIResponseCompression=true|false (ALPHA - default=false) -Accelerators=true|false (ALPHA - default=false) -AdvancedAuditing=true|false (BETA - default=true) -AllAlpha=true|false (ALPHA - default=false) -AppArmor=true|false (BETA - default=true) -BlockVolume=true|false (ALPHA - default=false) -CPUManager=true|false (BETA - default=true) -CSIPersistentVolume=true|false (ALPHA - default=false) -CustomPodDNS=true|false (ALPHA - default=false) -CustomResourceValidation=true|false (BETA - default=true) -DebugContainers=true|false (ALPHA - default=false) -DevicePlugins=true|false (ALPHA - default=false) -DynamicKubeletConfig=true|false (ALPHA - default=false) -EnableEquivalenceClassCache=true|false (ALPHA - default=false) -ExpandPersistentVolumes=true|false (ALPHA - default=false) -ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false) -ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false) -HugePages=true|false (BETA - default=true) -HyperVContainer=true|false (ALPHA - default=false) -Initializers=true|false (ALPHA - default=false) -LocalStorageCapacityIsolation=true|false (ALPHA - default=false) -MountContainers=true|false (ALPHA - default=false) -MountPropagation=true|false (ALPHA - default=false) -PVCProtection=true|false (ALPHA - default=false) -PersistentLocalVolumes=true|false (ALPHA - default=false) -PodPriority=true|false (ALPHA - default=false) -PodShareProcessNamespace=true|false (ALPHA - default=false) -ResourceLimitsPriorityFunction=true|false (ALPHA - default=false) -RotateKubeletClientCertificate=true|false (BETA - default=true) -RotateKubeletServerCertificate=true|false (ALPHA - default=false) -ServiceNodeExclusion=true|false (ALPHA - default=false) -ServiceProxyAllowExternalIPs=true|false (DEPRECATED - default=false) -StreamingProxyRedirects=true|false (BETA - default=true) -SupportIPVSProxyMode=true|false (BETA - default=false) -SupportPodPidsLimit=true|false (ALPHA - default=false) -TaintBasedEvictions=true|false (ALPHA - default=false) -TaintNodesByCondition=true|false (ALPHA - default=false) -VolumeScheduling=true|false (ALPHA - default=false) - -h, --help help for federation-apiserver - --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s) - --master-service-namespace string DEPRECATED: the namespace from which the kubernetes master services should be injected into pods. (default "default") - --max-mutating-requests-inflight int The maximum number of mutating requests in flight at a given time. When the server exceeds this, it rejects requests. Zero for no limit. (default 200) - --max-requests-inflight int The maximum number of non-mutating requests in flight at a given time. When the server exceeds this, it rejects requests. Zero for no limit. (default 400) - --min-request-timeout int 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. (default 1800) - --oidc-ca-file string 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 string The client ID for the OpenID Connect client, must be set if oidc-issuer-url is set. - --oidc-groups-claim string If provided, the name of a custom OpenID Connect claim for specifying user groups. The claim value is expected to be a string or array of strings. This flag is experimental, please see the authentication documentation for further details. - --oidc-groups-prefix string If provided, all groups will be prefixed with this value to prevent conflicts with other authentication strategies. - --oidc-issuer-url string 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 string 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. (default "sub") - --oidc-username-prefix string If provided, all usernames will be prefixed with this value. If not provided, username claims other than 'email' are prefixed by the issuer URL to avoid clashes. To skip any prefixing, provide the value '-'. - --profiling Enable profiling via web interface host:port/debug/pprof/ (default true) - --request-timeout duration An optional field indicating the duration a handler must keep a request open before timing it out. This is the default request timeout for requests but may be overridden by flags such as --min-request-timeout for specific types of requests. (default 1m0s) - --requestheader-allowed-names strings List of client certificate common names to allow to provide usernames in headers specified by --requestheader-username-headers. If empty, any client certificate validated by the authorities in --requestheader-client-ca-file is allowed. - --requestheader-client-ca-file string Root certificate bundle to use to verify client certificates on incoming requests before trusting usernames in headers specified by --requestheader-username-headers - --requestheader-extra-headers-prefix strings List of request header prefixes to inspect. X-Remote-Extra- is suggested. - --requestheader-group-headers strings List of request headers to inspect for groups. X-Remote-Group is suggested. - --requestheader-username-headers strings List of request headers to inspect for usernames. X-Remote-User is common. - --runtime-config mapStringString A set of key=value pairs that describe runtime configuration that may be passed to apiserver. / (or for the core group) key can be used to turn on/off specific api versions. api/all is special key to control all api versions, be careful setting it false, unless you know what you do. api/legacy is deprecated, we will remove it in the future, so stop using it. - --secure-port int The port on which to serve HTTPS with authentication and authorization. If 0, don't serve HTTPS at all. (default 6443) - --service-account-key-file stringArray File containing PEM-encoded x509 RSA or ECDSA private or public keys, used to verify ServiceAccount tokens. If unspecified, --tls-private-key-file is used. The specified file can contain multiple keys, and the flag can be specified multiple times with different files. - --service-account-lookup If true, validate ServiceAccount tokens exist in etcd as part of authentication. (default true) - --storage-backend string The storage backend for persistence. Options: 'etcd3' (default), 'etcd2'. - --storage-media-type string The media type to use to store objects in storage. Some resources or storage backends may only support a specific media type and will ignore this setting. (default "application/vnd.kubernetes.protobuf") - --storage-versions string The per-group version to store resources in. Specified in the format "group1/version1,group2/version2,...". In the case where objects are moved from one group to the other, you may specify the format "group1=group2/v1beta1,group3/v1beta1,...". You only need to pass the groups you wish to change from the defaults. It defaults to a list of preferred versions of all registered groups, which is derived from the KUBE_API_VERSIONS environment variable. (default "admissionregistration.k8s.io/v1beta1,apps/v1beta1,authentication.k8s.io/v1,authorization.k8s.io/v1,autoscaling/v1,batch/v1,certificates.k8s.io/v1beta1,componentconfig/v1alpha1,events.k8s.io/v1beta1,extensions/v1beta1,federation/v1beta1,imagepolicy.k8s.io/v1alpha1,networking.k8s.io/v1,policy/v1beta1,rbac.authorization.k8s.io/v1,scheduling.k8s.io/v1alpha1,settings.k8s.io/v1alpha1,storage.k8s.io/v1,v1") - --target-ram-mb int Memory limit for apiserver in MB (used to configure sizes of caches, etc.) - --tls-cert-file string File containing the default 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 the directory specified by --cert-dir. - --tls-cipher-suites strings Comma-separated list of cipher suites for the server. Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants). If omitted, the default Go cipher suites will be used - --tls-min-version string Minimum TLS version supported. Value must match version names from https://golang.org/pkg/crypto/tls/#pkg-constants. - --tls-private-key-file string File containing the default x509 private key matching --tls-cert-file. - --tls-sni-cert-key namedCertKey A pair of x509 certificate and private key file paths, optionally suffixed with a list of domain patterns which are fully qualified domain names, possibly with prefixed wildcard segments. If no domain patterns are provided, the names of the certificate are extracted. Non-wildcard matches trump over wildcard matches, explicit domain patterns trump over extracted names. For multiple key/certificate pairs, use the --tls-sni-cert-key multiple times. Examples: "example.crt,example.key" or "foo.crt,foo.key:*.foo.com,foo.com". (default []) - --token-auth-file string If set, the file that will be used to secure the secure port of the API server via token authentication. - --watch-cache Enable watch caching in the apiserver (default true) - --watch-cache-sizes strings List of watch cache sizes for every resource (pods, nodes, etc.), comma separated. The individual override format: resource[.group]#size, where resource is lowercase plural (no version), group is optional, and size is a number. It takes effect when watch-cache is enabled. Some resources (replicationcontrollers, endpoints, nodes, pods, services, apiservices.apiregistration.k8s.io) have system defaults set by heuristics, others default to default-watch-cache-size -``` - -###### Auto generated by spf13/cobra on 25-Mar-2018 diff --git a/docs/reference/generated/federation-controller-manager.md b/docs/reference/generated/federation-controller-manager.md deleted file mode 100644 index 0e0c8f2bc10a4..0000000000000 --- a/docs/reference/generated/federation-controller-manager.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: federation-controller-manager -notitle: true ---- -## federation-controller-manager - - - -### Synopsis - - -The federation controller manager is a daemon that embeds -the core control loops shipped with federation. In applications of robotics and -automation, a control loop is a non-terminating loop that regulates the state of -the system. In federation, a controller is a control loop that watches the shared -state of the federation cluster through the apiserver and makes changes attempting -to move the current state towards the desired state. Examples of controllers that -ship with federation today is the cluster controller. - -``` -federation-controller-manager [flags] -``` - -### Options - -``` - --address ip The IP address to serve on (set to 0.0.0.0 for all interfaces) (default 0.0.0.0) - --cluster-monitor-period duration The period for syncing ClusterStatus in ClusterController. (default 40s) - --concurrent-job-syncs int The number of Jobs syncing operations that will be done concurrently. Larger number = faster endpoint updating, but more CPU (and network) load (default 10) - --concurrent-replicaset-syncs int The number of ReplicaSets syncing operations that will be done concurrently. Larger number = faster endpoint updating, but more CPU (and network) load (default 10) - --concurrent-service-syncs int The number of service syncing operations that will be done concurrently. Larger number = faster endpoint updating, but more CPU (and network) load (default 10) - --contention-profiling Enable lock contention profiling, if profiling is enabled - --controllers mapStringString A set of key=value pairs that describe controller configuration to enable/disable specific controllers. Key should be the resource name (like services) and value should be true or false. For example: services=false,ingresses=false - --dns-provider string DNS provider. Valid values are: ["aws-route53" "azure-azuredns" "coredns" "google-clouddns"] - --dns-provider-config string Path to config file for configuring DNS provider. - --federated-api-burst int Burst to use while talking with federation apiserver (default 30) - --federated-api-qps float32 QPS to use while talking with federation apiserver (default 20) - --federation-name string Federation name. - --federation-only-namespace string Name of the namespace that would be created only in federation control plane. (default "federation-only") - -h, --help help for federation-controller-manager - --hpa-scale-forbidden-window duration The time window wrt cluster local hpa lastscale time, during which federated hpa would not move the hpa max/min replicas around (default 2m0s) - --kube-api-content-type string ContentType of requests sent to apiserver. Passing application/vnd.kubernetes.protobuf is an experimental feature now. - --kubeconfig string Path to kubeconfig file with authorization and master location information. - --leader-elect Start a leader election client and gain leadership before executing the main loop. Enable this when running replicated components for high availability. - --leader-elect-lease-duration duration The duration that non-leader candidates will wait after observing a leadership renewal until attempting to acquire leadership of a led but unrenewed leader slot. This is effectively the maximum duration that a leader can be stopped before it is replaced by another candidate. This is only applicable if leader election is enabled. (default 15s) - --leader-elect-renew-deadline duration The interval between attempts by the acting master to renew a leadership slot before it stops leading. This must be less than or equal to the lease duration. This is only applicable if leader election is enabled. (default 10s) - --leader-elect-resource-lock endpoints The type of resource object that is used for locking during leader election. Supported options are endpoints (default) and `configmaps`. (default "endpoints") - --leader-elect-retry-period duration The duration the clients should wait between attempting acquisition and renewal of a leadership. This is only applicable if leader election is enabled. (default 2s) - --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s) - --master string The address of the federation API server (overrides any value in kubeconfig) - --port int The port that the controller-manager's http service runs on (default 10253) - --profiling Enable profiling via web interface host:port/debug/pprof/ (default true) - --service-dns-suffix string DNS Suffix to use when publishing federated service names. Defaults to zone-name - --zone-id string Zone ID, needed if the zone name is not unique. - --zone-name string Zone name, like example.com. -``` - -###### Auto generated by spf13/cobra on 25-Mar-2018 diff --git a/docs/reference/generated/federation/extensions/v1beta1/definitions.html b/docs/reference/generated/federation/extensions/v1beta1/definitions.html deleted file mode 100755 index cdeef7b790c04..0000000000000 --- a/docs/reference/generated/federation/extensions/v1beta1/definitions.html +++ /dev/null @@ -1,7379 +0,0 @@ ---- -title: extensions/v1beta1 Model Definitions -notitle: true ---- - - - - - - - -Top Level API Objects - - - - -
- -
-

Definitions

-
-
-

v1beta1.DeploymentStatus

-
-

DeploymentStatus is the most recently observed status of the Deployment.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

observedGeneration

The generation observed by the deployment controller.

false

integer (int64)

replicas

Total number of non-terminated pods targeted by this deployment (their labels match the selector).

false

integer (int32)

updatedReplicas

Total number of non-terminated pods targeted by this deployment that have the desired template spec.

false

integer (int32)

readyReplicas

Total number of ready pods targeted by this deployment.

false

integer (int32)

availableReplicas

Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.

false

integer (int32)

unavailableReplicas

Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.

false

integer (int32)

conditions

Represents the latest available observations of a deployment’s current state.

false

v1beta1.DeploymentCondition array

collisionCount

Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.

false

integer (int32)

- -
-
-

v1.APIResourceList

-
-

APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

groupVersion

groupVersion is the group and version this APIResourceList is for.

true

string

resources

resources contains the name of the resources and if they are namespaced.

true

v1.APIResource array

- -
-
-

v1.Affinity

-
-

Affinity is a group of affinity scheduling rules.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

nodeAffinity

Describes node affinity scheduling rules for the pod.

false

v1.NodeAffinity

podAffinity

Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).

false

v1.PodAffinity

podAntiAffinity

Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).

false

v1.PodAntiAffinity

- -
-
-

v1beta1.DaemonSetStatus

-
-

DaemonSetStatus represents the current status of a daemon set.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

currentNumberScheduled

The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/

true

integer (int32)

numberMisscheduled

The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/

true

integer (int32)

desiredNumberScheduled

The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/

true

integer (int32)

numberReady

The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.

true

integer (int32)

observedGeneration

The most recent generation observed by the daemon set controller.

false

integer (int64)

updatedNumberScheduled

The total number of nodes that are running updated daemon pod

false

integer (int32)

numberAvailable

The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)

false

integer (int32)

numberUnavailable

The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)

false

integer (int32)

collisionCount

Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.

false

integer (int32)

- -
-
-

v1.NodeSelectorTerm

-
-

A null or empty node selector term matches no objects.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

matchExpressions

Required. A list of node selector requirements. The requirements are ANDed.

true

v1.NodeSelectorRequirement array

- -
-
-

v1.Preconditions

-
-

Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

uid

Specifies the target UID.

false

types.UID

- -
-
-

v1.ObjectFieldSelector

-
-

ObjectFieldSelector selects an APIVersioned field of an object.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

apiVersion

Version of the schema the FieldPath is written in terms of, defaults to "v1".

false

string

fieldPath

Path of the field to select in the specified API version.

true

string

- -
-
-

v1.SELinuxOptions

-
-

SELinuxOptions are the labels to be applied to the container

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

user

User is a SELinux user label that applies to the container.

false

string

role

Role is a SELinux role label that applies to the container.

false

string

type

Type is a SELinux type label that applies to the container.

false

string

level

Level is SELinux level label that applies to the container.

false

string

- -
-
-

v1beta1.IngressSpec

-
-

IngressSpec describes the Ingress the user wishes to exist.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

backend

A default backend capable of servicing requests that don’t match any rule. At least one of backend or rules must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.

false

v1beta1.IngressBackend

tls

TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.

false

v1beta1.IngressTLS array

rules

A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.

false

v1beta1.IngressRule array

- -
-
-

v1.VolumeMount

-
-

VolumeMount describes a mounting of a Volume within a container.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

This must match the Name of a Volume.

true

string

readOnly

Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.

false

boolean

false

mountPath

Path within the container at which the volume should be mounted. Must not contain :.

true

string

subPath

Path within the volume from which the container’s volume should be mounted. Defaults to "" (volume’s root).

false

string

mountPropagation

mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationHostToContainer is used. This field is alpha in 1.8 and can be reworked or removed in a future release.

false

v1.MountPropagationMode

- -
-
-

v1.MountPropagationMode

- -
-
-

v1.DownwardAPIProjection

-
-

Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

items

Items is a list of DownwardAPIVolume file

false

v1.DownwardAPIVolumeFile array

- -
-
-

v1.LabelSelector

-
-

A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

matchLabels

matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.

false

object

matchExpressions

matchExpressions is a list of label selector requirements. The requirements are ANDed.

false

v1.LabelSelectorRequirement array

- -
-
-

v1beta1.IngressBackend

-
-

IngressBackend describes all endpoints for a given service and port.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

serviceName

Specifies the name of the referenced service.

true

string

servicePort

Specifies the port of the referenced service.

true

string

- -
-
-

v1beta1.ReplicaSetList

-
-

ReplicaSetList is a collection of ReplicaSets.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

v1.ListMeta

items

List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller

true

v1beta1.ReplicaSet array

- -
-
-

v1.CephFSVolumeSource

-
-

Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

monitors

Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it

true

string array

path

Optional: Used as the mounted root, rather than the full Ceph tree, default is /

false

string

user

Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it

false

string

secretFile

Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it

false

string

secretRef

Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it

false

v1.LocalObjectReference

readOnly

Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it

false

boolean

false

- -
-
-

v1beta1.IngressStatus

-
-

IngressStatus describe the current state of the Ingress.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

loadBalancer

LoadBalancer contains the current status of the load-balancer.

false

v1.LoadBalancerStatus

- -
-
-

v1.DownwardAPIVolumeSource

-
-

DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

items

Items is a list of downward API volume file

false

v1.DownwardAPIVolumeFile array

defaultMode

Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.

false

integer (int32)

- -
-
-

v1beta1.ReplicaSetCondition

-
-

ReplicaSetCondition describes the state of a replica set at a certain point.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

type

Type of replica set condition.

true

string

status

Status of the condition, one of True, False, Unknown.

true

string

lastTransitionTime

The last time the condition transitioned from one status to another.

false

string

reason

The reason for the condition’s last transition.

false

string

message

A human readable message indicating details about the transition.

false

string

- -
-
-

v1.GCEPersistentDiskVolumeSource

-
-

Represents a Persistent Disk resource in Google Compute Engine.

-
-
-

A GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

pdName

Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk

true

string

fsType

Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk

false

string

partition

The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk

false

integer (int32)

readOnly

ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk

false

boolean

false

- -
-
-

v1beta1.RollingUpdateDeployment

-
-

Spec to control the desired behavior of rolling update.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

maxUnavailable

The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if 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.

false

string

maxSurge

The maximum number of pods that can be scheduled 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.

false

string

- -
-
-

v1beta1.HTTPIngressRuleValue

-
-

HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http://<host>/<path>?<searchpart> → backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last / and before the first ? or #.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

paths

A collection of paths that map requests to backends.

true

v1beta1.HTTPIngressPath array

- -
-
-

v1.ConfigMapVolumeSource

-
-

Adapts a ConfigMap into a volume.

-
-
-

The contents of the target ConfigMap’s Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

false

string

items

If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

defaultMode

Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.

false

integer (int32)

optional

Specify whether the ConfigMap or it’s keys must be defined

false

boolean

false

- -
-
-

v1.GitRepoVolumeSource

-
-

Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

repository

Repository URL

true

string

revision

Commit hash for the specified revision.

false

string

directory

Target directory name. Must not contain or start with ... If . is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.

false

string

- -
-
-

v1.SecretEnvSource

-
-

SecretEnvSource selects a Secret to populate the environment variables with.

-
-
-

The contents of the target Secret’s Data field will represent the key-value pairs as environment variables.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

false

string

optional

Specify whether the Secret must be defined

false

boolean

false

- -
-
-

v1.PortworxVolumeSource

-
-

PortworxVolumeSource represents a Portworx volume resource.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

volumeID

VolumeID uniquely identifies a Portworx volume

true

string

fsType

FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.

false

string

readOnly

Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

- -
-
-

v1.Capabilities

-
-

Adds and removes POSIX capabilities from running containers.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

add

Added capabilities

false

v1.Capability array

drop

Removed capabilities

false

v1.Capability array

- -
-
-

v1.Initializer

-
-

Initializer is information about an initializer that has not yet completed.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

name of the process that is responsible for initializing this object.

true

string

- -
-
-

v1.LocalObjectReference

-
-

LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

false

string

- -
-
-

v1.ProjectedVolumeSource

-
-

Represents a projected volume source

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

sources

list of volume projections

true

v1.VolumeProjection array

defaultMode

Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.

false

integer (int32)

- -
-
-

v1.ExecAction

-
-

ExecAction describes a "run in container" action.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

command

Command is the command line to execute inside the container, the working directory for the command is root (/) in the container’s filesystem. The command is simply exec’d, it is not run inside a shell, so traditional shell instructions ('

', etc) won’t work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.

false

string array

- -
-
-

v1beta1.RollingUpdateDaemonSet

-
-

Spec to control the desired behavior of daemon set rolling update.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

maxUnavailable

The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.

false

string

- -
-
-

v1.ObjectMeta

-
-

ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names

false

string

generateName

GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, 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 the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 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).
-
-Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency

false

string

namespace

Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.
-
-Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces

false

string

selfLink

SelfLink is a URL representing this object. Populated by the system. Read-only.

false

string

uid

UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.
-
-Populated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids

false

string

resourceVersion

An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.
-
-Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency

false

string

generation

A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.

false

integer (int64)

creationTimestamp

CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.
-
-Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

string

deletionTimestamp

DeletionTimestamp is RFC 3339 date and time at 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 is expected to 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. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.
-
-Populated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

string

deletionGracePeriodSeconds

Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.

false

integer (int64)

labels

Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels

false

object

annotations

Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations

false

object

ownerReferences

List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.

false

v1.OwnerReference array

initializers

An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven’t explicitly asked to observe uninitialized objects.
-
-When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.

false

v1.Initializers

finalizers

Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.

false

string array

clusterName

The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.

false

string

- -
-
-

v1beta1.ReplicaSetSpec

-
-

ReplicaSetSpec is the specification of a ReplicaSet.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

replicas

Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller

false

integer (int32)

minReadySeconds

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)

false

integer (int32)

selector

Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors

false

v1.LabelSelector

template

Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template

false

v1.PodTemplateSpec

- -
-
-

v1beta1.Deployment

-
-

DEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard object metadata.

false

v1.ObjectMeta

spec

Specification of the desired behavior of the Deployment.

false

v1beta1.DeploymentSpec

status

Most recently observed status of the Deployment.

false

v1beta1.DeploymentStatus

- -
-
-

v1beta1.DaemonSetSpec

-
-

DaemonSetSpec is the specification of a daemon set.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

selector

A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors

false

v1.LabelSelector

template

An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template’s node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template

true

v1.PodTemplateSpec

updateStrategy

An update strategy to replace existing DaemonSet pods with new pods.

false

v1beta1.DaemonSetUpdateStrategy

minReadySeconds

The minimum number of seconds for which a newly created DaemonSet 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).

false

integer (int32)

templateGeneration

DEPRECATED. A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.

false

integer (int64)

revisionHistoryLimit

The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.

false

integer (int32)

- -
-
-

types.UID

- -
-
-

v1.AzureFileVolumeSource

-
-

AzureFile represents an Azure File Service mount on the host and bind mount to the pod.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

secretName

the name of secret that contains Azure Storage Account Name and Key

true

string

shareName

Share Name

true

string

readOnly

Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

- -
-
-

v1.ISCSIVolumeSource

-
-

Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

targetPortal

iSCSI target portal. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).

true

string

iqn

Target iSCSI Qualified Name.

true

string

lun

iSCSI target lun number.

true

integer (int32)

iscsiInterface

Optional: Defaults to default (tcp). iSCSI interface name that uses an iSCSI transport.

false

string

fsType

Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi

false

string

readOnly

ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.

false

boolean

false

portals

iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).

false

string array

chapAuthDiscovery

whether support iSCSI Discovery CHAP authentication

false

boolean

false

chapAuthSession

whether support iSCSI Session CHAP authentication

false

boolean

false

secretRef

CHAP secret for iSCSI target and initiator authentication

false

v1.LocalObjectReference

initiatorName

Custom iSCSI initiator name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface <target portal>:<volume name> will be created for the connection.

false

string

- -
-
-

v1beta1.IngressList

-
-

IngressList is a collection of Ingress.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard object’s metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

v1.ListMeta

items

Items is the list of Ingress.

true

v1beta1.Ingress array

- -
-
-

v1.EmptyDirVolumeSource

-
-

Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

medium

What type of storage medium should back this directory. The default is "" which means to use the node’s default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir

false

string

sizeLimit

Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir

false

string

- -
-
-

v1beta1.ScaleSpec

-
-

describes the attributes of a scale subresource

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

replicas

desired number of instances for the scaled object.

false

integer (int32)

- -
-
-

v1.PodAffinityTerm

-
-

Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key <topologyKey> matches that of any node on which a pod of the set of pods is running

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

labelSelector

A label query over a set of resources, in this case pods.

false

v1.LabelSelector

namespaces

namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means "this pod’s namespace"

false

string array

topologyKey

This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. For PreferredDuringScheduling pod anti-affinity, empty topologyKey is interpreted as "all topologies" ("all topologies" here means all the topologyKeys indicated by scheduler command-line argument --failure-domains); for affinity and for RequiredDuringScheduling pod anti-affinity, empty topologyKey is not allowed.

false

string

- -
-
-

v1.EnvFromSource

-
-

EnvFromSource represents the source of a set of ConfigMaps

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

prefix

An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.

false

string

configMapRef

The ConfigMap to select from

false

v1.ConfigMapEnvSource

secretRef

The Secret to select from

false

v1.SecretEnvSource

- -
-
-

v1.PodAffinity

-
-

Pod affinity is a group of inter pod affinity scheduling rules.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

requiredDuringSchedulingIgnoredDuringExecution

If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.

false

v1.PodAffinityTerm array

preferredDuringSchedulingIgnoredDuringExecution

The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.

false

v1.WeightedPodAffinityTerm array

- -
-
-

v1.FlockerVolumeSource

-
-

Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

datasetName

Name of the dataset stored as metadata → name on the dataset for Flocker should be considered as deprecated

false

string

datasetUUID

UUID of the dataset. This is unique identifier of a Flocker dataset

false

string

- -
-
-

v1.PersistentVolumeClaimVolumeSource

-
-

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).

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

claimName

ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims

true

string

readOnly

Will force the ReadOnly setting in VolumeMounts. Default false.

false

boolean

false

- -
-
-

v1.ListMeta

-
-

ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

selfLink

selfLink is a URL representing this object. Populated by the system. Read-only.

false

string

resourceVersion

String that identifies the server’s internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency

false

string

continue

continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response.

false

string

- -
-
-

v1beta1.RollbackConfig

-
-

DEPRECATED.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

revision

The revision to rollback to. If set to 0, rollback to the last revision.

false

integer (int64)

- -
-
-

v1.SecretVolumeSource

-
-

Adapts a Secret into a volume.

-
-
-

The contents of the target Secret’s Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

secretName

Name of the secret in the pod’s namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret

false

string

items

If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

defaultMode

Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.

false

integer (int32)

optional

Specify whether the Secret or it’s keys must be defined

false

boolean

false

- -
-
-

v1.FlexVolumeSource

-
-

FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

driver

Driver is the name of the driver to use for this volume.

true

string

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.

false

string

secretRef

Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.

false

v1.LocalObjectReference

readOnly

Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

options

Optional: Extra command options if any.

false

object

- -
-
-

v1.EnvVarSource

-
-

EnvVarSource represents a source for the value of an EnvVar.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

fieldRef

Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.

false

v1.ObjectFieldSelector

resourceFieldRef

Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.

false

v1.ResourceFieldSelector

configMapKeyRef

Selects a key of a ConfigMap.

false

v1.ConfigMapKeySelector

secretKeyRef

Selects a key of a secret in the pod’s namespace

false

v1.SecretKeySelector

- -
-
-

v1.LoadBalancerIngress

-
-

LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

ip

IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)

false

string

hostname

Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)

false

string

- -
-
-

v1.AzureDiskVolumeSource

-
-

AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

diskName

The Name of the data disk in the blob storage

true

string

diskURI

The URI the data disk in the blob storage

true

string

cachingMode

Host Caching mode: None, Read Only, Read Write.

false

v1.AzureDataDiskCachingMode

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.

false

string

readOnly

Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

kind

Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared

false

v1.AzureDataDiskKind

- -
-
-

v1.KeyToPath

-
-

Maps a string key to a path within a volume.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

key

The key to project.

true

string

path

The relative path of the file to map the key to. May not be an absolute path. May not contain the path element ... May not start with the string ...

true

string

mode

Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.

false

integer (int32)

- -
-
-

v1beta1.DaemonSetUpdateStrategy

- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

type

Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is OnDelete.

false

string

rollingUpdate

Rolling update config params. Present only if type = "RollingUpdate".

false

v1beta1.RollingUpdateDaemonSet

- -
-
-

v1.VsphereVirtualDiskVolumeSource

-
-

Represents a vSphere volume resource.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

volumePath

Path that identifies vSphere volume vmdk

true

string

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.

false

string

storagePolicyName

Storage Policy Based Management (SPBM) profile name.

false

string

storagePolicyID

Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.

false

string

- -
-
-

v1.DeleteOptions

-
-

DeleteOptions may be provided when deleting an API object.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

gracePeriodSeconds

The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.

false

integer (int64)

preconditions

Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.

false

v1.Preconditions

orphanDependents

Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.

false

boolean

false

propagationPolicy

Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.

false

v1.DeletionPropagation

- -
-
-

v1beta1.DaemonSetList

-
-

DaemonSetList is a collection of daemon sets.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

v1.ListMeta

items

A list of daemon sets.

true

v1beta1.DaemonSet array

- -
-
-

v1.Volume

-
-

Volume represents a named volume in a pod that may be accessed by any container in the pod.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Volume’s name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

true

string

hostPath

HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

false

v1.HostPathVolumeSource

emptyDir

EmptyDir represents a temporary directory that shares a pod’s lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir

false

v1.EmptyDirVolumeSource

gcePersistentDisk

GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet’s host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk

false

v1.GCEPersistentDiskVolumeSource

awsElasticBlockStore

AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet’s host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore

false

v1.AWSElasticBlockStoreVolumeSource

gitRepo

GitRepo represents a git repository at a particular revision.

false

v1.GitRepoVolumeSource

secret

Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret

false

v1.SecretVolumeSource

nfs

NFS represents an NFS mount on the host that shares a pod’s lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs

false

v1.NFSVolumeSource

iscsi

ISCSI represents an ISCSI Disk resource that is attached to a kubelet’s host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md

false

v1.ISCSIVolumeSource

glusterfs

Glusterfs represents a Glusterfs mount on the host that shares a pod’s lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md

false

v1.GlusterfsVolumeSource

persistentVolumeClaim

PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims

false

v1.PersistentVolumeClaimVolumeSource

rbd

RBD represents a Rados Block Device mount on the host that shares a pod’s lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md

false

v1.RBDVolumeSource

flexVolume

FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.

false

v1.FlexVolumeSource

cinder

Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md

false

v1.CinderVolumeSource

cephfs

CephFS represents a Ceph FS mount on the host that shares a pod’s lifetime

false

v1.CephFSVolumeSource

flocker

Flocker represents a Flocker volume attached to a kubelet’s host machine. This depends on the Flocker control service being running

false

v1.FlockerVolumeSource

downwardAPI

DownwardAPI represents downward API about the pod that should populate this volume

false

v1.DownwardAPIVolumeSource

fc

FC represents a Fibre Channel resource that is attached to a kubelet’s host machine and then exposed to the pod.

false

v1.FCVolumeSource

azureFile

AzureFile represents an Azure File Service mount on the host and bind mount to the pod.

false

v1.AzureFileVolumeSource

configMap

ConfigMap represents a configMap that should populate this volume

false

v1.ConfigMapVolumeSource

vsphereVolume

VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine

false

v1.VsphereVirtualDiskVolumeSource

quobyte

Quobyte represents a Quobyte mount on the host that shares a pod’s lifetime

false

v1.QuobyteVolumeSource

azureDisk

AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.

false

v1.AzureDiskVolumeSource

photonPersistentDisk

PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine

false

v1.PhotonPersistentDiskVolumeSource

projected

Items for all in one resources secrets, configmaps, and downward API

false

v1.ProjectedVolumeSource

portworxVolume

PortworxVolume represents a portworx volume attached and mounted on kubelets host machine

false

v1.PortworxVolumeSource

scaleIO

ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.

false

v1.ScaleIOVolumeSource

storageos

StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.

false

v1.StorageOSVolumeSource

- -
-
-

v1.ResourceFieldSelector

-
-

ResourceFieldSelector represents container resources (cpu, memory) and their output format

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

containerName

Container name: required for volumes, optional for env vars

false

string

resource

Required: resource to select

true

string

divisor

Specifies the output format of the exposed resources, defaults to "1"

false

string

- -
-
-

v1.VolumeProjection

-
-

Projection that may be projected along with other supported volume types

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

secret

information about the secret data to project

false

v1.SecretProjection

downwardAPI

information about the downwardAPI data to project

false

v1.DownwardAPIProjection

configMap

information about the configMap data to project

false

v1.ConfigMapProjection

- -
-
-

v1.Probe

-
-

Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

exec

One and only one of the following should be specified. Exec specifies the action to take.

false

v1.ExecAction

httpGet

HTTPGet specifies the http request to perform.

false

v1.HTTPGetAction

tcpSocket

TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported

false

v1.TCPSocketAction

initialDelaySeconds

Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

false

integer (int32)

timeoutSeconds

Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

false

integer (int32)

periodSeconds

How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.

false

integer (int32)

successThreshold

Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.

false

integer (int32)

failureThreshold

Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.

false

integer (int32)

- -
-
-

v1.WeightedPodAffinityTerm

-
-

The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

weight

weight associated with matching the corresponding podAffinityTerm, in the range 1-100.

true

integer (int32)

podAffinityTerm

Required. A pod affinity term, associated with the corresponding weight.

true

v1.PodAffinityTerm

- -
-
-

v1beta1.DeploymentSpec

-
-

DeploymentSpec is the specification of the desired behavior of the Deployment.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

replicas

Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.

false

integer (int32)

selector

Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.

false

v1.LabelSelector

template

Template describes the pods that will be created.

true

v1.PodTemplateSpec

strategy

The deployment strategy to use to replace existing pods with new ones.

false

v1beta1.DeploymentStrategy

minReadySeconds

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)

false

integer (int32)

revisionHistoryLimit

The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified.

false

integer (int32)

paused

Indicates that the deployment is paused and will not be processed by the deployment controller.

false

boolean

false

rollbackTo

DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.

false

v1beta1.RollbackConfig

progressDeadlineSeconds

The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. This is not set by default.

false

integer (int32)

- -
-
-

v1.SecretKeySelector

-
-

SecretKeySelector selects a key of a Secret.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

false

string

key

The key of the secret to select from. Must be a valid secret key.

true

string

optional

Specify whether the Secret or it’s key must be defined

false

boolean

false

- -
-
-

v1.Capability

- -
-
-

v1.DownwardAPIVolumeFile

-
-

DownwardAPIVolumeFile represents information to create the file containing the pod field

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

path

Required: Path is the relative path name of the file to be created. Must not be absolute or contain the .. path. Must be utf-8 encoded. The first item of the relative path must not start with ..

true

string

fieldRef

Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.

false

v1.ObjectFieldSelector

resourceFieldRef

Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.

false

v1.ResourceFieldSelector

mode

Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.

false

integer (int32)

- -
-
-

v1.PodSpec

-
-

PodSpec is a description of a pod.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

volumes

List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes

false

v1.Volume array

initContainers

List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

false

v1.Container array

containers

List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.

true

v1.Container array

restartPolicy

Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy

false

string

terminationGracePeriodSeconds

Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.

false

integer (int64)

activeDeadlineSeconds

Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.

false

integer (int64)

dnsPolicy

Set DNS policy for containers within the pod. One of ClusterFirstWithHostNet, ClusterFirst or Default. Defaults to "ClusterFirst". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to ClusterFirstWithHostNet.

false

string

nodeSelector

NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node’s labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

false

object

serviceAccountName

ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/

false

string

serviceAccount

DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.

false

string

automountServiceAccountToken

AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.

false

boolean

false

nodeName

NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.

false

string

hostNetwork

Host networking requested for this pod. Use the host’s network namespace. If this option is set, the ports that will be used must be specified. Default to false.

false

boolean

false

hostPID

Use the host’s pid namespace. Optional: Default to false.

false

boolean

false

hostIPC

Use the host’s ipc namespace. Optional: Default to false.

false

boolean

false

securityContext

SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.

false

v1.PodSecurityContext

imagePullSecrets

ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod

false

v1.LocalObjectReference array

hostname

Specifies the hostname of the Pod If not specified, the pod’s hostname will be set to a system-defined value.

false

string

subdomain

If specified, the fully qualified Pod hostname will be "<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>". If not specified, the pod will not have a domainname at all.

false

string

affinity

If specified, the pod’s scheduling constraints

false

v1.Affinity

schedulerName

If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.

false

string

tolerations

If specified, the pod’s tolerations.

false

v1.Toleration array

hostAliases

HostAliases is an optional list of hosts and IPs that will be injected into the pod’s hosts file if specified. This is only valid for non-hostNetwork pods.

false

v1.HostAlias array

priorityClassName

If specified, indicates the pod’s priority. "SYSTEM" is a special keyword which indicates the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.

false

string

priority

The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.

false

integer (int32)

- -
-
-

v1.ContainerPort

-
-

ContainerPort represents a network port in a single container.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.

false

string

hostPort

Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.

false

integer (int32)

containerPort

Number of port to expose on the pod’s IP address. This must be a valid port number, 0 < x < 65536.

true

integer (int32)

protocol

Protocol for port. Must be UDP or TCP. Defaults to "TCP".

false

string

hostIP

What host IP to bind the external port to.

false

string

- -
-
-

v1.Lifecycle

-
-

Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

postStart

PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks

false

v1.Handler

preStop

PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks

false

v1.Handler

- -
-
-

v1.GlusterfsVolumeSource

-
-

Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

endpoints

EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod

true

string

path

Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod

true

string

readOnly

ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod

false

boolean

false

- -
-
-

v1.Handler

-
-

Handler defines a specific action that should be taken

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

exec

One and only one of the following should be specified. Exec specifies the action to take.

false

v1.ExecAction

httpGet

HTTPGet specifies the http request to perform.

false

v1.HTTPGetAction

tcpSocket

TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported

false

v1.TCPSocketAction

- -
-
-

v1.Toleration

-
-

The pod this Toleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

key

Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.

false

string

operator

Operator represents a key’s relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.

false

string

value

Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.

false

string

effect

Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.

false

string

tolerationSeconds

TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.

false

integer (int64)

- -
-
-

v1beta1.IngressTLS

-
-

IngressTLS describes the transport layer security associated with an Ingress.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

hosts

Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.

false

string array

secretName

SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the "Host" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.

false

string

- -
-
-

v1.StatusCause

-
-

StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

reason

A machine-readable description of the cause of the error. If this value is empty there is no information available.

false

string

message

A human-readable description of the cause of the error. This field may be presented as-is to a reader.

false

string

field

The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.
-
-Examples:
- "name" - the field "name" on the current resource
- "items[0].name" - the field "name" on the first array entry in "items"

false

string

- -
-
-

v1beta1.Scale

-
-

represents a scaling request for a resource.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.

false

v1.ObjectMeta

spec

defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.

false

v1beta1.ScaleSpec

status

current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.

false

v1beta1.ScaleStatus

- -
-
-

v1.RBDVolumeSource

-
-

Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

monitors

A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it

true

string array

image

The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it

true

string

fsType

Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd

false

string

pool

The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it

false

string

user

The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it

false

string

keyring

Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it

false

string

secretRef

SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it

false

v1.LocalObjectReference

readOnly

ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it

false

boolean

false

- -
-
-

v1.ConfigMapProjection

-
-

Adapts a ConfigMap into a projected volume.

-
-
-

The contents of the target ConfigMap’s Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

false

string

items

If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

optional

Specify whether the ConfigMap or it’s keys must be defined

false

boolean

false

- -
-
-

v1.PhotonPersistentDiskVolumeSource

-
-

Represents a Photon Controller persistent disk resource.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

pdID

ID that identifies Photon Controller persistent disk

true

string

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.

false

string

- -
-
-

v1.ScaleIOVolumeSource

-
-

ScaleIOVolumeSource represents a persistent ScaleIO volume

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

gateway

The host address of the ScaleIO API Gateway.

true

string

system

The name of the storage system as configured in ScaleIO.

true

string

secretRef

SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.

true

v1.LocalObjectReference

sslEnabled

Flag to enable/disable SSL communication with Gateway, default false

false

boolean

false

protectionDomain

The name of the ScaleIO Protection Domain for the configured storage.

false

string

storagePool

The ScaleIO Storage Pool associated with the protection domain.

false

string

storageMode

Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.

false

string

volumeName

The name of a volume already created in the ScaleIO system that is associated with this volume source.

false

string

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.

false

string

readOnly

Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

- -
-
-

v1.HostPathType

- -
-
-

v1.Initializers

-
-

Initializers tracks the progress of initialization.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

pending

Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.

true

v1.Initializer array

result

If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.

false

v1.Status

- -
-
-

v1.Status

-
-

Status is a return value for calls that don’t return other objects.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

v1.ListMeta

status

Status of the operation. One of: "Success" or "Failure". More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

false

string

message

A human-readable description of the status of this operation.

false

string

reason

A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.

false

string

details

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.

false

v1.StatusDetails

code

Suggested HTTP return code for this status, 0 if not set.

false

integer (int32)

- -
-
-

v1beta1.ScaleStatus

-
-

represents the current status of a scale subresource.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

replicas

actual number of observed instances of the scaled object.

true

integer (int32)

selector

label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors

false

object

targetSelector

label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors

false

string

- -
-
-

v1.NFSVolumeSource

-
-

Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

server

Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs

true

string

path

Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs

true

string

readOnly

ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs

false

boolean

false

- -
-
-

v1beta1.DeploymentList

-
-

DeploymentList is a list of Deployments.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard list metadata.

false

v1.ListMeta

items

Items is the list of Deployments.

true

v1beta1.Deployment array

- -
-
-

v1beta1.DeploymentRollback

-
-

DEPRECATED. DeploymentRollback stores the information required to rollback a deployment.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

name

Required: This must match the Name of a deployment.

true

string

updatedAnnotations

The annotations to be updated to a deployment

false

object

rollbackTo

The config of this deployment rollback.

true

v1beta1.RollbackConfig

- -
-
-

v1.HTTPHeader

-
-

HTTPHeader describes a custom header to be used in HTTP probes

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

The header field name

true

string

value

The header field value

true

string

- -
-
-

v1.FCVolumeSource

-
-

Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

targetWWNs

Optional: FC target worldwide names (WWNs)

false

string array

lun

Optional: FC target lun number

false

integer (int32)

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.

false

string

readOnly

Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

wwids

Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.

false

string array

- -
-
-

v1.PodAntiAffinity

-
-

Pod anti affinity is a group of inter pod anti affinity scheduling rules.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

requiredDuringSchedulingIgnoredDuringExecution

If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.

false

v1.PodAffinityTerm array

preferredDuringSchedulingIgnoredDuringExecution

The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.

false

v1.WeightedPodAffinityTerm array

- -
-
-

v1.DeletionPropagation

- -
-
-

v1beta1.DeploymentStrategy

-
-

DeploymentStrategy describes how to replace existing pods with new ones.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

type

Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.

false

string

rollingUpdate

Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.

false

v1beta1.RollingUpdateDeployment

- -
-
-

v1.TCPSocketAction

-
-

TCPSocketAction describes an action based on opening a socket

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

port

Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.

true

string

host

Optional: Host name to connect to, defaults to the pod IP.

false

string

- -
-
-

v1beta1.IngressRule

-
-

IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

host

Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the "host" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the
- IP in the Spec of the parent Ingress.
-2. The : delimiter is not respected because ports are not allowed.
- Currently the port of an Ingress is implicitly :80 for http and
- :443 for https.
-Both these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.

false

string

http

false

v1beta1.HTTPIngressRuleValue

- -
-
-

v1.HTTPGetAction

-
-

HTTPGetAction describes an action based on HTTP Get requests.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

path

Path to access on the HTTP server.

false

string

port

Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.

true

string

host

Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead.

false

string

scheme

Scheme to use for connecting to the host. Defaults to HTTP.

false

string

httpHeaders

Custom headers to set in the request. HTTP allows repeated headers.

false

v1.HTTPHeader array

- -
-
-

v1.StatusDetails

-
-

StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).

false

string

group

The group attribute of the resource associated with the status StatusReason.

false

string

kind

The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

uid

UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids

false

string

causes

The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.

false

v1.StatusCause array

retryAfterSeconds

If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.

false

integer (int32)

- -
-
-

v1.LoadBalancerStatus

-
-

LoadBalancerStatus represents the status of a load-balancer.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

ingress

Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.

false

v1.LoadBalancerIngress array

- -
-
-

v1.Container

-
-

A single application container that you want to run within a pod.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.

true

string

image

Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.

false

string

command

Entrypoint array. Not executed within a shell. The docker image’s ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container’s environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell

false

string array

args

Arguments to the entrypoint. The docker image’s CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container’s environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell

false

string array

workingDir

Container’s working directory. If not specified, the container runtime’s default will be used, which might be configured in the container image. Cannot be updated.

false

string

ports

List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default "0.0.0.0" address inside a container will be accessible from the network. Cannot be updated.

false

v1.ContainerPort array

envFrom

List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.

false

v1.EnvFromSource array

env

List of environment variables to set in the container. Cannot be updated.

false

v1.EnvVar array

resources

Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources

false

v1.ResourceRequirements

volumeMounts

Pod volumes to mount into the container’s filesystem. Cannot be updated.

false

v1.VolumeMount array

livenessProbe

Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

false

v1.Probe

readinessProbe

Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes

false

v1.Probe

lifecycle

Actions that the management system should take in response to container lifecycle events. Cannot be updated.

false

v1.Lifecycle

terminationMessagePath

Optional: Path at which the file to which the container’s termination message will be written is mounted into the container’s filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.

false

string

terminationMessagePolicy

Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.

false

string

imagePullPolicy

Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images

false

string

securityContext

Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

false

v1.SecurityContext

stdin

Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.

false

boolean

false

stdinOnce

Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false

false

boolean

false

tty

Whether this container should allocate a TTY for itself, also requires stdin to be true. Default is false.

false

boolean

false

- -
-
-

v1.PodSecurityContext

-
-

PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

seLinuxOptions

The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.

false

v1.SELinuxOptions

runAsUser

The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.

false

integer (int64)

runAsNonRoot

Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

boolean

false

supplementalGroups

A list of groups applied to the first process run in each container, in addition to the container’s primary GID. If unspecified, no groups will be added to any container.

false

integer (int32) array

fsGroup

A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:
-
-1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR’d with rw-rw

false

integer (int64)

- -
-
-

v1.OwnerReference

-
-

OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

apiVersion

API version of the referent.

true

string

kind

Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

true

string

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

true

string

uid

UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids

true

string

controller

If true, this reference points to the managing controller.

false

boolean

false

blockOwnerDeletion

If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.

false

boolean

false

- -
-
-

v1beta1.ReplicaSetStatus

-
-

ReplicaSetStatus represents the current status of a ReplicaSet.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

replicas

Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller

true

integer (int32)

fullyLabeledReplicas

The number of pods that have labels matching the labels of the pod template of the replicaset.

false

integer (int32)

readyReplicas

The number of ready replicas for this replica set.

false

integer (int32)

availableReplicas

The number of available replicas (ready for at least minReadySeconds) for this replica set.

false

integer (int32)

observedGeneration

ObservedGeneration reflects the generation of the most recently observed ReplicaSet.

false

integer (int64)

conditions

Represents the latest available observations of a replica set’s current state.

false

v1beta1.ReplicaSetCondition array

- -
-
-

v1.APIResource

-
-

APIResource specifies the name of a resource and whether it is namespaced.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

name is the plural name of the resource.

true

string

singularName

singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.

true

string

namespaced

namespaced indicates if a resource is namespaced or not.

true

boolean

false

group

group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale".

false

string

version

version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource’s group)".

false

string

kind

kind is the kind for the resource (e.g. Foo is the kind for a resource foo)

true

string

verbs

verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)

true

string array

shortNames

shortNames is a list of suggested short names of the resource.

false

string array

categories

categories is a list of the grouped resources this resource belongs to (e.g. all)

false

string array

- -
-
-

v1.NodeSelectorRequirement

-
-

A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

key

The label key that the selector applies to.

true

string

operator

Represents a key’s relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.

true

string

values

An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.

false

string array

- -
-
-

v1beta1.ReplicaSet

-
-

DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object’s metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

v1.ObjectMeta

spec

Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

false

v1beta1.ReplicaSetSpec

status

Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

false

v1beta1.ReplicaSetStatus

- -
-
-

v1.HostPathVolumeSource

-
-

Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

path

Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

true

string

type

Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

false

v1.HostPathType

- -
-
-

v1.SecretProjection

-
-

Adapts a secret into a projected volume.

-
-
-

The contents of the target Secret’s Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

false

string

items

If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

optional

Specify whether the Secret or its key must be defined

false

boolean

false

- -
-
-

v1beta1.DaemonSet

-
-

DEPRECATED - This group version of DaemonSet is deprecated by apps/v1beta2/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard object’s metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

v1.ObjectMeta

spec

The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

false

v1beta1.DaemonSetSpec

status

The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

false

v1beta1.DaemonSetStatus

- -
-
-

v1.CinderVolumeSource

-
-

Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

volumeID

volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md

true

string

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md

false

string

readOnly

Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md

false

boolean

false

- -
-
-

v1.SecurityContext

-
-

SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext. When both are set, the values in SecurityContext take precedence.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

capabilities

The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.

false

v1.Capabilities

privileged

Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.

false

boolean

false

seLinuxOptions

The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

v1.SELinuxOptions

runAsUser

The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

integer (int64)

runAsNonRoot

Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

boolean

false

readOnlyRootFilesystem

Whether this container has a read-only root filesystem. Default is false.

false

boolean

false

allowPrivilegeEscalation

AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN

false

boolean

false

- -
-
-

v1.AWSElasticBlockStoreVolumeSource

-
-

Represents a Persistent Disk resource in AWS.

-
-
-

An AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

volumeID

Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore

true

string

fsType

Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore

false

string

partition

The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).

false

integer (int32)

readOnly

Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". If omitted, the default is "false". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore

false

boolean

false

- -
-
-

v1.QuobyteVolumeSource

-
-

Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

registry

Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes

true

string

volume

Volume is a string that references an already created Quobyte volume by name.

true

string

readOnly

ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.

false

boolean

false

user

User to map volume access to Defaults to serivceaccount user

false

string

group

Group to map volume access to Default is no group

false

string

- -
-
-

v1.WatchEvent

- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

type

true

string

object

true

string

- -
-
-

v1.LabelSelectorRequirement

-
-

A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

key

key is the label key that the selector applies to.

true

string

operator

operator represents a key’s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.

true

string

values

values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.

false

string array

- -
-
-

v1.EnvVar

-
-

EnvVar represents an environment variable present in a Container.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the environment variable. Must be a C_IDENTIFIER.

true

string

value

Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to "".

false

string

valueFrom

Source for the environment variable’s value. Cannot be used if value is not empty.

false

v1.EnvVarSource

- -
-
-

v1.ResourceRequirements

-
-

ResourceRequirements describes the compute resource requirements.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

limits

Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/

false

object

requests

Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/

false

object

- -
-
-

v1.HostAlias

-
-

HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod’s hosts file.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

ip

IP address of the host file entry.

false

string

hostnames

Hostnames for the above IP address.

false

string array

- -
-
-

v1.PodTemplateSpec

-
-

PodTemplateSpec describes the data a pod should have when created from a template

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

metadata

Standard object’s metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

v1.ObjectMeta

spec

Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

false

v1.PodSpec

- -
-
-

v1.NodeSelector

-
-

A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

nodeSelectorTerms

Required. A list of node selector terms. The terms are ORed.

true

v1.NodeSelectorTerm array

- -
-
-

v1.Patch

-
-

Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.

-
-
-
-

v1beta1.DeploymentCondition

-
-

DeploymentCondition describes the state of a deployment at a certain point.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

type

Type of deployment condition.

true

string

status

Status of the condition, one of True, False, Unknown.

true

string

lastUpdateTime

The last time this condition was updated.

false

string

lastTransitionTime

Last time the condition transitioned from one status to another.

false

string

reason

The reason for the condition’s last transition.

false

string

message

A human readable message indicating details about the transition.

false

string

- -
-
-

v1.ConfigMapEnvSource

-
-

ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.

-
-
-

The contents of the target ConfigMap’s Data field will represent the key-value pairs as environment variables.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

false

string

optional

Specify whether the ConfigMap must be defined

false

boolean

false

- -
-
-

v1.StorageOSVolumeSource

-
-

Represents a StorageOS persistent volume resource.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

volumeName

VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.

false

string

volumeNamespace

VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod’s namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.

false

string

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.

false

string

readOnly

Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

secretRef

SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.

false

v1.LocalObjectReference

- -
-
-

v1.NodeAffinity

-
-

Node affinity is a group of node affinity scheduling rules.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

requiredDuringSchedulingIgnoredDuringExecution

If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.

false

v1.NodeSelector

preferredDuringSchedulingIgnoredDuringExecution

The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.

false

v1.PreferredSchedulingTerm array

- -
-
-

v1.AzureDataDiskKind

- -
-
-

v1.PreferredSchedulingTerm

-
-

An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it’s a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

weight

Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.

true

integer (int32)

preference

A node selector term, associated with the corresponding weight.

true

v1.NodeSelectorTerm

- -
-
-

v1.ConfigMapKeySelector

-
-

Selects a key from a ConfigMap.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

false

string

key

The key to select.

true

string

optional

Specify whether the ConfigMap or it’s key must be defined

false

boolean

false

- -
-
-

v1beta1.HTTPIngressPath

-
-

HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

path

Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional "path" part of a URL as defined by RFC 3986. Paths must begin with a /. If unspecified, the path defaults to a catch all sending traffic to the backend.

false

string

backend

Backend defines the referenced service endpoint to which the traffic will be forwarded to.

true

v1beta1.IngressBackend

- -
-
-

v1beta1.Ingress

-
-

Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard object’s metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

v1.ObjectMeta

spec

Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

false

v1beta1.IngressSpec

status

Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

false

v1beta1.IngressStatus

- -
-
-

v1.AzureDataDiskCachingMode

- -
-
-

any

-
-

Represents an untyped JSON map - see the description of the field for more info about the structure of this object.

-
-
-
-
-
- - - diff --git a/docs/reference/generated/federation/extensions/v1beta1/operations.html b/docs/reference/generated/federation/extensions/v1beta1/operations.html deleted file mode 100755 index 26449a64e51d9..0000000000000 --- a/docs/reference/generated/federation/extensions/v1beta1/operations.html +++ /dev/null @@ -1,9932 +0,0 @@ ---- -title: extensions/v1beta1 Operations -notitle: true ---- - - - - - - - -Operations - - - - -
-
-

Operations

-
-
-

get available resources

-
-
-
GET /apis/extensions/v1beta1
-
-
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

default

success

v1.APIResourceList

- -
-
-

Consumes

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

list or watch objects of kind DaemonSet

-
-
-
GET /apis/extensions/v1beta1/daemonsets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.DaemonSetList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

list or watch objects of kind Deployment

-
-
-
GET /apis/extensions/v1beta1/deployments
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.DeploymentList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

list or watch objects of kind Ingress

-
-
-
GET /apis/extensions/v1beta1/ingresses
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.IngressList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

list or watch objects of kind DaemonSet

-
-
-
GET /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.DaemonSetList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

delete collection of DaemonSet

-
-
-
DELETE /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

create a DaemonSet

-
-
-
POST /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.DaemonSet

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

202

Accepted

v1beta1.DaemonSet

200

success

v1beta1.DaemonSet

201

Created

v1beta1.DaemonSet

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

read the specified DaemonSet

-
-
-
GET /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

export

Should this value be exported. Export strips fields that a user can not specify.

false

boolean

QueryParameter

exact

Should the export be exact. Exact export maintains cluster-specific fields like Namespace.

false

boolean

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the DaemonSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.DaemonSet

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

replace the specified DaemonSet

-
-
-
PUT /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.DaemonSet

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the DaemonSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.DaemonSet

201

Created

v1beta1.DaemonSet

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

delete a DaemonSet

-
-
-
DELETE /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.DeleteOptions

QueryParameter

gracePeriodSeconds

The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.

false

integer (int32)

QueryParameter

orphanDependents

Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.

false

boolean

QueryParameter

propagationPolicy

Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the DaemonSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

partially update the specified DaemonSet

-
-
-
PATCH /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the DaemonSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.DaemonSet

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

read status of the specified DaemonSet

-
-
-
GET /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the DaemonSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.DaemonSet

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

replace status of the specified DaemonSet

-
-
-
PUT /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.DaemonSet

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the DaemonSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.DaemonSet

201

Created

v1beta1.DaemonSet

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

partially update status of the specified DaemonSet

-
-
-
PATCH /apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the DaemonSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.DaemonSet

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

list or watch objects of kind Deployment

-
-
-
GET /apis/extensions/v1beta1/namespaces/{namespace}/deployments
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.DeploymentList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

delete collection of Deployment

-
-
-
DELETE /apis/extensions/v1beta1/namespaces/{namespace}/deployments
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

create a Deployment

-
-
-
POST /apis/extensions/v1beta1/namespaces/{namespace}/deployments
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.Deployment

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

202

Accepted

v1beta1.Deployment

200

success

v1beta1.Deployment

201

Created

v1beta1.Deployment

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

read the specified Deployment

-
-
-
GET /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

export

Should this value be exported. Export strips fields that a user can not specify.

false

boolean

QueryParameter

exact

Should the export be exact. Exact export maintains cluster-specific fields like Namespace.

false

boolean

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Deployment

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Deployment

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

replace the specified Deployment

-
-
-
PUT /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.Deployment

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Deployment

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Deployment

201

Created

v1beta1.Deployment

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

delete a Deployment

-
-
-
DELETE /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.DeleteOptions

QueryParameter

gracePeriodSeconds

The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.

false

integer (int32)

QueryParameter

orphanDependents

Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.

false

boolean

QueryParameter

propagationPolicy

Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Deployment

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

partially update the specified Deployment

-
-
-
PATCH /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Deployment

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Deployment

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

create rollback of a Deployment

-
-
-
POST /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/rollback
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.DeploymentRollback

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the DeploymentRollback

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

202

Accepted

v1beta1.DeploymentRollback

200

success

v1beta1.DeploymentRollback

201

Created

v1beta1.DeploymentRollback

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

read scale of the specified Deployment

-
-
-
GET /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Scale

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Scale

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

replace scale of the specified Deployment

-
-
-
PUT /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.Scale

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Scale

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Scale

201

Created

v1beta1.Scale

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

partially update scale of the specified Deployment

-
-
-
PATCH /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Scale

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Scale

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

read status of the specified Deployment

-
-
-
GET /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Deployment

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Deployment

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

replace status of the specified Deployment

-
-
-
PUT /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.Deployment

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Deployment

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Deployment

201

Created

v1beta1.Deployment

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

partially update status of the specified Deployment

-
-
-
PATCH /apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Deployment

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Deployment

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

list or watch objects of kind Ingress

-
-
-
GET /apis/extensions/v1beta1/namespaces/{namespace}/ingresses
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.IngressList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

delete collection of Ingress

-
-
-
DELETE /apis/extensions/v1beta1/namespaces/{namespace}/ingresses
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

create an Ingress

-
-
-
POST /apis/extensions/v1beta1/namespaces/{namespace}/ingresses
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.Ingress

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

202

Accepted

v1beta1.Ingress

200

success

v1beta1.Ingress

201

Created

v1beta1.Ingress

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

read the specified Ingress

-
-
-
GET /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

export

Should this value be exported. Export strips fields that a user can not specify.

false

boolean

QueryParameter

exact

Should the export be exact. Exact export maintains cluster-specific fields like Namespace.

false

boolean

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Ingress

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Ingress

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

replace the specified Ingress

-
-
-
PUT /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.Ingress

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Ingress

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Ingress

201

Created

v1beta1.Ingress

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

delete an Ingress

-
-
-
DELETE /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.DeleteOptions

QueryParameter

gracePeriodSeconds

The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.

false

integer (int32)

QueryParameter

orphanDependents

Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.

false

boolean

QueryParameter

propagationPolicy

Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Ingress

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

partially update the specified Ingress

-
-
-
PATCH /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Ingress

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Ingress

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

read status of the specified Ingress

-
-
-
GET /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Ingress

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Ingress

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

replace status of the specified Ingress

-
-
-
PUT /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.Ingress

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Ingress

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Ingress

201

Created

v1beta1.Ingress

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

partially update status of the specified Ingress

-
-
-
PATCH /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Ingress

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Ingress

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

list or watch objects of kind ReplicaSet

-
-
-
GET /apis/extensions/v1beta1/namespaces/{namespace}/replicasets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.ReplicaSetList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

delete collection of ReplicaSet

-
-
-
DELETE /apis/extensions/v1beta1/namespaces/{namespace}/replicasets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

create a ReplicaSet

-
-
-
POST /apis/extensions/v1beta1/namespaces/{namespace}/replicasets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.ReplicaSet

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

202

Accepted

v1beta1.ReplicaSet

200

success

v1beta1.ReplicaSet

201

Created

v1beta1.ReplicaSet

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

read the specified ReplicaSet

-
-
-
GET /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

export

Should this value be exported. Export strips fields that a user can not specify.

false

boolean

QueryParameter

exact

Should the export be exact. Exact export maintains cluster-specific fields like Namespace.

false

boolean

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the ReplicaSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.ReplicaSet

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

replace the specified ReplicaSet

-
-
-
PUT /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.ReplicaSet

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the ReplicaSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.ReplicaSet

201

Created

v1beta1.ReplicaSet

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

delete a ReplicaSet

-
-
-
DELETE /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.DeleteOptions

QueryParameter

gracePeriodSeconds

The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.

false

integer (int32)

QueryParameter

orphanDependents

Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.

false

boolean

QueryParameter

propagationPolicy

Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the ReplicaSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

partially update the specified ReplicaSet

-
-
-
PATCH /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the ReplicaSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.ReplicaSet

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

read scale of the specified ReplicaSet

-
-
-
GET /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/scale
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Scale

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Scale

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

replace scale of the specified ReplicaSet

-
-
-
PUT /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/scale
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.Scale

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Scale

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Scale

201

Created

v1beta1.Scale

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

partially update scale of the specified ReplicaSet

-
-
-
PATCH /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/scale
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Scale

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Scale

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

read status of the specified ReplicaSet

-
-
-
GET /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the ReplicaSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.ReplicaSet

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

replace status of the specified ReplicaSet

-
-
-
PUT /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.ReplicaSet

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the ReplicaSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.ReplicaSet

201

Created

v1beta1.ReplicaSet

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

partially update status of the specified ReplicaSet

-
-
-
PATCH /apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the ReplicaSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.ReplicaSet

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

list or watch objects of kind ReplicaSet

-
-
-
GET /apis/extensions/v1beta1/replicasets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.ReplicaSetList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

watch individual changes to a list of DaemonSet

-
-
-
GET /apis/extensions/v1beta1/watch/daemonsets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

watch individual changes to a list of Deployment

-
-
-
GET /apis/extensions/v1beta1/watch/deployments
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

watch individual changes to a list of Ingress

-
-
-
GET /apis/extensions/v1beta1/watch/ingresses
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

watch individual changes to a list of DaemonSet

-
-
-
GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

watch changes to an object of kind DaemonSet

-
-
-
GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the DaemonSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

watch individual changes to a list of Deployment

-
-
-
GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

watch changes to an object of kind Deployment

-
-
-
GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Deployment

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

watch individual changes to a list of Ingress

-
-
-
GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

watch changes to an object of kind Ingress

-
-
-
GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Ingress

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

watch individual changes to a list of ReplicaSet

-
-
-
GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

watch changes to an object of kind ReplicaSet

-
-
-
GET /apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the ReplicaSet

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-

watch individual changes to a list of ReplicaSet

-
-
-
GET /apis/extensions/v1beta1/watch/replicasets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisextensionsv1beta1

    -
  • -
-
-
-
-
-
-
- - - diff --git a/docs/reference/generated/federation/federation/v1beta1/definitions.html b/docs/reference/generated/federation/federation/v1beta1/definitions.html deleted file mode 100755 index 2b930b94ce2c4..0000000000000 --- a/docs/reference/generated/federation/federation/v1beta1/definitions.html +++ /dev/null @@ -1,1606 +0,0 @@ ---- -title: federation/v1beta1 Model Definitions -notitle: true ---- - - - - - - - -Top Level API Objects - - - - -
-
-

Top Level API Objects

- -
-
-

Definitions

-
-
-

v1.APIResourceList

-
-

APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

groupVersion

groupVersion is the group and version this APIResourceList is for.

true

string

resources

resources contains the name of the resources and if they are namespaced.

true

v1.APIResource array

- -
-
-

v1.Patch

-
-

Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.

-
-
-
-

v1.DeleteOptions

-
-

DeleteOptions may be provided when deleting an API object.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

gracePeriodSeconds

The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.

false

integer (int64)

preconditions

Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.

false

v1.Preconditions

orphanDependents

Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.

false

boolean

false

propagationPolicy

Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.

false

v1.DeletionPropagation

- -
-
-

v1beta1.ServerAddressByClientCIDR

-
-

ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

clientCIDR

The CIDR with which clients can match their IP to figure out the server address that they should use.

true

string

serverAddress

Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.

true

string

- -
-
-

v1beta1.ClusterList

-
-

A list of all the kubernetes clusters registered to the federation

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

v1.ListMeta

items

List of Cluster objects.

true

v1beta1.Cluster array

- -
-
-

v1.ListMeta

-
-

ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

selfLink

selfLink is a URL representing this object. Populated by the system. Read-only.

false

string

resourceVersion

String that identifies the server’s internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency

false

string

continue

continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response.

false

string

- -
-
-

v1.StatusDetails

-
-

StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).

false

string

group

The group attribute of the resource associated with the status StatusReason.

false

string

kind

The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

uid

UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids

false

string

causes

The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.

false

v1.StatusCause array

retryAfterSeconds

If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.

false

integer (int32)

- -
-
-

v1beta1.ClusterStatus

-
-

ClusterStatus is information about the current status of a cluster updated by cluster controller periodically.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

conditions

Conditions is an array of current cluster conditions.

false

v1beta1.ClusterCondition array

zones

Zones is the list of availability zones in which the nodes of the cluster exist, e.g. us-east1-a. These will always be in the same region.

false

string array

region

Region is the name of the region in which all of the nodes in the cluster exist. e.g. us-east1.

false

string

- -
-
-

v1.Preconditions

-
-

Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

uid

Specifies the target UID.

false

types.UID

- -
-
-

v1.Initializers

-
-

Initializers tracks the progress of initialization.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

pending

Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.

true

v1.Initializer array

result

If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.

false

v1.Status

- -
-
-

v1.Initializer

-
-

Initializer is information about an initializer that has not yet completed.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

name of the process that is responsible for initializing this object.

true

string

- -
-
-

v1.LocalObjectReference

-
-

LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

false

string

- -
-
-

v1.Status

-
-

Status is a return value for calls that don’t return other objects.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

v1.ListMeta

status

Status of the operation. One of: "Success" or "Failure". More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

false

string

message

A human-readable description of the status of this operation.

false

string

reason

A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.

false

string

details

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.

false

v1.StatusDetails

code

Suggested HTTP return code for this status, 0 if not set.

false

integer (int32)

- -
-
-

v1beta1.ClusterSpec

-
-

ClusterSpec describes the attributes of a kubernetes cluster.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

serverAddressByClientCIDRs

A map of client CIDR to server address. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR.

true

v1beta1.ServerAddressByClientCIDR array

secretRef

Name of the secret containing kubeconfig to access this cluster. The secret is read from the kubernetes cluster that is hosting federation control plane. Admin needs to ensure that the required secret exists. Secret should be in the same namespace where federation control plane is hosted and it should have kubeconfig in its data with key "kubeconfig". This will later be changed to a reference to secret in federation control plane when the federation control plane supports secrets. This can be left empty if the cluster allows insecure access.

false

v1.LocalObjectReference

- -
-
-

v1.WatchEvent

- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

type

true

string

object

true

string

- -
-
-

v1beta1.ClusterCondition

-
-

ClusterCondition describes current state of a cluster.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

type

Type of cluster condition, Complete or Failed.

true

string

status

Status of the condition, one of True, False, Unknown.

true

string

lastProbeTime

Last time the condition was checked.

false

string

lastTransitionTime

Last time the condition transit from one status to another.

false

string

reason

(brief) reason for the condition’s last transition.

false

string

message

Human readable message indicating details about last transition.

false

string

- -
-
-

v1.ObjectMeta

-
-

ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names

false

string

generateName

GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, 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 the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 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).
-
-Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency

false

string

namespace

Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.
-
-Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces

false

string

selfLink

SelfLink is a URL representing this object. Populated by the system. Read-only.

false

string

uid

UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.
-
-Populated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids

false

string

resourceVersion

An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.
-
-Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency

false

string

generation

A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.

false

integer (int64)

creationTimestamp

CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.
-
-Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

string

deletionTimestamp

DeletionTimestamp is RFC 3339 date and time at 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 is expected to 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. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.
-
-Populated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

string

deletionGracePeriodSeconds

Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.

false

integer (int64)

labels

Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels

false

object

annotations

Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations

false

object

ownerReferences

List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.

false

v1.OwnerReference array

initializers

An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven’t explicitly asked to observe uninitialized objects.
-
-When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.

false

v1.Initializers

finalizers

Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.

false

string array

clusterName

The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.

false

string

- -
-
-

v1.OwnerReference

-
-

OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

apiVersion

API version of the referent.

true

string

kind

Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

true

string

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

true

string

uid

UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids

true

string

controller

If true, this reference points to the managing controller.

false

boolean

false

blockOwnerDeletion

If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.

false

boolean

false

- -
-
-

v1.APIResource

-
-

APIResource specifies the name of a resource and whether it is namespaced.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

name is the plural name of the resource.

true

string

singularName

singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.

true

string

namespaced

namespaced indicates if a resource is namespaced or not.

true

boolean

false

group

group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale".

false

string

version

version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource’s group)".

false

string

kind

kind is the kind for the resource (e.g. Foo is the kind for a resource foo)

true

string

verbs

verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)

true

string array

shortNames

shortNames is a list of suggested short names of the resource.

false

string array

categories

categories is a list of the grouped resources this resource belongs to (e.g. all)

false

string array

- -
-
-

types.UID

- -
-
-

v1.StatusCause

-
-

StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

reason

A machine-readable description of the cause of the error. If this value is empty there is no information available.

false

string

message

A human-readable description of the cause of the error. This field may be presented as-is to a reader.

false

string

field

The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.
-
-Examples:
- "name" - the field "name" on the current resource
- "items[0].name" - the field "name" on the first array entry in "items"

false

string

- -
-
-

v1.DeletionPropagation

- -
-
-

v1beta1.Cluster

-
-

Information about a registered cluster in a federated kubernetes setup. Clusters are not namespaced and have unique names in the federation.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard object’s metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

v1.ObjectMeta

spec

Spec defines the behavior of the Cluster.

false

v1beta1.ClusterSpec

status

Status describes the current status of a Cluster

false

v1beta1.ClusterStatus

- -
-
-

any

-
-

Represents an untyped JSON map - see the description of the field for more info about the structure of this object.

-
-
-
-
-
- - - diff --git a/docs/reference/generated/federation/federation/v1beta1/operations.html b/docs/reference/generated/federation/federation/v1beta1/operations.html deleted file mode 100755 index 7f2cdce70891f..0000000000000 --- a/docs/reference/generated/federation/federation/v1beta1/operations.html +++ /dev/null @@ -1,1921 +0,0 @@ ---- -title: federation/v1beta1 Operations -notitle: true ---- - - - - - - - -Operations - - - - -
-
-

Operations

-
-
-

get available resources

-
-
-
GET /apis/federation/v1beta1
-
-
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

default

success

v1.APIResourceList

- -
-
-

Consumes

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisfederationv1beta1

    -
  • -
-
-
-
-
-

list or watch objects of kind Cluster

-
-
-
GET /apis/federation/v1beta1/clusters
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.ClusterList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisfederationv1beta1

    -
  • -
-
-
-
-
-

delete collection of Cluster

-
-
-
DELETE /apis/federation/v1beta1/clusters
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisfederationv1beta1

    -
  • -
-
-
-
-
-

create a Cluster

-
-
-
POST /apis/federation/v1beta1/clusters
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.Cluster

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

202

Accepted

v1beta1.Cluster

200

success

v1beta1.Cluster

201

Created

v1beta1.Cluster

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisfederationv1beta1

    -
  • -
-
-
-
-
-

read the specified Cluster

-
-
-
GET /apis/federation/v1beta1/clusters/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

export

Should this value be exported. Export strips fields that a user can not specify.

false

boolean

QueryParameter

exact

Should the export be exact. Exact export maintains cluster-specific fields like Namespace.

false

boolean

PathParameter

name

name of the Cluster

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Cluster

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisfederationv1beta1

    -
  • -
-
-
-
-
-

replace the specified Cluster

-
-
-
PUT /apis/federation/v1beta1/clusters/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.Cluster

PathParameter

name

name of the Cluster

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Cluster

201

Created

v1beta1.Cluster

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisfederationv1beta1

    -
  • -
-
-
-
-
-

delete a Cluster

-
-
-
DELETE /apis/federation/v1beta1/clusters/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.DeleteOptions

QueryParameter

gracePeriodSeconds

The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.

false

integer (int32)

QueryParameter

orphanDependents

Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.

false

boolean

QueryParameter

propagationPolicy

Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.

false

string

PathParameter

name

name of the Cluster

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisfederationv1beta1

    -
  • -
-
-
-
-
-

partially update the specified Cluster

-
-
-
PATCH /apis/federation/v1beta1/clusters/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

name

name of the Cluster

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Cluster

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisfederationv1beta1

    -
  • -
-
-
-
-
-

replace status of the specified Cluster

-
-
-
PUT /apis/federation/v1beta1/clusters/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1beta1.Cluster

PathParameter

name

name of the Cluster

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1beta1.Cluster

201

Created

v1beta1.Cluster

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisfederationv1beta1

    -
  • -
-
-
-
-
-

watch individual changes to a list of Cluster

-
-
-
GET /apis/federation/v1beta1/watch/clusters
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisfederationv1beta1

    -
  • -
-
-
-
-
-

watch changes to an object of kind Cluster

-
-
-
GET /apis/federation/v1beta1/watch/clusters/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

name

name of the Cluster

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apisfederationv1beta1

    -
  • -
-
-
-
-
-
-
- - - diff --git a/docs/reference/generated/federation/index.md b/docs/reference/generated/federation/index.md deleted file mode 100644 index 16462424de03c..0000000000000 --- a/docs/reference/generated/federation/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Federation API Reference ---- - -# API Reference - -Federation API server supports the following group versions: - -* federation/v1beta1: [operations](https://htmlpreview.github.io/?https://github.com/kubernetes/federation/blob/HEAD/docs/api-reference/federation/v1beta1/operations.html), [model definitions](https://htmlpreview.github.io/?https://github.com/kubernetes/federation/blob/HEAD/docs/api-reference/federation/v1beta1/definitions.html) -* v1: [operations](https://htmlpreview.github.io/?https://github.com/kubernetes/federation/blob/HEAD/docs/api-reference/v1/operations.html), [model definitions](https://htmlpreview.github.io/?https://github.com/kubernetes/federation/blob/HEAD/docs/api-reference/v1/definitions.html) -* extensions/v1beta1: [operations](https://htmlpreview.github.io/?https://github.com/kubernetes/federation/blob/HEAD/docs/api-reference/extensions/v1beta1/operations.html), [model definitions](https://htmlpreview.github.io/?https://github.com/kubernetes/federation/blob/HEAD/docs/api-reference/extensions/v1beta1/definitions.html) - - - -[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/federation/docs/api-reference/README.md?pixel)]() - diff --git a/docs/reference/generated/federation/v1/definitions.html b/docs/reference/generated/federation/v1/definitions.html deleted file mode 100755 index ca4e573991238..0000000000000 --- a/docs/reference/generated/federation/v1/definitions.html +++ /dev/null @@ -1,2453 +0,0 @@ ---- -title: v1 Model Definitions -notitle: true ---- - - - - - - - -Top Level API Objects - - - - -
-
-

Top Level API Objects

- -
-
-

Definitions

-
-
-

v1.APIResourceList

-
-

APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

groupVersion

groupVersion is the group and version this APIResourceList is for.

true

string

resources

resources contains the name of the resources and if they are namespaced.

true

v1.APIResource array

- -
-
-

v1.NamespaceList

-
-

NamespaceList is a list of Namespaces.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

v1.ListMeta

items

Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/

true

v1.Namespace array

- -
-
-

v1.ListMeta

-
-

ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

selfLink

selfLink is a URL representing this object. Populated by the system. Read-only.

false

string

resourceVersion

String that identifies the server’s internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency

false

string

continue

continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response.

false

string

- -
-
-

v1.Namespace

-
-

Namespace provides a scope for Names. Use of multiple namespaces is optional.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard object’s metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

v1.ObjectMeta

spec

Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

false

v1.NamespaceSpec

status

Status describes the current status of a Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

false

v1.NamespaceStatus

- -
-
-

v1.Initializers

-
-

Initializers tracks the progress of initialization.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

pending

Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.

true

v1.Initializer array

result

If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.

false

v1.Status

- -
-
-

v1.Preconditions

-
-

Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

uid

Specifies the target UID.

false

types.UID

- -
-
-

v1.Status

-
-

Status is a return value for calls that don’t return other objects.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

v1.ListMeta

status

Status of the operation. One of: "Success" or "Failure". More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

false

string

message

A human-readable description of the status of this operation.

false

string

reason

A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.

false

string

details

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.

false

v1.StatusDetails

code

Suggested HTTP return code for this status, 0 if not set.

false

integer (int32)

- -
-
-

v1.ServiceStatus

-
-

ServiceStatus represents the current status of a service.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

loadBalancer

LoadBalancer contains the current status of the load-balancer, if one is present.

false

v1.LoadBalancerStatus

- -
-
-

v1.Secret

-
-

Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard object’s metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

v1.ObjectMeta

data

Data contains the secret data. Each key must consist of alphanumeric characters, -, _ or .. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4

false

object

stringData

stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.

false

object

type

Used to facilitate programmatic handling of secret data.

false

string

- -
-
-

v1.WatchEvent

- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

type

true

string

object

true

string

- -
-
-

v1.Event

-
-

Event is a report of an event somewhere in the cluster.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard object’s metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

true

v1.ObjectMeta

involvedObject

The object that this event is about.

true

v1.ObjectReference

reason

This should be a short, machine understandable string that gives the reason for the transition into the object’s current status.

false

string

message

A human-readable description of the status of this operation.

false

string

source

The component reporting this event. Should be a short machine understandable string.

false

v1.EventSource

firstTimestamp

The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)

false

string

lastTimestamp

The time at which the most recent occurrence of this event was recorded.

false

string

count

The number of times this event has occurred.

false

integer (int32)

type

Type of this event (Normal, Warning), new types could be added in the future

false

string

- -
-
-

v1.LoadBalancerIngress

-
-

LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

ip

IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)

false

string

hostname

Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)

false

string

- -
-
-

v1.DeletionPropagation

- -
-
-

v1.NamespaceStatus

-
-

NamespaceStatus is information about the current status of a Namespace.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

phase

Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/

false

string

- -
-
-

v1.ServiceList

-
-

ServiceList holds a list of services.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

v1.ListMeta

items

List of services

true

v1.Service array

- -
-
-

v1.NamespaceSpec

-
-

NamespaceSpec describes the attributes on a Namespace.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

finalizers

Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/

false

v1.FinalizerName array

- -
-
-

v1.Service

-
-

Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard object’s metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

v1.ObjectMeta

spec

Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

false

v1.ServiceSpec

status

Most recently observed status of the service. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

false

v1.ServiceStatus

- -
-
-

v1.Patch

-
-

Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.

-
-
-
-

v1.ConfigMapList

-
-

ConfigMapList is a resource containing a list of ConfigMap objects.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

v1.ListMeta

items

Items is the list of ConfigMaps.

true

v1.ConfigMap array

- -
-
-

v1.DeleteOptions

-
-

DeleteOptions may be provided when deleting an API object.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

gracePeriodSeconds

The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.

false

integer (int64)

preconditions

Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.

false

v1.Preconditions

orphanDependents

Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.

false

boolean

false

propagationPolicy

Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.

false

v1.DeletionPropagation

- -
-
-

v1.StatusDetails

-
-

StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).

false

string

group

The group attribute of the resource associated with the status StatusReason.

false

string

kind

The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

uid

UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids

false

string

causes

The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.

false

v1.StatusCause array

retryAfterSeconds

If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.

false

integer (int32)

- -
-
-

v1.ConfigMap

-
-

ConfigMap holds configuration data for pods to consume.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard object’s metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

v1.ObjectMeta

data

Data contains the configuration data. Each key must consist of alphanumeric characters, -, _ or ..

false

object

- -
-
-

v1.Initializer

-
-

Initializer is information about an initializer that has not yet completed.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

name of the process that is responsible for initializing this object.

true

string

- -
-
-

v1.ObjectReference

-
-

ObjectReference contains enough information to let you inspect or modify the referred object.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

namespace

Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/

false

string

name

Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

false

string

uid

UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids

false

string

apiVersion

API version of the referent.

false

string

resourceVersion

Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency

false

string

fieldPath

If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.

false

string

- -
-
-

v1.LoadBalancerStatus

-
-

LoadBalancerStatus represents the status of a load-balancer.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

ingress

Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.

false

v1.LoadBalancerIngress array

- -
-
-

v1.SecretList

-
-

SecretList is a list of Secret.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

v1.ListMeta

items

Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret

true

v1.Secret array

- -
-
-

v1.FinalizerName

- -
-
-

v1.ServicePort

-
-

ServicePort contains information on service’s port.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the Name field in EndpointPort objects. Optional if only one ServicePort is defined on this service.

false

string

protocol

The IP protocol for this port. Supports "TCP" and "UDP". Default is TCP.

false

string

port

The port that will be exposed by this service.

true

integer (int32)

targetPort

Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod’s container ports. If this is not specified, the value of the port field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the port field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service

false

string

nodePort

The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport

false

integer (int32)

- -
-
-

v1.OwnerReference

-
-

OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

apiVersion

API version of the referent.

true

string

kind

Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

true

string

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

true

string

uid

UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids

true

string

controller

If true, this reference points to the managing controller.

false

boolean

false

blockOwnerDeletion

If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.

false

boolean

false

- -
-
-

v1.ObjectMeta

-
-

ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names

false

string

generateName

GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, 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 the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 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).
-
-Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency

false

string

namespace

Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.
-
-Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces

false

string

selfLink

SelfLink is a URL representing this object. Populated by the system. Read-only.

false

string

uid

UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.
-
-Populated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids

false

string

resourceVersion

An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.
-
-Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency

false

string

generation

A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.

false

integer (int64)

creationTimestamp

CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.
-
-Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

string

deletionTimestamp

DeletionTimestamp is RFC 3339 date and time at 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 is expected to 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. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.
-
-Populated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

false

string

deletionGracePeriodSeconds

Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.

false

integer (int64)

labels

Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels

false

object

annotations

Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations

false

object

ownerReferences

List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.

false

v1.OwnerReference array

initializers

An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven’t explicitly asked to observe uninitialized objects.
-
-When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.

false

v1.Initializers

finalizers

Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.

false

string array

clusterName

The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.

false

string

- -
-
-

v1.EventList

-
-

EventList is a list of events.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

false

string

metadata

Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

false

v1.ListMeta

items

List of events

true

v1.Event array

- -
-
-

v1.ClientIPConfig

-
-

ClientIPConfig represents the configurations of Client IP based session affinity.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

timeoutSeconds

timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && ⇐86400(for 1 day) if ServiceAffinity == "ClientIP". Default value is 10800(for 3 hours).

false

integer (int32)

- -
-
-

v1.APIResource

-
-

APIResource specifies the name of a resource and whether it is namespaced.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

name is the plural name of the resource.

true

string

singularName

singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.

true

string

namespaced

namespaced indicates if a resource is namespaced or not.

true

boolean

false

group

group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale".

false

string

version

version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource’s group)".

false

string

kind

kind is the kind for the resource (e.g. Foo is the kind for a resource foo)

true

string

verbs

verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)

true

string array

shortNames

shortNames is a list of suggested short names of the resource.

false

string array

categories

categories is a list of the grouped resources this resource belongs to (e.g. all)

false

string array

- -
-
-

v1.ServiceSpec

-
-

ServiceSpec describes the attributes that a user creates on a service.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

ports

The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

false

v1.ServicePort array

selector

Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/

false

object

clusterIP

clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are "None", empty string (""), or a valid IP address. "None" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

false

string

type

type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. "ExternalName" maps to the specified externalName. "ClusterIP" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is "None", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. "NodePort" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. "LoadBalancer" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services

false

string

externalIPs

externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.

false

string array

sessionAffinity

Supports "ClientIP" and "None". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

false

string

loadBalancerIP

Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.

false

string

loadBalancerSourceRanges

If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/

false

string array

externalName

externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid DNS name and requires Type to be ExternalName.

false

string

externalTrafficPolicy

externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. "Local" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. "Cluster" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.

false

string

healthCheckNodePort

healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.

false

integer (int32)

publishNotReadyAddresses

publishNotReadyAddresses, when set to true, indicates that DNS implementations must publish the notReadyAddresses of subsets for the Endpoints associated with the Service. The default value is false. The primary use case for setting this field is to use a StatefulSet’s Headless Service to propagate SRV records for its Pods without respect to their readiness for purpose of peer discovery. This field will replace the service.alpha.kubernetes.io/tolerate-unready-endpoints when that annotation is deprecated and all clients have been converted to use this field.

false

boolean

false

sessionAffinityConfig

sessionAffinityConfig contains the configurations of session affinity.

false

v1.SessionAffinityConfig

- -
-
-

v1.EventSource

-
-

EventSource contains information for an event.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

component

Component from which the event is generated.

false

string

host

Node name on which the event is generated.

false

string

- -
-
-

types.UID

- -
-
-

v1.StatusCause

-
-

StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

reason

A machine-readable description of the cause of the error. If this value is empty there is no information available.

false

string

message

A human-readable description of the cause of the error. This field may be presented as-is to a reader.

false

string

field

The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.
-
-Examples:
- "name" - the field "name" on the current resource
- "items[0].name" - the field "name" on the first array entry in "items"

false

string

- -
-
-

v1.SessionAffinityConfig

-
-

SessionAffinityConfig represents the configurations of session affinity.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

clientIP

clientIP contains the configurations of Client IP based session affinity.

false

v1.ClientIPConfig

- -
-
-

any

-
-

Represents an untyped JSON map - see the description of the field for more info about the structure of this object.

-
-
-
-
-
- - - diff --git a/docs/reference/generated/federation/v1/operations.html b/docs/reference/generated/federation/v1/operations.html deleted file mode 100755 index eef0937454868..0000000000000 --- a/docs/reference/generated/federation/v1/operations.html +++ /dev/null @@ -1,9529 +0,0 @@ ---- -title: v1 Operations -notitle: true ---- - - - - - - - -Operations - - - - -
-
-

Operations

-
-
-

get available resources

-
-
-
GET /api/v1
-
-
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

default

success

v1.APIResourceList

- -
-
-

Consumes

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

list or watch objects of kind ConfigMap

-
-
-
GET /api/v1/configmaps
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.ConfigMapList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

list or watch objects of kind Event

-
-
-
GET /api/v1/events
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.EventList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

list or watch objects of kind Namespace

-
-
-
GET /api/v1/namespaces
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.NamespaceList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

create a Namespace

-
-
-
POST /api/v1/namespaces
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Namespace

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

202

Accepted

v1.Namespace

200

success

v1.Namespace

201

Created

v1.Namespace

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

list or watch objects of kind ConfigMap

-
-
-
GET /api/v1/namespaces/{namespace}/configmaps
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.ConfigMapList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

delete collection of ConfigMap

-
-
-
DELETE /api/v1/namespaces/{namespace}/configmaps
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

create a ConfigMap

-
-
-
POST /api/v1/namespaces/{namespace}/configmaps
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.ConfigMap

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

202

Accepted

v1.ConfigMap

200

success

v1.ConfigMap

201

Created

v1.ConfigMap

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

read the specified ConfigMap

-
-
-
GET /api/v1/namespaces/{namespace}/configmaps/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

export

Should this value be exported. Export strips fields that a user can not specify.

false

boolean

QueryParameter

exact

Should the export be exact. Exact export maintains cluster-specific fields like Namespace.

false

boolean

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the ConfigMap

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.ConfigMap

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

replace the specified ConfigMap

-
-
-
PUT /api/v1/namespaces/{namespace}/configmaps/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.ConfigMap

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the ConfigMap

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.ConfigMap

201

Created

v1.ConfigMap

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

delete a ConfigMap

-
-
-
DELETE /api/v1/namespaces/{namespace}/configmaps/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.DeleteOptions

QueryParameter

gracePeriodSeconds

The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.

false

integer (int32)

QueryParameter

orphanDependents

Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.

false

boolean

QueryParameter

propagationPolicy

Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the ConfigMap

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

partially update the specified ConfigMap

-
-
-
PATCH /api/v1/namespaces/{namespace}/configmaps/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the ConfigMap

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.ConfigMap

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

list or watch objects of kind Event

-
-
-
GET /api/v1/namespaces/{namespace}/events
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.EventList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

delete collection of Event

-
-
-
DELETE /api/v1/namespaces/{namespace}/events
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

create an Event

-
-
-
POST /api/v1/namespaces/{namespace}/events
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Event

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

202

Accepted

v1.Event

200

success

v1.Event

201

Created

v1.Event

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

read the specified Event

-
-
-
GET /api/v1/namespaces/{namespace}/events/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

export

Should this value be exported. Export strips fields that a user can not specify.

false

boolean

QueryParameter

exact

Should the export be exact. Exact export maintains cluster-specific fields like Namespace.

false

boolean

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Event

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Event

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

replace the specified Event

-
-
-
PUT /api/v1/namespaces/{namespace}/events/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Event

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Event

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Event

201

Created

v1.Event

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

delete an Event

-
-
-
DELETE /api/v1/namespaces/{namespace}/events/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.DeleteOptions

QueryParameter

gracePeriodSeconds

The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.

false

integer (int32)

QueryParameter

orphanDependents

Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.

false

boolean

QueryParameter

propagationPolicy

Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Event

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

partially update the specified Event

-
-
-
PATCH /api/v1/namespaces/{namespace}/events/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Event

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Event

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

list or watch objects of kind Secret

-
-
-
GET /api/v1/namespaces/{namespace}/secrets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.SecretList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

delete collection of Secret

-
-
-
DELETE /api/v1/namespaces/{namespace}/secrets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

create a Secret

-
-
-
POST /api/v1/namespaces/{namespace}/secrets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Secret

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

202

Accepted

v1.Secret

200

success

v1.Secret

201

Created

v1.Secret

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

read the specified Secret

-
-
-
GET /api/v1/namespaces/{namespace}/secrets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

export

Should this value be exported. Export strips fields that a user can not specify.

false

boolean

QueryParameter

exact

Should the export be exact. Exact export maintains cluster-specific fields like Namespace.

false

boolean

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Secret

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Secret

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

replace the specified Secret

-
-
-
PUT /api/v1/namespaces/{namespace}/secrets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Secret

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Secret

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Secret

201

Created

v1.Secret

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

delete a Secret

-
-
-
DELETE /api/v1/namespaces/{namespace}/secrets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.DeleteOptions

QueryParameter

gracePeriodSeconds

The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.

false

integer (int32)

QueryParameter

orphanDependents

Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.

false

boolean

QueryParameter

propagationPolicy

Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Secret

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

partially update the specified Secret

-
-
-
PATCH /api/v1/namespaces/{namespace}/secrets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Secret

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Secret

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

list or watch objects of kind Service

-
-
-
GET /api/v1/namespaces/{namespace}/services
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.ServiceList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

delete collection of Service

-
-
-
DELETE /api/v1/namespaces/{namespace}/services
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

create a Service

-
-
-
POST /api/v1/namespaces/{namespace}/services
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Service

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

202

Accepted

v1.Service

200

success

v1.Service

201

Created

v1.Service

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

read the specified Service

-
-
-
GET /api/v1/namespaces/{namespace}/services/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

export

Should this value be exported. Export strips fields that a user can not specify.

false

boolean

QueryParameter

exact

Should the export be exact. Exact export maintains cluster-specific fields like Namespace.

false

boolean

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Service

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Service

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

replace the specified Service

-
-
-
PUT /api/v1/namespaces/{namespace}/services/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Service

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Service

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Service

201

Created

v1.Service

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

delete a Service

-
-
-
DELETE /api/v1/namespaces/{namespace}/services/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.DeleteOptions

QueryParameter

gracePeriodSeconds

The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.

false

integer (int32)

QueryParameter

orphanDependents

Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.

false

boolean

QueryParameter

propagationPolicy

Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Service

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

partially update the specified Service

-
-
-
PATCH /api/v1/namespaces/{namespace}/services/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Service

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Service

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

read status of the specified Service

-
-
-
GET /api/v1/namespaces/{namespace}/services/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Service

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Service

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

replace status of the specified Service

-
-
-
PUT /api/v1/namespaces/{namespace}/services/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Service

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Service

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Service

201

Created

v1.Service

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

partially update status of the specified Service

-
-
-
PATCH /api/v1/namespaces/{namespace}/services/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Service

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Service

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

read the specified Namespace

-
-
-
GET /api/v1/namespaces/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

export

Should this value be exported. Export strips fields that a user can not specify.

false

boolean

QueryParameter

exact

Should the export be exact. Exact export maintains cluster-specific fields like Namespace.

false

boolean

PathParameter

name

name of the Namespace

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Namespace

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

replace the specified Namespace

-
-
-
PUT /api/v1/namespaces/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Namespace

PathParameter

name

name of the Namespace

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Namespace

201

Created

v1.Namespace

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

delete a Namespace

-
-
-
DELETE /api/v1/namespaces/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.DeleteOptions

QueryParameter

gracePeriodSeconds

The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.

false

integer (int32)

QueryParameter

orphanDependents

Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.

false

boolean

QueryParameter

propagationPolicy

Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.

false

string

PathParameter

name

name of the Namespace

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Status

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

partially update the specified Namespace

-
-
-
PATCH /api/v1/namespaces/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

name

name of the Namespace

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Namespace

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

replace finalize of the specified Namespace

-
-
-
PUT /api/v1/namespaces/{name}/finalize
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Namespace

PathParameter

name

name of the Namespace

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Namespace

201

Created

v1.Namespace

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

read status of the specified Namespace

-
-
-
GET /api/v1/namespaces/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

PathParameter

name

name of the Namespace

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Namespace

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

replace status of the specified Namespace

-
-
-
PUT /api/v1/namespaces/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Namespace

PathParameter

name

name of the Namespace

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Namespace

201

Created

v1.Namespace

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

partially update status of the specified Namespace

-
-
-
PATCH /api/v1/namespaces/{name}/status
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

BodyParameter

body

true

v1.Patch

PathParameter

name

name of the Namespace

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.Namespace

- -
-
-

Consumes

-
-
    -
  • -

    application/json-patch+json

    -
  • -
  • -

    application/merge-patch+json

    -
  • -
  • -

    application/strategic-merge-patch+json

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

list or watch objects of kind Secret

-
-
-
GET /api/v1/secrets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.SecretList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

list or watch objects of kind Service

-
-
-
GET /api/v1/services
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.ServiceList

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

watch individual changes to a list of ConfigMap

-
-
-
GET /api/v1/watch/configmaps
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

watch individual changes to a list of Event

-
-
-
GET /api/v1/watch/events
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

watch individual changes to a list of Namespace

-
-
-
GET /api/v1/watch/namespaces
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

watch individual changes to a list of ConfigMap

-
-
-
GET /api/v1/watch/namespaces/{namespace}/configmaps
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

watch changes to an object of kind ConfigMap

-
-
-
GET /api/v1/watch/namespaces/{namespace}/configmaps/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the ConfigMap

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

watch individual changes to a list of Event

-
-
-
GET /api/v1/watch/namespaces/{namespace}/events
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

watch changes to an object of kind Event

-
-
-
GET /api/v1/watch/namespaces/{namespace}/events/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Event

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

watch individual changes to a list of Secret

-
-
-
GET /api/v1/watch/namespaces/{namespace}/secrets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

watch changes to an object of kind Secret

-
-
-
GET /api/v1/watch/namespaces/{namespace}/secrets/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Secret

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

watch individual changes to a list of Service

-
-
-
GET /api/v1/watch/namespaces/{namespace}/services
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

watch changes to an object of kind Service

-
-
-
GET /api/v1/watch/namespaces/{namespace}/services/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

namespace

object name and auth scope, such as for teams and projects

true

string

PathParameter

name

name of the Service

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

watch changes to an object of kind Namespace

-
-
-
GET /api/v1/watch/namespaces/{name}
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

PathParameter

name

name of the Namespace

true

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

watch individual changes to a list of Secret

-
-
-
GET /api/v1/watch/secrets
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-

watch individual changes to a list of Service

-
-
-
GET /api/v1/watch/services
-
-
-
-

Parameters

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescriptionRequiredSchemaDefault

QueryParameter

pretty

If true, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

includeUninitialized

If true, partially initialized resources are included in the response.

false

boolean

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it’s 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.

false

string

QueryParameter

timeoutSeconds

Timeout for the list/watch call.

false

integer (int32)

QueryParameter

limit

limit is a maximum number of responses to return for a list call. If more items exist, the server will set the continue field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true. -

The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.

false

integer (int32)

QueryParameter

continue

The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.

false

string

- -
-
-

Responses

- ----- - - - - - - - - - - - - - - -
HTTP CodeDescriptionSchema

200

success

v1.WatchEvent

- -
-
-

Consumes

-
-
    -
  • -

    /

    -
  • -
-
-
-
-

Produces

-
-
    -
  • -

    application/json

    -
  • -
  • -

    application/yaml

    -
  • -
  • -

    application/vnd.kubernetes.protobuf

    -
  • -
  • -

    application/json;stream=watch

    -
  • -
  • -

    application/vnd.kubernetes.protobuf;stream=watch

    -
  • -
-
-
-
-

Tags

-
-
    -
  • -

    apiv1

    -
  • -
-
-
-
-
-
-
- - - diff --git a/docs/reference/generated/kube-apiserver.md b/docs/reference/generated/kube-apiserver.md deleted file mode 100644 index 9a766e2484f74..0000000000000 --- a/docs/reference/generated/kube-apiserver.md +++ /dev/null @@ -1,888 +0,0 @@ ---- -title: kube-apiserver -notitle: true ---- -## 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. - -``` -kube-apiserver [flags] -``` - -### Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--admission-control-config-file string
File with admission control configuration.
--advertise-address ip
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
If true, allow privileged containers. [default=false]
--anonymous-auth     Default: true
Enables anonymous requests to the secure port of the API server. Requests that are not rejected by another authentication method are treated as anonymous requests. Anonymous requests have a username of system:anonymous, and a group name of system:unauthenticated.
--apiserver-count int     Default: 1
The number of apiservers running in the cluster, must be a positive number.
--audit-log-batch-buffer-size int     Default: 10000
The size of the buffer to store events before batching and writing. Only used in batch mode.
--audit-log-batch-max-size int     Default: 400
The maximum size of a batch. Only used in batch mode.
--audit-log-batch-max-wait duration     Default: 30s
The amount of time to wait before force writing the batch that hadn't reached the max size. Only used in batch mode.
--audit-log-batch-throttle-burst int     Default: 15
Maximum number of requests sent at the same moment if ThrottleQPS was not utilized before. Only used in batch mode.
--audit-log-batch-throttle-enable
Whether batching throttling is enabled. Only used in batch mode.
--audit-log-batch-throttle-qps float32     Default: 10
Maximum average number of batches per second. Only used in batch mode.
--audit-log-format string     Default: "json"
Format of saved audits. "legacy" indicates 1-line text format for each event. "json" indicates structured json format. Requires the 'AdvancedAuditing' feature gate. Known formats are legacy,json.
--audit-log-maxage int
The maximum number of days to retain old audit log files based on the timestamp encoded in their filename.
--audit-log-maxbackup int
The maximum number of old audit log files to retain.
--audit-log-maxsize int
The maximum size in megabytes of the audit log file before it gets rotated.
--audit-log-mode string     Default: "blocking"
Strategy for sending audit events. Blocking indicates sending events should block server responses. Batch causes the backend to buffer and write events asynchronously. Known modes are batch,blocking.
--audit-log-path string
If set, all requests coming to the apiserver will be logged to this file. '-' means standard out.
--audit-policy-file string
Path to the file that defines the audit policy configuration. Requires the 'AdvancedAuditing' feature gate. With AdvancedAuditing, a profile is required to enable auditing.
--audit-webhook-batch-buffer-size int     Default: 10000
The size of the buffer to store events before batching and writing. Only used in batch mode.
--audit-webhook-batch-max-size int     Default: 400
The maximum size of a batch. Only used in batch mode.
--audit-webhook-batch-max-wait duration     Default: 30s
The amount of time to wait before force writing the batch that hadn't reached the max size. Only used in batch mode.
--audit-webhook-batch-throttle-burst int     Default: 15
Maximum number of requests sent at the same moment if ThrottleQPS was not utilized before. Only used in batch mode.
--audit-webhook-batch-throttle-enable     Default: true
Whether batching throttling is enabled. Only used in batch mode.
--audit-webhook-batch-throttle-qps float32     Default: 10
Maximum average number of batches per second. Only used in batch mode.
--audit-webhook-config-file string
Path to a kubeconfig formatted file that defines the audit webhook configuration. Requires the 'AdvancedAuditing' feature gate.
--audit-webhook-initial-backoff duration     Default: 10s
The amount of time to wait before retrying the first failed request.
--audit-webhook-mode string     Default: "batch"
Strategy for sending audit events. Blocking indicates sending events should block server responses. Batch causes the backend to buffer and write events asynchronously. Known modes are batch,blocking.
--authentication-token-webhook-cache-ttl duration     Default: 2m0s
The duration to cache responses from the webhook token authenticator.
--authentication-token-webhook-config-file string
File with webhook configuration for token authentication in kubeconfig format. The API server will query the remote service to determine authentication for bearer tokens.
--authorization-mode string     Default: "AlwaysAllow"
Ordered list of plug-ins to do authorization on secure port. Comma-delimited list of: AlwaysAllow,AlwaysDeny,ABAC,Webhook,RBAC,Node.
--authorization-policy-file string
File with authorization policy in csv format, used with --authorization-mode=ABAC, on the secure port.
--authorization-webhook-cache-authorized-ttl duration     Default: 5m0s
The duration to cache 'authorized' responses from the webhook authorizer.
--authorization-webhook-cache-unauthorized-ttl duration     Default: 30s
The duration to cache 'unauthorized' responses from the webhook authorizer.
--authorization-webhook-config-file string
File with webhook configuration in kubeconfig format, used with --authorization-mode=Webhook. The API server will query the remote service to determine access on the API server's secure port.
--azure-container-registry-config string
Path to the file containing Azure container registry configuration information.
--basic-auth-file string
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 ip     Default: 0.0.0.0
The IP address on which to listen for the --secure-port port. 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 for all IPv4 interfaces and :: for all IPv6 interfaces).
--cert-dir string     Default: "/var/run/kubernetes"
The directory where the TLS certs are located. If --tls-cert-file and --tls-private-key-file are provided, this flag will be ignored.
--client-ca-file string
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 string
The path to the cloud provider configuration file. Empty string for no configuration file.
--cloud-provider string
The provider for cloud services. Empty string for no provider.
--contention-profiling
Enable lock contention profiling, if profiling is enabled
--cors-allowed-origins stringSlice
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.
--default-watch-cache-size int     Default: 100
Default watch cache size. If zero, watch cache will be disabled for resources that do not have a default watch size set.
--delete-collection-workers int     Default: 1
Number of workers spawned for DeleteCollection call. These are used to speed up namespace cleanup.
--deserialization-cache-size int
Number of deserialized json objects to cache in memory.
--disable-admission-plugins stringSlice
admission plugins that should be disabled although they are in the default enabled plugins list. Comma-delimited list of admission plugins: AlwaysAdmit, AlwaysDeny, AlwaysPullImages, DefaultStorageClass, DefaultTolerationSeconds, DenyEscalatingExec, DenyExecOnPrivileged, EventRateLimit, ExtendedResourceToleration, ImagePolicyWebhook, InitialResources, Initializers, LimitPodHardAntiAffinityTopology, LimitRanger, MutatingAdmissionWebhook, NamespaceAutoProvision, NamespaceExists, NamespaceLifecycle, NodeRestriction, OwnerReferencesPermissionEnforcement, PersistentVolumeClaimResize, PersistentVolumeLabel, PodNodeSelector, PodPreset, PodSecurityPolicy, PodTolerationRestriction, Priority, ResourceQuota, SecurityContextDeny, ServiceAccount, StorageObjectInUseProtection, ValidatingAdmissionWebhook. The order of plugins in this flag does not matter.
--enable-admission-plugins stringSlice
admission plugins that should be enabled in addition to default enabled ones. Comma-delimited list of admission plugins: AlwaysAdmit, AlwaysDeny, AlwaysPullImages, DefaultStorageClass, DefaultTolerationSeconds, DenyEscalatingExec, DenyExecOnPrivileged, EventRateLimit, ExtendedResourceToleration, ImagePolicyWebhook, InitialResources, Initializers, LimitPodHardAntiAffinityTopology, LimitRanger, MutatingAdmissionWebhook, NamespaceAutoProvision, NamespaceExists, NamespaceLifecycle, NodeRestriction, OwnerReferencesPermissionEnforcement, PersistentVolumeClaimResize, PersistentVolumeLabel, PodNodeSelector, PodPreset, PodSecurityPolicy, PodTolerationRestriction, Priority, ResourceQuota, SecurityContextDeny, ServiceAccount, StorageObjectInUseProtection, ValidatingAdmissionWebhook. The order of plugins in this flag does not matter.
--enable-aggregator-routing
Turns on aggregator routing requests to endoints IP rather than cluster IP.
--enable-bootstrap-token-auth
Enable to allow secrets of type 'bootstrap.kubernetes.io/token' in the 'kube-system' namespace to be used for TLS bootstrapping authentication.
--enable-garbage-collector     Default: true
Enables the generic garbage collector. MUST be synced with the corresponding flag of the kube-controller-manager.
--enable-logs-handler     Default: true
If true, install a /logs handler for the apiserver logs.
--enable-swagger-ui
Enables swagger ui on the apiserver at /swagger-ui
--endpoint-reconciler-type string     Default: "master-count"
Use an endpoint reconciler (master-count, lease, none)
--etcd-cafile string
SSL Certificate Authority file used to secure etcd communication.
--etcd-certfile string
SSL certification file used to secure etcd communication.
--etcd-compaction-interval duration     Default: 5m0s
The interval of compaction requests. If 0, the compaction request from apiserver is disabled.
--etcd-count-metric-poll-period duration     Default: 1m0s
Frequency of polling etcd for number of resources per type. 0 disables the metric collection.
--etcd-keyfile string
SSL key file used to secure etcd communication.
--etcd-prefix string     Default: "/registry"
The prefix to prepend to all resource paths in etcd.
--etcd-servers stringSlice
List of etcd servers to connect with (scheme://ip:port), comma separated.
--etcd-servers-overrides stringSlice
Per-resource etcd servers overrides, comma separated. The individual override format: group/resource#servers, where servers are http://ip:port, semicolon separated.
--event-ttl duration     Default: 1h0m0s
Amount of time to retain events.
--experimental-encryption-provider-config string
The file containing configuration for encryption providers to be used for storing secrets in etcd
--external-hostname string
The hostname to use when generating externalized URLs for this master (e.g. Swagger API Docs).
--feature-gates mapStringBool
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
Accelerators=true|false (ALPHA - default=false)
AdvancedAuditing=true|false (BETA - default=true)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (ALPHA - default=false)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (ALPHA - default=false)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
MountPropagation=true|false (BETA - default=true)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (ALPHA - default=false)
PodShareProcessNamespace=true|false (ALPHA - default=false)
ReadOnlyAPIDataVolumes=true|false (DEPRECATED - default=true)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (ALPHA - default=false)
RunAsGroup=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (ALPHA - default=false)
ServiceNodeExclusion=true|false (ALPHA - default=false)
ServiceProxyAllowExternalIPs=true|false (DEPRECATED - default=false)
StorageObjectInUseProtection=true|false (BETA - default=true)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportIPVSProxyMode=true|false (BETA - default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (ALPHA - default=false)
TokenRequest=true|false (ALPHA - default=false)
VolumeScheduling=true|false (BETA - default=true)
VolumeSubpath=true|false (default=true)
-h, --help
help for kube-apiserver
--http2-max-streams-per-connection int
The limit that the server gives to clients for the maximum number of streams in an HTTP/2 connection. Zero means to use golang's default.
--kubelet-certificate-authority string
Path to a cert file for the certificate authority.
--kubelet-client-certificate string
Path to a client cert file for TLS.
--kubelet-client-key string
Path to a client key file for TLS.
--kubelet-https     Default: true
Use https for kubelet connections.
--kubelet-preferred-address-types stringSlice     Default: [Hostname,InternalDNS,InternalIP,ExternalDNS,ExternalIP]
List of the preferred NodeAddressTypes to use for kubelet connections.
--kubelet-read-only-port uint     Default: 10255
DEPRECATED: kubelet port.
--kubelet-timeout duration     Default: 5s
Timeout for kubelet operations.
--kubernetes-service-node-port int
If non-zero, the Kubernetes master service (which apiserver creates/maintains) will be of type NodePort, using this as the value of the port. If zero, the Kubernetes master service will be of type ClusterIP.
--log-flush-frequency duration     Default: 5s
Maximum number of seconds between log flushes
--master-service-namespace string     Default: "default"
DEPRECATED: the namespace from which the kubernetes master services should be injected into pods.
--max-connection-bytes-per-sec int
If non-zero, throttle each user connection to this number of bytes/sec. Currently only applies to long-running requests.
--max-mutating-requests-inflight int     Default: 200
The maximum number of mutating requests in flight at a given time. When the server exceeds this, it rejects requests. Zero for no limit.
--max-requests-inflight int     Default: 400
The maximum number of non-mutating requests in flight at a given time. When the server exceeds this, it rejects requests. Zero for no limit.
--min-request-timeout int     Default: 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 string
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 string
The client ID for the OpenID Connect client, must be set if oidc-issuer-url is set.
--oidc-groups-claim string
If provided, the name of a custom OpenID Connect claim for specifying user groups. The claim value is expected to be a string or array of strings. This flag is experimental, please see the authentication documentation for further details.
--oidc-groups-prefix string
If provided, all groups will be prefixed with this value to prevent conflicts with other authentication strategies.
--oidc-issuer-url string
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-signing-algs stringSlice     Default: [RS256]
Comma-separated list of allowed JOSE asymmetric signing algorithms. JWTs with a 'alg' header value not in this list will be rejected. Values are defined by RFC 7518 https://tools.ietf.org/html/rfc7518#section-3.1.
--oidc-username-claim string     Default: "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.
--oidc-username-prefix string
If provided, all usernames will be prefixed with this value. If not provided, username claims other than 'email' are prefixed by the issuer URL to avoid clashes. To skip any prefixing, provide the value '-'.
--profiling     Default: true
Enable profiling via web interface host:port/debug/pprof/
--proxy-client-cert-file string
Client certificate used to prove the identity of the aggregator or kube-apiserver when it must call out during a request. This includes proxying requests to a user api-server and calling out to webhook admission plugins. It is expected that this cert includes a signature from the CA in the --requestheader-client-ca-file flag. That CA is published in the 'extension-apiserver-authentication' configmap in the kube-system namespace. Components receiving calls from kube-aggregator should use that CA to perform their half of the mutual TLS verification.
--proxy-client-key-file string
Private key for the client certificate used to prove the identity of the aggregator or kube-apiserver when it must call out during a request. This includes proxying requests to a user api-server and calling out to webhook admission plugins.
--repair-malformed-updates     Default: true
If true, server will do its best to fix the update request to pass the validation, e.g., setting empty UID in update request to its existing value. This flag can be turned off after we fix all the clients that send malformed updates.
--request-timeout duration     Default: 1m0s
An optional field indicating the duration a handler must keep a request open before timing it out. This is the default request timeout for requests but may be overridden by flags such as --min-request-timeout for specific types of requests.
--requestheader-allowed-names stringSlice
List of client certificate common names to allow to provide usernames in headers specified by --requestheader-username-headers. If empty, any client certificate validated by the authorities in --requestheader-client-ca-file is allowed.
--requestheader-client-ca-file string
Root certificate bundle to use to verify client certificates on incoming requests before trusting usernames in headers specified by --requestheader-username-headers
--requestheader-extra-headers-prefix stringSlice
List of request header prefixes to inspect. X-Remote-Extra- is suggested.
--requestheader-group-headers stringSlice
List of request headers to inspect for groups. X-Remote-Group is suggested.
--requestheader-username-headers stringSlice
List of request headers to inspect for usernames. X-Remote-User is common.
--runtime-config mapStringString
A set of key=value pairs that describe runtime configuration that may be passed to apiserver. <group>/<version> (or <version> for the core group) key can be used to turn on/off specific api versions. <group>/<version>/<resource> (or <version>/<resource> for the core group) 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 int     Default: 6443
The port on which to serve HTTPS with authentication and authorization. If 0, don't serve HTTPS at all.
--service-account-api-audiences stringSlice
Identifiers of the API. The service account token authenticator will validate that tokens used against the API are bound to at least one of these audiences.
--service-account-issuer string
Identifier of the service account token issuer. The issuer will assert this identifier in "iss" claim of issued tokens. This value is a string or URI.
--service-account-key-file stringArray
File containing PEM-encoded x509 RSA or ECDSA private or public keys, used to verify ServiceAccount tokens. The specified file can contain multiple keys, and the flag can be specified multiple times with different files. If unspecified, --tls-private-key-file is used. Must be specified when --service-account-signing-key is provided
--service-account-lookup     Default: true
If true, validate ServiceAccount tokens exist in etcd as part of authentication.
--service-account-signing-key-file string
Path to the file that contains the current private key of the service account token issuer. The issuer will sign issued ID tokens with this private key. (Ignored unless alpha TokenRequest is enabled
--service-cluster-ip-range ipNet     Default: 10.0.0.0/24
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 portRange     Default: 30000-32767
A port range to reserve for services with NodePort visibility. Example: '30000-32767'. Inclusive at both ends of the range.
--storage-backend string
The storage backend for persistence. Options: 'etcd3' (default), 'etcd2'.
--storage-media-type string     Default: "application/vnd.kubernetes.protobuf"
The media type to use to store objects in storage. Some resources or storage backends may only support a specific media type and will ignore this setting.
--storage-versions string     Default: "admission.k8s.io/v1beta1,
admissionregistration.k8s.io/v1beta1,
apps/v1,
authentication.k8s.io/v1,
authorization.k8s.io/v1,
autoscaling/v1,
batch/v1,
certificates.k8s.io/v1beta1,
componentconfig/v1alpha1,
events.k8s.io/v1beta1,
extensions/v1beta1,
imagepolicy.k8s.io/v1alpha1,
kubeadm.k8s.io/v1alpha1,
networking.k8s.io/v1,
policy/v1beta1,
rbac.authorization.k8s.io/v1,
scheduling.k8s.io/v1alpha1,
settings.k8s.io/v1alpha1,
storage.k8s.io/v1,
v1"
The per-group version to store resources in. Specified in the format "group1/version1,group2/version2,...". In the case where objects are moved from one group to the other, you may specify the format "group1=group2/v1beta1,group3/v1beta1,...". You only need to pass the groups you wish to change from the defaults. It defaults to a list of preferred versions of all registered groups, which is derived from the KUBE_API_VERSIONS environment variable.
--target-ram-mb int
Memory limit for apiserver in MB (used to configure sizes of caches, etc.)
--tls-cert-file string
File containing the default 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 the directory specified by --cert-dir.
--tls-cipher-suites stringSlice
Comma-separated list of cipher suites for the server. Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants). If omitted, the default Go cipher suites will be used
--tls-min-version string
Minimum TLS version supported. Value must match version names from https://golang.org/pkg/crypto/tls/#pkg-constants.
--tls-private-key-file string
File containing the default x509 private key matching --tls-cert-file.
--tls-sni-cert-key namedCertKey     Default: []
A pair of x509 certificate and private key file paths, optionally suffixed with a list of domain patterns which are fully qualified domain names, possibly with prefixed wildcard segments. If no domain patterns are provided, the names of the certificate are extracted. Non-wildcard matches trump over wildcard matches, explicit domain patterns trump over extracted names. For multiple key/certificate pairs, use the --tls-sni-cert-key multiple times. Examples: "example.crt,example.key" or "foo.crt,foo.key:*.foo.com,foo.com".
--token-auth-file string
If set, the file that will be used to secure the secure port of the API server via token authentication.
--version version[=true]
Print version information and quit
--watch-cache     Default: true
Enable watch caching in the apiserver
--watch-cache-sizes stringSlice
List of watch cache sizes for every resource (pods, nodes, etc.), comma separated. The individual override format: resource[.group]#size, where resource is lowercase plural (no version), group is optional, and size is a number. It takes effect when watch-cache is enabled. Some resources (replicationcontrollers, endpoints, nodes, pods, services, apiservices.apiregistration.k8s.io) have system defaults set by heuristics, others default to default-watch-cache-size
- - - diff --git a/docs/reference/generated/kube-controller-manager.md b/docs/reference/generated/kube-controller-manager.md deleted file mode 100644 index d91be6b5c5853..0000000000000 --- a/docs/reference/generated/kube-controller-manager.md +++ /dev/null @@ -1,661 +0,0 @@ ---- -title: kube-controller-manager -notitle: true ---- -## 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. - -``` -kube-controller-manager [flags] -``` - -### Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--address ip     Default: 0.0.0.0
DEPRECATED: the IP address on which to listen for the --port port. See --bind-address instead.
--allocate-node-cidrs
Should CIDRs for Pods be allocated and set on the cloud provider.
--attach-detach-reconcile-sync-period duration     Default: 1m0s
The reconciler sync wait time between volume attach detach. This duration must be larger than one second, and increasing this value from the default may allow for volumes to be mismatched with pods.
--azure-container-registry-config string
Path to the file containing Azure container registry configuration information.
--bind-address ip     Default: 0.0.0.0
The IP address on which to listen for the --secure-port port. 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 for all IPv4 interfaces and :: for all IPv6 interfaces).
--cert-dir string     Default: "/var/run/kubernetes"
The directory where the TLS certs are located. If --tls-cert-file and --tls-private-key-file are provided, this flag will be ignored.
--cidr-allocator-type string     Default: "RangeAllocator"
Type of CIDR allocator to use
--cloud-config string
The path to the cloud provider configuration file. Empty string for no configuration file.
--cloud-provider string
The provider for cloud services. Empty string for no provider.
--cluster-cidr string
CIDR Range for Pods in cluster. Requires --allocate-node-cidrs to be true
--cluster-name string     Default: "kubernetes"
The instance prefix for the cluster.
--cluster-signing-cert-file string     Default: "/etc/kubernetes/ca/ca.pem"
Filename containing a PEM-encoded X509 CA certificate used to issue cluster-scoped certificates
--cluster-signing-key-file string     Default: "/etc/kubernetes/ca/ca.key"
Filename containing a PEM-encoded RSA or ECDSA private key used to sign cluster-scoped certificates
--concurrent-deployment-syncs int32     Default: 5
The number of deployment objects that are allowed to sync concurrently. Larger number = more responsive deployments, but more CPU (and network) load
--concurrent-endpoint-syncs int32     Default: 5
The number of endpoint syncing operations that will be done concurrently. Larger number = faster endpoint updating, but more CPU (and network) load
--concurrent-gc-syncs int32     Default: 20
The number of garbage collector workers that are allowed to sync concurrently.
--concurrent-namespace-syncs int32     Default: 10
The number of namespace objects that are allowed to sync concurrently. Larger number = more responsive namespace termination, but more CPU (and network) load
--concurrent-replicaset-syncs int32     Default: 5
The number of replica sets that are allowed to sync concurrently. Larger number = more responsive replica management, but more CPU (and network) load
--concurrent-resource-quota-syncs int32     Default: 5
The number of resource quotas that are allowed to sync concurrently. Larger number = more responsive quota management, but more CPU (and network) load
--concurrent-service-syncs int32     Default: 1
The number of services that are allowed to sync concurrently. Larger number = more responsive service management, but more CPU (and network) load
--concurrent-serviceaccount-token-syncs int32     Default: 5
The number of service account token objects that are allowed to sync concurrently. Larger number = more responsive token generation, but more CPU (and network) load
--concurrent_rc_syncs int32     Default: 5
The number of replication controllers that are allowed to sync concurrently. Larger number = more responsive replica management, but more CPU (and network) load
--configure-cloud-routes     Default: true
Should CIDRs allocated by allocate-node-cidrs be configured on the cloud provider.
--contention-profiling
Enable lock contention profiling, if profiling is enabled.
--controller-start-interval duration
Interval between starting controller managers.
--controllers stringSlice     Default: [*]
A list of controllers to enable. '*' enables all on-by-default controllers, 'foo' enables the controller named 'foo', '-foo' disables the controller named 'foo'.
All controllers: attachdetach, bootstrapsigner, clusterrole-aggregation, cronjob, csrapproving, csrcleaner, csrsigning, daemonset, deployment, disruption, endpoint, garbagecollector, horizontalpodautoscaling, job, namespace, nodeipam, nodelifecycle, persistentvolume-binder, persistentvolume-expander, podgc, pv-protection, pvc-protection, replicaset, replicationcontroller, resourcequota, route, service, serviceaccount, serviceaccount-token, statefulset, tokencleaner, ttl
Disabled-by-default controllers: bootstrapsigner, tokencleaner
--deployment-controller-sync-period duration     Default: 30s
Period for syncing the deployments.
--disable-attach-detach-reconcile-sync
Disable volume attach detach reconciler sync. Disabling this may cause volumes to be mismatched with pods. Use wisely.
--enable-dynamic-provisioning     Default: true
Enable dynamic provisioning for environments that support it.
--enable-garbage-collector     Default: true
Enables the generic garbage collector. MUST be synced with the corresponding flag of the kube-apiserver.
--enable-hostpath-provisioner
Enable HostPath PV provisioning when running without a cloud provider. This allows testing and development of provisioning features. HostPath provisioning is not supported in any way, won't work in a multi-node cluster, and should not be used for anything other than testing or development.
--enable-taint-manager     Default: true
WARNING: Beta feature. If set to true enables NoExecute Taints and will evict all not-tolerating Pod running on Nodes tainted with this kind of Taints.
--experimental-cluster-signing-duration duration     Default: 8760h0m0s
The length of duration signed certificates will be given.
--external-cloud-volume-plugin string
The plugin to use when cloud provider is set to external. Can be empty, should only be set when cloud-provider is external. Currently used to allow node and volume controllers to work for in tree cloud providers.
--feature-gates mapStringBool
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
Accelerators=true|false (ALPHA - default=false)
AdvancedAuditing=true|false (BETA - default=true)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (ALPHA - default=false)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (ALPHA - default=false)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
MountPropagation=true|false (BETA - default=true)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (ALPHA - default=false)
PodShareProcessNamespace=true|false (ALPHA - default=false)
ReadOnlyAPIDataVolumes=true|false (DEPRECATED - default=true)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (ALPHA - default=false)
RunAsGroup=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (ALPHA - default=false)
ServiceNodeExclusion=true|false (ALPHA - default=false)
ServiceProxyAllowExternalIPs=true|false (DEPRECATED - default=false)
StorageObjectInUseProtection=true|false (BETA - default=true)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportIPVSProxyMode=true|false (BETA - default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (ALPHA - default=false)
TokenRequest=true|false (ALPHA - default=false)
VolumeScheduling=true|false (BETA - default=true)
VolumeSubpath=true|false (default=true)
--flex-volume-plugin-dir string     Default: "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/"
Full path of the directory in which the flex volume plugin should search for additional third party volume plugins.
-h, --help
help for kube-controller-manager
--horizontal-pod-autoscaler-downscale-delay duration     Default: 5m0s
The period since last downscale, before another downscale can be performed in horizontal pod autoscaler.
--horizontal-pod-autoscaler-sync-period duration     Default: 30s
The period for syncing the number of pods in horizontal pod autoscaler.
--horizontal-pod-autoscaler-tolerance float     Default: 0.1
The minimum change (from 1.0) in the desired-to-actual metrics ratio for the horizontal pod autoscaler to consider scaling.
--horizontal-pod-autoscaler-upscale-delay duration     Default: 3m0s
The period since last upscale, before another upscale can be performed in horizontal pod autoscaler.
--horizontal-pod-autoscaler-use-rest-clients     Default: true
WARNING: alpha feature. If set to true, causes the horizontal pod autoscaler controller to use REST clients through the kube-aggregator, instead of using the legacy metrics client through the API server proxy. This is required for custom metrics support in the horizontal pod autoscaler.
--http2-max-streams-per-connection int
The limit that the server gives to clients for the maximum number of streams in an HTTP/2 connection. Zero means to use golang's default.
--insecure-experimental-approve-all-kubelet-csrs-for-group string
This flag does nothing.
--kube-api-burst int32     Default: 30
Burst to use while talking with kubernetes apiserver.
--kube-api-content-type string     Default: "application/vnd.kubernetes.protobuf"
Content type of requests sent to apiserver.
--kube-api-qps float32     Default: 20
QPS to use while talking with kubernetes apiserver.
--kubeconfig string
Path to kubeconfig file with authorization and master location information.
--large-cluster-size-threshold int32     Default: 50
Number of nodes from which NodeController treats the cluster as large for the eviction logic purposes. --secondary-node-eviction-rate is implicitly overridden to 0 for clusters this size or smaller.
--leader-elect     Default: true
Start a leader election client and gain leadership before executing the main loop. Enable this when running replicated components for high availability.
--leader-elect-lease-duration duration     Default: 15s
The duration that non-leader candidates will wait after observing a leadership renewal until attempting to acquire leadership of a led but unrenewed leader slot. This is effectively the maximum duration that a leader can be stopped before it is replaced by another candidate. This is only applicable if leader election is enabled.
--leader-elect-renew-deadline duration     Default: 10s
The interval between attempts by the acting master to renew a leadership slot before it stops leading. This must be less than or equal to the lease duration. This is only applicable if leader election is enabled.
--leader-elect-resource-lock endpoints     Default: "endpoints"
The type of resource object that is used for locking during leader election. Supported options are endpoints (default) and `configmaps`.
--leader-elect-retry-period duration     Default: 2s
The duration the clients should wait between attempting acquisition and renewal of a leadership. This is only applicable if leader election is enabled.
--log-flush-frequency duration     Default: 5s
Maximum number of seconds between log flushes
--master string
The address of the Kubernetes API server (overrides any value in kubeconfig).
--min-resync-period duration     Default: 12h0m0s
The resync period in reflectors will be random between MinResyncPeriod and 2*MinResyncPeriod.
--namespace-sync-period duration     Default: 5m0s
The period for syncing namespace life-cycle updates
--node-cidr-mask-size int32     Default: 24
Mask size for node cidr in cluster.
--node-eviction-rate float32     Default: 0.1
Number of nodes per second on which pods are deleted in case of node failure when a zone is healthy (see --unhealthy-zone-threshold for definition of healthy/unhealthy). Zone refers to entire cluster in non-multizone clusters.
--node-monitor-grace-period duration     Default: 40s
Amount of time which we allow running Node to be unresponsive before marking it unhealthy. 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 duration     Default: 5s
The period for syncing NodeStatus in NodeController.
--node-startup-grace-period duration     Default: 1m0s
Amount of time which we allow starting Node to be unresponsive before marking it unhealthy.
--pod-eviction-timeout duration     Default: 5m0s
The grace period for deleting pods on failed nodes.
--port int     Default: 10252
DEPRECATED: the port on which to serve HTTP insecurely without authentication and authorization. If 0, don't serve HTTPS at all. See --secure-port instead.
--profiling     Default: true
Enable profiling via web interface host:port/debug/pprof/
--pv-recycler-increment-timeout-nfs int32     Default: 30
the increment of time added per Gi to ActiveDeadlineSeconds for an NFS scrubber pod
--pv-recycler-minimum-timeout-hostpath int32     Default: 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 int32     Default: 300
The minimum ActiveDeadlineSeconds to use for an NFS Recycler pod
--pv-recycler-pod-template-filepath-hostpath string
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 string
The file path to a pod definition used as a template for NFS persistent volume recycling
--pv-recycler-timeout-increment-hostpath int32     Default: 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 duration     Default: 15s
The period for syncing persistent volumes and persistent volume claims
--resource-quota-sync-period duration     Default: 5m0s
The period for syncing quota usage status in the system
--root-ca-file string
If set, this root certificate authority will be included in service account's token secret. This must be a valid PEM-encoded CA bundle.
--route-reconciliation-period duration     Default: 10s
The period for reconciling routes created for Nodes by cloud provider.
--secondary-node-eviction-rate float32     Default: 0.01
Number of nodes per second on which pods are deleted in case of node failure when a zone is unhealthy (see --unhealthy-zone-threshold for definition of healthy/unhealthy). Zone refers to entire cluster in non-multizone clusters. This value is implicitly overridden to 0 if the cluster size is smaller than --large-cluster-size-threshold.
--secure-port int
The port on which to serve HTTPS with authentication and authorization. If 0, don't serve HTTPS at all.
--service-account-private-key-file string
Filename containing a PEM-encoded private RSA or ECDSA key used to sign service account tokens.
--service-cluster-ip-range string
CIDR Range for Services in cluster. Requires --allocate-node-cidrs to be true
--terminated-pod-gc-threshold int32     Default: 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.
--tls-cert-file string
File containing the default 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 the directory specified by --cert-dir.
--tls-cipher-suites stringSlice
Comma-separated list of cipher suites for the server. Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants). If omitted, the default Go cipher suites will be used
--tls-min-version string
Minimum TLS version supported. Value must match version names from https://golang.org/pkg/crypto/tls/#pkg-constants.
--tls-private-key-file string
File containing the default x509 private key matching --tls-cert-file.
--tls-sni-cert-key namedCertKey     Default: []
A pair of x509 certificate and private key file paths, optionally suffixed with a list of domain patterns which are fully qualified domain names, possibly with prefixed wildcard segments. If no domain patterns are provided, the names of the certificate are extracted. Non-wildcard matches trump over wildcard matches, explicit domain patterns trump over extracted names. For multiple key/certificate pairs, use the --tls-sni-cert-key multiple times. Examples: "example.crt,example.key" or "foo.crt,foo.key:*.foo.com,foo.com".
--unhealthy-zone-threshold float32     Default: 0.55
Fraction of Nodes in a zone which needs to be not Ready (minimum 3) for zone to be treated as unhealthy.
--use-service-account-credentials
If true, use individual service account credentials for each controller.
--version version[=true]
Print version information and quit
- - - diff --git a/docs/reference/generated/kube-proxy.md b/docs/reference/generated/kube-proxy.md deleted file mode 100644 index 21d047ab9117a..0000000000000 --- a/docs/reference/generated/kube-proxy.md +++ /dev/null @@ -1,303 +0,0 @@ ---- -title: kube-proxy -notitle: true ---- -## 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 and UDP stream forwarding or round robin TCP and 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. - -``` -kube-proxy [flags] -``` - -### Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--azure-container-registry-config string
Path to the file containing Azure container registry configuration information.
--bind-address 0.0.0.0     Default: 0.0.0.0
The IP address for the proxy server to serve on (set to 0.0.0.0 for all IPv4 interfaces and `::` for all IPv6 interfaces)
--cleanup
If true cleanup iptables and ipvs rules and exit.
--cleanup-ipvs     Default: true
If true make kube-proxy cleanup ipvs rules before running. Default is true
--cluster-cidr string
The CIDR range of pods in the cluster. When configured, traffic sent to a Service cluster IP from outside this range will be masqueraded and traffic sent from pods to an external LoadBalancer IP will be directed to the respective cluster IP instead
--config string
The path to the configuration file.
--config-sync-period duration     Default: 15m0s
How often configuration from the apiserver is refreshed. Must be greater than 0.
--conntrack-max-per-core int32     Default: 32768
Maximum number of NAT connections to track per CPU core (0 to leave the limit as-is and ignore conntrack-min).
--conntrack-min int32     Default: 131072
Minimum number of conntrack entries to allocate, regardless of conntrack-max-per-core (set conntrack-max-per-core=0 to leave the limit as-is).
--conntrack-tcp-timeout-close-wait duration     Default: 1h0m0s
NAT timeout for TCP connections in the CLOSE_WAIT state
--conntrack-tcp-timeout-established duration     Default: 24h0m0s
Idle timeout for established TCP connections (0 to leave as-is)
--feature-gates mapStringBool
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
Accelerators=true|false (ALPHA - default=false)
AdvancedAuditing=true|false (BETA - default=true)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (ALPHA - default=false)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (ALPHA - default=false)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
MountPropagation=true|false (BETA - default=true)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (ALPHA - default=false)
PodShareProcessNamespace=true|false (ALPHA - default=false)
ReadOnlyAPIDataVolumes=true|false (DEPRECATED - default=true)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (ALPHA - default=false)
RunAsGroup=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (ALPHA - default=false)
ServiceNodeExclusion=true|false (ALPHA - default=false)
ServiceProxyAllowExternalIPs=true|false (DEPRECATED - default=false)
StorageObjectInUseProtection=true|false (BETA - default=true)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportIPVSProxyMode=true|false (BETA - default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (ALPHA - default=false)
TokenRequest=true|false (ALPHA - default=false)
VolumeScheduling=true|false (BETA - default=true)
VolumeSubpath=true|false (default=true)
--healthz-bind-address 0.0.0.0     Default: 0.0.0.0:10256
The IP address and port for the health check server to serve on (set to 0.0.0.0 for all IPv4 interfaces and `::` for all IPv6 interfaces)
--healthz-port int32     Default: 10256
The port to bind the health check server. Use 0 to disable.
-h, --help
help for kube-proxy
--hostname-override string
If non-empty, will use this string as identification instead of the actual hostname.
--iptables-masquerade-bit int32     Default: 14
If using the pure iptables proxy, the bit of the fwmark space to mark packets requiring SNAT with. Must be within the range [0, 31].
--iptables-min-sync-period duration
The minimum interval of how often the iptables rules can be refreshed as endpoints and services change (e.g. '5s', '1m', '2h22m').
--iptables-sync-period duration     Default: 30s
The maximum interval of how often iptables rules are refreshed (e.g. '5s', '1m', '2h22m'). Must be greater than 0.
--ipvs-min-sync-period duration
The minimum interval of how often the ipvs rules can be refreshed as endpoints and services change (e.g. '5s', '1m', '2h22m').
--ipvs-scheduler string
The ipvs scheduler type when proxy mode is ipvs
--ipvs-sync-period duration     Default: 30s
The maximum interval of how often ipvs rules are refreshed (e.g. '5s', '1m', '2h22m'). Must be greater than 0.
--kube-api-burst int32     Default: 10
Burst to use while talking with kubernetes apiserver
--kube-api-content-type string     Default: "application/vnd.kubernetes.protobuf"
Content type of requests sent to apiserver.
--kube-api-qps float32     Default: 5
QPS to use while talking with kubernetes apiserver
--kubeconfig string
Path to kubeconfig file with authorization information (the master location is set by the master flag).
--log-flush-frequency duration     Default: 5s
Maximum number of seconds between log flushes
--masquerade-all
If using the pure iptables proxy, SNAT all traffic sent via Service cluster IPs (this not commonly needed)
--master string
The address of the Kubernetes API server (overrides any value in kubeconfig)
--metrics-bind-address 0.0.0.0     Default: 127.0.0.1:10249
The IP address and port for the metrics server to serve on (set to 0.0.0.0 for all IPv4 interfaces and `::` for all IPv6 interfaces)
--nodeport-addresses stringSlice
A string slice of values which specify the addresses to use for NodePorts. Values may be valid IP blocks (e.g. 1.2.3.0/24, 1.2.3.4/32). The default empty string slice ([]) means to use all local addresses.
--oom-score-adj int32     Default: -999
The oom-score-adj value for kube-proxy process. Values must be within the range [-1000, 1000]
--profiling
If true enables profiling via web interface on /debug/pprof handler.
--proxy-mode ProxyMode
Which proxy mode to use: 'userspace' (older) or 'iptables' (faster) or 'ipvs' (experimental). If blank, use the best-available proxy (currently iptables). 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 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.
--udp-timeout duration     Default: 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
--version version[=true]
Print version information and quit
--write-config-to string
If set, write the default configuration values to this file and exit.
- - - diff --git a/docs/reference/generated/kube-scheduler.md b/docs/reference/generated/kube-scheduler.md deleted file mode 100644 index c5ae07fb33f4f..0000000000000 --- a/docs/reference/generated/kube-scheduler.md +++ /dev/null @@ -1,233 +0,0 @@ ---- -title: kube-scheduler -notitle: true ---- -## 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. - -``` -kube-scheduler [flags] -``` - -### Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--address string
The IP address to serve on (set to 0.0.0.0 for all IPv4 interfaces and :: for all IPv6 interfaces).
--algorithm-provider string
The scheduling algorithm provider to use, one of: ClusterAutoscalerProvider | DefaultProvider
--azure-container-registry-config string
Path to the file containing Azure container registry configuration information.
--config string
The path to the configuration file.
--contention-profiling
Enable lock contention profiling, if profiling is enabled
--feature-gates mapStringBool
A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
APIListChunking=true|false (BETA - default=true)
APIResponseCompression=true|false (ALPHA - default=false)
Accelerators=true|false (ALPHA - default=false)
AdvancedAuditing=true|false (BETA - default=true)
AllAlpha=true|false (ALPHA - default=false)
AppArmor=true|false (BETA - default=true)
BlockVolume=true|false (ALPHA - default=false)
CPUManager=true|false (BETA - default=true)
CRIContainerLogRotation=true|false (ALPHA - default=false)
CSIPersistentVolume=true|false (BETA - default=true)
CustomPodDNS=true|false (BETA - default=true)
CustomResourceSubresources=true|false (ALPHA - default=false)
CustomResourceValidation=true|false (BETA - default=true)
DebugContainers=true|false (ALPHA - default=false)
DevicePlugins=true|false (BETA - default=true)
DynamicKubeletConfig=true|false (ALPHA - default=false)
EnableEquivalenceClassCache=true|false (ALPHA - default=false)
ExpandPersistentVolumes=true|false (ALPHA - default=false)
ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
GCERegionalPersistentDisk=true|false (BETA - default=true)
HugePages=true|false (BETA - default=true)
HyperVContainer=true|false (ALPHA - default=false)
Initializers=true|false (ALPHA - default=false)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
MountContainers=true|false (ALPHA - default=false)
MountPropagation=true|false (BETA - default=true)
PersistentLocalVolumes=true|false (BETA - default=true)
PodPriority=true|false (ALPHA - default=false)
PodShareProcessNamespace=true|false (ALPHA - default=false)
ReadOnlyAPIDataVolumes=true|false (DEPRECATED - default=true)
ResourceLimitsPriorityFunction=true|false (ALPHA - default=false)
RotateKubeletClientCertificate=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (ALPHA - default=false)
RunAsGroup=true|false (ALPHA - default=false)
ScheduleDaemonSetPods=true|false (ALPHA - default=false)
ServiceNodeExclusion=true|false (ALPHA - default=false)
ServiceProxyAllowExternalIPs=true|false (DEPRECATED - default=false)
StorageObjectInUseProtection=true|false (BETA - default=true)
StreamingProxyRedirects=true|false (BETA - default=true)
SupportIPVSProxyMode=true|false (BETA - default=true)
SupportPodPidsLimit=true|false (ALPHA - default=false)
TaintBasedEvictions=true|false (ALPHA - default=false)
TaintNodesByCondition=true|false (ALPHA - default=false)
TokenRequest=true|false (ALPHA - default=false)
VolumeScheduling=true|false (BETA - default=true)
VolumeSubpath=true|false (default=true)
-h, --help
help for kube-scheduler
--kube-api-burst int32     Default: 100
Burst to use while talking with kubernetes apiserver
--kube-api-content-type string     Default: "application/vnd.kubernetes.protobuf"
Content type of requests sent to apiserver.
--kube-api-qps float32     Default: 50
QPS to use while talking with kubernetes apiserver
--kubeconfig string
Path to kubeconfig file with authorization and master location information.
--leader-elect     Default: true
Start a leader election client and gain leadership before executing the main loop. Enable this when running replicated components for high availability.
--leader-elect-lease-duration duration     Default: 15s
The duration that non-leader candidates will wait after observing a leadership renewal until attempting to acquire leadership of a led but unrenewed leader slot. This is effectively the maximum duration that a leader can be stopped before it is replaced by another candidate. This is only applicable if leader election is enabled.
--leader-elect-renew-deadline duration     Default: 10s
The interval between attempts by the acting master to renew a leadership slot before it stops leading. This must be less than or equal to the lease duration. This is only applicable if leader election is enabled.
--leader-elect-resource-lock endpoints     Default: "endpoints"
The type of resource object that is used for locking during leader election. Supported options are endpoints (default) and `configmaps`.
--leader-elect-retry-period duration     Default: 2s
The duration the clients should wait between attempting acquisition and renewal of a leadership. This is only applicable if leader election is enabled.
--lock-object-name string     Default: "kube-scheduler"
Define the name of the lock object.
--lock-object-namespace string     Default: "kube-system"
Define the namespace of the lock object.
--log-flush-frequency duration     Default: 5s
Maximum number of seconds between log flushes
--master string
The address of the Kubernetes API server (overrides any value in kubeconfig)
--policy-config-file string
File with scheduler policy configuration. This file is used if policy ConfigMap is not provided or --use-legacy-policy-config==true
--policy-configmap string
Name of the ConfigMap object that contains scheduler's policy configuration. It must exist in the system namespace before scheduler initialization if --use-legacy-policy-config==false. The config must be provided as the value of an element in 'Data' map with the key='policy.cfg'
--policy-configmap-namespace string
The namespace where policy ConfigMap is located. The system namespace will be used if this is not provided or is empty.
--port int32     Default: 10251
The port that the scheduler's http service runs on
--profiling
Enable profiling via web interface host:port/debug/pprof/
--scheduler-name string     Default: "default-scheduler"
Name of the scheduler, used to select which pods will be processed by this scheduler, based on pod's "spec.SchedulerName".
--use-legacy-policy-config
When set to true, scheduler will ignore policy ConfigMap and uses policy config file
--version version[=true]
Print version information and quit
- - - diff --git a/docs/reference/generated/kubectl/kubectl-commands.html b/docs/reference/generated/kubectl/kubectl-commands.html deleted file mode 100644 index 97b6efc8e80cc..0000000000000 --- a/docs/reference/generated/kubectl/kubectl-commands.html +++ /dev/null @@ -1,8388 +0,0 @@ - - - - -Kubectl Reference Docs - - - - - - - - - -
-
  • example
-

GETTING STARTED

-

This section contains the most basic commands for getting a workload -running on your cluster.

-
    -
  • run will start running 1 or more instances of a container image on your cluster.
  • -
  • expose will load balance traffic across the running instances, and can create a HA proxy for accessing the containers from outside the cluster.
  • -
-

Once your workloads are running, you can use the commands in the -WORKING WITH APPS section to -inspect them.

-
-

run

-
-

Start a single instance of nginx.

-
-
kubectl run nginx --image=nginx
-
-
-

Start a single instance of hazelcast and let the container expose port 5701 .

-
-
kubectl run hazelcast --image=hazelcast --port=5701
-
-
-

Start a single instance of hazelcast and set environment variables "DNS_DOMAIN=cluster" and "POD_NAMESPACE=default" in the container.

-
-
kubectl run hazelcast --image=hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"
-
-
-

Start a single instance of hazelcast and set labels "app=hazelcast" and "env=prod" in the container.

-
-
kubectl run hazelcast --image=nginx --labels="app=hazelcast,env=prod"
-
-
-

Start a replicated instance of nginx.

-
-
kubectl run nginx --image=nginx --replicas=5
-
-
-

Dry run. Print the corresponding API objects without creating them.

-
-
kubectl run nginx --image=nginx --dry-run
-
-
-

Start a single instance of nginx, but overload the spec of the deployment with a partial set of values parsed from JSON.

-
-
kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'
-
-
-

Start a pod of busybox and keep it in the foreground, don't restart it if it exits.

-
-
kubectl run -i -t busybox --image=busybox --restart=Never
-
-
-

Start the nginx container using the default command, but use custom arguments (arg1 .. argN) for that command.

-
-
kubectl run nginx --image=nginx -- <arg1> <arg2> ... <argN>
-
-
-

Start the nginx container using a different command and custom arguments.

-
-
kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>
-
-
-

Start the perl container to compute π to 2000 places and print it out.

-
-
kubectl run pi --image=perl --restart=OnFailure -- perl -Mbignum=bpi -wle 'print bpi(2000)'
-
-
-

Start the cron job to compute π to 2000 places and print it out every 5 minutes.

-
-
kubectl run pi --schedule="0/5 * * * ?" --image=perl --restart=OnFailure -- perl -Mbignum=bpi -wle 'print bpi(2000)'
-
-

Create and run a particular image, possibly replicated.

-

Creates a deployment or job to manage the created container(s).

-

Usage

-

$ run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
attachfalseIf true, wait for the Pod to start running, and then attach to the Pod as if 'kubectl attach ...' were called. Default false, unless '-i/--stdin' is set, in which case the default is true. With '--restart=Never' the exit code of the container process is returned.
commandfalseIf true and extra arguments are present, use them as the 'command' field in the container, rather than the 'args' field which is the default.
dry-runfalseIf true, only print the object that would be sent, without sending it.
env[]Environment variables to set in the container
exposefalseIf true, a public, external service is created for the container(s) which are run
generatorThe name of the API generator to use, see http://kubernetes.io/docs/user-guide/kubectl-conventions/#generators for a list.
hostport-1The host port mapping for the container port. To demonstrate a single-machine container.
imageThe image for the container to run.
image-pull-policyThe image pull policy for the container. If left empty, this value will not be specified by the client and defaulted by the server
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
labelslComma separated labels to apply to the pod(s). Will override previous values.
leave-stdin-openfalseIf the pod is started in interactive mode or with stdin, leave stdin open after the first attach completes. By default, stdin will be closed after the first attach completes.
limitsThe resource requirement limits for this container. For example, 'cpu=200m,memory=512Mi'. Note that server side components may assign limits depending on the server configuration, such as limit ranges.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
overridesAn inline JSON override for the generated object. If this is non-empty, it is used to override the generated object. Requires that the object supply a valid apiVersion field.
pod-running-timeout1m0sThe length of time (like 5s, 2m, or 3h, higher than zero) to wait until at least one pod is running
portThe port that this container exposes. If --expose is true, this is also the port used by the service that is created.
quietfalseIf true, suppress prompt messages.
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
replicasr1Number of replicas to create for this container. Default is 1.
requestsThe resource requirement requests for this container. For example, 'cpu=100m,memory=256Mi'. Note that server side components may assign requests depending on the server configuration, such as limit ranges.
restartAlwaysThe restart policy for this Pod. Legal values [Always, OnFailure, Never]. If set to 'Always' a deployment is created, if set to 'OnFailure' a job is created, if set to 'Never', a regular pod is created. For the latter two --replicas must be 1. Default 'Always', for CronJobs Never.
rmfalseIf true, delete resources created in this command for attached containers.
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
scheduleA schedule in the Cron format the job should be run with.
service-generatorservice/v2The name of the generator to use for creating a service. Only used if --expose is true
service-overridesAn inline JSON override for the generated service object. If this is non-empty, it is used to override the generated object. Requires that the object supply a valid apiVersion field. Only used if --expose is true.
serviceaccountService account to set in the pod spec
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
stdinifalseKeep stdin open on the container(s) in the pod, even if nothing is attached.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
ttytfalseAllocated a TTY for each container in the pod.
-
-

run-container

-
-

Start a single instance of nginx.

-
-
kubectl run nginx --image=nginx
-
-
-

Start a single instance of hazelcast and let the container expose port 5701 .

-
-
kubectl run hazelcast --image=hazelcast --port=5701
-
-
-

Start a single instance of hazelcast and set environment variables "DNS_DOMAIN=cluster" and "POD_NAMESPACE=default" in the container.

-
-
kubectl run hazelcast --image=hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"
-
-
-

Start a single instance of hazelcast and set labels "app=hazelcast" and "env=prod" in the container.

-
-
kubectl run hazelcast --image=nginx --labels="app=hazelcast,env=prod"
-
-
-

Start a replicated instance of nginx.

-
-
kubectl run nginx --image=nginx --replicas=5
-
-
-

Dry run. Print the corresponding API objects without creating them.

-
-
kubectl run nginx --image=nginx --dry-run
-
-
-

Start a single instance of nginx, but overload the spec of the deployment with a partial set of values parsed from JSON.

-
-
kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'
-
-
-

Start a pod of busybox and keep it in the foreground, don't restart it if it exits.

-
-
kubectl run -i -t busybox --image=busybox --restart=Never
-
-
-

Start the nginx container using the default command, but use custom arguments (arg1 .. argN) for that command.

-
-
kubectl run nginx --image=nginx -- <arg1> <arg2> ... <argN>
-
-
-

Start the nginx container using a different command and custom arguments.

-
-
kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>
-
-
-

Start the perl container to compute π to 2000 places and print it out.

-
-
kubectl run pi --image=perl --restart=OnFailure -- perl -Mbignum=bpi -wle 'print bpi(2000)'
-
-
-

Start the cron job to compute π to 2000 places and print it out every 5 minutes.

-
-
kubectl run pi --schedule="0/5 * * * ?" --image=perl --restart=OnFailure -- perl -Mbignum=bpi -wle 'print bpi(2000)'
-
-

Create and run a particular image, possibly replicated.

-

Creates a deployment or job to manage the created container(s).

-

Usage

-

$ run-container

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
attachfalseIf true, wait for the Pod to start running, and then attach to the Pod as if 'kubectl attach ...' were called. Default false, unless '-i/--stdin' is set, in which case the default is true. With '--restart=Never' the exit code of the container process is returned.
commandfalseIf true and extra arguments are present, use them as the 'command' field in the container, rather than the 'args' field which is the default.
dry-runfalseIf true, only print the object that would be sent, without sending it.
env[]Environment variables to set in the container
exposefalseIf true, a public, external service is created for the container(s) which are run
generatorThe name of the API generator to use, see http://kubernetes.io/docs/user-guide/kubectl-conventions/#generators for a list.
hostport-1The host port mapping for the container port. To demonstrate a single-machine container.
imageThe image for the container to run.
image-pull-policyThe image pull policy for the container. If left empty, this value will not be specified by the client and defaulted by the server
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
labelslComma separated labels to apply to the pod(s). Will override previous values.
leave-stdin-openfalseIf the pod is started in interactive mode or with stdin, leave stdin open after the first attach completes. By default, stdin will be closed after the first attach completes.
limitsThe resource requirement limits for this container. For example, 'cpu=200m,memory=512Mi'. Note that server side components may assign limits depending on the server configuration, such as limit ranges.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
overridesAn inline JSON override for the generated object. If this is non-empty, it is used to override the generated object. Requires that the object supply a valid apiVersion field.
pod-running-timeout1m0sThe length of time (like 5s, 2m, or 3h, higher than zero) to wait until at least one pod is running
portThe port that this container exposes. If --expose is true, this is also the port used by the service that is created.
quietfalseIf true, suppress prompt messages.
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
replicasr1Number of replicas to create for this container. Default is 1.
requestsThe resource requirement requests for this container. For example, 'cpu=100m,memory=256Mi'. Note that server side components may assign requests depending on the server configuration, such as limit ranges.
restartAlwaysThe restart policy for this Pod. Legal values [Always, OnFailure, Never]. If set to 'Always' a deployment is created, if set to 'OnFailure' a job is created, if set to 'Never', a regular pod is created. For the latter two --replicas must be 1. Default 'Always', for CronJobs Never.
rmfalseIf true, delete resources created in this command for attached containers.
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
scheduleA schedule in the Cron format the job should be run with.
service-generatorservice/v2The name of the generator to use for creating a service. Only used if --expose is true
service-overridesAn inline JSON override for the generated service object. If this is non-empty, it is used to override the generated object. Requires that the object supply a valid apiVersion field. Only used if --expose is true.
serviceaccountService account to set in the pod spec
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
stdinifalseKeep stdin open on the container(s) in the pod, even if nothing is attached.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
ttytfalseAllocated a TTY for each container in the pod.
-
-

expose

-
-

Create a service for a replicated nginx, which serves on port 80 and connects to the containers on port 8000.

-
-
kubectl expose rc nginx --port=80 --target-port=8000
-
-
-

Create a service for a replication controller identified by type and name specified in "nginx-controller.yaml", which serves on port 80 and connects to the containers on port 8000.

-
-
kubectl expose -f nginx-controller.yaml --port=80 --target-port=8000
-
-
-

Create a service for a pod valid-pod, which serves on port 444 with the name "frontend"

-
-
kubectl expose pod valid-pod --port=444 --name=frontend
-
-
-

Create a second service based on the above service, exposing the container port 8443 as port 443 with the name "nginx-https"

-
-
kubectl expose service nginx --port=443 --target-port=8443 --name=nginx-https
-
-
-

Create a service for a replicated streaming application on port 4100 balancing UDP traffic and named 'video-stream'.

-
-
kubectl expose rc streamer --port=4100 --protocol=udp --name=video-stream
-
-
-

Create a service for a replicated nginx using replica set, which serves on port 80 and connects to the containers on port 8000.

-
-
kubectl expose rs nginx --port=80 --target-port=8000
-
-
-

Create a service for an nginx deployment, which serves on port 80 and connects to the containers on port 8000.

-
-
kubectl expose deployment nginx --port=80 --target-port=8000
-
-

Expose a resource as a new Kubernetes service.

-

Looks up a deployment, service, replica set, replication controller or pod by name and uses the selector for that resource as the selector for a new service on the specified port. A deployment or replica set will be exposed as a service only if its selector is convertible to a selector that service supports, i.e. when the selector contains only the matchLabels component. Note that if no port is specified via --port and the exposed resource has multiple ports, all will be re-used by the new service. Also if no labels are specified, the new service will re-use the labels from the resource it exposes.

-

Possible resources include (case insensitive):

-

pod (po), service (svc), replicationcontroller (rc), deployment (deploy), replicaset (rs)

-

Usage

-

$ expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
cluster-ipClusterIP to be assigned to the service. Leave empty to auto-allocate, or set to 'None' to create a headless service.
container-portSynonym for --target-port
dry-runfalseIf true, only print the object that would be sent, without sending it.
external-ipAdditional external IP address (not managed by Kubernetes) to accept for the service. If this IP is routed to a node, the service can be accessed by this IP in addition to its generated service IP.
filenamef[]Filename, directory, or URL to files identifying the resource to expose a service
generatorservice/v2The name of the API generator to use. There are 2 generators: 'service/v1' and 'service/v2'. The only difference between them is that service port in v1 is named 'default', while it is left unnamed in v2. Default is 'service/v2'.
labelslLabels to apply to the service created by this call.
load-balancer-ipIP to assign to the LoadBalancer. If empty, an ephemeral IP will be created and used (cloud-provider specific).
nameThe name for the newly created object.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
overridesAn inline JSON override for the generated object. If this is non-empty, it is used to override the generated object. Requires that the object supply a valid apiVersion field.
portThe port that the service should serve on. Copied from the resource being exposed, if unspecified
protocolThe network protocol for the service to be created. Default is 'TCP'.
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
selectorA label selector to use for this service. Only equality-based selector requirements are supported. If empty (the default) infer the selector from the replication controller or replica set.)
session-affinityIf non-empty, set the session affinity for the service to this; legal values: 'None', 'ClientIP'
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
target-portName or number for the port on the container that the service should direct traffic to. Optional.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
typeType for this service: ClusterIP, NodePort, LoadBalancer, or ExternalName. Default is 'ClusterIP'.
-

APP MANAGEMENT

-

This section contains commands for creating, updating, deleting, and -viewing your workloads in a Kubernetes cluster.

-
-

annotate

-
-

Update pod 'foo' with the annotation 'description' and the value 'my frontend'. # If the same annotation is set multiple times, only the last value will be applied

-
-
kubectl annotate pods foo description='my frontend'
-
-
-

Update a pod identified by type and name in "pod.json"

-
-
kubectl annotate -f pod.json description='my frontend'
-
-
-

Update pod 'foo' with the annotation 'description' and the value 'my frontend running nginx', overwriting any existing value.

-
-
kubectl annotate --overwrite pods foo description='my frontend running nginx'
-
-
-

Update all pods in the namespace

-
-
kubectl annotate pods --all description='my frontend running nginx'
-
-
-

Update pod 'foo' only if the resource is unchanged from version 1.

-
-
kubectl annotate pods foo description='my frontend running nginx' --resource-version=1
-
-
-

Update pod 'foo' by removing an annotation named 'description' if it exists. # Does not require the --overwrite flag.

-
-
kubectl annotate pods foo description-
-
-

Update the annotations on one or more resources

-

All Kubernetes objects support the ability to store additional data with the object as annotations. Annotations are key/value pairs that can be larger than labels and include arbitrary string values such as structured JSON. Tools and system extensions may use annotations to store their own data.

-

Attempting to set an annotation that already exists will fail unless --overwrite is set. If --resource-version is specified and does not match the current resource version on the server the command will fail.

-

Valid resource types include:

-
    -
  • all
  • -
  • certificatesigningrequests (aka 'csr')
  • -
  • clusterrolebindings
  • -
  • clusterroles
  • -
  • componentstatuses (aka 'cs')
  • -
  • configmaps (aka 'cm')
  • -
  • controllerrevisions
  • -
  • cronjobs
  • -
  • customresourcedefinition (aka 'crd')
  • -
  • daemonsets (aka 'ds')
  • -
  • deployments (aka 'deploy')
  • -
  • endpoints (aka 'ep')
  • -
  • events (aka 'ev')
  • -
  • horizontalpodautoscalers (aka 'hpa')
  • -
  • ingresses (aka 'ing')
  • -
  • jobs
  • -
  • limitranges (aka 'limits')
  • -
  • namespaces (aka 'ns')
  • -
  • networkpolicies (aka 'netpol')
  • -
  • nodes (aka 'no')
  • -
  • persistentvolumeclaims (aka 'pvc')
  • -
  • persistentvolumes (aka 'pv')
  • -
  • poddisruptionbudgets (aka 'pdb')
  • -
  • podpreset
  • -
  • pods (aka 'po')
  • -
  • podsecuritypolicies (aka 'psp')
  • -
  • podtemplates
  • -
  • replicasets (aka 'rs')
  • -
  • replicationcontrollers (aka 'rc')
  • -
  • resourcequotas (aka 'quota')
  • -
  • rolebindings
  • -
  • roles
  • -
  • secrets
  • -
  • serviceaccounts (aka 'sa')
  • -
  • services (aka 'svc')
  • -
  • statefulsets (aka 'sts')
  • -
  • storageclasses (aka 'sc')
  • -
-

Usage

-

$ annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allfalseSelect all resources, including uninitialized ones, in the namespace of the specified resource types.
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
filenamef[]Filename, directory, or URL to files identifying the resource to update the annotation
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
include-uninitializedfalseIf true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.
localfalseIf true, annotation will NOT contact api-server but run locally.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
overwritefalseIf true, allow annotations to be overwritten, otherwise reject annotation updates that overwrite existing annotations.
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
resource-versionIf non-empty, the annotation update will only succeed if this is the current resource-version for the object. Only valid when specifying a single resource.
selectorlSelector (label query) to filter on, not including uninitialized ones, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2).
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
-
-

autoscale

-
-

Auto scale a deployment "foo", with the number of pods between 2 and 10, no target CPU utilization specified so a default autoscaling policy will be used:

-
-
kubectl autoscale deployment foo --min=2 --max=10
-
-
-

Auto scale a replication controller "foo", with the number of pods between 1 and 5, target CPU utilization at 80%:

-
-
kubectl autoscale rc foo --max=5 --cpu-percent=80
-
-

Creates an autoscaler that automatically chooses and sets the number of pods that run in a kubernetes cluster.

-

Looks up a Deployment, ReplicaSet, or ReplicationController by name and creates an autoscaler that uses the given resource as a reference. An autoscaler can automatically increase or decrease number of pods deployed within the system as needed.

-

Usage

-

$ autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
cpu-percent-1The target average CPU utilization (represented as a percent of requested CPU) over all the pods. If it's not specified or negative, a default autoscaling policy will be used.
dry-runfalseIf true, only print the object that would be sent, without sending it.
filenamef[]Filename, directory, or URL to files identifying the resource to autoscale.
generatorhorizontalpodautoscaler/v1The name of the API generator to use. Currently there is only 1 generator.
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
max-1The upper limit for the number of pods that can be set by the autoscaler. Required.
min-1The lower limit for the number of pods that can be set by the autoscaler. If it's not specified or negative, the server will apply a default value.
nameThe name for the newly created object. If not specified, the name of the input resource will be used.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
-
-

convert

-
-

Convert 'pod.yaml' to latest version and print to stdout.

-
-
kubectl convert -f pod.yaml
-
-
-

Convert the live state of the resource specified by 'pod.yaml' to the latest version # and print to stdout in JSON format.

-
-
kubectl convert -f pod.yaml --local -o json
-
-
-

Convert all files under current directory to latest version and create them all.

-
-
kubectl convert -f . | kubectl create -f -
-
-

Convert config files between different API versions. Both YAML and JSON formats are accepted.

-

The command takes filename, directory, or URL as input, and convert it into format of version specified by --output-version flag. If target version is not specified or not supported, convert to latest version.

-

The default output will be printed to stdout in YAML format. One can use -o option to change to output destination.

-

Usage

-

$ convert -f FILENAME

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
filenamef[]Filename, directory, or URL to files to need to get converted.
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
localtrueIf true, convert will NOT try to contact api-server but run locally.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionOutput the formatted object with the given group version (for ex: 'extensions/v1beta1').)
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

create

-
-

Create a pod using the data in pod.json.

-
-
kubectl create -f ./pod.json
-
-
-

Create a pod based on the JSON passed into stdin.

-
-
cat pod.json | kubectl create -f -
-
-
-

Edit the data in docker-registry.yaml in JSON using the v1 API format then create the resource using the edited data.

-
-
kubectl create -f docker-registry.yaml --edit --output-version=v1 -o json
-
-

Create a resource from a file or from stdin.

-

JSON and YAML formats are accepted.

-

Usage

-

$ create -f FILENAME

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
editfalseEdit the API resource before creating
filenamef[]Filename, directory, or URL to files to use to create the resource
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
rawRaw URI to POST to the server. Uses the transport specified by the kubeconfig file.
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
selectorlSelector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
windows-line-endingsfalseOnly relevant if --edit=true. Defaults to the line ending native to your platform.
-
-

clusterrole

-
-

Create a ClusterRole named "pod-reader" that allows user to perform "get", "watch" and "list" on pods

-
-
kubectl create clusterrole pod-reader --verb=get,list,watch --resource=pods
-
-
-

Create a ClusterRole named "pod-reader" with ResourceName specified

-
-
kubectl create clusterrole pod-reader --verb=get,list,watch --resource=pods --resource-name=readablepod --resource-name=anotherpod
-
-
-

Create a ClusterRole named "foo" with API Group specified

-
-
kubectl create clusterrole foo --verb=get,list,watch --resource=rs.extensions
-
-
-

Create a ClusterRole named "foo" with SubResource specified

-
-
kubectl create clusterrole foo --verb=get,list,watch --resource=pods,pods/status
-
-
-

Create a ClusterRole name "foo" with NonResourceURL specified

-
-
kubectl create clusterrole "foo" --verb=get --non-resource-url=/logs/*
-
-

Create a ClusterRole.

-

Usage

-

$ clusterrole NAME --verb=verb --resource=resource.group [--resource-name=resourcename] [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
non-resource-url[]A partial url that user should have access to.
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
resource[]Resource that the rule applies to
resource-name[]Resource in the white list that the rule applies to, repeat this flag for multiple items
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
verb[]Verb that applies to the resources contained in the rule
-
-

clusterrolebinding

-
-

Create a ClusterRoleBinding for user1, user2, and group1 using the cluster-admin ClusterRole

-
-
kubectl create clusterrolebinding cluster-admin --clusterrole=cluster-admin --user=user1 --user=user2 --group=group1
-
-

Create a ClusterRoleBinding for a particular ClusterRole.

-

Usage

-

$ clusterrolebinding NAME --clusterrole=NAME [--user=username] [--group=groupname] [--serviceaccount=namespace:serviceaccountname] [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
clusterroleClusterRole this ClusterRoleBinding should reference
dry-runfalseIf true, only print the object that would be sent, without sending it.
generatorclusterrolebinding.rbac.authorization.k8s.io/v1alpha1The name of the API generator to use.
group[]Groups to bind to the role
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
serviceaccount[]Service accounts to bind to the role, in the format :
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

configmap

-
-

Create a new configmap named my-config based on folder bar

-
-
kubectl create configmap my-config --from-file=path/to/bar
-
-
-

Create a new configmap named my-config with specified keys instead of file basenames on disk

-
-
kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt
-
-
-

Create a new configmap named my-config with key1=config1 and key2=config2

-
-
kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
-
-
-

Create a new configmap named my-config from the key=value pairs in the file

-
-
kubectl create configmap my-config --from-file=path/to/bar
-
-
-

Create a new configmap named my-config from an env file

-
-
kubectl create configmap my-config --from-env-file=path/to/bar.env
-
-

Create a configmap based on a file, directory, or specified literal value.

-

A single configmap may package one or more key/value pairs.

-

When creating a configmap based on a file, the key will default to the basename of the file, and the value will default to the file content. If the basename is an invalid key, you may specify an alternate key.

-

When creating a configmap based on a directory, each file whose basename is a valid key in the directory will be packaged into the configmap. Any directory entries except regular files are ignored (e.g. subdirectories, symlinks, devices, pipes, etc).

-

Usage

-

$ configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
append-hashfalseAppend a hash of the configmap to its name.
dry-runfalseIf true, only print the object that would be sent, without sending it.
from-env-fileSpecify the path to a file to read lines of key=val pairs to create a configmap (i.e. a Docker .env file).
from-file[]Key file can be specified using its file path, in which case file basename will be used as configmap key, or optionally with a key and file path, in which case the given key will be used. Specifying a directory will iterate each named file in the directory whose basename is a valid configmap key.
from-literal[]Specify a key and literal value to insert in configmap (i.e. mykey=somevalue)
generatorconfigmap/v1The name of the API generator to use.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

deployment

-
-

Create a new deployment named my-dep that runs the busybox image.

-
-
kubectl create deployment my-dep --image=busybox
-
-

Create a deployment with the specified name.

-

Usage

-

$ deployment NAME --image=image [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
generatordeployment-basic/v1beta1The name of the API generator to use.
image[]Image name to run.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

job

-
-

Create a job from a CronJob named "a-cronjob"

-
-
kubectl create job --from=cronjob/a-cronjob
-
-

Create a job with the specified name.

-

Usage

-

$ job NAME [--from-cronjob=CRONJOB]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
fromThe name of the resource to create a Job from (only cronjob is supported).
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

namespace

-
-

Create a new namespace named my-namespace

-
-
kubectl create namespace my-namespace
-
-

Create a namespace with the specified name.

-

Usage

-

$ namespace NAME [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
generatornamespace/v1The name of the API generator to use.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

poddisruptionbudget

-
-

Create a pod disruption budget named my-pdb that will select all pods with the app=rails label # and require at least one of them being available at any point in time.

-
-
kubectl create poddisruptionbudget my-pdb --selector=app=rails --min-available=1
-
-
-

Create a pod disruption budget named my-pdb that will select all pods with the app=nginx label # and require at least half of the pods selected to be available at any point in time.

-
-
kubectl create pdb my-pdb --selector=app=nginx --min-available=50%
-
-

Create a pod disruption budget with the specified name, selector, and desired minimum available pods

-

Usage

-

$ poddisruptionbudget NAME --selector=SELECTOR --min-available=N [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
generatorpoddisruptionbudget/v1beta1/v2The name of the API generator to use.
max-unavailableThe maximum number or percentage of unavailable pods this budget requires.
min-availableThe minimum number or percentage of available pods this budget requires.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
selectorA label selector to use for this budget. Only equality-based selector requirements are supported.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

priorityclass

-
-

Create a priorityclass named high-priority

-
-
kubectl create priorityclass default-priority --value=1000 --description="high priority"
-
-
-

Create a priorityclass named default-priority that considered as the global default priority

-
-
kubectl create priorityclass default-priority --value=1000 --global-default=true --description="default priority"
-
-

Create a priorityclass with the specified name, value, globalDefault and description

-

Usage

-

$ priorityclass NAME --value=VALUE --global-default=BOOL [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
descriptiondescription is an arbitrary string that usually provides guidelines on when this priority class should be used.
dry-runfalseIf true, only print the object that would be sent, without sending it.
generatorpriorityclass/v1alpha1The name of the API generator to use.
global-defaultfalseglobal-default specifies whether this PriorityClass should be considered as the default priority.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
value0the value of this priority class.
-
-

quota

-
-

Create a new resourcequota named my-quota

-
-
kubectl create quota my-quota --hard=cpu=1,memory=1G,pods=2,services=3,replicationcontrollers=2,resourcequotas=1,secrets=5,persistentvolumeclaims=10
-
-
-

Create a new resourcequota named best-effort

-
-
kubectl create quota best-effort --hard=pods=100 --scopes=BestEffort
-
-

Create a resourcequota with the specified name, hard limits and optional scopes

-

Usage

-

$ quota NAME [--hard=key1=value1,key2=value2] [--scopes=Scope1,Scope2] [--dry-run=bool]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
generatorresourcequotas/v1The name of the API generator to use.
hardA comma-delimited set of resource=quantity pairs that define a hard limit.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
scopesA comma-delimited set of quota scopes that must all match each object tracked by the quota.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

role

-
-

Create a Role named "pod-reader" that allows user to perform "get", "watch" and "list" on pods

-
-
kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods
-
-
-

Create a Role named "pod-reader" with ResourceName specified

-
-
kubectl create role pod-reader --verb=get,list,watch --resource=pods --resource-name=readablepod --resource-name=anotherpod
-
-
-

Create a Role named "foo" with API Group specified

-
-
kubectl create role foo --verb=get,list,watch --resource=rs.extensions
-
-
-

Create a Role named "foo" with SubResource specified

-
-
kubectl create role foo --verb=get,list,watch --resource=pods,pods/status
-
-

Create a role with single rule.

-

Usage

-

$ role NAME --verb=verb --resource=resource.group/subresource [--resource-name=resourcename] [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
resource[]Resource that the rule applies to
resource-name[]Resource in the white list that the rule applies to, repeat this flag for multiple items
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
verb[]Verb that applies to the resources contained in the rule
-
-

rolebinding

-
-

Create a RoleBinding for user1, user2, and group1 using the admin ClusterRole

-
-
kubectl create rolebinding admin --clusterrole=admin --user=user1 --user=user2 --group=group1
-
-

Create a RoleBinding for a particular Role or ClusterRole.

-

Usage

-

$ rolebinding NAME --clusterrole=NAME|--role=NAME [--user=username] [--group=groupname] [--serviceaccount=namespace:serviceaccountname] [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
clusterroleClusterRole this RoleBinding should reference
dry-runfalseIf true, only print the object that would be sent, without sending it.
generatorrolebinding.rbac.authorization.k8s.io/v1alpha1The name of the API generator to use.
group[]Groups to bind to the role
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
roleRole this RoleBinding should reference
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
serviceaccount[]Service accounts to bind to the role, in the format :
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

secret

-

Create a secret using specified subcommand.

-

Usage

-

$ secret

-
-

secret docker-registry

-
-

If you don't already have a .dockercfg file, you can create a dockercfg secret directly by using:

-
-
kubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
-
-

Create a new secret for use with Docker registries.

-

Dockercfg secrets are used to authenticate against Docker registries.

-

When using the Docker command line to push images, you can authenticate to a given registry by running: '$ docker login DOCKER REGISTRY SERVER --username=DOCKER USER --password=DOCKER PASSWORD --email=DOCKER _EMAIL'.

-

That produces a ~/.dockercfg file that is used by subsequent 'docker push' and 'docker pull' commands to

-

authenticate to the registry. The email address is optional.

-

When creating applications, you may have a Docker registry that requires authentication. In order for the nodes to pull images on your behalf, they have to have the credentials. You can provide this information by creating a dockercfg secret and attaching it to your service account.

-

Usage

-

$ docker-registry NAME --docker-username=user --docker-password=password --docker-email=email [--docker-server=string] [--from-literal=key1=value1] [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
append-hashfalseAppend a hash of the secret to its name.
docker-emailEmail for Docker registry
docker-passwordPassword for Docker registry authentication
docker-serverhttps://index.docker.io/v1/Server location for Docker registry
docker-usernameUsername for Docker registry authentication
dry-runfalseIf true, only print the object that would be sent, without sending it.
generatorsecret-for-docker-registry/v1The name of the API generator to use.
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

secret generic

-
-

Create a new secret named my-secret with keys for each file in folder bar

-
-
kubectl create secret generic my-secret --from-file=path/to/bar
-
-
-

Create a new secret named my-secret with specified keys instead of names on disk

-
-
kubectl create secret generic my-secret --from-file=ssh-privatekey=~/.ssh/id_rsa --from-file=ssh-publickey=~/.ssh/id_rsa.pub
-
-
-

Create a new secret named my-secret with key1=supersecret and key2=topsecret

-
-
kubectl create secret generic my-secret --from-literal=key1=supersecret --from-literal=key2=topsecret
-
-
-

Create a new secret named my-secret using a combination of a file and a literal

-
-
kubectl create secret generic my-secret --from-file=ssh-privatekey=~/.ssh/id_rsa --from-literal=passphrase=topsecret
-
-
-

Create a new secret named my-secret from an env file

-
-
kubectl create secret generic my-secret --from-env-file=path/to/bar.env
-
-

Create a secret based on a file, directory, or specified literal value.

-

A single secret may package one or more key/value pairs.

-

When creating a secret based on a file, the key will default to the basename of the file, and the value will default to the file content. If the basename is an invalid key or you wish to chose your own, you may specify an alternate key.

-

When creating a secret based on a directory, each file whose basename is a valid key in the directory will be packaged into the secret. Any directory entries except regular files are ignored (e.g. subdirectories, symlinks, devices, pipes, etc).

-

Usage

-

$ generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
append-hashfalseAppend a hash of the secret to its name.
dry-runfalseIf true, only print the object that would be sent, without sending it.
from-env-fileSpecify the path to a file to read lines of key=val pairs to create a secret (i.e. a Docker .env file).
from-file[]Key files can be specified using their file path, in which case a default name will be given to them, or optionally with a name and file path, in which case the given name will be used. Specifying a directory will iterate each named file in the directory that is a valid secret key.
from-literal[]Specify a key and literal value to insert in secret (i.e. mykey=somevalue)
generatorsecret/v1The name of the API generator to use.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
typeThe type of secret to create
validatetrueIf true, use a schema to validate the input before sending it
-
-

secret tls

-
-

Create a new TLS secret named tls-secret with the given key pair:

-
-
kubectl create secret tls tls-secret --cert=path/to/tls.cert --key=path/to/tls.key
-
-

Create a TLS secret from the given public/private key pair.

-

The public/private key pair must exist before hand. The public key certificate must be .PEM encoded and match the given private key.

-

Usage

-

$ tls NAME --cert=path/to/cert/file --key=path/to/key/file [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
append-hashfalseAppend a hash of the secret to its name.
certPath to PEM encoded public key certificate.
dry-runfalseIf true, only print the object that would be sent, without sending it.
generatorsecret-for-tls/v1The name of the API generator to use.
keyPath to private key associated with given certificate.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

service

-

Create a service using specified subcommand.

-

Usage

-

$ service

-
-

service clusterip

-
-

Create a new ClusterIP service named my-cs

-
-
kubectl create service clusterip my-cs --tcp=5678:8080
-
-
-

Create a new ClusterIP service named my-cs (in headless mode)

-
-
kubectl create service clusterip my-cs --clusterip="None"
-
-

Create a ClusterIP service with the specified name.

-

Usage

-

$ clusterip NAME [--tcp=<port>:<targetPort>] [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
clusteripAssign your own ClusterIP or set to 'None' for a 'headless' service (no loadbalancing).
dry-runfalseIf true, only print the object that would be sent, without sending it.
generatorservice-clusterip/v1The name of the API generator to use.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
tcp[]Port pairs can be specified as ':'.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

service externalname

-
-

Create a new ExternalName service named my-ns

-
-
kubectl create service externalname my-ns --external-name bar.com
-
-

Create an ExternalName service with the specified name.

-

ExternalName service references to an external DNS address instead of only pods, which will allow application authors to reference services that exist off platform, on other clusters, or locally.

-

Usage

-

$ externalname NAME --external-name external.name [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
external-nameExternal name of service
generatorservice-externalname/v1The name of the API generator to use.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
tcp[]Port pairs can be specified as ':'.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

service loadbalancer

-
-

Create a new LoadBalancer service named my-lbs

-
-
kubectl create service loadbalancer my-lbs --tcp=5678:8080
-
-

Create a LoadBalancer service with the specified name.

-

Usage

-

$ loadbalancer NAME [--tcp=port:targetPort] [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
generatorservice-loadbalancer/v1The name of the API generator to use.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
tcp[]Port pairs can be specified as ':'.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

service nodeport

-
-

Create a new NodePort service named my-ns

-
-
kubectl create service nodeport my-ns --tcp=5678:8080
-
-

Create a NodePort service with the specified name.

-

Usage

-

$ nodeport NAME [--tcp=port:targetPort] [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
generatorservice-nodeport/v1The name of the API generator to use.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
node-port0Port used to expose the service on each node in a cluster.
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
tcp[]Port pairs can be specified as ':'.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

serviceaccount

-
-

Create a new service account named my-service-account

-
-
kubectl create serviceaccount my-service-account
-
-

Create a service account with the specified name.

-

Usage

-

$ serviceaccount NAME [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
generatorserviceaccount/v1The name of the API generator to use.
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

delete

-
-

Delete a pod using the type and name specified in pod.json.

-
-
kubectl delete -f ./pod.json
-
-
-

Delete a pod based on the type and name in the JSON passed into stdin.

-
-
cat pod.json | kubectl delete -f -
-
-
-

Delete pods and services with same names "baz" and "foo"

-
-
kubectl delete pod,service baz foo
-
-
-

Delete pods and services with label name=myLabel.

-
-
kubectl delete pods,services -l name=myLabel
-
-
-

Delete a pod with minimal delay

-
-
kubectl delete pod foo --now
-
-
-

Force delete a pod on a dead node

-
-
kubectl delete pod foo --grace-period=0 --force
-
-
-

Delete all pods

-
-
kubectl delete pods --all
-
-

Delete resources by filenames, stdin, resources and names, or by resources and label selector.

-

JSON and YAML formats are accepted. Only one type of the arguments may be specified: filenames, resources and names, or resources and label selector.

-

Some resources, such as pods, support graceful deletion. These resources define a default period before they are forcibly terminated (the grace period) but you may override that value with the --grace-period flag, or pass --now to set a grace-period of 1. Because these resources often represent entities in the cluster, deletion may not be acknowledged immediately. If the node hosting a pod is down or cannot reach the API server, termination may take significantly longer than the grace period. To force delete a resource, you must pass a grace period of 0 and specify the --force flag.

-

IMPORTANT: Force deleting pods does not wait for confirmation that the pod's processes have been terminated, which can leave those processes running until the node detects the deletion and completes graceful deletion. If your processes use shared storage or talk to a remote API and depend on the name of the pod to identify themselves, force deleting those pods may result in multiple processes running on different machines using the same identification which may lead to data corruption or inconsistency. Only force delete pods when you are sure the pod is terminated, or if your application can tolerate multiple copies of the same pod running at once. Also, if you force delete pods the scheduler may place new pods on those nodes before the node has released those resources and causing those pods to be evicted immediately.

-

Note that the delete command does NOT do resource version checks, so if someone submits an update to a resource right when you submit a delete, their update will be lost along with the rest of the resource.

-

Usage

-

$ delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allfalseDelete all resources, including uninitialized ones, in the namespace of the specified resource types.
cascadetrueIf true, cascade the deletion of the resources managed by this resource (e.g. Pods created by a ReplicationController). Default true.
filenamef[]Filename, directory, or URL to files containing the resource to delete.
forcefalseImmediate deletion of some resources may result in inconsistency or data loss and requires confirmation.
grace-period-1Period of time in seconds given to the resource to terminate gracefully. Ignored if negative.
ignore-not-foundfalseTreat "resource not found" as a successful delete. Defaults to "true" when --all is specified.
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
include-uninitializedfalseIf true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.
nowfalseIf true, resources are signaled for immediate shutdown (same as --grace-period=1).
outputoOutput mode. Use "-o name" for shorter output (resource/name).
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
selectorlSelector (label query) to filter on, not including uninitialized ones.
timeout0sThe length of time to wait before giving up on a delete, zero means determine a timeout from the size of the object
-
-

edit

-
-

Edit the service named 'docker-registry':

-
-
kubectl edit svc/docker-registry
-
-
-

Use an alternative editor

-
-
KUBE_EDITOR="nano" kubectl edit svc/docker-registry
-
-
-

Edit the job 'myjob' in JSON using the v1 API format:

-
-
kubectl edit job.v1.batch/myjob -o json
-
-
-

Edit the deployment 'mydeployment' in YAML and save the modified config in its annotation:

-
-
kubectl edit deployment/mydeployment -o yaml --save-config
-
-

Edit a resource from the default editor.

-

The edit command allows you to directly edit any API resource you can retrieve via the command line tools. It will open the editor defined by your KUBE _EDITOR, or EDITOR environment variables, or fall back to 'vi' for Linux or 'notepad' for Windows. You can edit multiple objects, although changes are applied one at a time. The command accepts filenames as well as command line arguments, although the files you point to must be previously saved versions of resources.

-

Editing is done with the API version used to fetch the resource. To edit using a specific API version, fully-qualify the resource, version, and group.

-

The default format is YAML. To edit in JSON, specify "-o json".

-

The flag --windows-line-endings can be used to force Windows line endings, otherwise the default for your operating system will be used.

-

In the event an error occurs while updating, a temporary file will be created on disk that contains your unapplied changes. The most common error when updating a resource is another editor changing the resource on the server. When this occurs, you will have to apply your changes to the newer version of the resource, or update your temporary saved copy to include the latest resource version.

-

Usage

-

$ edit (RESOURCE/NAME | -f FILENAME)

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
filenamef[]Filename, directory, or URL to files to use to edit the resource
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
include-uninitializedfalseIf true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.
outputoyamlOutput format. One of: yaml|json.
output-patchfalseOutput the patch if the resource is edited.
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
validatetrueIf true, use a schema to validate the input before sending it
windows-line-endingsfalseDefaults to the line ending native to your platform.
-
-

get

-
-

List all pods in ps output format.

-
-
kubectl get pods
-
-
-

List all pods in ps output format with more information (such as node name).

-
-
kubectl get pods -o wide
-
-
-

List a single replication controller with specified NAME in ps output format.

-
-
kubectl get replicationcontroller web
-
-
-

List a single pod in JSON output format.

-
-
kubectl get -o json pod web-pod-13je7
-
-
-

List a pod identified by type and name specified in "pod.yaml" in JSON output format.

-
-
kubectl get -f pod.yaml -o json
-
-
-

Return only the phase value of the specified pod.

-
-
kubectl get -o template pod/web-pod-13je7 --template={{.status.phase}}
-
-
-

List all replication controllers and services together in ps output format.

-
-
kubectl get rc,services
-
-
-

List one or more resources by their type and names.

-
-
kubectl get rc/web service/frontend pods/web-pod-13je7
-
-
-

List all resources with different types.

-
-
kubectl get all
-
-

Display one or many resources

-

Prints a table of the most important information about the specified resources. You can filter the list using a label selector and the --selector flag. If the desired resource type is namespaced you will only see results in your current namespace unless you pass --all-namespaces.

-

Uninitialized objects are not shown unless --include-uninitialized is passed.

-

By specifying the output as 'template' and providing a Go template as the value of the --template flag, you can filter the attributes of the fetched resources.

-

Valid resource types include:

-
    -
  • all
  • -
  • certificatesigningrequests (aka 'csr')
  • -
  • clusterrolebindings
  • -
  • clusterroles
  • -
  • componentstatuses (aka 'cs')
  • -
  • configmaps (aka 'cm')
  • -
  • controllerrevisions
  • -
  • cronjobs
  • -
  • customresourcedefinition (aka 'crd')
  • -
  • daemonsets (aka 'ds')
  • -
  • deployments (aka 'deploy')
  • -
  • endpoints (aka 'ep')
  • -
  • events (aka 'ev')
  • -
  • horizontalpodautoscalers (aka 'hpa')
  • -
  • ingresses (aka 'ing')
  • -
  • jobs
  • -
  • limitranges (aka 'limits')
  • -
  • namespaces (aka 'ns')
  • -
  • networkpolicies (aka 'netpol')
  • -
  • nodes (aka 'no')
  • -
  • persistentvolumeclaims (aka 'pvc')
  • -
  • persistentvolumes (aka 'pv')
  • -
  • poddisruptionbudgets (aka 'pdb')
  • -
  • podpreset
  • -
  • pods (aka 'po')
  • -
  • podsecuritypolicies (aka 'psp')
  • -
  • podtemplates
  • -
  • replicasets (aka 'rs')
  • -
  • replicationcontrollers (aka 'rc')
  • -
  • resourcequotas (aka 'quota')
  • -
  • rolebindings
  • -
  • roles
  • -
  • secrets
  • -
  • serviceaccounts (aka 'sa')
  • -
  • services (aka 'svc')
  • -
  • statefulsets (aka 'sts')
  • -
  • storageclasses (aka 'sc')
  • -
-

Usage

-

$ get [(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...] (TYPE [NAME | -l label] | TYPE/NAME ...) [flags]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
all-namespacesfalseIf present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
chunk-size500Return large lists in chunks rather than all at once. Pass 0 to disable. This flag is beta and may change in the future.
experimental-server-printfalseIf true, have the server return the appropriate table output. Supports extension APIs and CRD. Experimental.
exportfalseIf true, use 'export' for the resources. Exported resources are stripped of cluster-specific information.
field-selectorSelector (field query) to filter on, supports '=', '==', and '!='.(e.g. --field-selector key1=value1,key2=value2). The server only supports a limited number of field queries per type.
filenamef[]Filename, directory, or URL to files identifying the resource to get from a server.
ignore-not-foundfalseIf the requested object does not exist the command will return exit code 0.
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
include-uninitializedfalseIf true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.
label-columnsL[]Accepts a comma separated list of labels that are going to be presented as columns. Names are case-sensitive. You can also use multiple flag options like -L label1 -L label2...
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
rawRaw URI to request from the server. Uses the transport specified by the kubeconfig file.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
selectorlSelector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-kindfalseIf present, list the resource type for the requested object(s).
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
use-openapi-print-columnstrueIf true, use x-kubernetes-print-column metadata (if present) from the OpenAPI schema for displaying a resource.
watchwfalseAfter listing/getting the requested object, watch for changes. Uninitialized objects are excluded if no object name is provided.
watch-onlyfalseWatch for changes to the requested object(s), without listing/getting first.
-
-

label

-
-

Update pod 'foo' with the label 'unhealthy' and the value 'true'.

-
-
kubectl label pods foo unhealthy=true
-
-
-

Update pod 'foo' with the label 'status' and the value 'unhealthy', overwriting any existing value.

-
-
kubectl label --overwrite pods foo status=unhealthy
-
-
-

Update all pods in the namespace

-
-
kubectl label pods --all status=unhealthy
-
-
-

Update a pod identified by the type and name in "pod.json"

-
-
kubectl label -f pod.json status=unhealthy
-
-
-

Update pod 'foo' only if the resource is unchanged from version 1.

-
-
kubectl label pods foo status=unhealthy --resource-version=1
-
-
-

Update pod 'foo' by removing a label named 'bar' if it exists. # Does not require the --overwrite flag.

-
-
kubectl label pods foo bar-
-
-

Update the labels on a resource.

-
    -
  • A label key and value must begin with a letter or number, and may contain letters, numbers, hyphens, dots, and underscores, up to 63 characters each.
  • -
  • Optionally, the key can begin with a DNS subdomain prefix and a single '/', like example.com/my-app
  • -
  • If --overwrite is true, then existing labels can be overwritten, otherwise attempting to overwrite a label will result in an error.
  • -
  • If --resource-version is specified, then updates will use this resource version, otherwise the existing resource-version will be used.
  • -
-

Usage

-

$ label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allfalseSelect all resources, including uninitialized ones, in the namespace of the specified resource types
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
filenamef[]Filename, directory, or URL to files identifying the resource to update the labels
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
include-uninitializedfalseIf true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.
listfalseIf true, display the labels for a given resource.
localfalseIf true, label will NOT contact api-server but run locally.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
overwritefalseIf true, allow labels to be overwritten, otherwise reject label updates that overwrite existing labels.
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
resource-versionIf non-empty, the labels update will only succeed if this is the current resource-version for the object. Only valid when specifying a single resource.
selectorlSelector (label query) to filter on, not including uninitialized ones, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2).
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
-
-

patch

-
-

Partially update a node using a strategic merge patch. Specify the patch as JSON.

-
-
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'
-
-
-

Partially update a node using a strategic merge patch. Specify the patch as YAML.

-
-
kubectl patch node k8s-node-1 -p $'spec:\n unschedulable: true'
-
-
-

Partially update a node identified by the type and name specified in "node.json" using strategic merge patch.

-
-
kubectl patch -f node.json -p '{"spec":{"unschedulable":true}}'
-
-
-

Update a container's image; spec.containers[*].name is required because it's a merge key.

-
-
kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'
-
-
-

Update a container's image using a json patch with positional arrays.

-
-
kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'
-
-

Update field(s) of a resource using strategic merge patch, a JSON merge patch, or a JSON patch.

-

JSON and YAML formats are accepted.

-

Please refer to the models in https://htmlpreview.github.io/?https://github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions.html to find if a field is mutable.

-

Usage

-

$ patch (-f FILENAME | TYPE NAME) -p PATCH

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
filenamef[]Filename, directory, or URL to files identifying the resource to update
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
localfalseIf true, patch will operate on the content of the file, not the server-side resource.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
patchpThe patch to be applied to the resource JSON file.
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
typestrategicThe type of patch being provided; one of [json merge strategic]
-
-

replace

-
-

Replace a pod using the data in pod.json.

-
-
kubectl replace -f ./pod.json
-
-
-

Replace a pod based on the JSON passed into stdin.

-
-
cat pod.json | kubectl replace -f -
-
-
-

Update a single-container pod's image version (tag) to v4

-
-
kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -
-
-
-

Force replace, delete and then re-create the resource

-
-
kubectl replace --force -f ./pod.json
-
-

Replace a resource by filename or stdin.

-

JSON and YAML formats are accepted. If replacing an existing resource, the complete resource spec must be provided. This can be obtained by

-

$ kubectl get TYPE NAME -o yaml

-

Please refer to the models in https://htmlpreview.github.io/?https://github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions.html to find if a field is mutable.

-

Usage

-

$ replace -f FILENAME

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
cascadefalseOnly relevant during a force replace. If true, cascade the deletion of the resources managed by this resource (e.g. Pods created by a ReplicationController).
filenamef[]Filename, directory, or URL to files to use to replace the resource.
forcefalseDelete and re-create the specified resource
grace-period-1Only relevant during a force replace. Period of time in seconds given to the old resource to terminate gracefully. Ignored if negative.
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
outputoOutput mode. Use "-o name" for shorter output (resource/name).
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
save-configfalseIf true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
timeout0sOnly relevant during a force replace. The length of time to wait before giving up on a delete of the old resource, zero means determine a timeout from the size of the object. Any other values should contain a corresponding time unit (e.g. 1s, 2m, 3h).
validatetrueIf true, use a schema to validate the input before sending it
-
-

rolling-update

-
-

Update pods of frontend-v1 using new replication controller data in frontend-v2.json.

-
-
kubectl rolling-update frontend-v1 -f frontend-v2.json
-
-
-

Update pods of frontend-v1 using JSON data passed into stdin.

-
-
cat frontend-v2.json | kubectl rolling-update frontend-v1 -f -
-
-
-

Update the pods of frontend-v1 to frontend-v2 by just changing the image, and switching the # name of the replication controller.

-
-
kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2
-
-
-

Update the pods of frontend by just changing the image, and keeping the old name.

-
-
kubectl rolling-update frontend --image=image:v2
-
-
-

Abort and reverse an existing rollout in progress (from frontend-v1 to frontend-v2).

-
-
kubectl rolling-update frontend-v1 frontend-v2 --rollback
-
-

Perform a rolling update of the given ReplicationController.

-

Replaces the specified replication controller with a new replication controller by updating one pod at a time to use the new PodTemplate. The new-controller.json must specify the same namespace as the existing replication controller and overwrite at least one (common) label in its replicaSelector.

-

! http://kubernetes.io/images/docs/kubectl_rollingupdate.svg

-

Usage

-

$ rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC)

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
containerContainer name which will have its image upgraded. Only relevant when --image is specified, ignored otherwise. Required when using --image on a multi-container pod
deployment-label-keydeploymentThe key to use to differentiate between two different controllers, default 'deployment'. Only relevant when --image is specified, ignored otherwise
dry-runfalseIf true, only print the object that would be sent, without sending it.
filenamef[]Filename or URL to file to use to create the new replication controller.
imageImage to use for upgrading the replication controller. Must be distinct from the existing image (either new image or new image tag). Can not be used with --filename/-f
image-pull-policyExplicit policy for when to pull container images. Required when --image is same as existing image, ignored otherwise.
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
poll-interval3sTime delay between polling for replication controller status after the update. Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
rollbackfalseIf true, this is a request to abort an existing rollout that is partially rolled out. It effectively reverses current and next and runs a rollout
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
timeout5m0sMax time to wait for a replication controller to update before giving up. Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
update-period1m0sTime to wait between updating pods. Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
validatetrueIf true, use a schema to validate the input before sending it
-
-

rollout

-
-

Rollback to the previous deployment

-
-
kubectl rollout undo deployment/abc
-
-
-

Check the rollout status of a daemonset

-
-
kubectl rollout status daemonset/foo
-
-

Manage the rollout of a resource.

-

Valid resource types include:

-
    -
  • deployments
  • -
  • daemonsets
  • -
  • statefulsets
  • -
-

Usage

-

$ rollout SUBCOMMAND

-
-

history

-
-

View the rollout history of a deployment

-
-
kubectl rollout history deployment/abc
-
-
-

View the details of daemonset revision 3

-
-
kubectl rollout history daemonset/abc --revision=3
-
-

View previous rollout revisions and configurations.

-

Usage

-

$ history (TYPE NAME | TYPE/NAME) [flags]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
filenamef[]Filename, directory, or URL to files identifying the resource to get from a server.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
revision0See the details, including podTemplate of the revision specified
-
-

pause

-
-

Mark the nginx deployment as paused. Any current state of # the deployment will continue its function, new updates to the deployment will not # have an effect as long as the deployment is paused.

-
-
kubectl rollout pause deployment/nginx
-
-

Mark the provided resource as paused

-

Paused resources will not be reconciled by a controller. Use "kubectl rollout resume" to resume a paused resource. Currently only deployments support being paused.

-

Usage

-

$ pause RESOURCE

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
filenamef[]Filename, directory, or URL to files identifying the resource to get from a server.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
-
-

resume

-
-

Resume an already paused deployment

-
-
kubectl rollout resume deployment/nginx
-
-

Resume a paused resource

-

Paused resources will not be reconciled by a controller. By resuming a resource, we allow it to be reconciled again. Currently only deployments support being resumed.

-

Usage

-

$ resume RESOURCE

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
filenamef[]Filename, directory, or URL to files identifying the resource to get from a server.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
-
-

status

-
-

Watch the rollout status of a deployment

-
-
kubectl rollout status deployment/nginx
-
-

Show the status of the rollout.

-

By default 'rollout status' will watch the status of the latest rollout until it's done. If you don't want to wait for the rollout to finish then you can use --watch=false. Note that if a new rollout starts in-between, then 'rollout status' will continue watching the latest revision. If you want to pin to a specific revision and abort if it is rolled over by another revision, use --revision=N where N is the revision you need to watch for.

-

Usage

-

$ status (TYPE NAME | TYPE/NAME) [flags]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
filenamef[]Filename, directory, or URL to files identifying the resource to get from a server.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
revision0Pin to a specific revision for showing its status. Defaults to 0 (last revision).
watchwtrueWatch the status of the rollout until it's done.
-
-

undo

-
-

Rollback to the previous deployment

-
-
kubectl rollout undo deployment/abc
-
-
-

Rollback to daemonset revision 3

-
-
kubectl rollout undo daemonset/abc --to-revision=3
-
-
-

Rollback to the previous deployment with dry-run

-
-
kubectl rollout undo --dry-run=true deployment/abc
-
-

Rollback to a previous rollout.

-

Usage

-

$ undo (TYPE NAME | TYPE/NAME) [flags]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
dry-runfalseIf true, only print the object that would be sent, without sending it.
filenamef[]Filename, directory, or URL to files identifying the resource to get from a server.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
to-revision0The revision to rollback to. Default to 0 (last revision).
-
-

scale

-
-

Scale a replicaset named 'foo' to 3.

-
-
kubectl scale --replicas=3 rs/foo
-
-
-

Scale a resource identified by type and name specified in "foo.yaml" to 3.

-
-
kubectl scale --replicas=3 -f foo.yaml
-
-
-

If the deployment named mysql's current size is 2, scale mysql to 3.

-
-
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
-
-
-

Scale multiple replication controllers.

-
-
kubectl scale --replicas=5 rc/foo rc/bar rc/baz
-
-
-

Scale statefulset named 'web' to 3.

-
-
kubectl scale --replicas=3 statefulset/web
-
-

Set a new size for a Deployment, ReplicaSet, Replication Controller, or StatefulSet.

-

Scale also allows users to specify one or more preconditions for the scale action.

-

If --current-replicas or --resource-version is specified, it is validated before the scale is attempted, and it is guaranteed that the precondition holds true when the scale is sent to the server.

-

Usage

-

$ scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allfalseSelect all resources in the namespace of the specified resource types
current-replicas-1Precondition for current size. Requires that the current size of the resource match this value in order to scale.
filenamef[]Filename, directory, or URL to files identifying the resource to set a new size
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
outputoOutput mode. Use "-o name" for shorter output (resource/name).
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
replicas-1The new desired number of replicas. Required.
resource-versionPrecondition for resource version. Requires that the current resource version match this value in order to scale.
selectorlSelector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
timeout0sThe length of time to wait before giving up on a scale operation, zero means don't wait. Any other values should contain a corresponding time unit (e.g. 1s, 2m, 3h).
-
-

set

-

Configure application resources

-

These commands help you make changes to existing application resources.

-

Usage

-

$ set SUBCOMMAND

-
-

env

-
-

Update deployment 'registry' with a new environment variable

-
-
kubectl set env deployment/registry STORAGE_DIR=/local
-
-
-

List the environment variables defined on a deployments 'sample-build'

-
-
kubectl set env deployment/sample-build --list
-
-
-

List the environment variables defined on all pods

-
-
kubectl set env pods --all --list
-
-
-

Output modified deployment in YAML, and does not alter the object on the server

-
-
kubectl set env deployment/sample-build STORAGE_DIR=/data -o yaml
-
-
-

Update all containers in all replication controllers in the project to have ENV=prod

-
-
kubectl set env rc --all ENV=prod
-
-
-

Import environment from a secret

-
-
kubectl set env --from=secret/mysecret deployment/myapp
-
-
-

Import environment from a config map with a prefix

-
-
kubectl set env --from=configmap/myconfigmap --prefix=MYSQL_ deployment/myapp
-
-
-

Remove the environment variable ENV from container 'c1' in all deployment configs

-
-
kubectl set env deployments --all --containers="c1" ENV-
-
-
-

Remove the environment variable ENV from a deployment definition on disk and # update the deployment config on the server

-
-
kubectl set env -f deploy.json ENV-
-
-
-

Set some of the local shell environment into a deployment config on the server

-
-
env | grep RAILS_ | kubectl set env -e - deployment/registry
-
-

Update environment variables on a pod template.

-

List environment variable definitions in one or more pods, pod templates. Add, update, or remove container environment variable definitions in one or more pod templates (within replication controllers or deployment configurations). View or modify the environment variable definitions on all containers in the specified pods or pod templates, or just those that match a wildcard.

-

If "--env -" is passed, environment variables can be read from STDIN using the standard env syntax.

-

Possible resources include (case insensitive):

-

pod (po), replicationcontroller (rc), deployment (deploy), daemonset (ds), job, replicaset (rs)

-

Usage

-

$ env RESOURCE/NAME KEY_1=VAL_1 ... KEY_N=VAL_N

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allfalseIf true, select all resources in the namespace of the specified resource types
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
containersc*The names of containers in the selected pod templates to change - may use wildcards
dry-runfalseIf true, only print the object that would be sent, without sending it.
enve[]Specify a key-value pair for an environment variable to set into each container.
filenamef[]Filename, directory, or URL to files the resource to update the env
fromThe name of a resource from which to inject environment variables
listfalseIf true, display the environment and any changes in the standard format. this flag will removed when we have kubectl view env.
localfalseIf true, set env will NOT contact api-server but run locally.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
overwritetrueIf true, allow environment to be overwritten, otherwise reject updates that overwrite existing environment.
prefixPrefix to append to variable names
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
resolvefalseIf true, show secret or configmap references when listing variables
selectorlSelector (label query) to filter on
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
-
-

image

-
-

Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox container image to 'busybox'.

-
-
kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1
-
-
-

Update all deployments' and rc's nginx container's image to 'nginx:1.9.1'

-
-
kubectl set image deployments,rc nginx=nginx:1.9.1 --all
-
-
-

Update image of all containers of daemonset abc to 'nginx:1.9.1'

-
-
kubectl set image daemonset abc *=nginx:1.9.1
-
-
-

Print result (in yaml format) of updating nginx container image from local file, without hitting the server

-
-
kubectl set image -f path/to/file.yaml nginx=nginx:1.9.1 --local -o yaml
-
-

Update existing container image(s) of resources.

-

Possible resources include (case insensitive):

-

pod (po), replicationcontroller (rc), deployment (deploy), daemonset (ds), replicaset (rs)

-

Usage

-

$ image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allfalseSelect all resources, including uninitialized ones, in the namespace of the specified resource types
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
filenamef[]Filename, directory, or URL to files identifying the resource to get from a server.
include-uninitializedfalseIf true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.
localfalseIf true, set image will NOT contact api-server but run locally.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
selectorlSelector (label query) to filter on, not including uninitialized ones, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
-
-

resources

-
-

Set a deployments nginx container cpu limits to "200m" and memory to "512Mi"

-
-
kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi
-
-
-

Set the resource request and limits for all containers in nginx

-
-
kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi
-
-
-

Remove the resource requests for resources on containers in nginx

-
-
kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0
-
-
-

Print the result (in yaml format) of updating nginx container limits from a local, without hitting the server

-
-
kubectl set resources -f path/to/file.yaml --limits=cpu=200m,memory=512Mi --local -o yaml
-
-

Specify compute resource requirements (cpu, memory) for any resource that defines a pod template. If a pod is successfully scheduled, it is guaranteed the amount of resource requested, but may burst up to its specified limits.

-

for each compute resource, if a limit is specified and a request is omitted, the request will default to the limit.

-

Possible resources include (case insensitive): replicationcontroller, deployment, daemonset, job, replicaset.

-

Usage

-

$ resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allfalseSelect all resources, including uninitialized ones, in the namespace of the specified resource types
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
containersc*The names of containers in the selected pod templates to change, all containers are selected by default - may use wildcards
dry-runfalseIf true, only print the object that would be sent, without sending it.
filenamef[]Filename, directory, or URL to files identifying the resource to get from a server.
include-uninitializedfalseIf true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.
limitsThe resource requirement requests for this container. For example, 'cpu=100m,memory=256Mi'. Note that server side components may assign requests depending on the server configuration, such as limit ranges.
localfalseIf true, set resources will NOT contact api-server but run locally.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
requestsThe resource requirement requests for this container. For example, 'cpu=100m,memory=256Mi'. Note that server side components may assign requests depending on the server configuration, such as limit ranges.
selectorlSelector (label query) to filter on, not including uninitialized ones,supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
-
-

selector

-
-

set the labels and selector before creating a deployment/service pair.

-
-
kubectl create service clusterip my-svc --clusterip="None" -o yaml --dry-run | kubectl set selector --local -f - 'environment=qa' -o yaml | kubectl create -f -
-kubectl create deployment my-dep -o yaml --dry-run | kubectl label --local -f - environment=qa -o yaml | kubectl create -f -
-
-

Set the selector on a resource. Note that the new selector will overwrite the old selector if the resource had one prior to the invocation of 'set selector'.

-

A selector must begin with a letter or number, and may contain letters, numbers, hyphens, dots, and underscores, up to 63 characters. If --resource-version is specified, then updates will use this resource version, otherwise the existing resource-version will be used. Note: currently selectors can only be set on Service objects.

-

Usage

-

$ selector (-f FILENAME | TYPE NAME) EXPRESSIONS [--resource-version=version]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allfalseSelect all resources, including uninitialized ones, in the namespace of the specified resource types
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
filenamef[]Filename, directory, or URL to files the resource to update the selectors
include-uninitializedfalseIf true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.
localfalseIf true, set selector will NOT contact api-server but run locally.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
resource-versionIf non-empty, the selectors update will only succeed if this is the current resource-version for the object. Only valid when specifying a single resource.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
-
-

serviceaccount

-
-

Set Deployment nginx-deployment's ServiceAccount to serviceaccount1

-
-
kubectl set serviceaccount deployment nginx-deployment serviceaccount1
-
-
-

Print the result (in yaml format) of updated nginx deployment with serviceaccount from local file, without hitting apiserver

-
-
kubectl set sa -f nginx-deployment.yaml serviceaccount1 --local --dry-run -o yaml
-
-

Update ServiceAccount of pod template resources.

-

Possible resources (case insensitive) can be:

-

replicationcontroller (rc), deployment (deploy), daemonset (ds), job, replicaset (rs), statefulset

-

Usage

-

$ serviceaccount (-f FILENAME | TYPE NAME) SERVICE_ACCOUNT

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allfalseSelect all resources, including uninitialized ones, in the namespace of the specified resource types
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
filenamef[]Filename, directory, or URL to files identifying the resource to get from a server.
include-uninitializedfalseIf true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.
localfalseIf true, set serviceaccount will NOT contact api-server but run locally.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
-
-

subject

-
-

Update a ClusterRoleBinding for serviceaccount1

-
-
kubectl set subject clusterrolebinding admin --serviceaccount=namespace:serviceaccount1
-
-
-

Update a RoleBinding for user1, user2, and group1

-
-
kubectl set subject rolebinding admin --user=user1 --user=user2 --group=group1
-
-
-

Print the result (in yaml format) of updating rolebinding subjects from a local, without hitting the server

-
-
kubectl create rolebinding admin --role=admin --user=admin -o yaml --dry-run | kubectl set subject --local -f - --user=foo -o yaml
-
-

Update User, Group or ServiceAccount in a RoleBinding/ClusterRoleBinding.

-

Usage

-

$ subject (-f FILENAME | TYPE NAME) [--user=username] [--group=groupname] [--serviceaccount=namespace:serviceaccountname] [--dry-run]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allfalseSelect all resources, including uninitialized ones, in the namespace of the specified resource types
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
dry-runfalseIf true, only print the object that would be sent, without sending it.
filenamef[]Filename, directory, or URL to files the resource to update the subjects
group[]Groups to bind to the role
include-uninitializedfalseIf true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.
localfalseIf true, set subject will NOT contact api-server but run locally.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
selectorlSelector (label query) to filter on, not including uninitialized ones, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
serviceaccount[]Service accounts to bind to the role
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
-

DECLARATIVE APP MANAGEMENT

-
-

apply

-
-

Apply the configuration in pod.json to a pod.

-
-
kubectl apply -f ./pod.json
-
-
-

Apply the JSON passed into stdin to a pod.

-
-
cat pod.json | kubectl apply -f -
-
-
-

Note: --prune is still in Alpha # Apply the configuration in manifest.yaml that matches label app=nginx and delete all the other resources that are not in the file and match label app=nginx.

-
-
kubectl apply --prune -f manifest.yaml -l app=nginx
-
-
-

Apply the configuration in manifest.yaml and delete all the other configmaps that are not in the file.

-
-
kubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/v1/ConfigMap
-
-

Apply a configuration to a resource by filename or stdin. The resource name must be specified. This resource will be created if it doesn't exist yet. To use 'apply', always create the resource initially with either 'apply' or 'create --save-config'.

-

JSON and YAML formats are accepted.

-

Alpha Disclaimer: the --prune functionality is not yet complete. Do not use unless you are aware of what the current state is. See https://issues.k8s.io/34274.

-

Usage

-

$ apply -f FILENAME

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allfalseSelect all resources in the namespace of the specified resource types.
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
cascadetrueOnly relevant during a prune or a force apply. If true, cascade the deletion of the resources managed by pruned or deleted resources (e.g. Pods created by a ReplicationController).
dry-runfalseIf true, only print the object that would be sent, without sending it.
filenamef[]Filename, directory, or URL to files that contains the configuration to apply
forcefalseDelete and re-create the specified resource, when PATCH encounters conflict and has retried for 5 times.
grace-period-1Only relevant during a prune or a force apply. Period of time in seconds given to pruned or deleted resources to terminate gracefully. Ignored if negative.
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
include-uninitializedfalseIf true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
openapi-patchtrueIf true, use openapi to calculate diff when the openapi presents and the resource can be found in the openapi spec. Otherwise, fall back to use baked-in types.
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
overwritetrueAutomatically resolve conflicts between the modified and live configuration by using values from the modified configuration
prunefalseAutomatically delete resource objects, including the uninitialized ones, that do not appear in the configs and are created by either apply or create --save-config. Should be used with either -l or --all.
prune-whitelist[]Overwrite the default whitelist with for --prune
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
selectorlSelector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
timeout0sOnly relevant during a force apply. The length of time to wait before giving up on a delete of the old resource, zero means determine a timeout from the size of the object. Any other values should contain a corresponding time unit (e.g. 1s, 2m, 3h).
validatetrueIf true, use a schema to validate the input before sending it
-
-

edit-last-applied

-
-

Edit the last-applied-configuration annotations by type/name in YAML.

-
-
kubectl apply edit-last-applied deployment/nginx
-
-
-

Edit the last-applied-configuration annotations by file in JSON.

-
-
kubectl apply edit-last-applied -f deploy.yaml -o json
-
-

Edit the latest last-applied-configuration annotations of resources from the default editor.

-

The edit-last-applied command allows you to directly edit any API resource you can retrieve via the command line tools. It will open the editor defined by your KUBE _EDITOR, or EDITOR environment variables, or fall back to 'vi' for Linux or 'notepad' for Windows. You can edit multiple objects, although changes are applied one at a time. The command accepts filenames as well as command line arguments, although the files you point to must be previously saved versions of resources.

-

The default format is YAML. To edit in JSON, specify "-o json".

-

The flag --windows-line-endings can be used to force Windows line endings, otherwise the default for your operating system will be used.

-

In the event an error occurs while updating, a temporary file will be created on disk that contains your unapplied changes. The most common error when updating a resource is another editor changing the resource on the server. When this occurs, you will have to apply your changes to the newer version of the resource, or update your temporary saved copy to include the latest resource version.

-

Usage

-

$ edit-last-applied (RESOURCE/NAME | -f FILENAME)

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
filenamef[]Filename, directory, or URL to files to use to edit the resource
include-uninitializedfalseIf true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.
outputoyamlOutput format. One of: yaml|json.
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
windows-line-endingsfalseDefaults to the line ending native to your platform.
-
-

set-last-applied

-
-

Set the last-applied-configuration of a resource to match the contents of a file.

-
-
kubectl apply set-last-applied -f deploy.yaml
-
-
-

Execute set-last-applied against each configuration file in a directory.

-
-
kubectl apply set-last-applied -f path/
-
-
-

Set the last-applied-configuration of a resource to match the contents of a file, will create the annotation if it does not already exist.

-
-
kubectl apply set-last-applied -f deploy.yaml --create-annotation=true
-
-

Set the latest last-applied-configuration annotations by setting it to match the contents of a file. This results in the last-applied-configuration being updated as though 'kubectl apply -f ' was run, without updating any other parts of the object.

-

Usage

-

$ set-last-applied -f FILENAME

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
create-annotationfalseWill create 'last-applied-configuration' annotations if current objects doesn't have one
dry-runfalseIf true, only print the object that would be sent, without sending it.
filenamef[]Filename, directory, or URL to files that contains the last-applied-configuration annotations
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
recordfalseRecord current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
-
-

view-last-applied

-
-

View the last-applied-configuration annotations by type/name in YAML.

-
-
kubectl apply view-last-applied deployment/nginx
-
-
-

View the last-applied-configuration annotations by file in JSON

-
-
kubectl apply view-last-applied -f deploy.yaml -o json
-
-

View the latest last-applied-configuration annotations by type/name or file.

-

The default output will be printed to stdout in YAML format. One can use -o option to change output format.

-

Usage

-

$ view-last-applied (TYPE [NAME | -l label] | TYPE/NAME | -f FILENAME)

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allfalseSelect all resources in the namespace of the specified resource types
filenamef[]Filename, directory, or URL to files that contains the last-applied-configuration annotations
outputoOutput format. Must be one of yaml|json
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
selectorlSelector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
-

WORKING WITH APPS

-

This section contains commands for inspecting and debugging your -applications.

-
    -
  • logs will print the logs from the specified pod + container.
  • -
  • exec can be used to get an interactive shell on a pod + container.
  • -
  • describe will print debug information about the given resource.
  • -
-
-

attach

-
-

Get output from running pod 123456-7890, using the first container by default

-
-
kubectl attach 123456-7890
-
-
-

Get output from ruby-container from pod 123456-7890

-
-
kubectl attach 123456-7890 -c ruby-container
-
-
-

Switch to raw terminal mode, sends stdin to 'bash' in ruby-container from pod 123456-7890 # and sends stdout/stderr from 'bash' back to the client

-
-
kubectl attach 123456-7890 -c ruby-container -i -t
-
-
-

Get output from the first pod of a ReplicaSet named nginx

-
-
kubectl attach rs/nginx
-
-

Attach to a process that is already running inside an existing container.

-

Usage

-

$ attach (POD | TYPE/NAME) -c CONTAINER

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
containercContainer name. If omitted, the first container in the pod will be chosen
pod-running-timeout1m0sThe length of time (like 5s, 2m, or 3h, higher than zero) to wait until at least one pod is running
stdinifalsePass stdin to the container
ttytfalseStdin is a TTY
-
-

auth

-

Inspect authorization

-

Usage

-

$ auth

-
-

can-i

-
-

Check to see if I can create pods in any namespace

-
-
kubectl auth can-i create pods --all-namespaces
-
-
-

Check to see if I can list deployments in my current namespace

-
-
kubectl auth can-i list deployments.extensions
-
-
-

Check to see if I can do everything in my current namespace ("*" means all)

-
-
kubectl auth can-i '*' '*'
-
-
-

Check to see if I can get the job named "bar" in namespace "foo"

-
-
kubectl auth can-i list jobs.batch/bar -n foo
-
-
-

Check to see if I can read pod logs

-
-
kubectl auth can-i get pods --subresource=log
-
-
-

Check to see if I can access the URL /logs/

-
-
kubectl auth can-i get /logs/
-
-

Check whether an action is allowed.

-

VERB is a logical Kubernetes API verb like 'get', 'list', 'watch', 'delete', etc. TYPE is a Kubernetes resource. Shortcuts and groups will be resolved. NONRESOURCEURL is a partial URL starts with "/". NAME is the name of a particular Kubernetes resource.

-

Usage

-

$ can-i VERB [TYPE | TYPE/NAME | NONRESOURCEURL]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
all-namespacesfalseIf true, check the specified action in all namespaces.
quietqfalseIf true, suppress output and just return the exit code.
subresourceSubResource such as pod/log or deployment/scale
-
-

reconcile

-
-

Reconcile rbac resources from a file

-
-
kubectl auth reconcile -f my-rbac-rules.yaml
-
-

Reconciles rules for RBAC Role, RoleBinding, ClusterRole, and ClusterRole binding objects.

-

This is preferred to 'apply' for RBAC resources so that proper rule coverage checks are done.

-

Usage

-

$ reconcile -f FILENAME

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
filenamef[]Filename, directory, or URL to files identifying the resource to reconcile.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
-
-

cp

-
-

!!!Important Note!!! # Requires that the 'tar' binary is present in your container # image. If 'tar' is not present, 'kubectl cp' will fail. # Copy /tmp/foo_dir local directory to /tmp/bar_dir in a remote pod in the default namespace

-
-
kubectl cp /tmp/foo_dir <some-pod>:/tmp/bar_dir
-
-
-

Copy /tmp/foo local file to /tmp/bar in a remote pod in a specific container

-
-
kubectl cp /tmp/foo <some-pod>:/tmp/bar -c <specific-container>
-
-
-

Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace

-
-
kubectl cp /tmp/foo <some-namespace>/<some-pod>:/tmp/bar
-
-
-

Copy /tmp/foo from a remote pod to /tmp/bar locally

-
-
kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar
-
-

Copy files and directories to and from containers.

-

Usage

-

$ cp <file-spec-src> <file-spec-dest>

-

Flags

- - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
containercContainer name. If omitted, the first container in the pod will be chosen
-
-

describe

-
-

Describe a node

-
-
kubectl describe nodes kubernetes-node-emt8.c.myproject.internal
-
-
-

Describe a pod

-
-
kubectl describe pods/nginx
-
-
-

Describe a pod identified by type and name in "pod.json"

-
-
kubectl describe -f pod.json
-
-
-

Describe all pods

-
-
kubectl describe pods
-
-
-

Describe pods by label name=myLabel

-
-
kubectl describe po -l name=myLabel
-
-
-

Describe all pods managed by the 'frontend' replication controller (rc-created pods # get the name of the rc as a prefix in the pod the name).

-
-
kubectl describe pods frontend
-
-

Show details of a specific resource or group of resources

-

Print a detailed description of the selected resources, including related resources such as events or controllers. You may select a single object by name, all objects of that type, provide a name prefix, or label selector. For example:

-

$ kubectl describe TYPE NAME_PREFIX

-

will first check for an exact match on TYPE and NAME PREFIX. If no such resource exists, it will output details for every resource that has a name prefixed with NAME PREFIX.

-

Valid resource types include:

-
    -
  • all
  • -
  • certificatesigningrequests (aka 'csr')
  • -
  • clusterrolebindings
  • -
  • clusterroles
  • -
  • componentstatuses (aka 'cs')
  • -
  • configmaps (aka 'cm')
  • -
  • controllerrevisions
  • -
  • cronjobs
  • -
  • customresourcedefinition (aka 'crd')
  • -
  • daemonsets (aka 'ds')
  • -
  • deployments (aka 'deploy')
  • -
  • endpoints (aka 'ep')
  • -
  • events (aka 'ev')
  • -
  • horizontalpodautoscalers (aka 'hpa')
  • -
  • ingresses (aka 'ing')
  • -
  • jobs
  • -
  • limitranges (aka 'limits')
  • -
  • namespaces (aka 'ns')
  • -
  • networkpolicies (aka 'netpol')
  • -
  • nodes (aka 'no')
  • -
  • persistentvolumeclaims (aka 'pvc')
  • -
  • persistentvolumes (aka 'pv')
  • -
  • poddisruptionbudgets (aka 'pdb')
  • -
  • podpreset
  • -
  • pods (aka 'po')
  • -
  • podsecuritypolicies (aka 'psp')
  • -
  • podtemplates
  • -
  • replicasets (aka 'rs')
  • -
  • replicationcontrollers (aka 'rc')
  • -
  • resourcequotas (aka 'quota')
  • -
  • rolebindings
  • -
  • roles
  • -
  • secrets
  • -
  • serviceaccounts (aka 'sa')
  • -
  • services (aka 'svc')
  • -
  • statefulsets (aka 'sts')
  • -
  • storageclasses (aka 'sc')
  • -
-

Usage

-

$ describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME)

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
all-namespacesfalseIf present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.
filenamef[]Filename, directory, or URL to files containing the resource to describe
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
include-uninitializedfalseIf true, the kubectl command applies to uninitialized objects. If explicitly set to false, this flag overrides other flags that make the kubectl commands apply to uninitialized objects, e.g., "--all". Objects with empty metadata.initializers are regarded as initialized.
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
selectorlSelector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
show-eventstrueIf true, display events related to the described object.
-
-

exec

-
-

Get output from running 'date' from pod 123456-7890, using the first container by default

-
-
kubectl exec 123456-7890 date
-
-
-

Get output from running 'date' in ruby-container from pod 123456-7890

-
-
kubectl exec 123456-7890 -c ruby-container date
-
-
-

Switch to raw terminal mode, sends stdin to 'bash' in ruby-container from pod 123456-7890 # and sends stdout/stderr from 'bash' back to the client

-
-
kubectl exec 123456-7890 -c ruby-container -i -t -- bash -il
-
-
-

List contents of /usr from the first container of pod 123456-7890 and sort by modification time. # If the command you want to execute in the pod has any flags in common (e.g. -i), # you must use two dashes (--) to separate your command's flags/arguments. # Also note, do not surround your command and its flags/arguments with quotes # unless that is how you would execute it normally (i.e., do ls -t /usr, not "ls -t /usr").

-
-
kubectl exec 123456-7890 -i -t -- ls -t /usr
-
-

Execute a command in a container.

-

Usage

-

$ exec POD [-c CONTAINER] -- COMMAND [args...]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
containercContainer name. If omitted, the first container in the pod will be chosen
podpPod name
stdinifalsePass stdin to the container
ttytfalseStdin is a TTY
-
-

logs

-
-

Return snapshot logs from pod nginx with only one container

-
-
kubectl logs nginx
-
-
-

Return snapshot logs for the pods defined by label app=nginx

-
-
kubectl logs -lapp=nginx
-
-
-

Return snapshot of previous terminated ruby container logs from pod web-1

-
-
kubectl logs -p -c ruby web-1
-
-
-

Begin streaming the logs of the ruby container in pod web-1

-
-
kubectl logs -f -c ruby web-1
-
-
-

Display only the most recent 20 lines of output in pod nginx

-
-
kubectl logs --tail=20 nginx
-
-
-

Show all logs from pod nginx written in the last hour

-
-
kubectl logs --since=1h nginx
-
-
-

Return snapshot logs from first container of a job named hello

-
-
kubectl logs job/hello
-
-
-

Return snapshot logs from container nginx-1 of a deployment named nginx

-
-
kubectl logs deployment/nginx -c nginx-1
-
-

Print the logs for a container in a pod or specified resource. If the pod has only one container, the container name is optional.

-

Usage

-

$ logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
containercPrint the logs of this container
followffalseSpecify if the logs should be streamed.
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
interactivefalseIf true, prompt the user for input when required.
limit-bytes0Maximum bytes of logs to return. Defaults to no limit.
pod-running-timeout20sThe length of time (like 5s, 2m, or 3h, higher than zero) to wait until at least one pod is running
previouspfalseIf true, print the logs for the previous instance of the container in a pod if it exists.
selectorlSelector (label query) to filter on.
since0sOnly return logs newer than a relative duration like 5s, 2m, or 3h. Defaults to all logs. Only one of since-time / since may be used.
since-timeOnly return logs after a specific date (RFC3339). Defaults to all logs. Only one of since-time / since may be used.
tail-1Lines of recent log file to display. Defaults to -1 with no selector, showing all log lines otherwise 10, if a selector is provided.
timestampsfalseInclude timestamps on each line in the log output
-
-

port-forward

-
-

Listen on ports 5000 and 6000 locally, forwarding data to/from ports 5000 and 6000 in the pod

-
-
kubectl port-forward pod/mypod 5000 6000
-
-
-

Listen on ports 5000 and 6000 locally, forwarding data to/from ports 5000 and 6000 in a pod selected by the deployment

-
-
kubectl port-forward deployment/mydeployment 5000 6000
-
-
-

Listen on port 8888 locally, forwarding to 5000 in the pod

-
-
kubectl port-forward pod/mypod 8888:5000
-
-
-

Listen on a random port locally, forwarding to 5000 in the pod

-
-
kubectl port-forward pod/mypod :5000
-
-

Forward one or more local ports to a pod.

-

Use resource type/name such as deployment/mydeployment to select a pod. Resource type defaults to 'pod' if omitted.

-

If there are multiple pods matching the criteria, a pod will be selected automatically. The forwarding session ends when the selected pod terminates, and rerun of the command is needed to resume forwarding.

-

Usage

-

$ port-forward TYPE/NAME [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N]

-

Flags

- - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
pod-running-timeout1m0sThe length of time (like 5s, 2m, or 3h, higher than zero) to wait until at least one pod is running
-
-

proxy

-
-

To proxy all of the kubernetes api and nothing else, use:

-
-
$ kubectl proxy --api-prefix=/
-
-
-

To proxy only part of the kubernetes api and also some static files:

-
-
$ kubectl proxy --www=/my/files --www-prefix=/static/ --api-prefix=/api/
-
-
-

The above lets you 'curl localhost:8001/api/v1/pods'. # To proxy the entire kubernetes api at a different root, use:

-
-
$ kubectl proxy --api-prefix=/custom/
-
-
-

The above lets you 'curl localhost:8001/custom/api/v1/pods' # Run a proxy to kubernetes apiserver on port 8011, serving static content from ./local/www/

-
-
kubectl proxy --port=8011 --www=./local/www/
-
-
-

Run a proxy to kubernetes apiserver on an arbitrary local port. # The chosen port for the server will be output to stdout.

-
-
kubectl proxy --port=0
-
-
-

Run a proxy to kubernetes apiserver, changing the api prefix to k8s-api # This makes e.g. the pods api available at localhost:8001/k8s-api/v1/pods/

-
-
kubectl proxy --api-prefix=/k8s-api
-
-

Creates a proxy server or application-level gateway between localhost and the Kubernetes API Server. It also allows serving static content over specified HTTP path. All incoming data enters through one port and gets forwarded to the remote kubernetes API Server port, except for the path matching the static content path.

-

Usage

-

$ proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
accept-hosts^localhost$,^127.0.0.1$,^[::1]$Regular expression for hosts that the proxy should accept.
accept-paths^.*Regular expression for paths that the proxy should accept.
address127.0.0.1The IP address on which to serve on.
api-prefix/Prefix to serve the proxied API under.
disable-filterfalseIf true, disable request filtering in the proxy. This is dangerous, and can leave you vulnerable to XSRF attacks, when used with an accessible port.
portp8001The port on which to run the proxy. Set to 0 to pick a random port.
reject-methods^$Regular expression for HTTP methods that the proxy should reject (example --reject-methods='POST,PUT,PATCH').
reject-paths^/api/./pods/./exec,^/api/./pods/./attachRegular expression for paths that the proxy should reject. Paths specified here will be rejected even accepted by --accept-paths.
unix-socketuUnix socket on which to run the proxy.
wwwwAlso serve static files from the given directory under the specified prefix.
www-prefixP/static/Prefix to serve static files under, if static file directory is specified.
-
-

top

-

Display Resource (CPU/Memory/Storage) usage.

-

The top command allows you to see the resource consumption for nodes or pods.

-

This command requires Heapster to be correctly configured and working on the server.

-

Usage

-

$ top

-
-

node

-
-

Show metrics for all nodes

-
-
kubectl top node
-
-
-

Show metrics for a given node

-
-
kubectl top node NODE_NAME
-
-

Display Resource (CPU/Memory/Storage) usage of nodes.

-

The top-node command allows you to see the resource consumption of nodes.

-

Usage

-

$ node [NAME | -l label]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
heapster-namespacekube-systemNamespace Heapster service is located in
heapster-portPort name in service to use
heapster-schemehttpScheme (http or https) to connect to Heapster as
heapster-serviceheapsterName of Heapster service
selectorlSelector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
-
-

pod

-
-

Show metrics for all pods in the default namespace

-
-
kubectl top pod
-
-
-

Show metrics for all pods in the given namespace

-
-
kubectl top pod --namespace=NAMESPACE
-
-
-

Show metrics for a given pod and its containers

-
-
kubectl top pod POD_NAME --containers
-
-
-

Show metrics for the pods defined by label name=myLabel

-
-
kubectl top pod -l name=myLabel
-
-

Display Resource (CPU/Memory/Storage) usage of pods.

-

The 'top pod' command allows you to see the resource consumption of pods.

-

Due to the metrics pipeline delay, they may be unavailable for a few minutes since pod creation.

-

Usage

-

$ pod [NAME | -l label]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
all-namespacesfalseIf present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.
containersfalseIf present, print usage of containers within a pod.
heapster-namespacekube-systemNamespace Heapster service is located in
heapster-portPort name in service to use
heapster-schemehttpScheme (http or https) to connect to Heapster as
heapster-serviceheapsterName of Heapster service
selectorlSelector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
-

CLUSTER MANAGEMENT

-
-

api-versions

-
-

Print the supported API versions

-
-
kubectl api-versions
-
-

Print the supported API versions on the server, in the form of "group/version"

-

Usage

-

$ api-versions

-
-

certificate

-

Modify certificate resources.

-

Usage

-

$ certificate SUBCOMMAND

-
-

approve

-

Approve a certificate signing request.

-

kubectl certificate approve allows a cluster admin to approve a certificate signing request (CSR). This action tells a certificate signing controller to issue a certificate to the requestor with the attributes requested in the CSR.

-

SECURITY NOTICE: Depending on the requested attributes, the issued certificate can potentially grant a requester access to cluster resources or to authenticate as a requested identity. Before approving a CSR, ensure you understand what the signed certificate can do.

-

Usage

-

$ approve (-f FILENAME | NAME)

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
filenamef[]Filename, directory, or URL to files identifying the resource to update
outputoOutput mode. Use "-o name" for shorter output (resource/name).
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
-
-

deny

-

Deny a certificate signing request.

-

kubectl certificate deny allows a cluster admin to deny a certificate signing request (CSR). This action tells a certificate signing controller to not to issue a certificate to the requestor.

-

Usage

-

$ deny (-f FILENAME | NAME)

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
filenamef[]Filename, directory, or URL to files identifying the resource to update
outputoOutput mode. Use "-o name" for shorter output (resource/name).
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
-
-

cluster-info

-
-

Print the address of the master and cluster services

-
-
kubectl cluster-info
-
-

Display addresses of the master and services with label kubernetes.io/cluster-service=true To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

-

Usage

-

$ cluster-info

-

Flags

- - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
-
-

dump

-
-

Dump current cluster state to stdout

-
-
kubectl cluster-info dump
-
-
-

Dump current cluster state to /path/to/cluster-state

-
-
kubectl cluster-info dump --output-directory=/path/to/cluster-state
-
-
-

Dump all namespaces to stdout

-
-
kubectl cluster-info dump --all-namespaces
-
-
-

Dump a set of namespaces to /path/to/cluster-state

-
-
kubectl cluster-info dump --namespaces default,kube-system --output-directory=/path/to/cluster-state
-
-

Dumps cluster info out suitable for debugging and diagnosing cluster problems. By default, dumps everything to stdout. You can optionally specify a directory with --output-directory. If you specify a directory, kubernetes will build a set of files in that directory. By default only dumps things in the 'kube-system' namespace, but you can switch to a different namespace with the --namespaces flag, or specify --all-namespaces to dump all namespaces.

-

The command also dumps the logs of all of the pods in the cluster, these logs are dumped into different directories based on namespace and pod name.

-

Usage

-

$ dump

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
all-namespacesfalseIf true, dump all namespaces. If true, --namespaces is ignored.
namespaces[]A comma separated list of namespaces to dump.
output-directoryWhere to output the files. If empty or '-' uses stdout, otherwise creates a directory hierarchy in that directory
pod-running-timeout20sThe length of time (like 5s, 2m, or 3h, higher than zero) to wait until at least one pod is running
-
-

cordon

-
-

Mark node "foo" as unschedulable.

-
-
kubectl cordon foo
-
-

Mark node as unschedulable.

-

Usage

-

$ cordon NODE

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
dry-runfalseIf true, only print the object that would be sent, without sending it.
selectorlSelector (label query) to filter on
-
-

drain

-
-

Drain node "foo", even if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet on it.

-
-
$ kubectl drain foo --force
-
-
-

As above, but abort if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet, and use a grace period of 15 minutes.

-
-
$ kubectl drain foo --grace-period=900
-
-

Drain node in preparation for maintenance.

-

The given node will be marked unschedulable to prevent new pods from arriving. 'drain' evicts the pods if the APIServer supports eviction (http://kubernetes.io/docs/admin/disruptions/). Otherwise, it will use normal DELETE to delete the pods. The 'drain' evicts or deletes all pods except mirror pods (which cannot be deleted through the API server). If there are DaemonSet-managed pods, drain will not proceed without --ignore-daemonsets, and regardless it will not delete any DaemonSet-managed pods, because those pods would be immediately replaced by the DaemonSet controller, which ignores unschedulable markings. If there are any pods that are neither mirror pods nor managed by ReplicationController, ReplicaSet, DaemonSet, StatefulSet or Job, then drain will not delete any pods unless you use --force. --force will also allow deletion to proceed if the managing resource of one or more pods is missing.

-

'drain' waits for graceful termination. You should not operate on the machine until the command completes.

-

When you are ready to put the node back into service, use kubectl uncordon, which will make the node schedulable again.

-

! http://kubernetes.io/images/docs/kubectl_drain.svg

-

Usage

-

$ drain NODE

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
delete-local-datafalseContinue even if there are pods using emptyDir (local data that will be deleted when the node is drained).
dry-runfalseIf true, only print the object that would be sent, without sending it.
forcefalseContinue even if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet.
grace-period-1Period of time in seconds given to each pod to terminate gracefully. If negative, the default value specified in the pod will be used.
ignore-daemonsetsfalseIgnore DaemonSet-managed pods.
pod-selectorLabel selector to filter pods on the node
selectorlSelector (label query) to filter on
timeout0sThe length of time to wait before giving up, zero means infinite
-
-

taint

-
-

Update node 'foo' with a taint with key 'dedicated' and value 'special-user' and effect 'NoSchedule'. # If a taint with that key and effect already exists, its value is replaced as specified.

-
-
kubectl taint nodes foo dedicated=special-user:NoSchedule
-
-
-

Remove from node 'foo' the taint with key 'dedicated' and effect 'NoSchedule' if one exists.

-
-
kubectl taint nodes foo dedicated:NoSchedule-
-
-
-

Remove from node 'foo' all the taints with key 'dedicated'

-
-
kubectl taint nodes foo dedicated-
-
-
-

Add a taint with key 'dedicated' on nodes having label mylabel=X

-
-
kubectl taint node -l myLabel=X  dedicated=foo:PreferNoSchedule
-
-

Update the taints on one or more nodes.

-
    -
  • A taint consists of a key, value, and effect. As an argument here, it is expressed as key=value:effect.
  • -
  • The key must begin with a letter or number, and may contain letters, numbers, hyphens, dots, and underscores, up to 253 characters.
  • -
  • Optionally, the key can begin with a DNS subdomain prefix and a single '/', like example.com/my-app
  • -
  • The value must begin with a letter or number, and may contain letters, numbers, hyphens, dots, and underscores, up to 63 characters.
  • -
  • The effect must be NoSchedule, PreferNoSchedule or NoExecute.
  • -
  • Currently taint can only apply to node.
  • -
-

Usage

-

$ taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allfalseSelect all nodes in the cluster
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
overwritefalseIf true, allow taints to be overwritten, otherwise reject taint updates that overwrite existing taints.
selectorlSelector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
validatetrueIf true, use a schema to validate the input before sending it
-
-

uncordon

-
-

Mark node "foo" as schedulable.

-
-
$ kubectl uncordon foo
-
-

Mark node as schedulable.

-

Usage

-

$ uncordon NODE

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
dry-runfalseIf true, only print the object that would be sent, without sending it.
selectorlSelector (label query) to filter on
-

KUBECTL SETTINGS AND USAGE

-
-

alpha

-

These commands correspond to alpha features that are not enabled in Kubernetes clusters by default.

-

Usage

-

$ alpha

-
-

diff

-
-

Diff resources included in pod.json. By default, it will diff LOCAL and LIVE versions

-
-
kubectl alpha diff -f pod.json
-
-
-

When one version is specified, diff that version against LIVE

-
-
cat service.yaml | kubectl alpha diff -f - MERGED
-
-
-

Or specify both versions

-
-
kubectl alpha diff -f pod.json -f service.yaml LAST LOCAL
-
-

Diff configurations specified by filename or stdin between their local, last-applied, live and/or "merged" versions.

-

LOCAL and LIVE versions are diffed by default. Other available keywords are MERGED and LAST.

-

Output is always YAML.

-

KUBERNETES EXTERNAL DIFF environment variable can be used to select your own diff command. By default, the "diff" command available in your path will be run with "-u" (unicode) and "-N" (treat new files as empty) options.

-

Usage

-

$ diff -f FILENAME

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
filenamef[]Filename, directory, or URL to files contains the configuration to diff
recursiveRfalseProcess the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
-
-

completion

-
-

Installing bash completion on macOS using homebrew ## If running Bash 3.2 included with macOS

-
-
brew install bash-completion
-
-
-

or, if running Bash 4.1+

-
-
brew install bash-completion@2
-
-
-

If kubectl is installed via homebrew, this should start working immediately. ## If you've installed via other means, you may need add the completion to your completion directory

-
-
kubectl completion bash > $(brew --prefix)/etc/bash_completion.d/kubectl
-
-
-

Installing bash completion on Linux ## Load the kubectl completion code for bash into the current shell

-
-
source <(kubectl completion bash)
-
-
-

Write bash completion code to a file and source if from .bash_profile

-
-
kubectl completion bash > ~/.kube/completion.bash.inc
-printf "
-
-
-

Kubectl shell completion

-
-
source '$HOME/.kube/completion.bash.inc'
-" >> $HOME/.bash_profile
-source $HOME/.bash_profile
-
-
-

Load the kubectl completion code for zsh[1] into the current shell

-
-
source <(kubectl completion zsh)
-
-
-

Set the kubectl completion code for zsh[1] to autoload on startup

-
-
kubectl completion zsh > "${fpath[1]}/_kubectl"
-
-

Output shell completion code for the specified shell (bash or zsh). The shell code must be evaluated to provide interactive completion of kubectl commands. This can be done by sourcing it from the .bash _profile.

-

Detailed instructions on how to do this are available here: https://kubernetes.io/docs/tasks/tools/install-kubectl/#enabling-shell-autocompletion

-

Note for zsh users: [1] zsh completions are only supported in versions of zsh >= 5.2

-

Usage

-

$ completion SHELL

-
-

config

-

Modify kubeconfig files using subcommands like "kubectl config set current-context my-context"

-

The loading order follows these rules:

-
    -
  1. If the --kubeconfig flag is set, then only that file is loaded. The flag may only be set once and no merging takes place.
  2. -
  3. If $KUBECONFIG environment variable is set, then it is used a list of paths (normal path delimitting rules for your system). These paths are merged. When a value is modified, it is modified in the file that defines the stanza. When a value is created, it is created in the first file that exists. If no files in the chain exist, then it creates the last file in the list.
  4. -
  5. Otherwise, ${HOME}/.kube/config is used and no merging takes place.
  6. -
-

Usage

-

$ config SUBCOMMAND

-
-

current-context

-
-

Display the current-context

-
-
kubectl config current-context
-
-

Displays the current-context

-

Usage

-

$ current-context

-
-

delete-cluster

-
-

Delete the minikube cluster

-
-
kubectl config delete-cluster minikube
-
-

Delete the specified cluster from the kubeconfig

-

Usage

-

$ delete-cluster NAME

-
-

delete-context

-
-

Delete the context for the minikube cluster

-
-
kubectl config delete-context minikube
-
-

Delete the specified context from the kubeconfig

-

Usage

-

$ delete-context NAME

-
-

get-clusters

-
-

List the clusters kubectl knows about

-
-
kubectl config get-clusters
-
-

Display clusters defined in the kubeconfig.

-

Usage

-

$ get-clusters

-
-

get-contexts

-
-

List all the contexts in your kubeconfig file

-
-
kubectl config get-contexts
-
-
-

Describe one context in your kubeconfig file.

-
-
kubectl config get-contexts my-context
-
-

Displays one or many contexts from the kubeconfig file.

-

Usage

-

$ get-contexts [(-o|--output=)name)]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
-
-

rename-context

-
-

Rename the context 'old-name' to 'new-name' in your kubeconfig file

-
-
kubectl config rename-context old-name new-name
-
-

Renames a context from the kubeconfig file.

-

CONTEXT _NAME is the context name that you wish change.

-

NEW _NAME is the new name you wish to set.

-

Note: In case the context being renamed is the 'current-context', this field will also be updated.

-

Usage

-

$ rename-context CONTEXT_NAME NEW_NAME

-
-

set

-

Sets an individual value in a kubeconfig file

-

PROPERTY _NAME is a dot delimited name where each token represents either an attribute name or a map key. Map keys may not contain dots.

-

PROPERTY _VALUE is the new value you wish to set. Binary fields such as 'certificate-authority-data' expect a base64 encoded string unless the --set-raw-bytes flag is used.

-

Usage

-

$ set PROPERTY_NAME PROPERTY_VALUE

-

Flags

- - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
set-raw-bytesfalseWhen writing a []byte PROPERTY_VALUE, write the given string directly without base64 decoding.
-
-

set-cluster

-
-

Set only the server field on the e2e cluster entry without touching other values.

-
-
kubectl config set-cluster e2e --server=https://1.2.3.4
-
-
-

Embed certificate authority data for the e2e cluster entry

-
-
kubectl config set-cluster e2e --certificate-authority=~/.kube/e2e/kubernetes.ca.crt
-
-
-

Disable cert checking for the dev cluster entry

-
-
kubectl config set-cluster e2e --insecure-skip-tls-verify=true
-
-

Sets a cluster entry in kubeconfig.

-

Specifying a name that already exists will merge new fields on top of existing values for those fields.

-

Usage

-

$ set-cluster NAME [--server=server] [--certificate-authority=path/to/certificate/authority] [--insecure-skip-tls-verify=true]

-

Flags

- - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
embed-certsfalseembed-certs for the cluster entry in kubeconfig
-
-

set-context

-
-

Set the user field on the gce context entry without touching other values

-
-
kubectl config set-context gce --user=cluster-admin
-
-

Sets a context entry in kubeconfig

-

Specifying a name that already exists will merge new fields on top of existing values for those fields.

-

Usage

-

$ set-context NAME [--cluster=cluster_nickname] [--user=user_nickname] [--namespace=namespace]

-
-

set-credentials

-
-

Set only the "client-key" field on the "cluster-admin" # entry, without touching other values:

-
-
kubectl config set-credentials cluster-admin --client-key=~/.kube/admin.key
-
-
-

Set basic auth for the "cluster-admin" entry

-
-
kubectl config set-credentials cluster-admin --username=admin --password=uXFGweU9l35qcif
-
-
-

Embed client certificate data in the "cluster-admin" entry

-
-
kubectl config set-credentials cluster-admin --client-certificate=~/.kube/admin.crt --embed-certs=true
-
-
-

Enable the Google Compute Platform auth provider for the "cluster-admin" entry

-
-
kubectl config set-credentials cluster-admin --auth-provider=gcp
-
-
-

Enable the OpenID Connect auth provider for the "cluster-admin" entry with additional args

-
-
kubectl config set-credentials cluster-admin --auth-provider=oidc --auth-provider-arg=client-id=foo --auth-provider-arg=client-secret=bar
-
-
-

Remove the "client-secret" config value for the OpenID Connect auth provider for the "cluster-admin" entry

-
-
kubectl config set-credentials cluster-admin --auth-provider=oidc --auth-provider-arg=client-secret-
-
-

Sets a user entry in kubeconfig

-

Specifying a name that already exists will merge new fields on top of existing values.

-

Client-certificate flags: - --client-certificate=certfile --client-key=keyfile

-

Bearer token flags: - --token=bearer_token

-

Basic auth flags: - --username=basic_user --password=basic_password

-

Bearer token and basic auth are mutually exclusive.

-

Usage

-

$ set-credentials NAME [--client-certificate=path/to/certfile] [--client-key=path/to/keyfile] [--token=bearer_token] [--username=basic_user] [--password=basic_password] [--auth-provider=provider_name] [--auth-provider-arg=key=value]

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
auth-providerAuth provider for the user entry in kubeconfig
auth-provider-arg[]'key=value' arguments for the auth provider
embed-certsfalseEmbed client cert/key for the user entry in kubeconfig
-
-

unset

-
-

Unset the current-context.

-
-
kubectl config unset current-context
-
-
-

Unset namespace in foo context.

-
-
kubectl config unset contexts.foo.namespace
-
-

Unsets an individual value in a kubeconfig file

-

PROPERTY _NAME is a dot delimited name where each token represents either an attribute name or a map key. Map keys may not contain dots.

-

Usage

-

$ unset PROPERTY_NAME

-
-

use-context

-
-

Use the context for the minikube cluster

-
-
kubectl config use-context minikube
-
-

Sets the current-context in a kubeconfig file

-

Usage

-

$ use-context CONTEXT_NAME

-
-

view

-
-

Show Merged kubeconfig settings.

-
-
kubectl config view
-
-
-

Get the password for the e2e user

-
-
kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'
-
-

Display merged kubeconfig settings or a specified kubeconfig file.

-

You can use --output jsonpath={...} to extract specific values using a jsonpath expression.

-

Usage

-

$ view

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
allow-missing-template-keystrueIf true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
flattenfalseFlatten the resulting kubeconfig file into self-contained output (useful for creating portable kubeconfig files)
mergetrueMerge the full hierarchy of kubeconfig files
minifyfalseRemove all information not used by current-context from the output
no-headersfalseWhen using the default or custom-column output format, don't print headers (default print headers).
outputoOutput format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
output-versionDEPRECATED: To use a specific API version, fully-qualify the resource, version, and group (for example: 'jobs.v1.batch/myjob').
rawfalseDisplay raw byte data
show-allatrueWhen printing, show all resources (default show all pods including terminated one.)
show-labelsfalseWhen printing, show all labels as the last column (default hide labels column)
sort-byIf non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
templateTemplate string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
-
-

explain

-
-

Get the documentation of the resource and its fields

-
-
kubectl explain pods
-
-
-

Get the documentation of a specific field of a resource

-
-
kubectl explain pods.spec.containers
-
-

List the fields for supported resources

-

This command describes the fields associated with each supported API resource. Fields are identified via a simple JSONPath identifier:

-

.[.]

-

Add the --recursive flag to display all of the fields at once without descriptions. Information about each field is retrieved from the server in OpenAPI format.

-

Valid resource types include:

-
    -
  • all
  • -
  • certificatesigningrequests (aka 'csr')
  • -
  • clusterrolebindings
  • -
  • clusterroles
  • -
  • componentstatuses (aka 'cs')
  • -
  • configmaps (aka 'cm')
  • -
  • controllerrevisions
  • -
  • cronjobs
  • -
  • customresourcedefinition (aka 'crd')
  • -
  • daemonsets (aka 'ds')
  • -
  • deployments (aka 'deploy')
  • -
  • endpoints (aka 'ep')
  • -
  • events (aka 'ev')
  • -
  • horizontalpodautoscalers (aka 'hpa')
  • -
  • ingresses (aka 'ing')
  • -
  • jobs
  • -
  • limitranges (aka 'limits')
  • -
  • namespaces (aka 'ns')
  • -
  • networkpolicies (aka 'netpol')
  • -
  • nodes (aka 'no')
  • -
  • persistentvolumeclaims (aka 'pvc')
  • -
  • persistentvolumes (aka 'pv')
  • -
  • poddisruptionbudgets (aka 'pdb')
  • -
  • podpreset
  • -
  • pods (aka 'po')
  • -
  • podsecuritypolicies (aka 'psp')
  • -
  • podtemplates
  • -
  • replicasets (aka 'rs')
  • -
  • replicationcontrollers (aka 'rc')
  • -
  • resourcequotas (aka 'quota')
  • -
  • rolebindings
  • -
  • roles
  • -
  • secrets
  • -
  • serviceaccounts (aka 'sa')
  • -
  • services (aka 'svc')
  • -
  • statefulsets (aka 'sts')
  • -
  • storageclasses (aka 'sc')
  • -
-

Usage

-

$ explain RESOURCE

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
api-versionGet different explanations for particular API version
include-extended-apistrueIf true, include definitions of new APIs via calls to the API server. [default true]
recursivefalsePrint the fields of fields (Currently only 1 level deep)
-
-

options

-
-

Print flags inherited by all commands

-
-
kubectl options
-
-

Print the list of flags inherited by all commands

-

Usage

-

$ options

-
-

version

-
-

Print the client and server versions for the current context

-
-
kubectl version
-
-

Print the client and server version information for the current context

-

Usage

-

$ version

-

Flags

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameShorthandDefaultUsage
clientcfalseClient version only (no server required).
outputoOne of 'yaml' or 'json'.
shortfalsePrint just the version number.
-
-

plugin

-

Runs a command-line plugin.

-

Plugins are subcommands that are not part of the major command-line distribution and can even be provided by third-parties. Please refer to the documentation and examples for more information about how to install and write your own plugins.

-

Usage

-

$ plugin NAME

-

DEPRECATED COMMANDS

-
-
- - - - - - - - \ No newline at end of file diff --git a/docs/reference/generated/kubectl/kubectl.md b/docs/reference/generated/kubectl/kubectl.md deleted file mode 100755 index dd968f8e3f95c..0000000000000 --- a/docs/reference/generated/kubectl/kubectl.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: kubectl -notitle: true ---- -## kubectl - -kubectl controls the Kubernetes cluster manager - -### Synopsis - -kubectl controls the Kubernetes cluster manager. - -Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/ - -``` -kubectl [flags] -``` - -### Options - -``` - --alsologtostderr log to standard error as well as files - --as string Username to impersonate for the operation - --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --cache-dir string Default HTTP cache directory (default "/home/username/.kube/http-cache") - --certificate-authority string Path to a cert file for the certificate authority - --client-certificate string Path to a client certificate file for TLS - --client-key string Path to a client key file for TLS - --cluster string The name of the kubeconfig cluster to use - --context string The name of the kubeconfig context to use - -h, --help help for kubectl - --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure - --kubeconfig string Path to the kubeconfig file to use for CLI requests. - --log-backtrace-at traceLocation when logging hits line file:N, emit a stack trace (default :0) - --log-dir string If non-empty, write log files in this directory - --logtostderr log to standard error instead of files - --match-server-version Require server version to match client version - -n, --namespace string If present, the namespace scope for this CLI request - --password string Password for basic authentication to the API server - --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") - -s, --server string The address and port of the Kubernetes API server - --stderrthreshold severity logs at or above this threshold go to stderr (default 2) - --token string Bearer token for authentication to the API server - --user string The name of the kubeconfig user to use - --username string Username for basic authentication to the API server - -v, --v Level log level for V logs - --vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging -``` - -### SEE ALSO - -* [kubectl alpha](kubectl_alpha.md) - Commands for features in alpha -* [kubectl annotate](kubectl_annotate.md) - Update the annotations on a resource -* [kubectl api-versions](kubectl_api-versions.md) - Print the supported API versions on the server, in the form of "group/version" -* [kubectl apply](kubectl_apply.md) - Apply a configuration to a resource by filename or stdin -* [kubectl attach](kubectl_attach.md) - Attach to a running container -* [kubectl auth](kubectl_auth.md) - Inspect authorization -* [kubectl autoscale](kubectl_autoscale.md) - Auto-scale a Deployment, ReplicaSet, or ReplicationController -* [kubectl certificate](kubectl_certificate.md) - Modify certificate resources. -* [kubectl cluster-info](kubectl_cluster-info.md) - Display cluster info -* [kubectl completion](kubectl_completion.md) - Output shell completion code for the specified shell (bash or zsh) -* [kubectl config](kubectl_config.md) - Modify kubeconfig files -* [kubectl convert](kubectl_convert.md) - Convert config files between different API versions -* [kubectl cordon](kubectl_cordon.md) - Mark node as unschedulable -* [kubectl cp](kubectl_cp.md) - Copy files and directories to and from containers. -* [kubectl create](kubectl_create.md) - Create a resource from a file or from stdin. -* [kubectl delete](kubectl_delete.md) - Delete resources by filenames, stdin, resources and names, or by resources and label selector -* [kubectl describe](kubectl_describe.md) - Show details of a specific resource or group of resources -* [kubectl drain](kubectl_drain.md) - Drain node in preparation for maintenance -* [kubectl edit](kubectl_edit.md) - Edit a resource on the server -* [kubectl exec](kubectl_exec.md) - Execute a command in a container -* [kubectl explain](kubectl_explain.md) - Documentation of resources -* [kubectl expose](kubectl_expose.md) - Take a replication controller, service, deployment or pod and expose it as a new Kubernetes Service -* [kubectl get](kubectl_get.md) - Display one or many resources -* [kubectl label](kubectl_label.md) - Update the labels on a resource -* [kubectl logs](kubectl_logs.md) - Print the logs for a container in a pod -* [kubectl options](kubectl_options.md) - Print the list of flags inherited by all commands -* [kubectl patch](kubectl_patch.md) - Update field(s) of a resource using strategic merge patch -* [kubectl plugin](kubectl_plugin.md) - Runs a command-line plugin -* [kubectl port-forward](kubectl_port-forward.md) - Forward one or more local ports to a pod -* [kubectl proxy](kubectl_proxy.md) - Run a proxy to the Kubernetes API server -* [kubectl replace](kubectl_replace.md) - Replace a resource by filename or stdin -* [kubectl rolling-update](kubectl_rolling-update.md) - Perform a rolling update of the given ReplicationController -* [kubectl rollout](kubectl_rollout.md) - Manage the rollout of a resource -* [kubectl run](kubectl_run.md) - Run a particular image on the cluster -* [kubectl scale](kubectl_scale.md) - Set a new size for a Deployment, ReplicaSet, Replication Controller, or Job -* [kubectl set](kubectl_set.md) - Set specific features on objects -* [kubectl taint](kubectl_taint.md) - Update the taints on one or more nodes -* [kubectl top](kubectl_top.md) - Display Resource (CPU/Memory/Storage) usage. -* [kubectl uncordon](kubectl_uncordon.md) - Mark node as schedulable -* [kubectl version](kubectl_version.md) - Print the client and server version information - -###### Auto generated by spf13/cobra on 25-Mar-2018 diff --git a/docs/reference/generated/kubectl/navData.js b/docs/reference/generated/kubectl/navData.js deleted file mode 100644 index 213410f5107cc..0000000000000 --- a/docs/reference/generated/kubectl/navData.js +++ /dev/null @@ -1 +0,0 @@ -(function(){navData = {"toc":[{"section":"-strong-deprecated-commands-strong-","subsections":[]},{"section":"plugin","subsections":[]},{"section":"version","subsections":[]},{"section":"options","subsections":[]},{"section":"explain","subsections":[]},{"section":"config","subsections":[{"section":"-em-view-em-"},{"section":"-em-use-context-em-"},{"section":"-em-unset-em-"},{"section":"-em-set-credentials-em-"},{"section":"-em-set-context-em-"},{"section":"-em-set-cluster-em-"},{"section":"-em-set-em-"},{"section":"-em-rename-context-em-"},{"section":"-em-get-contexts-em-"},{"section":"-em-get-clusters-em-"},{"section":"-em-delete-context-em-"},{"section":"-em-delete-cluster-em-"},{"section":"-em-current-context-em-"}]},{"section":"completion","subsections":[]},{"section":"alpha","subsections":[{"section":"-em-diff-em-"}]},{"section":"-strong-kubectl-settings-and-usage-strong-","subsections":[]},{"section":"uncordon","subsections":[]},{"section":"taint","subsections":[]},{"section":"drain","subsections":[]},{"section":"cordon","subsections":[]},{"section":"cluster-info","subsections":[{"section":"-em-dump-em-"}]},{"section":"certificate","subsections":[{"section":"-em-deny-em-"},{"section":"-em-approve-em-"}]},{"section":"api-versions","subsections":[]},{"section":"-strong-cluster-management-strong-","subsections":[]},{"section":"top","subsections":[{"section":"-em-pod-em-"},{"section":"-em-node-em-"}]},{"section":"proxy","subsections":[]},{"section":"port-forward","subsections":[]},{"section":"logs","subsections":[]},{"section":"exec","subsections":[]},{"section":"describe","subsections":[]},{"section":"cp","subsections":[]},{"section":"auth","subsections":[{"section":"-em-reconcile-em-"},{"section":"-em-can-i-em-"}]},{"section":"attach","subsections":[]},{"section":"-strong-working-with-apps-strong-","subsections":[]},{"section":"apply","subsections":[{"section":"-em-view-last-applied-em-"},{"section":"-em-set-last-applied-em-"},{"section":"-em-edit-last-applied-em-"}]},{"section":"-strong-declarative-app-management-strong-","subsections":[]},{"section":"set","subsections":[{"section":"-em-subject-em-"},{"section":"-em-serviceaccount-em--1"},{"section":"-em-selector-em-"},{"section":"-em-resources-em-"},{"section":"-em-image-em-"},{"section":"-em-env-em-"}]},{"section":"scale","subsections":[]},{"section":"rollout","subsections":[{"section":"-em-undo-em-"},{"section":"-em-status-em-"},{"section":"-em-resume-em-"},{"section":"-em-pause-em-"},{"section":"-em-history-em-"}]},{"section":"rolling-update","subsections":[]},{"section":"replace","subsections":[]},{"section":"patch","subsections":[]},{"section":"label","subsections":[]},{"section":"get","subsections":[]},{"section":"edit","subsections":[]},{"section":"delete","subsections":[]},{"section":"create","subsections":[{"section":"-em-serviceaccount-em-"},{"section":"-em-service-nodeport-em-"},{"section":"-em-service-loadbalancer-em-"},{"section":"-em-service-externalname-em-"},{"section":"-em-service-clusterip-em-"},{"section":"-em-service-em-"},{"section":"-em-secret-tls-em-"},{"section":"-em-secret-generic-em-"},{"section":"-em-secret-docker-registry-em-"},{"section":"-em-secret-em-"},{"section":"-em-rolebinding-em-"},{"section":"-em-role-em-"},{"section":"-em-quota-em-"},{"section":"-em-priorityclass-em-"},{"section":"-em-poddisruptionbudget-em-"},{"section":"-em-namespace-em-"},{"section":"-em-job-em-"},{"section":"-em-deployment-em-"},{"section":"-em-configmap-em-"},{"section":"-em-clusterrolebinding-em-"},{"section":"-em-clusterrole-em-"}]},{"section":"convert","subsections":[]},{"section":"autoscale","subsections":[]},{"section":"annotate","subsections":[]},{"section":"-strong-app-management-strong-","subsections":[]},{"section":"expose","subsections":[]},{"section":"run-container","subsections":[]},{"section":"run","subsections":[]},{"section":"-strong-getting-started-strong-","subsections":[]}],"flatToc":["-strong-deprecated-commands-strong-","plugin","version","options","explain","-em-view-em-","-em-use-context-em-","-em-unset-em-","-em-set-credentials-em-","-em-set-context-em-","-em-set-cluster-em-","-em-set-em-","-em-rename-context-em-","-em-get-contexts-em-","-em-get-clusters-em-","-em-delete-context-em-","-em-delete-cluster-em-","-em-current-context-em-","config","completion","-em-diff-em-","alpha","-strong-kubectl-settings-and-usage-strong-","uncordon","taint","drain","cordon","-em-dump-em-","cluster-info","-em-deny-em-","-em-approve-em-","certificate","api-versions","-strong-cluster-management-strong-","-em-pod-em-","-em-node-em-","top","proxy","port-forward","logs","exec","describe","cp","-em-reconcile-em-","-em-can-i-em-","auth","attach","-strong-working-with-apps-strong-","-em-view-last-applied-em-","-em-set-last-applied-em-","-em-edit-last-applied-em-","apply","-strong-declarative-app-management-strong-","-em-subject-em-","-em-serviceaccount-em--1","-em-selector-em-","-em-resources-em-","-em-image-em-","-em-env-em-","set","scale","-em-undo-em-","-em-status-em-","-em-resume-em-","-em-pause-em-","-em-history-em-","rollout","rolling-update","replace","patch","label","get","edit","delete","-em-serviceaccount-em-","-em-service-nodeport-em-","-em-service-loadbalancer-em-","-em-service-externalname-em-","-em-service-clusterip-em-","-em-service-em-","-em-secret-tls-em-","-em-secret-generic-em-","-em-secret-docker-registry-em-","-em-secret-em-","-em-rolebinding-em-","-em-role-em-","-em-quota-em-","-em-priorityclass-em-","-em-poddisruptionbudget-em-","-em-namespace-em-","-em-job-em-","-em-deployment-em-","-em-configmap-em-","-em-clusterrolebinding-em-","-em-clusterrole-em-","create","convert","autoscale","annotate","-strong-app-management-strong-","expose","run-container","run","-strong-getting-started-strong-"]};})(); \ No newline at end of file diff --git a/docs/reference/generated/kubectl/node_modules/bootstrap/dist/css/bootstrap.min.css b/docs/reference/generated/kubectl/node_modules/bootstrap/dist/css/bootstrap.min.css deleted file mode 100644 index ed3905e0e0c91..0000000000000 --- a/docs/reference/generated/kubectl/node_modules/bootstrap/dist/css/bootstrap.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/docs/reference/generated/kubectl/node_modules/font-awesome/css/font-awesome.min.css b/docs/reference/generated/kubectl/node_modules/font-awesome/css/font-awesome.min.css deleted file mode 100644 index 540440ce89f2a..0000000000000 --- a/docs/reference/generated/kubectl/node_modules/font-awesome/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/docs/reference/generated/kubectl/node_modules/highlight.js/styles/default.css b/docs/reference/generated/kubectl/node_modules/highlight.js/styles/default.css deleted file mode 100644 index f1bfade31e5dc..0000000000000 --- a/docs/reference/generated/kubectl/node_modules/highlight.js/styles/default.css +++ /dev/null @@ -1,99 +0,0 @@ -/* - -Original highlight.js style (c) Ivan Sagalaev - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #F0F0F0; -} - - -/* Base color: saturation 0; */ - -.hljs, -.hljs-subst { - color: #444; -} - -.hljs-comment { - color: #888888; -} - -.hljs-keyword, -.hljs-attribute, -.hljs-selector-tag, -.hljs-meta-keyword, -.hljs-doctag, -.hljs-name { - font-weight: bold; -} - - -/* User color: hue: 0 */ - -.hljs-type, -.hljs-string, -.hljs-number, -.hljs-selector-id, -.hljs-selector-class, -.hljs-quote, -.hljs-template-tag, -.hljs-deletion { - color: #880000; -} - -.hljs-title, -.hljs-section { - color: #880000; - font-weight: bold; -} - -.hljs-regexp, -.hljs-symbol, -.hljs-variable, -.hljs-template-variable, -.hljs-link, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #BC6060; -} - - -/* Language color: hue: 90; */ - -.hljs-literal { - color: #78A960; -} - -.hljs-built_in, -.hljs-bullet, -.hljs-code, -.hljs-addition { - color: #397300; -} - - -/* Meta color: hue: 200 */ - -.hljs-meta { - color: #1f7199; -} - -.hljs-meta-string { - color: #4d99bf; -} - - -/* Misc effects */ - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/docs/reference/generated/kubectl/node_modules/jquery.scrollto/jquery.scrollTo.min.js b/docs/reference/generated/kubectl/node_modules/jquery.scrollto/jquery.scrollTo.min.js deleted file mode 100644 index 65a020d92ad28..0000000000000 --- a/docs/reference/generated/kubectl/node_modules/jquery.scrollto/jquery.scrollTo.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) 2007-2015 Ariel Flesler - afleslergmailcom | http://flesler.blogspot.com - * Licensed under MIT - * @author Ariel Flesler - * @version 2.1.2 - */ -;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), -a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), -null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" - - - - - - - \ No newline at end of file diff --git a/docs/reference/generated/kubernetes-api/v1.10/navData.js b/docs/reference/generated/kubernetes-api/v1.10/navData.js deleted file mode 100644 index a6a42aef1963d..0000000000000 --- a/docs/reference/generated/kubernetes-api/v1.10/navData.js +++ /dev/null @@ -1 +0,0 @@ -(function(){navData = {"toc":[{"section":"volumeerror-v1alpha1-storage-k8s-io","subsections":[]},{"section":"volumeattachmentsource-v1alpha1-storage-k8s-io","subsections":[]},{"section":"volumeattachment-v1alpha1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-strong--1026","subsections":[{"section":"watch-list-1030"},{"section":"watch-1029"},{"section":"list-1028"},{"section":"read-1027"}]},{"section":"-strong-write-operations-strong--1020","subsections":[{"section":"delete-collection-1025"},{"section":"delete-1024"},{"section":"replace-1023"},{"section":"patch-1022"},{"section":"create-1021"}]}]},{"section":"userinfo-v1beta1-authentication-k8s-io","subsections":[]},{"section":"tokenreview-v1beta1-authentication-k8s-io","subsections":[{"section":"-strong-write-operations-strong--1018","subsections":[{"section":"create-1019"}]}]},{"section":"supplementalgroupsstrategyoptions-v1beta1-policy","subsections":[]},{"section":"subjectrulesreviewstatus-v1beta1-authorization-k8s-io","subsections":[]},{"section":"subjectaccessreview-v1beta1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-strong--1016","subsections":[{"section":"create-1017"}]}]},{"section":"subject-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"subject-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"storageclass-v1beta1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-strong--1011","subsections":[{"section":"watch-list-1015"},{"section":"watch-1014"},{"section":"list-1013"},{"section":"read-1012"}]},{"section":"-strong-write-operations-strong--1005","subsections":[{"section":"delete-collection-1010"},{"section":"delete-1009"},{"section":"replace-1008"},{"section":"patch-1007"},{"section":"create-1006"}]}]},{"section":"statefulsetupdatestrategy-v1beta1-apps","subsections":[]},{"section":"statefulsetupdatestrategy-v1beta2-apps","subsections":[]},{"section":"statefulsetcondition-v1beta1-apps","subsections":[]},{"section":"statefulsetcondition-v1beta2-apps","subsections":[]},{"section":"statefulset-v1beta1-apps","subsections":[{"section":"-strong-misc-operations-strong--1001","subsections":[{"section":"patch-scale-1004"},{"section":"replace-scale-1003"},{"section":"read-scale-1002"}]},{"section":"-strong-status-operations-strong--997","subsections":[{"section":"replace-status-1000"},{"section":"read-status-999"},{"section":"patch-status-998"}]},{"section":"-strong-read-operations-strong--990","subsections":[{"section":"watch-list-all-namespaces-996"},{"section":"watch-list-995"},{"section":"watch-994"},{"section":"list-all-namespaces-993"},{"section":"list-992"},{"section":"read-991"}]},{"section":"-strong-write-operations-strong--984","subsections":[{"section":"delete-collection-989"},{"section":"delete-988"},{"section":"replace-987"},{"section":"patch-986"},{"section":"create-985"}]}]},{"section":"statefulset-v1beta2-apps","subsections":[{"section":"-strong-misc-operations-strong--980","subsections":[{"section":"patch-scale-983"},{"section":"replace-scale-982"},{"section":"read-scale-981"}]},{"section":"-strong-status-operations-strong--976","subsections":[{"section":"replace-status-979"},{"section":"read-status-978"},{"section":"patch-status-977"}]},{"section":"-strong-read-operations-strong--969","subsections":[{"section":"watch-list-all-namespaces-975"},{"section":"watch-list-974"},{"section":"watch-973"},{"section":"list-all-namespaces-972"},{"section":"list-971"},{"section":"read-970"}]},{"section":"-strong-write-operations-strong--963","subsections":[{"section":"delete-collection-968"},{"section":"delete-967"},{"section":"replace-966"},{"section":"patch-965"},{"section":"create-964"}]}]},{"section":"servicereference-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"servicereference-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"selfsubjectrulesreview-v1beta1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-strong--961","subsections":[{"section":"create-962"}]}]},{"section":"selfsubjectaccessreview-v1beta1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-strong--959","subsections":[{"section":"create-960"}]}]},{"section":"scale-v1beta1-extensions","subsections":[]},{"section":"scale-v1beta1-apps","subsections":[]},{"section":"scale-v1beta2-apps","subsections":[]},{"section":"selinuxstrategyoptions-v1beta1-policy","subsections":[]},{"section":"runasuserstrategyoptions-v1beta1-policy","subsections":[]},{"section":"rollingupdatestatefulsetstrategy-v1beta1-apps","subsections":[]},{"section":"rollingupdatestatefulsetstrategy-v1beta2-apps","subsections":[]},{"section":"rollbackconfig-v1beta1-extensions","subsections":[]},{"section":"roleref-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"roleref-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-strong--952","subsections":[{"section":"watch-list-all-namespaces-958"},{"section":"watch-list-957"},{"section":"watch-956"},{"section":"list-all-namespaces-955"},{"section":"list-954"},{"section":"read-953"}]},{"section":"-strong-write-operations-strong--946","subsections":[{"section":"delete-collection-951"},{"section":"delete-950"},{"section":"replace-949"},{"section":"patch-948"},{"section":"create-947"}]}]},{"section":"rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-strong--939","subsections":[{"section":"watch-list-all-namespaces-945"},{"section":"watch-list-944"},{"section":"watch-943"},{"section":"list-all-namespaces-942"},{"section":"list-941"},{"section":"read-940"}]},{"section":"-strong-write-operations-strong--933","subsections":[{"section":"delete-collection-938"},{"section":"delete-937"},{"section":"replace-936"},{"section":"patch-935"},{"section":"create-934"}]}]},{"section":"role-v1alpha1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-strong--926","subsections":[{"section":"watch-list-all-namespaces-932"},{"section":"watch-list-931"},{"section":"watch-930"},{"section":"list-all-namespaces-929"},{"section":"list-928"},{"section":"read-927"}]},{"section":"-strong-write-operations-strong--920","subsections":[{"section":"delete-collection-925"},{"section":"delete-924"},{"section":"replace-923"},{"section":"patch-922"},{"section":"create-921"}]}]},{"section":"role-v1beta1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-strong--913","subsections":[{"section":"watch-list-all-namespaces-919"},{"section":"watch-list-918"},{"section":"watch-917"},{"section":"list-all-namespaces-916"},{"section":"list-915"},{"section":"read-914"}]},{"section":"-strong-write-operations-strong--907","subsections":[{"section":"delete-collection-912"},{"section":"delete-911"},{"section":"replace-910"},{"section":"patch-909"},{"section":"create-908"}]}]},{"section":"resourcerule-v1beta1-authorization-k8s-io","subsections":[]},{"section":"resourceattributes-v1beta1-authorization-k8s-io","subsections":[]},{"section":"replicasetcondition-v1beta1-extensions","subsections":[]},{"section":"replicasetcondition-v1beta2-apps","subsections":[]},{"section":"replicaset-v1beta1-extensions","subsections":[{"section":"-strong-misc-operations-strong--903","subsections":[{"section":"patch-scale-906"},{"section":"replace-scale-905"},{"section":"read-scale-904"}]},{"section":"-strong-status-operations-strong--899","subsections":[{"section":"replace-status-902"},{"section":"read-status-901"},{"section":"patch-status-900"}]},{"section":"-strong-read-operations-strong--892","subsections":[{"section":"watch-list-all-namespaces-898"},{"section":"watch-list-897"},{"section":"watch-896"},{"section":"list-all-namespaces-895"},{"section":"list-894"},{"section":"read-893"}]},{"section":"-strong-write-operations-strong--886","subsections":[{"section":"delete-collection-891"},{"section":"delete-890"},{"section":"replace-889"},{"section":"patch-888"},{"section":"create-887"}]}]},{"section":"replicaset-v1beta2-apps","subsections":[{"section":"-strong-misc-operations-strong--882","subsections":[{"section":"patch-scale-885"},{"section":"replace-scale-884"},{"section":"read-scale-883"}]},{"section":"-strong-status-operations-strong--878","subsections":[{"section":"replace-status-881"},{"section":"read-status-880"},{"section":"patch-status-879"}]},{"section":"-strong-read-operations-strong--871","subsections":[{"section":"watch-list-all-namespaces-877"},{"section":"watch-list-876"},{"section":"watch-875"},{"section":"list-all-namespaces-874"},{"section":"list-873"},{"section":"read-872"}]},{"section":"-strong-write-operations-strong--865","subsections":[{"section":"delete-collection-870"},{"section":"delete-869"},{"section":"replace-868"},{"section":"patch-867"},{"section":"create-866"}]}]},{"section":"policyrule-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"policyrule-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"podsecuritypolicy-v1beta1-policy","subsections":[{"section":"-strong-read-operations-strong--860","subsections":[{"section":"watch-list-864"},{"section":"watch-863"},{"section":"list-862"},{"section":"read-861"}]},{"section":"-strong-write-operations-strong--854","subsections":[{"section":"delete-collection-859"},{"section":"delete-858"},{"section":"replace-857"},{"section":"patch-856"},{"section":"create-855"}]}]},{"section":"nonresourcerule-v1beta1-authorization-k8s-io","subsections":[]},{"section":"nonresourceattributes-v1beta1-authorization-k8s-io","subsections":[]},{"section":"networkpolicyport-v1beta1-extensions","subsections":[]},{"section":"networkpolicypeer-v1beta1-extensions","subsections":[]},{"section":"networkpolicyingressrule-v1beta1-extensions","subsections":[]},{"section":"networkpolicyegressrule-v1beta1-extensions","subsections":[]},{"section":"networkpolicy-v1beta1-extensions","subsections":[{"section":"-strong-read-operations-strong--847","subsections":[{"section":"watch-list-all-namespaces-853"},{"section":"watch-list-852"},{"section":"watch-851"},{"section":"list-all-namespaces-850"},{"section":"list-849"},{"section":"read-848"}]},{"section":"-strong-write-operations-strong--841","subsections":[{"section":"delete-collection-846"},{"section":"delete-845"},{"section":"replace-844"},{"section":"patch-843"},{"section":"create-842"}]}]},{"section":"localsubjectaccessreview-v1beta1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-strong--839","subsections":[{"section":"create-840"}]}]},{"section":"jobtemplatespec-v2alpha1-batch","subsections":[]},{"section":"initializer-v1alpha1-admissionregistration-k8s-io","subsections":[]},{"section":"ipblock-v1beta1-extensions","subsections":[]},{"section":"idrange-v1beta1-policy","subsections":[]},{"section":"hostportrange-v1beta1-policy","subsections":[]},{"section":"horizontalpodautoscaler-v2beta1-autoscaling","subsections":[{"section":"-strong-status-operations-strong--835","subsections":[{"section":"replace-status-838"},{"section":"read-status-837"},{"section":"patch-status-836"}]},{"section":"-strong-read-operations-strong--828","subsections":[{"section":"watch-list-all-namespaces-834"},{"section":"watch-list-833"},{"section":"watch-832"},{"section":"list-all-namespaces-831"},{"section":"list-830"},{"section":"read-829"}]},{"section":"-strong-write-operations-strong--822","subsections":[{"section":"delete-collection-827"},{"section":"delete-826"},{"section":"replace-825"},{"section":"patch-824"},{"section":"create-823"}]}]},{"section":"fsgroupstrategyoptions-v1beta1-policy","subsections":[]},{"section":"eventseries-v1beta1-events-k8s-io","subsections":[]},{"section":"event-v1beta1-events-k8s-io","subsections":[{"section":"-strong-read-operations-strong--815","subsections":[{"section":"watch-list-all-namespaces-821"},{"section":"watch-list-820"},{"section":"watch-819"},{"section":"list-all-namespaces-818"},{"section":"list-817"},{"section":"read-816"}]},{"section":"-strong-write-operations-strong--809","subsections":[{"section":"delete-collection-814"},{"section":"delete-813"},{"section":"replace-812"},{"section":"patch-811"},{"section":"create-810"}]}]},{"section":"deploymentcondition-v1beta1-extensions","subsections":[]},{"section":"deploymentcondition-v1beta1-apps","subsections":[]},{"section":"deploymentcondition-v1beta2-apps","subsections":[]},{"section":"deployment-v1beta1-extensions","subsections":[{"section":"-strong-misc-operations-strong--804","subsections":[{"section":"rollback-808"},{"section":"patch-scale-807"},{"section":"replace-scale-806"},{"section":"read-scale-805"}]},{"section":"-strong-status-operations-strong--800","subsections":[{"section":"replace-status-803"},{"section":"read-status-802"},{"section":"patch-status-801"}]},{"section":"-strong-read-operations-strong--793","subsections":[{"section":"watch-list-all-namespaces-799"},{"section":"watch-list-798"},{"section":"watch-797"},{"section":"list-all-namespaces-796"},{"section":"list-795"},{"section":"read-794"}]},{"section":"-strong-write-operations-strong--787","subsections":[{"section":"delete-collection-792"},{"section":"delete-791"},{"section":"replace-790"},{"section":"patch-789"},{"section":"create-788"}]}]},{"section":"deployment-v1beta1-apps","subsections":[{"section":"-strong-misc-operations-strong--783","subsections":[{"section":"rollback"},{"section":"patch-scale-786"},{"section":"replace-scale-785"},{"section":"read-scale-784"}]},{"section":"-strong-status-operations-strong--779","subsections":[{"section":"replace-status-782"},{"section":"read-status-781"},{"section":"patch-status-780"}]},{"section":"-strong-read-operations-strong--772","subsections":[{"section":"watch-list-all-namespaces-778"},{"section":"watch-list-777"},{"section":"watch-776"},{"section":"list-all-namespaces-775"},{"section":"list-774"},{"section":"read-773"}]},{"section":"-strong-write-operations-strong--766","subsections":[{"section":"delete-collection-771"},{"section":"delete-770"},{"section":"replace-769"},{"section":"patch-768"},{"section":"create-767"}]}]},{"section":"deployment-v1beta2-apps","subsections":[{"section":"-strong-misc-operations-strong--762","subsections":[{"section":"patch-scale-765"},{"section":"replace-scale-764"},{"section":"read-scale-763"}]},{"section":"-strong-status-operations-strong--758","subsections":[{"section":"replace-status-761"},{"section":"read-status-760"},{"section":"patch-status-759"}]},{"section":"-strong-read-operations-strong--751","subsections":[{"section":"watch-list-all-namespaces-757"},{"section":"watch-list-756"},{"section":"watch-755"},{"section":"list-all-namespaces-754"},{"section":"list-753"},{"section":"read-752"}]},{"section":"-strong-write-operations-strong--745","subsections":[{"section":"delete-collection-750"},{"section":"delete-749"},{"section":"replace-748"},{"section":"patch-747"},{"section":"create-746"}]}]},{"section":"daemonsetupdatestrategy-v1beta1-extensions","subsections":[]},{"section":"daemonsetupdatestrategy-v1beta2-apps","subsections":[]},{"section":"daemonsetcondition-v1beta1-extensions","subsections":[]},{"section":"daemonsetcondition-v1beta2-apps","subsections":[]},{"section":"daemonset-v1beta1-extensions","subsections":[{"section":"-strong-status-operations-strong--741","subsections":[{"section":"replace-status-744"},{"section":"read-status-743"},{"section":"patch-status-742"}]},{"section":"-strong-read-operations-strong--734","subsections":[{"section":"watch-list-all-namespaces-740"},{"section":"watch-list-739"},{"section":"watch-738"},{"section":"list-all-namespaces-737"},{"section":"list-736"},{"section":"read-735"}]},{"section":"-strong-write-operations-strong--728","subsections":[{"section":"delete-collection-733"},{"section":"delete-732"},{"section":"replace-731"},{"section":"patch-730"},{"section":"create-729"}]}]},{"section":"daemonset-v1beta2-apps","subsections":[{"section":"-strong-status-operations-strong--724","subsections":[{"section":"replace-status-727"},{"section":"read-status-726"},{"section":"patch-status-725"}]},{"section":"-strong-read-operations-strong--717","subsections":[{"section":"watch-list-all-namespaces-723"},{"section":"watch-list-722"},{"section":"watch-721"},{"section":"list-all-namespaces-720"},{"section":"list-719"},{"section":"read-718"}]},{"section":"-strong-write-operations-strong--711","subsections":[{"section":"delete-collection-716"},{"section":"delete-715"},{"section":"replace-714"},{"section":"patch-713"},{"section":"create-712"}]}]},{"section":"crossversionobjectreference-v2beta1-autoscaling","subsections":[]},{"section":"cronjob-v2alpha1-batch","subsections":[{"section":"-strong-status-operations-strong--707","subsections":[{"section":"replace-status-710"},{"section":"read-status-709"},{"section":"patch-status-708"}]},{"section":"-strong-read-operations-strong--700","subsections":[{"section":"watch-list-all-namespaces-706"},{"section":"watch-list-705"},{"section":"watch-704"},{"section":"list-all-namespaces-703"},{"section":"list-702"},{"section":"read-701"}]},{"section":"-strong-write-operations-strong--694","subsections":[{"section":"delete-collection-699"},{"section":"delete-698"},{"section":"replace-697"},{"section":"patch-696"},{"section":"create-695"}]}]},{"section":"controllerrevision-v1beta1-apps","subsections":[{"section":"-strong-read-operations-strong--687","subsections":[{"section":"watch-list-all-namespaces-693"},{"section":"watch-list-692"},{"section":"watch-691"},{"section":"list-all-namespaces-690"},{"section":"list-689"},{"section":"read-688"}]},{"section":"-strong-write-operations-strong--681","subsections":[{"section":"delete-collection-686"},{"section":"delete-685"},{"section":"replace-684"},{"section":"patch-683"},{"section":"create-682"}]}]},{"section":"controllerrevision-v1beta2-apps","subsections":[{"section":"-strong-read-operations-strong--674","subsections":[{"section":"watch-list-all-namespaces-680"},{"section":"watch-list-679"},{"section":"watch-678"},{"section":"list-all-namespaces-677"},{"section":"list-676"},{"section":"read-675"}]},{"section":"-strong-write-operations-strong--668","subsections":[{"section":"delete-collection-673"},{"section":"delete-672"},{"section":"replace-671"},{"section":"patch-670"},{"section":"create-669"}]}]},{"section":"clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-strong--663","subsections":[{"section":"watch-list-667"},{"section":"watch-666"},{"section":"list-665"},{"section":"read-664"}]},{"section":"-strong-write-operations-strong--657","subsections":[{"section":"delete-collection-662"},{"section":"delete-661"},{"section":"replace-660"},{"section":"patch-659"},{"section":"create-658"}]}]},{"section":"clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-strong--652","subsections":[{"section":"watch-list-656"},{"section":"watch-655"},{"section":"list-654"},{"section":"read-653"}]},{"section":"-strong-write-operations-strong--646","subsections":[{"section":"delete-collection-651"},{"section":"delete-650"},{"section":"replace-649"},{"section":"patch-648"},{"section":"create-647"}]}]},{"section":"clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-strong--641","subsections":[{"section":"watch-list-645"},{"section":"watch-644"},{"section":"list-643"},{"section":"read-642"}]},{"section":"-strong-write-operations-strong--635","subsections":[{"section":"delete-collection-640"},{"section":"delete-639"},{"section":"replace-638"},{"section":"patch-637"},{"section":"create-636"}]}]},{"section":"clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-strong--630","subsections":[{"section":"watch-list-634"},{"section":"watch-633"},{"section":"list-632"},{"section":"read-631"}]},{"section":"-strong-write-operations-strong--624","subsections":[{"section":"delete-collection-629"},{"section":"delete-628"},{"section":"replace-627"},{"section":"patch-626"},{"section":"create-625"}]}]},{"section":"allowedhostpath-v1beta1-policy","subsections":[]},{"section":"allowedflexvolume-v1beta1-policy","subsections":[]},{"section":"aggregationrule-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"aggregationrule-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"apiservicecondition-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"apiservice-v1beta1-apiregistration-k8s-io","subsections":[{"section":"-strong-status-operations-strong--622","subsections":[{"section":"replace-status-623"}]},{"section":"-strong-read-operations-strong--617","subsections":[{"section":"watch-list-621"},{"section":"watch-620"},{"section":"list-619"},{"section":"read-618"}]},{"section":"-strong-write-operations-strong--611","subsections":[{"section":"delete-collection-616"},{"section":"delete-615"},{"section":"replace-614"},{"section":"patch-613"},{"section":"create-612"}]}]},{"section":"-strong-old-api-versions-strong-","subsections":[]},{"section":"-strong-definitions-strong-","subsections":[{"section":"weightedpodaffinityterm-v1-core"},{"section":"webhookclientconfig-v1beta1-admissionregistration"},{"section":"webhook-v1beta1-admissionregistration"},{"section":"watchevent-v1-meta"},{"section":"vspherevirtualdiskvolumesource-v1-core"},{"section":"volumeprojection-v1-core"},{"section":"volumenodeaffinity-v1-core"},{"section":"volumemount-v1-core"},{"section":"volumeerror-v1beta1-storage"},{"section":"volumedevice-v1-core"},{"section":"volumeattachmentsource-v1beta1-storage"},{"section":"userinfo-v1-authentication"},{"section":"toleration-v1-core"},{"section":"time-v1-meta"},{"section":"taint-v1-core"},{"section":"tcpsocketaction-v1-core"},{"section":"supplementalgroupsstrategyoptions-v1beta1-extensions"},{"section":"subjectrulesreviewstatus-v1-authorization"},{"section":"subject-v1-rbac"},{"section":"storageosvolumesource-v1-core"},{"section":"storageospersistentvolumesource-v1-core"},{"section":"statusdetails-v1-meta"},{"section":"statuscause-v1-meta"},{"section":"status-v1-meta"},{"section":"statefulsetupdatestrategy-v1-apps"},{"section":"statefulsetcondition-v1-apps"},{"section":"sessionaffinityconfig-v1-core"},{"section":"servicereference-v1-apiregistration"},{"section":"serviceport-v1-core"},{"section":"serveraddressbyclientcidr-v1-meta"},{"section":"securitycontext-v1-core"},{"section":"secretvolumesource-v1-core"},{"section":"secretreference-v1-core"},{"section":"secretprojection-v1-core"},{"section":"secretkeyselector-v1-core"},{"section":"secretenvsource-v1-core"},{"section":"scaleiovolumesource-v1-core"},{"section":"scaleiopersistentvolumesource-v1-core"},{"section":"scale-v1-autoscaling"},{"section":"selinuxstrategyoptions-v1beta1-extensions"},{"section":"selinuxoptions-v1-core"},{"section":"runasuserstrategyoptions-v1beta1-extensions"},{"section":"rulewithoperations-v1beta1-admissionregistration"},{"section":"rule-v1alpha1-admissionregistration"},{"section":"rollingupdatestatefulsetstrategy-v1-apps"},{"section":"rollbackconfig-v1beta1-apps"},{"section":"roleref-v1-rbac"},{"section":"resourcerule-v1-authorization"},{"section":"resourcerequirements-v1-core"},{"section":"resourcemetricstatus-v2beta1-autoscaling"},{"section":"resourcemetricsource-v2beta1-autoscaling"},{"section":"resourcefieldselector-v1-core"},{"section":"resourceattributes-v1-authorization"},{"section":"replicationcontrollercondition-v1-core"},{"section":"replicasetcondition-v1-apps"},{"section":"rbdvolumesource-v1-core"},{"section":"rbdpersistentvolumesource-v1-core"},{"section":"quobytevolumesource-v1-core"},{"section":"quantity-resource-core"},{"section":"projectedvolumesource-v1-core"},{"section":"probe-v1-core"},{"section":"preferredschedulingterm-v1-core"},{"section":"preconditions-v1-meta"},{"section":"portworxvolumesource-v1-core"},{"section":"policyrule-v1-rbac"},{"section":"podsmetricstatus-v2beta1-autoscaling"},{"section":"podsmetricsource-v2beta1-autoscaling"},{"section":"podsecuritycontext-v1-core"},{"section":"poddnsconfigoption-v1-core"},{"section":"poddnsconfig-v1-core"},{"section":"podcondition-v1-core"},{"section":"podantiaffinity-v1-core"},{"section":"podaffinityterm-v1-core"},{"section":"podaffinity-v1-core"},{"section":"photonpersistentdiskvolumesource-v1-core"},{"section":"persistentvolumeclaimvolumesource-v1-core"},{"section":"persistentvolumeclaimcondition-v1-core"},{"section":"patch-v1-meta"},{"section":"ownerreference-v1-meta"},{"section":"objectreference-v1-core"},{"section":"objectmetricstatus-v2beta1-autoscaling"},{"section":"objectmetricsource-v2beta1-autoscaling"},{"section":"objectmeta-v1-meta"},{"section":"objectfieldselector-v1-core"},{"section":"nonresourcerule-v1-authorization"},{"section":"nonresourceattributes-v1-authorization"},{"section":"nodesysteminfo-v1-core"},{"section":"nodeselectorterm-v1-core"},{"section":"nodeselectorrequirement-v1-core"},{"section":"nodeselector-v1-core"},{"section":"nodedaemonendpoints-v1-core"},{"section":"nodeconfigsource-v1-core"},{"section":"nodecondition-v1-core"},{"section":"nodeaffinity-v1-core"},{"section":"nodeaddress-v1-core"},{"section":"networkpolicyport-v1-networking"},{"section":"networkpolicypeer-v1-networking"},{"section":"networkpolicyingressrule-v1-networking"},{"section":"networkpolicyegressrule-v1-networking"},{"section":"nfsvolumesource-v1-core"},{"section":"microtime-v1-meta"},{"section":"metricstatus-v2beta1-autoscaling"},{"section":"metricspec-v2beta1-autoscaling"},{"section":"localvolumesource-v1-core"},{"section":"localobjectreference-v1-core"},{"section":"loadbalancerstatus-v1-core"},{"section":"loadbalanceringress-v1-core"},{"section":"listmeta-v1-meta"},{"section":"limitrangeitem-v1-core"},{"section":"lifecycle-v1-core"},{"section":"labelselectorrequirement-v1-meta"},{"section":"labelselector-v1-meta"},{"section":"keytopath-v1-core"},{"section":"jobtemplatespec-v1beta1-batch"},{"section":"jobcondition-v1-batch"},{"section":"jsonschemapropsorbool-v1beta1-apiextensions"},{"section":"jsonschemapropsorarray-v1beta1-apiextensions"},{"section":"jsonschemaprops-v1beta1-apiextensions"},{"section":"json-v1beta1-apiextensions"},{"section":"initializers-v1-meta"},{"section":"initializer-v1-meta"},{"section":"ingresstls-v1beta1-extensions"},{"section":"ingressrule-v1beta1-extensions"},{"section":"ingressbackend-v1beta1-extensions"},{"section":"iscsivolumesource-v1-core"},{"section":"iscsipersistentvolumesource-v1-core"},{"section":"ipblock-v1-networking"},{"section":"idrange-v1beta1-extensions"},{"section":"hostportrange-v1beta1-extensions"},{"section":"hostpathvolumesource-v1-core"},{"section":"hostalias-v1-core"},{"section":"horizontalpodautoscalercondition-v2beta1-autoscaling"},{"section":"handler-v1-core"},{"section":"httpingressrulevalue-v1beta1-extensions"},{"section":"httpingresspath-v1beta1-extensions"},{"section":"httpheader-v1-core"},{"section":"httpgetaction-v1-core"},{"section":"groupversionfordiscovery-v1-meta"},{"section":"glusterfsvolumesource-v1-core"},{"section":"gitrepovolumesource-v1-core"},{"section":"gcepersistentdiskvolumesource-v1-core"},{"section":"flockervolumesource-v1-core"},{"section":"flexvolumesource-v1-core"},{"section":"flexpersistentvolumesource-v1-core"},{"section":"fsgroupstrategyoptions-v1beta1-extensions"},{"section":"fcvolumesource-v1-core"},{"section":"externalmetricstatus-v2beta1-autoscaling"},{"section":"externalmetricsource-v2beta1-autoscaling"},{"section":"externaldocumentation-v1beta1-apiextensions"},{"section":"execaction-v1-core"},{"section":"eviction-v1beta1-policy"},{"section":"eventsource-v1-core"},{"section":"eventseries-v1-core"},{"section":"envvarsource-v1-core"},{"section":"envvar-v1-core"},{"section":"envfromsource-v1-core"},{"section":"endpointsubset-v1-core"},{"section":"endpointport-v1-core"},{"section":"endpointaddress-v1-core"},{"section":"emptydirvolumesource-v1-core"},{"section":"downwardapivolumesource-v1-core"},{"section":"downwardapivolumefile-v1-core"},{"section":"downwardapiprojection-v1-core"},{"section":"deploymentcondition-v1-apps"},{"section":"deleteoptions-v1-meta"},{"section":"daemonsetupdatestrategy-v1-apps"},{"section":"daemonsetcondition-v1-apps"},{"section":"daemonendpoint-v1-core"},{"section":"customresourcevalidation-v1beta1-apiextensions"},{"section":"customresourcesubresources-v1beta1-apiextensions"},{"section":"customresourcesubresourcestatus-v1beta1-apiextensions"},{"section":"customresourcesubresourcescale-v1beta1-apiextensions"},{"section":"customresourcedefinitionnames-v1beta1-apiextensions"},{"section":"customresourcedefinitioncondition-v1beta1-apiextensions"},{"section":"crossversionobjectreference-v1-autoscaling"},{"section":"containerstatewaiting-v1-core"},{"section":"containerstateterminated-v1-core"},{"section":"containerstaterunning-v1-core"},{"section":"containerstate-v1-core"},{"section":"containerport-v1-core"},{"section":"containerimage-v1-core"},{"section":"configmapvolumesource-v1-core"},{"section":"configmapprojection-v1-core"},{"section":"configmapkeyselector-v1-core"},{"section":"configmapenvsource-v1-core"},{"section":"componentcondition-v1-core"},{"section":"clientipconfig-v1-core"},{"section":"cindervolumesource-v1-core"},{"section":"certificatesigningrequestcondition-v1beta1-certificates"},{"section":"cephfsvolumesource-v1-core"},{"section":"cephfspersistentvolumesource-v1-core"},{"section":"capabilities-v1-core"},{"section":"csipersistentvolumesource-v1-core"},{"section":"azurefilevolumesource-v1-core"},{"section":"azurefilepersistentvolumesource-v1-core"},{"section":"azurediskvolumesource-v1-core"},{"section":"attachedvolume-v1-core"},{"section":"allowedhostpath-v1beta1-extensions"},{"section":"allowedflexvolume-v1beta1-extensions"},{"section":"aggregationrule-v1-rbac"},{"section":"affinity-v1-core"},{"section":"awselasticblockstorevolumesource-v1-core"},{"section":"apiversions-v1-meta"},{"section":"apiservicecondition-v1-apiregistration"},{"section":"apiresource-v1-meta"},{"section":"apigroup-v1-meta"}]},{"section":"networkpolicy-v1-networking-k8s-io","subsections":[{"section":"-strong-read-operations-strong--604","subsections":[{"section":"watch-list-all-namespaces-610"},{"section":"watch-list-609"},{"section":"watch-608"},{"section":"list-all-namespaces-607"},{"section":"list-606"},{"section":"read-605"}]},{"section":"-strong-write-operations-strong--598","subsections":[{"section":"delete-collection-603"},{"section":"delete-602"},{"section":"replace-601"},{"section":"patch-600"},{"section":"create-599"}]}]},{"section":"tokenreview-v1-authentication-k8s-io","subsections":[{"section":"-strong-write-operations-strong--596","subsections":[{"section":"create-597"}]}]},{"section":"subjectaccessreview-v1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-strong--594","subsections":[{"section":"create-595"}]}]},{"section":"serviceaccount-v1-core","subsections":[{"section":"-strong-read-operations-strong--587","subsections":[{"section":"watch-list-all-namespaces-593"},{"section":"watch-list-592"},{"section":"watch-591"},{"section":"list-all-namespaces-590"},{"section":"list-589"},{"section":"read-588"}]},{"section":"-strong-write-operations-strong--581","subsections":[{"section":"delete-collection-586"},{"section":"delete-585"},{"section":"replace-584"},{"section":"patch-583"},{"section":"create-582"}]}]},{"section":"selfsubjectrulesreview-v1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-strong--579","subsections":[{"section":"create-580"}]}]},{"section":"selfsubjectaccessreview-v1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-strong--577","subsections":[{"section":"create-578"}]}]},{"section":"rolebinding-v1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-strong--570","subsections":[{"section":"watch-list-all-namespaces-576"},{"section":"watch-list-575"},{"section":"watch-574"},{"section":"list-all-namespaces-573"},{"section":"list-572"},{"section":"read-571"}]},{"section":"-strong-write-operations-strong--564","subsections":[{"section":"delete-collection-569"},{"section":"delete-568"},{"section":"replace-567"},{"section":"patch-566"},{"section":"create-565"}]}]},{"section":"role-v1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-strong--557","subsections":[{"section":"watch-list-all-namespaces-563"},{"section":"watch-list-562"},{"section":"watch-561"},{"section":"list-all-namespaces-560"},{"section":"list-559"},{"section":"read-558"}]},{"section":"-strong-write-operations-strong--551","subsections":[{"section":"delete-collection-556"},{"section":"delete-555"},{"section":"replace-554"},{"section":"patch-553"},{"section":"create-552"}]}]},{"section":"resourcequota-v1-core","subsections":[{"section":"-strong-status-operations-strong--547","subsections":[{"section":"replace-status-550"},{"section":"read-status-549"},{"section":"patch-status-548"}]},{"section":"-strong-read-operations-strong--540","subsections":[{"section":"watch-list-all-namespaces-546"},{"section":"watch-list-545"},{"section":"watch-544"},{"section":"list-all-namespaces-543"},{"section":"list-542"},{"section":"read-541"}]},{"section":"-strong-write-operations-strong--534","subsections":[{"section":"delete-collection-539"},{"section":"delete-538"},{"section":"replace-537"},{"section":"patch-536"},{"section":"create-535"}]}]},{"section":"persistentvolume-v1-core","subsections":[{"section":"-strong-status-operations-strong--530","subsections":[{"section":"replace-status-533"},{"section":"read-status-532"},{"section":"patch-status-531"}]},{"section":"-strong-read-operations-strong--525","subsections":[{"section":"watch-list-529"},{"section":"watch-528"},{"section":"list-527"},{"section":"read-526"}]},{"section":"-strong-write-operations-strong--519","subsections":[{"section":"delete-collection-524"},{"section":"delete-523"},{"section":"replace-522"},{"section":"patch-521"},{"section":"create-520"}]}]},{"section":"node-v1-core","subsections":[{"section":"-strong-proxy-operations-strong--508","subsections":[{"section":"replace-connect-proxy-path-518"},{"section":"replace-connect-proxy-517"},{"section":"head-connect-proxy-path-516"},{"section":"head-connect-proxy-515"},{"section":"get-connect-proxy-path-514"},{"section":"get-connect-proxy-513"},{"section":"delete-connect-proxy-path-512"},{"section":"delete-connect-proxy-511"},{"section":"create-connect-proxy-path-510"},{"section":"create-connect-proxy-509"}]},{"section":"-strong-status-operations-strong--504","subsections":[{"section":"replace-status-507"},{"section":"read-status-506"},{"section":"patch-status-505"}]},{"section":"-strong-read-operations-strong--499","subsections":[{"section":"watch-list-503"},{"section":"watch-502"},{"section":"list-501"},{"section":"read-500"}]},{"section":"-strong-write-operations-strong--493","subsections":[{"section":"delete-collection-498"},{"section":"delete-497"},{"section":"replace-496"},{"section":"patch-495"},{"section":"create-494"}]}]},{"section":"namespace-v1-core","subsections":[{"section":"-strong-status-operations-strong--489","subsections":[{"section":"replace-status-492"},{"section":"read-status-491"},{"section":"patch-status-490"}]},{"section":"-strong-read-operations-strong--484","subsections":[{"section":"watch-list-488"},{"section":"watch-487"},{"section":"list-486"},{"section":"read-485"}]},{"section":"-strong-write-operations-strong--479","subsections":[{"section":"delete-483"},{"section":"replace-482"},{"section":"patch-481"},{"section":"create-480"}]}]},{"section":"localsubjectaccessreview-v1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-strong--477","subsections":[{"section":"create-478"}]}]},{"section":"componentstatus-v1-core","subsections":[{"section":"-strong-read-operations-strong--474","subsections":[{"section":"list-476"},{"section":"read-475"}]}]},{"section":"clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-strong--469","subsections":[{"section":"watch-list-473"},{"section":"watch-472"},{"section":"list-471"},{"section":"read-470"}]},{"section":"-strong-write-operations-strong--463","subsections":[{"section":"delete-collection-468"},{"section":"delete-467"},{"section":"replace-466"},{"section":"patch-465"},{"section":"create-464"}]}]},{"section":"clusterrole-v1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-strong--458","subsections":[{"section":"watch-list-462"},{"section":"watch-461"},{"section":"list-460"},{"section":"read-459"}]},{"section":"-strong-write-operations-strong--452","subsections":[{"section":"delete-collection-457"},{"section":"delete-456"},{"section":"replace-455"},{"section":"patch-454"},{"section":"create-453"}]}]},{"section":"certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[{"section":"-strong-status-operations-strong--450","subsections":[{"section":"replace-status-451"}]},{"section":"-strong-read-operations-strong--445","subsections":[{"section":"watch-list-449"},{"section":"watch-448"},{"section":"list-447"},{"section":"read-446"}]},{"section":"-strong-write-operations-strong--439","subsections":[{"section":"delete-collection-444"},{"section":"delete-443"},{"section":"replace-442"},{"section":"patch-441"},{"section":"create-440"}]}]},{"section":"binding-v1-core","subsections":[{"section":"-strong-write-operations-strong--437","subsections":[{"section":"create-438"}]}]},{"section":"apiservice-v1-apiregistration-k8s-io","subsections":[{"section":"-strong-status-operations-strong--435","subsections":[{"section":"replace-status-436"}]},{"section":"-strong-read-operations-strong--430","subsections":[{"section":"watch-list-434"},{"section":"watch-433"},{"section":"list-432"},{"section":"read-431"}]},{"section":"-strong-write-operations-strong--424","subsections":[{"section":"delete-collection-429"},{"section":"delete-428"},{"section":"replace-427"},{"section":"patch-426"},{"section":"create-425"}]}]},{"section":"-strong-cluster-strong-","subsections":[]},{"section":"podsecuritypolicy-v1beta1-extensions","subsections":[{"section":"-strong-read-operations-strong--419","subsections":[{"section":"watch-list-423"},{"section":"watch-422"},{"section":"list-421"},{"section":"read-420"}]},{"section":"-strong-write-operations-strong--413","subsections":[{"section":"delete-collection-418"},{"section":"delete-417"},{"section":"replace-416"},{"section":"patch-415"},{"section":"create-414"}]}]},{"section":"podpreset-v1alpha1-settings-k8s-io","subsections":[{"section":"-strong-read-operations-strong--406","subsections":[{"section":"watch-list-all-namespaces-412"},{"section":"watch-list-411"},{"section":"watch-410"},{"section":"list-all-namespaces-409"},{"section":"list-408"},{"section":"read-407"}]},{"section":"-strong-write-operations-strong--400","subsections":[{"section":"delete-collection-405"},{"section":"delete-404"},{"section":"replace-403"},{"section":"patch-402"},{"section":"create-401"}]}]},{"section":"priorityclass-v1alpha1-scheduling-k8s-io","subsections":[{"section":"-strong-read-operations-strong--395","subsections":[{"section":"watch-list-399"},{"section":"watch-398"},{"section":"list-397"},{"section":"read-396"}]},{"section":"-strong-write-operations-strong--389","subsections":[{"section":"delete-collection-394"},{"section":"delete-393"},{"section":"replace-392"},{"section":"patch-391"},{"section":"create-390"}]}]},{"section":"poddisruptionbudget-v1beta1-policy","subsections":[{"section":"-strong-status-operations-strong--385","subsections":[{"section":"replace-status-388"},{"section":"read-status-387"},{"section":"patch-status-386"}]},{"section":"-strong-read-operations-strong--378","subsections":[{"section":"watch-list-all-namespaces-384"},{"section":"watch-list-383"},{"section":"watch-382"},{"section":"list-all-namespaces-381"},{"section":"list-380"},{"section":"read-379"}]},{"section":"-strong-write-operations-strong--372","subsections":[{"section":"delete-collection-377"},{"section":"delete-376"},{"section":"replace-375"},{"section":"patch-374"},{"section":"create-373"}]}]},{"section":"podtemplate-v1-core","subsections":[{"section":"-strong-read-operations-strong--365","subsections":[{"section":"watch-list-all-namespaces-371"},{"section":"watch-list-370"},{"section":"watch-369"},{"section":"list-all-namespaces-368"},{"section":"list-367"},{"section":"read-366"}]},{"section":"-strong-write-operations-strong--359","subsections":[{"section":"delete-collection-364"},{"section":"delete-363"},{"section":"replace-362"},{"section":"patch-361"},{"section":"create-360"}]}]},{"section":"validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[{"section":"-strong-read-operations-strong--354","subsections":[{"section":"watch-list-358"},{"section":"watch-357"},{"section":"list-356"},{"section":"read-355"}]},{"section":"-strong-write-operations-strong--348","subsections":[{"section":"delete-collection-353"},{"section":"delete-352"},{"section":"replace-351"},{"section":"patch-350"},{"section":"create-349"}]}]},{"section":"mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[{"section":"-strong-read-operations-strong--343","subsections":[{"section":"watch-list-347"},{"section":"watch-346"},{"section":"list-345"},{"section":"read-344"}]},{"section":"-strong-write-operations-strong--337","subsections":[{"section":"delete-collection-342"},{"section":"delete-341"},{"section":"replace-340"},{"section":"patch-339"},{"section":"create-338"}]}]},{"section":"initializerconfiguration-v1alpha1-admissionregistration-k8s-io","subsections":[{"section":"-strong-read-operations-strong--332","subsections":[{"section":"watch-list-336"},{"section":"watch-335"},{"section":"list-334"},{"section":"read-333"}]},{"section":"-strong-write-operations-strong--326","subsections":[{"section":"delete-collection-331"},{"section":"delete-330"},{"section":"replace-329"},{"section":"patch-328"},{"section":"create-327"}]}]},{"section":"horizontalpodautoscaler-v1-autoscaling","subsections":[{"section":"-strong-status-operations-strong--322","subsections":[{"section":"replace-status-325"},{"section":"read-status-324"},{"section":"patch-status-323"}]},{"section":"-strong-read-operations-strong--315","subsections":[{"section":"watch-list-all-namespaces-321"},{"section":"watch-list-320"},{"section":"watch-319"},{"section":"list-all-namespaces-318"},{"section":"list-317"},{"section":"read-316"}]},{"section":"-strong-write-operations-strong--309","subsections":[{"section":"delete-collection-314"},{"section":"delete-313"},{"section":"replace-312"},{"section":"patch-311"},{"section":"create-310"}]}]},{"section":"limitrange-v1-core","subsections":[{"section":"-strong-read-operations-strong--302","subsections":[{"section":"watch-list-all-namespaces-308"},{"section":"watch-list-307"},{"section":"watch-306"},{"section":"list-all-namespaces-305"},{"section":"list-304"},{"section":"read-303"}]},{"section":"-strong-write-operations-strong--296","subsections":[{"section":"delete-collection-301"},{"section":"delete-300"},{"section":"replace-299"},{"section":"patch-298"},{"section":"create-297"}]}]},{"section":"event-v1-core","subsections":[{"section":"-strong-read-operations-strong--289","subsections":[{"section":"watch-list-all-namespaces-295"},{"section":"watch-list-294"},{"section":"watch-293"},{"section":"list-all-namespaces-292"},{"section":"list-291"},{"section":"read-290"}]},{"section":"-strong-write-operations-strong--283","subsections":[{"section":"delete-collection-288"},{"section":"delete-287"},{"section":"replace-286"},{"section":"patch-285"},{"section":"create-284"}]}]},{"section":"customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[{"section":"-strong-status-operations-strong--281","subsections":[{"section":"replace-status-282"}]},{"section":"-strong-read-operations-strong--276","subsections":[{"section":"watch-list-280"},{"section":"watch-279"},{"section":"list-278"},{"section":"read-277"}]},{"section":"-strong-write-operations-strong--270","subsections":[{"section":"delete-collection-275"},{"section":"delete-274"},{"section":"replace-273"},{"section":"patch-272"},{"section":"create-271"}]}]},{"section":"controllerrevision-v1-apps","subsections":[{"section":"-strong-read-operations-strong--263","subsections":[{"section":"watch-list-all-namespaces-269"},{"section":"watch-list-268"},{"section":"watch-267"},{"section":"list-all-namespaces-266"},{"section":"list-265"},{"section":"read-264"}]},{"section":"-strong-write-operations-strong--257","subsections":[{"section":"delete-collection-262"},{"section":"delete-261"},{"section":"replace-260"},{"section":"patch-259"},{"section":"create-258"}]}]},{"section":"-strong-metadata-strong-","subsections":[]},{"section":"volumeattachment-v1beta1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-strong--252","subsections":[{"section":"watch-list-256"},{"section":"watch-255"},{"section":"list-254"},{"section":"read-253"}]},{"section":"-strong-write-operations-strong--246","subsections":[{"section":"delete-collection-251"},{"section":"delete-250"},{"section":"replace-249"},{"section":"patch-248"},{"section":"create-247"}]}]},{"section":"volume-v1-core","subsections":[]},{"section":"storageclass-v1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-strong--241","subsections":[{"section":"watch-list-245"},{"section":"watch-244"},{"section":"list-243"},{"section":"read-242"}]},{"section":"-strong-write-operations-strong--235","subsections":[{"section":"delete-collection-240"},{"section":"delete-239"},{"section":"replace-238"},{"section":"patch-237"},{"section":"create-236"}]}]},{"section":"persistentvolumeclaim-v1-core","subsections":[{"section":"-strong-status-operations-strong--231","subsections":[{"section":"replace-status-234"},{"section":"read-status-233"},{"section":"patch-status-232"}]},{"section":"-strong-read-operations-strong--224","subsections":[{"section":"watch-list-all-namespaces-230"},{"section":"watch-list-229"},{"section":"watch-228"},{"section":"list-all-namespaces-227"},{"section":"list-226"},{"section":"read-225"}]},{"section":"-strong-write-operations-strong--218","subsections":[{"section":"delete-collection-223"},{"section":"delete-222"},{"section":"replace-221"},{"section":"patch-220"},{"section":"create-219"}]}]},{"section":"secret-v1-core","subsections":[{"section":"-strong-read-operations-strong--211","subsections":[{"section":"watch-list-all-namespaces-217"},{"section":"watch-list-216"},{"section":"watch-215"},{"section":"list-all-namespaces-214"},{"section":"list-213"},{"section":"read-212"}]},{"section":"-strong-write-operations-strong--205","subsections":[{"section":"delete-collection-210"},{"section":"delete-209"},{"section":"replace-208"},{"section":"patch-207"},{"section":"create-206"}]}]},{"section":"configmap-v1-core","subsections":[{"section":"-strong-read-operations-strong--198","subsections":[{"section":"watch-list-all-namespaces-204"},{"section":"watch-list-203"},{"section":"watch-202"},{"section":"list-all-namespaces-201"},{"section":"list-200"},{"section":"read-199"}]},{"section":"-strong-write-operations-strong--192","subsections":[{"section":"delete-collection-197"},{"section":"delete-196"},{"section":"replace-195"},{"section":"patch-194"},{"section":"create-193"}]}]},{"section":"-strong-config-storage-strong-","subsections":[]},{"section":"service-v1-core","subsections":[{"section":"-strong-proxy-operations-strong--181","subsections":[{"section":"replace-connect-proxy-path-191"},{"section":"replace-connect-proxy-190"},{"section":"head-connect-proxy-path-189"},{"section":"head-connect-proxy-188"},{"section":"get-connect-proxy-path-187"},{"section":"get-connect-proxy-186"},{"section":"delete-connect-proxy-path-185"},{"section":"delete-connect-proxy-184"},{"section":"create-connect-proxy-path-183"},{"section":"create-connect-proxy-182"}]},{"section":"-strong-status-operations-strong--177","subsections":[{"section":"replace-status-180"},{"section":"read-status-179"},{"section":"patch-status-178"}]},{"section":"-strong-read-operations-strong--170","subsections":[{"section":"watch-list-all-namespaces-176"},{"section":"watch-list-175"},{"section":"watch-174"},{"section":"list-all-namespaces-173"},{"section":"list-172"},{"section":"read-171"}]},{"section":"-strong-write-operations-strong--165","subsections":[{"section":"delete-169"},{"section":"replace-168"},{"section":"patch-167"},{"section":"create-166"}]}]},{"section":"ingress-v1beta1-extensions","subsections":[{"section":"-strong-status-operations-strong--161","subsections":[{"section":"replace-status-164"},{"section":"read-status-163"},{"section":"patch-status-162"}]},{"section":"-strong-read-operations-strong--154","subsections":[{"section":"watch-list-all-namespaces-160"},{"section":"watch-list-159"},{"section":"watch-158"},{"section":"list-all-namespaces-157"},{"section":"list-156"},{"section":"read-155"}]},{"section":"-strong-write-operations-strong--148","subsections":[{"section":"delete-collection-153"},{"section":"delete-152"},{"section":"replace-151"},{"section":"patch-150"},{"section":"create-149"}]}]},{"section":"endpoints-v1-core","subsections":[{"section":"-strong-read-operations-strong--141","subsections":[{"section":"watch-list-all-namespaces-147"},{"section":"watch-list-146"},{"section":"watch-145"},{"section":"list-all-namespaces-144"},{"section":"list-143"},{"section":"read-142"}]},{"section":"-strong-write-operations-strong--135","subsections":[{"section":"delete-collection-140"},{"section":"delete-139"},{"section":"replace-138"},{"section":"patch-137"},{"section":"create-136"}]}]},{"section":"-strong-discovery-load-balancing-strong-","subsections":[]},{"section":"statefulset-v1-apps","subsections":[{"section":"-strong-misc-operations-strong--131","subsections":[{"section":"patch-scale-134"},{"section":"replace-scale-133"},{"section":"read-scale-132"}]},{"section":"-strong-status-operations-strong--127","subsections":[{"section":"replace-status-130"},{"section":"read-status-129"},{"section":"patch-status-128"}]},{"section":"-strong-read-operations-strong--120","subsections":[{"section":"watch-list-all-namespaces-126"},{"section":"watch-list-125"},{"section":"watch-124"},{"section":"list-all-namespaces-123"},{"section":"list-122"},{"section":"read-121"}]},{"section":"-strong-write-operations-strong--114","subsections":[{"section":"delete-collection-119"},{"section":"delete-118"},{"section":"replace-117"},{"section":"patch-116"},{"section":"create-115"}]}]},{"section":"replicationcontroller-v1-core","subsections":[{"section":"-strong-misc-operations-strong--110","subsections":[{"section":"patch-scale-113"},{"section":"replace-scale-112"},{"section":"read-scale-111"}]},{"section":"-strong-status-operations-strong--106","subsections":[{"section":"replace-status-109"},{"section":"read-status-108"},{"section":"patch-status-107"}]},{"section":"-strong-read-operations-strong--99","subsections":[{"section":"watch-list-all-namespaces-105"},{"section":"watch-list-104"},{"section":"watch-103"},{"section":"list-all-namespaces-102"},{"section":"list-101"},{"section":"read-100"}]},{"section":"-strong-write-operations-strong--93","subsections":[{"section":"delete-collection-98"},{"section":"delete-97"},{"section":"replace-96"},{"section":"patch-95"},{"section":"create-94"}]}]},{"section":"replicaset-v1-apps","subsections":[{"section":"-strong-misc-operations-strong--89","subsections":[{"section":"patch-scale-92"},{"section":"replace-scale-91"},{"section":"read-scale-90"}]},{"section":"-strong-status-operations-strong--85","subsections":[{"section":"replace-status-88"},{"section":"read-status-87"},{"section":"patch-status-86"}]},{"section":"-strong-read-operations-strong--78","subsections":[{"section":"watch-list-all-namespaces-84"},{"section":"watch-list-83"},{"section":"watch-82"},{"section":"list-all-namespaces-81"},{"section":"list-80"},{"section":"read-79"}]},{"section":"-strong-write-operations-strong--72","subsections":[{"section":"delete-collection-77"},{"section":"delete-76"},{"section":"replace-75"},{"section":"patch-74"},{"section":"create-73"}]}]},{"section":"pod-v1-core","subsections":[{"section":"-strong-misc-operations-strong--71","subsections":[{"section":"read-log"}]},{"section":"-strong-proxy-operations-strong-","subsections":[{"section":"replace-connect-proxy-path"},{"section":"replace-connect-proxy"},{"section":"head-connect-proxy-path"},{"section":"head-connect-proxy"},{"section":"get-connect-proxy-path"},{"section":"get-connect-proxy"},{"section":"get-connect-portforward"},{"section":"delete-connect-proxy-path"},{"section":"delete-connect-proxy"},{"section":"create-connect-proxy-path"},{"section":"create-connect-proxy"},{"section":"create-connect-portforward"}]},{"section":"-strong-status-operations-strong--67","subsections":[{"section":"replace-status-70"},{"section":"read-status-69"},{"section":"patch-status-68"}]},{"section":"-strong-read-operations-strong--60","subsections":[{"section":"watch-list-all-namespaces-66"},{"section":"watch-list-65"},{"section":"watch-64"},{"section":"list-all-namespaces-63"},{"section":"list-62"},{"section":"read-61"}]},{"section":"-strong-write-operations-strong--54","subsections":[{"section":"delete-collection-59"},{"section":"delete-58"},{"section":"replace-57"},{"section":"patch-56"},{"section":"create-eviction"},{"section":"create-55"}]}]},{"section":"job-v1-batch","subsections":[{"section":"-strong-status-operations-strong--50","subsections":[{"section":"replace-status-53"},{"section":"read-status-52"},{"section":"patch-status-51"}]},{"section":"-strong-read-operations-strong--43","subsections":[{"section":"watch-list-all-namespaces-49"},{"section":"watch-list-48"},{"section":"watch-47"},{"section":"list-all-namespaces-46"},{"section":"list-45"},{"section":"read-44"}]},{"section":"-strong-write-operations-strong--37","subsections":[{"section":"delete-collection-42"},{"section":"delete-41"},{"section":"replace-40"},{"section":"patch-39"},{"section":"create-38"}]}]},{"section":"deployment-v1-apps","subsections":[{"section":"-strong-misc-operations-strong-","subsections":[{"section":"patch-scale"},{"section":"replace-scale"},{"section":"read-scale"}]},{"section":"-strong-status-operations-strong--33","subsections":[{"section":"replace-status-36"},{"section":"read-status-35"},{"section":"patch-status-34"}]},{"section":"-strong-read-operations-strong--26","subsections":[{"section":"watch-list-all-namespaces-32"},{"section":"watch-list-31"},{"section":"watch-30"},{"section":"list-all-namespaces-29"},{"section":"list-28"},{"section":"read-27"}]},{"section":"-strong-write-operations-strong--20","subsections":[{"section":"delete-collection-25"},{"section":"delete-24"},{"section":"replace-23"},{"section":"patch-22"},{"section":"create-21"}]}]},{"section":"daemonset-v1-apps","subsections":[{"section":"-strong-status-operations-strong--16","subsections":[{"section":"replace-status-19"},{"section":"read-status-18"},{"section":"patch-status-17"}]},{"section":"-strong-read-operations-strong--9","subsections":[{"section":"watch-list-all-namespaces-15"},{"section":"watch-list-14"},{"section":"watch-13"},{"section":"list-all-namespaces-12"},{"section":"list-11"},{"section":"read-10"}]},{"section":"-strong-write-operations-strong--3","subsections":[{"section":"delete-collection-8"},{"section":"delete-7"},{"section":"replace-6"},{"section":"patch-5"},{"section":"create-4"}]}]},{"section":"cronjob-v1beta1-batch","subsections":[{"section":"-strong-status-operations-strong-","subsections":[{"section":"replace-status"},{"section":"read-status"},{"section":"patch-status"}]},{"section":"-strong-read-operations-strong-","subsections":[{"section":"watch-list-all-namespaces"},{"section":"watch-list"},{"section":"watch"},{"section":"list-all-namespaces"},{"section":"list"},{"section":"read-2"}]},{"section":"-strong-write-operations-strong-","subsections":[{"section":"delete-collection"},{"section":"delete-1"},{"section":"replace"},{"section":"patch"},{"section":"create"}]}]},{"section":"container-v1-core","subsections":[]},{"section":"-strong-workloads-strong-","subsections":[]},{"section":"-strong-api-overview-strong-","subsections":[{"section":"resource-operations"},{"section":"resource-objects"},{"section":"resource-categories"}]}],"flatToc":["volumeerror-v1alpha1-storage-k8s-io","volumeattachmentsource-v1alpha1-storage-k8s-io","watch-list-1030","watch-1029","list-1028","read-1027","-strong-read-operations-strong--1026","delete-collection-1025","delete-1024","replace-1023","patch-1022","create-1021","-strong-write-operations-strong--1020","volumeattachment-v1alpha1-storage-k8s-io","userinfo-v1beta1-authentication-k8s-io","create-1019","-strong-write-operations-strong--1018","tokenreview-v1beta1-authentication-k8s-io","supplementalgroupsstrategyoptions-v1beta1-policy","subjectrulesreviewstatus-v1beta1-authorization-k8s-io","create-1017","-strong-write-operations-strong--1016","subjectaccessreview-v1beta1-authorization-k8s-io","subject-v1alpha1-rbac-authorization-k8s-io","subject-v1beta1-rbac-authorization-k8s-io","watch-list-1015","watch-1014","list-1013","read-1012","-strong-read-operations-strong--1011","delete-collection-1010","delete-1009","replace-1008","patch-1007","create-1006","-strong-write-operations-strong--1005","storageclass-v1beta1-storage-k8s-io","statefulsetupdatestrategy-v1beta1-apps","statefulsetupdatestrategy-v1beta2-apps","statefulsetcondition-v1beta1-apps","statefulsetcondition-v1beta2-apps","patch-scale-1004","replace-scale-1003","read-scale-1002","-strong-misc-operations-strong--1001","replace-status-1000","read-status-999","patch-status-998","-strong-status-operations-strong--997","watch-list-all-namespaces-996","watch-list-995","watch-994","list-all-namespaces-993","list-992","read-991","-strong-read-operations-strong--990","delete-collection-989","delete-988","replace-987","patch-986","create-985","-strong-write-operations-strong--984","statefulset-v1beta1-apps","patch-scale-983","replace-scale-982","read-scale-981","-strong-misc-operations-strong--980","replace-status-979","read-status-978","patch-status-977","-strong-status-operations-strong--976","watch-list-all-namespaces-975","watch-list-974","watch-973","list-all-namespaces-972","list-971","read-970","-strong-read-operations-strong--969","delete-collection-968","delete-967","replace-966","patch-965","create-964","-strong-write-operations-strong--963","statefulset-v1beta2-apps","servicereference-v1beta1-apiregistration-k8s-io","servicereference-v1beta1-admissionregistration-k8s-io","create-962","-strong-write-operations-strong--961","selfsubjectrulesreview-v1beta1-authorization-k8s-io","create-960","-strong-write-operations-strong--959","selfsubjectaccessreview-v1beta1-authorization-k8s-io","scale-v1beta1-extensions","scale-v1beta1-apps","scale-v1beta2-apps","selinuxstrategyoptions-v1beta1-policy","runasuserstrategyoptions-v1beta1-policy","rollingupdatestatefulsetstrategy-v1beta1-apps","rollingupdatestatefulsetstrategy-v1beta2-apps","rollbackconfig-v1beta1-extensions","roleref-v1alpha1-rbac-authorization-k8s-io","roleref-v1beta1-rbac-authorization-k8s-io","watch-list-all-namespaces-958","watch-list-957","watch-956","list-all-namespaces-955","list-954","read-953","-strong-read-operations-strong--952","delete-collection-951","delete-950","replace-949","patch-948","create-947","-strong-write-operations-strong--946","rolebinding-v1alpha1-rbac-authorization-k8s-io","watch-list-all-namespaces-945","watch-list-944","watch-943","list-all-namespaces-942","list-941","read-940","-strong-read-operations-strong--939","delete-collection-938","delete-937","replace-936","patch-935","create-934","-strong-write-operations-strong--933","rolebinding-v1beta1-rbac-authorization-k8s-io","watch-list-all-namespaces-932","watch-list-931","watch-930","list-all-namespaces-929","list-928","read-927","-strong-read-operations-strong--926","delete-collection-925","delete-924","replace-923","patch-922","create-921","-strong-write-operations-strong--920","role-v1alpha1-rbac-authorization-k8s-io","watch-list-all-namespaces-919","watch-list-918","watch-917","list-all-namespaces-916","list-915","read-914","-strong-read-operations-strong--913","delete-collection-912","delete-911","replace-910","patch-909","create-908","-strong-write-operations-strong--907","role-v1beta1-rbac-authorization-k8s-io","resourcerule-v1beta1-authorization-k8s-io","resourceattributes-v1beta1-authorization-k8s-io","replicasetcondition-v1beta1-extensions","replicasetcondition-v1beta2-apps","patch-scale-906","replace-scale-905","read-scale-904","-strong-misc-operations-strong--903","replace-status-902","read-status-901","patch-status-900","-strong-status-operations-strong--899","watch-list-all-namespaces-898","watch-list-897","watch-896","list-all-namespaces-895","list-894","read-893","-strong-read-operations-strong--892","delete-collection-891","delete-890","replace-889","patch-888","create-887","-strong-write-operations-strong--886","replicaset-v1beta1-extensions","patch-scale-885","replace-scale-884","read-scale-883","-strong-misc-operations-strong--882","replace-status-881","read-status-880","patch-status-879","-strong-status-operations-strong--878","watch-list-all-namespaces-877","watch-list-876","watch-875","list-all-namespaces-874","list-873","read-872","-strong-read-operations-strong--871","delete-collection-870","delete-869","replace-868","patch-867","create-866","-strong-write-operations-strong--865","replicaset-v1beta2-apps","policyrule-v1alpha1-rbac-authorization-k8s-io","policyrule-v1beta1-rbac-authorization-k8s-io","watch-list-864","watch-863","list-862","read-861","-strong-read-operations-strong--860","delete-collection-859","delete-858","replace-857","patch-856","create-855","-strong-write-operations-strong--854","podsecuritypolicy-v1beta1-policy","nonresourcerule-v1beta1-authorization-k8s-io","nonresourceattributes-v1beta1-authorization-k8s-io","networkpolicyport-v1beta1-extensions","networkpolicypeer-v1beta1-extensions","networkpolicyingressrule-v1beta1-extensions","networkpolicyegressrule-v1beta1-extensions","watch-list-all-namespaces-853","watch-list-852","watch-851","list-all-namespaces-850","list-849","read-848","-strong-read-operations-strong--847","delete-collection-846","delete-845","replace-844","patch-843","create-842","-strong-write-operations-strong--841","networkpolicy-v1beta1-extensions","create-840","-strong-write-operations-strong--839","localsubjectaccessreview-v1beta1-authorization-k8s-io","jobtemplatespec-v2alpha1-batch","initializer-v1alpha1-admissionregistration-k8s-io","ipblock-v1beta1-extensions","idrange-v1beta1-policy","hostportrange-v1beta1-policy","replace-status-838","read-status-837","patch-status-836","-strong-status-operations-strong--835","watch-list-all-namespaces-834","watch-list-833","watch-832","list-all-namespaces-831","list-830","read-829","-strong-read-operations-strong--828","delete-collection-827","delete-826","replace-825","patch-824","create-823","-strong-write-operations-strong--822","horizontalpodautoscaler-v2beta1-autoscaling","fsgroupstrategyoptions-v1beta1-policy","eventseries-v1beta1-events-k8s-io","watch-list-all-namespaces-821","watch-list-820","watch-819","list-all-namespaces-818","list-817","read-816","-strong-read-operations-strong--815","delete-collection-814","delete-813","replace-812","patch-811","create-810","-strong-write-operations-strong--809","event-v1beta1-events-k8s-io","deploymentcondition-v1beta1-extensions","deploymentcondition-v1beta1-apps","deploymentcondition-v1beta2-apps","rollback-808","patch-scale-807","replace-scale-806","read-scale-805","-strong-misc-operations-strong--804","replace-status-803","read-status-802","patch-status-801","-strong-status-operations-strong--800","watch-list-all-namespaces-799","watch-list-798","watch-797","list-all-namespaces-796","list-795","read-794","-strong-read-operations-strong--793","delete-collection-792","delete-791","replace-790","patch-789","create-788","-strong-write-operations-strong--787","deployment-v1beta1-extensions","rollback","patch-scale-786","replace-scale-785","read-scale-784","-strong-misc-operations-strong--783","replace-status-782","read-status-781","patch-status-780","-strong-status-operations-strong--779","watch-list-all-namespaces-778","watch-list-777","watch-776","list-all-namespaces-775","list-774","read-773","-strong-read-operations-strong--772","delete-collection-771","delete-770","replace-769","patch-768","create-767","-strong-write-operations-strong--766","deployment-v1beta1-apps","patch-scale-765","replace-scale-764","read-scale-763","-strong-misc-operations-strong--762","replace-status-761","read-status-760","patch-status-759","-strong-status-operations-strong--758","watch-list-all-namespaces-757","watch-list-756","watch-755","list-all-namespaces-754","list-753","read-752","-strong-read-operations-strong--751","delete-collection-750","delete-749","replace-748","patch-747","create-746","-strong-write-operations-strong--745","deployment-v1beta2-apps","daemonsetupdatestrategy-v1beta1-extensions","daemonsetupdatestrategy-v1beta2-apps","daemonsetcondition-v1beta1-extensions","daemonsetcondition-v1beta2-apps","replace-status-744","read-status-743","patch-status-742","-strong-status-operations-strong--741","watch-list-all-namespaces-740","watch-list-739","watch-738","list-all-namespaces-737","list-736","read-735","-strong-read-operations-strong--734","delete-collection-733","delete-732","replace-731","patch-730","create-729","-strong-write-operations-strong--728","daemonset-v1beta1-extensions","replace-status-727","read-status-726","patch-status-725","-strong-status-operations-strong--724","watch-list-all-namespaces-723","watch-list-722","watch-721","list-all-namespaces-720","list-719","read-718","-strong-read-operations-strong--717","delete-collection-716","delete-715","replace-714","patch-713","create-712","-strong-write-operations-strong--711","daemonset-v1beta2-apps","crossversionobjectreference-v2beta1-autoscaling","replace-status-710","read-status-709","patch-status-708","-strong-status-operations-strong--707","watch-list-all-namespaces-706","watch-list-705","watch-704","list-all-namespaces-703","list-702","read-701","-strong-read-operations-strong--700","delete-collection-699","delete-698","replace-697","patch-696","create-695","-strong-write-operations-strong--694","cronjob-v2alpha1-batch","watch-list-all-namespaces-693","watch-list-692","watch-691","list-all-namespaces-690","list-689","read-688","-strong-read-operations-strong--687","delete-collection-686","delete-685","replace-684","patch-683","create-682","-strong-write-operations-strong--681","controllerrevision-v1beta1-apps","watch-list-all-namespaces-680","watch-list-679","watch-678","list-all-namespaces-677","list-676","read-675","-strong-read-operations-strong--674","delete-collection-673","delete-672","replace-671","patch-670","create-669","-strong-write-operations-strong--668","controllerrevision-v1beta2-apps","watch-list-667","watch-666","list-665","read-664","-strong-read-operations-strong--663","delete-collection-662","delete-661","replace-660","patch-659","create-658","-strong-write-operations-strong--657","clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","watch-list-656","watch-655","list-654","read-653","-strong-read-operations-strong--652","delete-collection-651","delete-650","replace-649","patch-648","create-647","-strong-write-operations-strong--646","clusterrolebinding-v1beta1-rbac-authorization-k8s-io","watch-list-645","watch-644","list-643","read-642","-strong-read-operations-strong--641","delete-collection-640","delete-639","replace-638","patch-637","create-636","-strong-write-operations-strong--635","clusterrole-v1alpha1-rbac-authorization-k8s-io","watch-list-634","watch-633","list-632","read-631","-strong-read-operations-strong--630","delete-collection-629","delete-628","replace-627","patch-626","create-625","-strong-write-operations-strong--624","clusterrole-v1beta1-rbac-authorization-k8s-io","allowedhostpath-v1beta1-policy","allowedflexvolume-v1beta1-policy","aggregationrule-v1alpha1-rbac-authorization-k8s-io","aggregationrule-v1beta1-rbac-authorization-k8s-io","apiservicecondition-v1beta1-apiregistration-k8s-io","replace-status-623","-strong-status-operations-strong--622","watch-list-621","watch-620","list-619","read-618","-strong-read-operations-strong--617","delete-collection-616","delete-615","replace-614","patch-613","create-612","-strong-write-operations-strong--611","apiservice-v1beta1-apiregistration-k8s-io","-strong-old-api-versions-strong-","weightedpodaffinityterm-v1-core","webhookclientconfig-v1beta1-admissionregistration","webhook-v1beta1-admissionregistration","watchevent-v1-meta","vspherevirtualdiskvolumesource-v1-core","volumeprojection-v1-core","volumenodeaffinity-v1-core","volumemount-v1-core","volumeerror-v1beta1-storage","volumedevice-v1-core","volumeattachmentsource-v1beta1-storage","userinfo-v1-authentication","toleration-v1-core","time-v1-meta","taint-v1-core","tcpsocketaction-v1-core","supplementalgroupsstrategyoptions-v1beta1-extensions","subjectrulesreviewstatus-v1-authorization","subject-v1-rbac","storageosvolumesource-v1-core","storageospersistentvolumesource-v1-core","statusdetails-v1-meta","statuscause-v1-meta","status-v1-meta","statefulsetupdatestrategy-v1-apps","statefulsetcondition-v1-apps","sessionaffinityconfig-v1-core","servicereference-v1-apiregistration","serviceport-v1-core","serveraddressbyclientcidr-v1-meta","securitycontext-v1-core","secretvolumesource-v1-core","secretreference-v1-core","secretprojection-v1-core","secretkeyselector-v1-core","secretenvsource-v1-core","scaleiovolumesource-v1-core","scaleiopersistentvolumesource-v1-core","scale-v1-autoscaling","selinuxstrategyoptions-v1beta1-extensions","selinuxoptions-v1-core","runasuserstrategyoptions-v1beta1-extensions","rulewithoperations-v1beta1-admissionregistration","rule-v1alpha1-admissionregistration","rollingupdatestatefulsetstrategy-v1-apps","rollbackconfig-v1beta1-apps","roleref-v1-rbac","resourcerule-v1-authorization","resourcerequirements-v1-core","resourcemetricstatus-v2beta1-autoscaling","resourcemetricsource-v2beta1-autoscaling","resourcefieldselector-v1-core","resourceattributes-v1-authorization","replicationcontrollercondition-v1-core","replicasetcondition-v1-apps","rbdvolumesource-v1-core","rbdpersistentvolumesource-v1-core","quobytevolumesource-v1-core","quantity-resource-core","projectedvolumesource-v1-core","probe-v1-core","preferredschedulingterm-v1-core","preconditions-v1-meta","portworxvolumesource-v1-core","policyrule-v1-rbac","podsmetricstatus-v2beta1-autoscaling","podsmetricsource-v2beta1-autoscaling","podsecuritycontext-v1-core","poddnsconfigoption-v1-core","poddnsconfig-v1-core","podcondition-v1-core","podantiaffinity-v1-core","podaffinityterm-v1-core","podaffinity-v1-core","photonpersistentdiskvolumesource-v1-core","persistentvolumeclaimvolumesource-v1-core","persistentvolumeclaimcondition-v1-core","patch-v1-meta","ownerreference-v1-meta","objectreference-v1-core","objectmetricstatus-v2beta1-autoscaling","objectmetricsource-v2beta1-autoscaling","objectmeta-v1-meta","objectfieldselector-v1-core","nonresourcerule-v1-authorization","nonresourceattributes-v1-authorization","nodesysteminfo-v1-core","nodeselectorterm-v1-core","nodeselectorrequirement-v1-core","nodeselector-v1-core","nodedaemonendpoints-v1-core","nodeconfigsource-v1-core","nodecondition-v1-core","nodeaffinity-v1-core","nodeaddress-v1-core","networkpolicyport-v1-networking","networkpolicypeer-v1-networking","networkpolicyingressrule-v1-networking","networkpolicyegressrule-v1-networking","nfsvolumesource-v1-core","microtime-v1-meta","metricstatus-v2beta1-autoscaling","metricspec-v2beta1-autoscaling","localvolumesource-v1-core","localobjectreference-v1-core","loadbalancerstatus-v1-core","loadbalanceringress-v1-core","listmeta-v1-meta","limitrangeitem-v1-core","lifecycle-v1-core","labelselectorrequirement-v1-meta","labelselector-v1-meta","keytopath-v1-core","jobtemplatespec-v1beta1-batch","jobcondition-v1-batch","jsonschemapropsorbool-v1beta1-apiextensions","jsonschemapropsorarray-v1beta1-apiextensions","jsonschemaprops-v1beta1-apiextensions","json-v1beta1-apiextensions","initializers-v1-meta","initializer-v1-meta","ingresstls-v1beta1-extensions","ingressrule-v1beta1-extensions","ingressbackend-v1beta1-extensions","iscsivolumesource-v1-core","iscsipersistentvolumesource-v1-core","ipblock-v1-networking","idrange-v1beta1-extensions","hostportrange-v1beta1-extensions","hostpathvolumesource-v1-core","hostalias-v1-core","horizontalpodautoscalercondition-v2beta1-autoscaling","handler-v1-core","httpingressrulevalue-v1beta1-extensions","httpingresspath-v1beta1-extensions","httpheader-v1-core","httpgetaction-v1-core","groupversionfordiscovery-v1-meta","glusterfsvolumesource-v1-core","gitrepovolumesource-v1-core","gcepersistentdiskvolumesource-v1-core","flockervolumesource-v1-core","flexvolumesource-v1-core","flexpersistentvolumesource-v1-core","fsgroupstrategyoptions-v1beta1-extensions","fcvolumesource-v1-core","externalmetricstatus-v2beta1-autoscaling","externalmetricsource-v2beta1-autoscaling","externaldocumentation-v1beta1-apiextensions","execaction-v1-core","eviction-v1beta1-policy","eventsource-v1-core","eventseries-v1-core","envvarsource-v1-core","envvar-v1-core","envfromsource-v1-core","endpointsubset-v1-core","endpointport-v1-core","endpointaddress-v1-core","emptydirvolumesource-v1-core","downwardapivolumesource-v1-core","downwardapivolumefile-v1-core","downwardapiprojection-v1-core","deploymentcondition-v1-apps","deleteoptions-v1-meta","daemonsetupdatestrategy-v1-apps","daemonsetcondition-v1-apps","daemonendpoint-v1-core","customresourcevalidation-v1beta1-apiextensions","customresourcesubresources-v1beta1-apiextensions","customresourcesubresourcestatus-v1beta1-apiextensions","customresourcesubresourcescale-v1beta1-apiextensions","customresourcedefinitionnames-v1beta1-apiextensions","customresourcedefinitioncondition-v1beta1-apiextensions","crossversionobjectreference-v1-autoscaling","containerstatewaiting-v1-core","containerstateterminated-v1-core","containerstaterunning-v1-core","containerstate-v1-core","containerport-v1-core","containerimage-v1-core","configmapvolumesource-v1-core","configmapprojection-v1-core","configmapkeyselector-v1-core","configmapenvsource-v1-core","componentcondition-v1-core","clientipconfig-v1-core","cindervolumesource-v1-core","certificatesigningrequestcondition-v1beta1-certificates","cephfsvolumesource-v1-core","cephfspersistentvolumesource-v1-core","capabilities-v1-core","csipersistentvolumesource-v1-core","azurefilevolumesource-v1-core","azurefilepersistentvolumesource-v1-core","azurediskvolumesource-v1-core","attachedvolume-v1-core","allowedhostpath-v1beta1-extensions","allowedflexvolume-v1beta1-extensions","aggregationrule-v1-rbac","affinity-v1-core","awselasticblockstorevolumesource-v1-core","apiversions-v1-meta","apiservicecondition-v1-apiregistration","apiresource-v1-meta","apigroup-v1-meta","-strong-definitions-strong-","watch-list-all-namespaces-610","watch-list-609","watch-608","list-all-namespaces-607","list-606","read-605","-strong-read-operations-strong--604","delete-collection-603","delete-602","replace-601","patch-600","create-599","-strong-write-operations-strong--598","networkpolicy-v1-networking-k8s-io","create-597","-strong-write-operations-strong--596","tokenreview-v1-authentication-k8s-io","create-595","-strong-write-operations-strong--594","subjectaccessreview-v1-authorization-k8s-io","watch-list-all-namespaces-593","watch-list-592","watch-591","list-all-namespaces-590","list-589","read-588","-strong-read-operations-strong--587","delete-collection-586","delete-585","replace-584","patch-583","create-582","-strong-write-operations-strong--581","serviceaccount-v1-core","create-580","-strong-write-operations-strong--579","selfsubjectrulesreview-v1-authorization-k8s-io","create-578","-strong-write-operations-strong--577","selfsubjectaccessreview-v1-authorization-k8s-io","watch-list-all-namespaces-576","watch-list-575","watch-574","list-all-namespaces-573","list-572","read-571","-strong-read-operations-strong--570","delete-collection-569","delete-568","replace-567","patch-566","create-565","-strong-write-operations-strong--564","rolebinding-v1-rbac-authorization-k8s-io","watch-list-all-namespaces-563","watch-list-562","watch-561","list-all-namespaces-560","list-559","read-558","-strong-read-operations-strong--557","delete-collection-556","delete-555","replace-554","patch-553","create-552","-strong-write-operations-strong--551","role-v1-rbac-authorization-k8s-io","replace-status-550","read-status-549","patch-status-548","-strong-status-operations-strong--547","watch-list-all-namespaces-546","watch-list-545","watch-544","list-all-namespaces-543","list-542","read-541","-strong-read-operations-strong--540","delete-collection-539","delete-538","replace-537","patch-536","create-535","-strong-write-operations-strong--534","resourcequota-v1-core","replace-status-533","read-status-532","patch-status-531","-strong-status-operations-strong--530","watch-list-529","watch-528","list-527","read-526","-strong-read-operations-strong--525","delete-collection-524","delete-523","replace-522","patch-521","create-520","-strong-write-operations-strong--519","persistentvolume-v1-core","replace-connect-proxy-path-518","replace-connect-proxy-517","head-connect-proxy-path-516","head-connect-proxy-515","get-connect-proxy-path-514","get-connect-proxy-513","delete-connect-proxy-path-512","delete-connect-proxy-511","create-connect-proxy-path-510","create-connect-proxy-509","-strong-proxy-operations-strong--508","replace-status-507","read-status-506","patch-status-505","-strong-status-operations-strong--504","watch-list-503","watch-502","list-501","read-500","-strong-read-operations-strong--499","delete-collection-498","delete-497","replace-496","patch-495","create-494","-strong-write-operations-strong--493","node-v1-core","replace-status-492","read-status-491","patch-status-490","-strong-status-operations-strong--489","watch-list-488","watch-487","list-486","read-485","-strong-read-operations-strong--484","delete-483","replace-482","patch-481","create-480","-strong-write-operations-strong--479","namespace-v1-core","create-478","-strong-write-operations-strong--477","localsubjectaccessreview-v1-authorization-k8s-io","list-476","read-475","-strong-read-operations-strong--474","componentstatus-v1-core","watch-list-473","watch-472","list-471","read-470","-strong-read-operations-strong--469","delete-collection-468","delete-467","replace-466","patch-465","create-464","-strong-write-operations-strong--463","clusterrolebinding-v1-rbac-authorization-k8s-io","watch-list-462","watch-461","list-460","read-459","-strong-read-operations-strong--458","delete-collection-457","delete-456","replace-455","patch-454","create-453","-strong-write-operations-strong--452","clusterrole-v1-rbac-authorization-k8s-io","replace-status-451","-strong-status-operations-strong--450","watch-list-449","watch-448","list-447","read-446","-strong-read-operations-strong--445","delete-collection-444","delete-443","replace-442","patch-441","create-440","-strong-write-operations-strong--439","certificatesigningrequest-v1beta1-certificates-k8s-io","create-438","-strong-write-operations-strong--437","binding-v1-core","replace-status-436","-strong-status-operations-strong--435","watch-list-434","watch-433","list-432","read-431","-strong-read-operations-strong--430","delete-collection-429","delete-428","replace-427","patch-426","create-425","-strong-write-operations-strong--424","apiservice-v1-apiregistration-k8s-io","-strong-cluster-strong-","watch-list-423","watch-422","list-421","read-420","-strong-read-operations-strong--419","delete-collection-418","delete-417","replace-416","patch-415","create-414","-strong-write-operations-strong--413","podsecuritypolicy-v1beta1-extensions","watch-list-all-namespaces-412","watch-list-411","watch-410","list-all-namespaces-409","list-408","read-407","-strong-read-operations-strong--406","delete-collection-405","delete-404","replace-403","patch-402","create-401","-strong-write-operations-strong--400","podpreset-v1alpha1-settings-k8s-io","watch-list-399","watch-398","list-397","read-396","-strong-read-operations-strong--395","delete-collection-394","delete-393","replace-392","patch-391","create-390","-strong-write-operations-strong--389","priorityclass-v1alpha1-scheduling-k8s-io","replace-status-388","read-status-387","patch-status-386","-strong-status-operations-strong--385","watch-list-all-namespaces-384","watch-list-383","watch-382","list-all-namespaces-381","list-380","read-379","-strong-read-operations-strong--378","delete-collection-377","delete-376","replace-375","patch-374","create-373","-strong-write-operations-strong--372","poddisruptionbudget-v1beta1-policy","watch-list-all-namespaces-371","watch-list-370","watch-369","list-all-namespaces-368","list-367","read-366","-strong-read-operations-strong--365","delete-collection-364","delete-363","replace-362","patch-361","create-360","-strong-write-operations-strong--359","podtemplate-v1-core","watch-list-358","watch-357","list-356","read-355","-strong-read-operations-strong--354","delete-collection-353","delete-352","replace-351","patch-350","create-349","-strong-write-operations-strong--348","validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","watch-list-347","watch-346","list-345","read-344","-strong-read-operations-strong--343","delete-collection-342","delete-341","replace-340","patch-339","create-338","-strong-write-operations-strong--337","mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","watch-list-336","watch-335","list-334","read-333","-strong-read-operations-strong--332","delete-collection-331","delete-330","replace-329","patch-328","create-327","-strong-write-operations-strong--326","initializerconfiguration-v1alpha1-admissionregistration-k8s-io","replace-status-325","read-status-324","patch-status-323","-strong-status-operations-strong--322","watch-list-all-namespaces-321","watch-list-320","watch-319","list-all-namespaces-318","list-317","read-316","-strong-read-operations-strong--315","delete-collection-314","delete-313","replace-312","patch-311","create-310","-strong-write-operations-strong--309","horizontalpodautoscaler-v1-autoscaling","watch-list-all-namespaces-308","watch-list-307","watch-306","list-all-namespaces-305","list-304","read-303","-strong-read-operations-strong--302","delete-collection-301","delete-300","replace-299","patch-298","create-297","-strong-write-operations-strong--296","limitrange-v1-core","watch-list-all-namespaces-295","watch-list-294","watch-293","list-all-namespaces-292","list-291","read-290","-strong-read-operations-strong--289","delete-collection-288","delete-287","replace-286","patch-285","create-284","-strong-write-operations-strong--283","event-v1-core","replace-status-282","-strong-status-operations-strong--281","watch-list-280","watch-279","list-278","read-277","-strong-read-operations-strong--276","delete-collection-275","delete-274","replace-273","patch-272","create-271","-strong-write-operations-strong--270","customresourcedefinition-v1beta1-apiextensions-k8s-io","watch-list-all-namespaces-269","watch-list-268","watch-267","list-all-namespaces-266","list-265","read-264","-strong-read-operations-strong--263","delete-collection-262","delete-261","replace-260","patch-259","create-258","-strong-write-operations-strong--257","controllerrevision-v1-apps","-strong-metadata-strong-","watch-list-256","watch-255","list-254","read-253","-strong-read-operations-strong--252","delete-collection-251","delete-250","replace-249","patch-248","create-247","-strong-write-operations-strong--246","volumeattachment-v1beta1-storage-k8s-io","volume-v1-core","watch-list-245","watch-244","list-243","read-242","-strong-read-operations-strong--241","delete-collection-240","delete-239","replace-238","patch-237","create-236","-strong-write-operations-strong--235","storageclass-v1-storage-k8s-io","replace-status-234","read-status-233","patch-status-232","-strong-status-operations-strong--231","watch-list-all-namespaces-230","watch-list-229","watch-228","list-all-namespaces-227","list-226","read-225","-strong-read-operations-strong--224","delete-collection-223","delete-222","replace-221","patch-220","create-219","-strong-write-operations-strong--218","persistentvolumeclaim-v1-core","watch-list-all-namespaces-217","watch-list-216","watch-215","list-all-namespaces-214","list-213","read-212","-strong-read-operations-strong--211","delete-collection-210","delete-209","replace-208","patch-207","create-206","-strong-write-operations-strong--205","secret-v1-core","watch-list-all-namespaces-204","watch-list-203","watch-202","list-all-namespaces-201","list-200","read-199","-strong-read-operations-strong--198","delete-collection-197","delete-196","replace-195","patch-194","create-193","-strong-write-operations-strong--192","configmap-v1-core","-strong-config-storage-strong-","replace-connect-proxy-path-191","replace-connect-proxy-190","head-connect-proxy-path-189","head-connect-proxy-188","get-connect-proxy-path-187","get-connect-proxy-186","delete-connect-proxy-path-185","delete-connect-proxy-184","create-connect-proxy-path-183","create-connect-proxy-182","-strong-proxy-operations-strong--181","replace-status-180","read-status-179","patch-status-178","-strong-status-operations-strong--177","watch-list-all-namespaces-176","watch-list-175","watch-174","list-all-namespaces-173","list-172","read-171","-strong-read-operations-strong--170","delete-169","replace-168","patch-167","create-166","-strong-write-operations-strong--165","service-v1-core","replace-status-164","read-status-163","patch-status-162","-strong-status-operations-strong--161","watch-list-all-namespaces-160","watch-list-159","watch-158","list-all-namespaces-157","list-156","read-155","-strong-read-operations-strong--154","delete-collection-153","delete-152","replace-151","patch-150","create-149","-strong-write-operations-strong--148","ingress-v1beta1-extensions","watch-list-all-namespaces-147","watch-list-146","watch-145","list-all-namespaces-144","list-143","read-142","-strong-read-operations-strong--141","delete-collection-140","delete-139","replace-138","patch-137","create-136","-strong-write-operations-strong--135","endpoints-v1-core","-strong-discovery-load-balancing-strong-","patch-scale-134","replace-scale-133","read-scale-132","-strong-misc-operations-strong--131","replace-status-130","read-status-129","patch-status-128","-strong-status-operations-strong--127","watch-list-all-namespaces-126","watch-list-125","watch-124","list-all-namespaces-123","list-122","read-121","-strong-read-operations-strong--120","delete-collection-119","delete-118","replace-117","patch-116","create-115","-strong-write-operations-strong--114","statefulset-v1-apps","patch-scale-113","replace-scale-112","read-scale-111","-strong-misc-operations-strong--110","replace-status-109","read-status-108","patch-status-107","-strong-status-operations-strong--106","watch-list-all-namespaces-105","watch-list-104","watch-103","list-all-namespaces-102","list-101","read-100","-strong-read-operations-strong--99","delete-collection-98","delete-97","replace-96","patch-95","create-94","-strong-write-operations-strong--93","replicationcontroller-v1-core","patch-scale-92","replace-scale-91","read-scale-90","-strong-misc-operations-strong--89","replace-status-88","read-status-87","patch-status-86","-strong-status-operations-strong--85","watch-list-all-namespaces-84","watch-list-83","watch-82","list-all-namespaces-81","list-80","read-79","-strong-read-operations-strong--78","delete-collection-77","delete-76","replace-75","patch-74","create-73","-strong-write-operations-strong--72","replicaset-v1-apps","read-log","-strong-misc-operations-strong--71","replace-connect-proxy-path","replace-connect-proxy","head-connect-proxy-path","head-connect-proxy","get-connect-proxy-path","get-connect-proxy","get-connect-portforward","delete-connect-proxy-path","delete-connect-proxy","create-connect-proxy-path","create-connect-proxy","create-connect-portforward","-strong-proxy-operations-strong-","replace-status-70","read-status-69","patch-status-68","-strong-status-operations-strong--67","watch-list-all-namespaces-66","watch-list-65","watch-64","list-all-namespaces-63","list-62","read-61","-strong-read-operations-strong--60","delete-collection-59","delete-58","replace-57","patch-56","create-eviction","create-55","-strong-write-operations-strong--54","pod-v1-core","replace-status-53","read-status-52","patch-status-51","-strong-status-operations-strong--50","watch-list-all-namespaces-49","watch-list-48","watch-47","list-all-namespaces-46","list-45","read-44","-strong-read-operations-strong--43","delete-collection-42","delete-41","replace-40","patch-39","create-38","-strong-write-operations-strong--37","job-v1-batch","patch-scale","replace-scale","read-scale","-strong-misc-operations-strong-","replace-status-36","read-status-35","patch-status-34","-strong-status-operations-strong--33","watch-list-all-namespaces-32","watch-list-31","watch-30","list-all-namespaces-29","list-28","read-27","-strong-read-operations-strong--26","delete-collection-25","delete-24","replace-23","patch-22","create-21","-strong-write-operations-strong--20","deployment-v1-apps","replace-status-19","read-status-18","patch-status-17","-strong-status-operations-strong--16","watch-list-all-namespaces-15","watch-list-14","watch-13","list-all-namespaces-12","list-11","read-10","-strong-read-operations-strong--9","delete-collection-8","delete-7","replace-6","patch-5","create-4","-strong-write-operations-strong--3","daemonset-v1-apps","replace-status","read-status","patch-status","-strong-status-operations-strong-","watch-list-all-namespaces","watch-list","watch","list-all-namespaces","list","read-2","-strong-read-operations-strong-","delete-collection","delete-1","replace","patch","create","-strong-write-operations-strong-","cronjob-v1beta1-batch","container-v1-core","-strong-workloads-strong-","resource-operations","resource-objects","resource-categories","-strong-api-overview-strong-"]};})(); \ No newline at end of file diff --git a/docs/reference/generated/kubernetes-api/v1.10/node_modules/bootstrap/dist/css/bootstrap.min.css b/docs/reference/generated/kubernetes-api/v1.10/node_modules/bootstrap/dist/css/bootstrap.min.css deleted file mode 100644 index ed3905e0e0c91..0000000000000 --- a/docs/reference/generated/kubernetes-api/v1.10/node_modules/bootstrap/dist/css/bootstrap.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/css/font-awesome.css b/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/css/font-awesome.css deleted file mode 100644 index ee906a8196d0f..0000000000000 --- a/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/css/font-awesome.css +++ /dev/null @@ -1,2337 +0,0 @@ -/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ -/* FONT PATH - * -------------------------- */ -@font-face { - font-family: 'FontAwesome'; - src: url('../fonts/fontawesome-webfont.eot?v=4.7.0'); - src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); - font-weight: normal; - font-style: normal; -} -.fa { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -/* makes the font 33% larger relative to the icon container */ -.fa-lg { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; -} -.fa-2x { - font-size: 2em; -} -.fa-3x { - font-size: 3em; -} -.fa-4x { - font-size: 4em; -} -.fa-5x { - font-size: 5em; -} -.fa-fw { - width: 1.28571429em; - text-align: center; -} -.fa-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; -} -.fa-ul > li { - position: relative; -} -.fa-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; -} -.fa-li.fa-lg { - left: -1.85714286em; -} -.fa-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; -} -.fa-pull-left { - float: left; -} -.fa-pull-right { - float: right; -} -.fa.fa-pull-left { - margin-right: .3em; -} -.fa.fa-pull-right { - margin-left: .3em; -} -/* Deprecated as of 4.4.0 */ -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.fa.pull-left { - margin-right: .3em; -} -.fa.pull-right { - margin-left: .3em; -} -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -.fa-rotate-90 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} -.fa-rotate-180 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.fa-rotate-270 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} -.fa-flip-horizontal { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} -.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - filter: none; -} -.fa-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -.fa-stack-1x, -.fa-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -.fa-stack-1x { - line-height: inherit; -} -.fa-stack-2x { - font-size: 2em; -} -.fa-inverse { - color: #ffffff; -} -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.fa-glass:before { - content: "\f000"; -} -.fa-music:before { - content: "\f001"; -} -.fa-search:before { - content: "\f002"; -} -.fa-envelope-o:before { - content: "\f003"; -} -.fa-heart:before { - content: "\f004"; -} -.fa-star:before { - content: "\f005"; -} -.fa-star-o:before { - content: "\f006"; -} -.fa-user:before { - content: "\f007"; -} -.fa-film:before { - content: "\f008"; -} -.fa-th-large:before { - content: "\f009"; -} -.fa-th:before { - content: "\f00a"; -} -.fa-th-list:before { - content: "\f00b"; -} -.fa-check:before { - content: "\f00c"; -} -.fa-remove:before, -.fa-close:before, -.fa-times:before { - content: "\f00d"; -} -.fa-search-plus:before { - content: "\f00e"; -} -.fa-search-minus:before { - content: "\f010"; -} -.fa-power-off:before { - content: "\f011"; -} -.fa-signal:before { - content: "\f012"; -} -.fa-gear:before, -.fa-cog:before { - content: "\f013"; -} -.fa-trash-o:before { - content: "\f014"; -} -.fa-home:before { - content: "\f015"; -} -.fa-file-o:before { - content: "\f016"; -} -.fa-clock-o:before { - content: "\f017"; -} -.fa-road:before { - content: "\f018"; -} -.fa-download:before { - content: "\f019"; -} -.fa-arrow-circle-o-down:before { - content: "\f01a"; -} -.fa-arrow-circle-o-up:before { - content: "\f01b"; -} -.fa-inbox:before { - content: "\f01c"; -} -.fa-play-circle-o:before { - content: "\f01d"; -} -.fa-rotate-right:before, -.fa-repeat:before { - content: "\f01e"; -} -.fa-refresh:before { - content: "\f021"; -} -.fa-list-alt:before { - content: "\f022"; -} -.fa-lock:before { - content: "\f023"; -} -.fa-flag:before { - content: "\f024"; -} -.fa-headphones:before { - content: "\f025"; -} -.fa-volume-off:before { - content: "\f026"; -} -.fa-volume-down:before { - content: "\f027"; -} -.fa-volume-up:before { - content: "\f028"; -} -.fa-qrcode:before { - content: "\f029"; -} -.fa-barcode:before { - content: "\f02a"; -} -.fa-tag:before { - content: "\f02b"; -} -.fa-tags:before { - content: "\f02c"; -} -.fa-book:before { - content: "\f02d"; -} -.fa-bookmark:before { - content: "\f02e"; -} -.fa-print:before { - content: "\f02f"; -} -.fa-camera:before { - content: "\f030"; -} -.fa-font:before { - content: "\f031"; -} -.fa-bold:before { - content: "\f032"; -} -.fa-italic:before { - content: "\f033"; -} -.fa-text-height:before { - content: "\f034"; -} -.fa-text-width:before { - content: "\f035"; -} -.fa-align-left:before { - content: "\f036"; -} -.fa-align-center:before { - content: "\f037"; -} -.fa-align-right:before { - content: "\f038"; -} -.fa-align-justify:before { - content: "\f039"; -} -.fa-list:before { - content: "\f03a"; -} -.fa-dedent:before, -.fa-outdent:before { - content: "\f03b"; -} -.fa-indent:before { - content: "\f03c"; -} -.fa-video-camera:before { - content: "\f03d"; -} -.fa-photo:before, -.fa-image:before, -.fa-picture-o:before { - content: "\f03e"; -} -.fa-pencil:before { - content: "\f040"; -} -.fa-map-marker:before { - content: "\f041"; -} -.fa-adjust:before { - content: "\f042"; -} -.fa-tint:before { - content: "\f043"; -} -.fa-edit:before, -.fa-pencil-square-o:before { - content: "\f044"; -} -.fa-share-square-o:before { - content: "\f045"; -} -.fa-check-square-o:before { - content: "\f046"; -} -.fa-arrows:before { - content: "\f047"; -} -.fa-step-backward:before { - content: "\f048"; -} -.fa-fast-backward:before { - content: "\f049"; -} -.fa-backward:before { - content: "\f04a"; -} -.fa-play:before { - content: "\f04b"; -} -.fa-pause:before { - content: "\f04c"; -} -.fa-stop:before { - content: "\f04d"; -} -.fa-forward:before { - content: "\f04e"; -} -.fa-fast-forward:before { - content: "\f050"; -} -.fa-step-forward:before { - content: "\f051"; -} -.fa-eject:before { - content: "\f052"; -} -.fa-chevron-left:before { - content: "\f053"; -} -.fa-chevron-right:before { - content: "\f054"; -} -.fa-plus-circle:before { - content: "\f055"; -} -.fa-minus-circle:before { - content: "\f056"; -} -.fa-times-circle:before { - content: "\f057"; -} -.fa-check-circle:before { - content: "\f058"; -} -.fa-question-circle:before { - content: "\f059"; -} -.fa-info-circle:before { - content: "\f05a"; -} -.fa-crosshairs:before { - content: "\f05b"; -} -.fa-times-circle-o:before { - content: "\f05c"; -} -.fa-check-circle-o:before { - content: "\f05d"; -} -.fa-ban:before { - content: "\f05e"; -} -.fa-arrow-left:before { - content: "\f060"; -} -.fa-arrow-right:before { - content: "\f061"; -} -.fa-arrow-up:before { - content: "\f062"; -} -.fa-arrow-down:before { - content: "\f063"; -} -.fa-mail-forward:before, -.fa-share:before { - content: "\f064"; -} -.fa-expand:before { - content: "\f065"; -} -.fa-compress:before { - content: "\f066"; -} -.fa-plus:before { - content: "\f067"; -} -.fa-minus:before { - content: "\f068"; -} -.fa-asterisk:before { - content: "\f069"; -} -.fa-exclamation-circle:before { - content: "\f06a"; -} -.fa-gift:before { - content: "\f06b"; -} -.fa-leaf:before { - content: "\f06c"; -} -.fa-fire:before { - content: "\f06d"; -} -.fa-eye:before { - content: "\f06e"; -} -.fa-eye-slash:before { - content: "\f070"; -} -.fa-warning:before, -.fa-exclamation-triangle:before { - content: "\f071"; -} -.fa-plane:before { - content: "\f072"; -} -.fa-calendar:before { - content: "\f073"; -} -.fa-random:before { - content: "\f074"; -} -.fa-comment:before { - content: "\f075"; -} -.fa-magnet:before { - content: "\f076"; -} -.fa-chevron-up:before { - content: "\f077"; -} -.fa-chevron-down:before { - content: "\f078"; -} -.fa-retweet:before { - content: "\f079"; -} -.fa-shopping-cart:before { - content: "\f07a"; -} -.fa-folder:before { - content: "\f07b"; -} -.fa-folder-open:before { - content: "\f07c"; -} -.fa-arrows-v:before { - content: "\f07d"; -} -.fa-arrows-h:before { - content: "\f07e"; -} -.fa-bar-chart-o:before, -.fa-bar-chart:before { - content: "\f080"; -} -.fa-twitter-square:before { - content: "\f081"; -} -.fa-facebook-square:before { - content: "\f082"; -} -.fa-camera-retro:before { - content: "\f083"; -} -.fa-key:before { - content: "\f084"; -} -.fa-gears:before, -.fa-cogs:before { - content: "\f085"; -} -.fa-comments:before { - content: "\f086"; -} -.fa-thumbs-o-up:before { - content: "\f087"; -} -.fa-thumbs-o-down:before { - content: "\f088"; -} -.fa-star-half:before { - content: "\f089"; -} -.fa-heart-o:before { - content: "\f08a"; -} -.fa-sign-out:before { - content: "\f08b"; -} -.fa-linkedin-square:before { - content: "\f08c"; -} -.fa-thumb-tack:before { - content: "\f08d"; -} -.fa-external-link:before { - content: "\f08e"; -} -.fa-sign-in:before { - content: "\f090"; -} -.fa-trophy:before { - content: "\f091"; -} -.fa-github-square:before { - content: "\f092"; -} -.fa-upload:before { - content: "\f093"; -} -.fa-lemon-o:before { - content: "\f094"; -} -.fa-phone:before { - content: "\f095"; -} -.fa-square-o:before { - content: "\f096"; -} -.fa-bookmark-o:before { - content: "\f097"; -} -.fa-phone-square:before { - content: "\f098"; -} -.fa-twitter:before { - content: "\f099"; -} -.fa-facebook-f:before, -.fa-facebook:before { - content: "\f09a"; -} -.fa-github:before { - content: "\f09b"; -} -.fa-unlock:before { - content: "\f09c"; -} -.fa-credit-card:before { - content: "\f09d"; -} -.fa-feed:before, -.fa-rss:before { - content: "\f09e"; -} -.fa-hdd-o:before { - content: "\f0a0"; -} -.fa-bullhorn:before { - content: "\f0a1"; -} -.fa-bell:before { - content: "\f0f3"; -} -.fa-certificate:before { - content: "\f0a3"; -} -.fa-hand-o-right:before { - content: "\f0a4"; -} -.fa-hand-o-left:before { - content: "\f0a5"; -} -.fa-hand-o-up:before { - content: "\f0a6"; -} -.fa-hand-o-down:before { - content: "\f0a7"; -} -.fa-arrow-circle-left:before { - content: "\f0a8"; -} -.fa-arrow-circle-right:before { - content: "\f0a9"; -} -.fa-arrow-circle-up:before { - content: "\f0aa"; -} -.fa-arrow-circle-down:before { - content: "\f0ab"; -} -.fa-globe:before { - content: "\f0ac"; -} -.fa-wrench:before { - content: "\f0ad"; -} -.fa-tasks:before { - content: "\f0ae"; -} -.fa-filter:before { - content: "\f0b0"; -} -.fa-briefcase:before { - content: "\f0b1"; -} -.fa-arrows-alt:before { - content: "\f0b2"; -} -.fa-group:before, -.fa-users:before { - content: "\f0c0"; -} -.fa-chain:before, -.fa-link:before { - content: "\f0c1"; -} -.fa-cloud:before { - content: "\f0c2"; -} -.fa-flask:before { - content: "\f0c3"; -} -.fa-cut:before, -.fa-scissors:before { - content: "\f0c4"; -} -.fa-copy:before, -.fa-files-o:before { - content: "\f0c5"; -} -.fa-paperclip:before { - content: "\f0c6"; -} -.fa-save:before, -.fa-floppy-o:before { - content: "\f0c7"; -} -.fa-square:before { - content: "\f0c8"; -} -.fa-navicon:before, -.fa-reorder:before, -.fa-bars:before { - content: "\f0c9"; -} -.fa-list-ul:before { - content: "\f0ca"; -} -.fa-list-ol:before { - content: "\f0cb"; -} -.fa-strikethrough:before { - content: "\f0cc"; -} -.fa-underline:before { - content: "\f0cd"; -} -.fa-table:before { - content: "\f0ce"; -} -.fa-magic:before { - content: "\f0d0"; -} -.fa-truck:before { - content: "\f0d1"; -} -.fa-pinterest:before { - content: "\f0d2"; -} -.fa-pinterest-square:before { - content: "\f0d3"; -} -.fa-google-plus-square:before { - content: "\f0d4"; -} -.fa-google-plus:before { - content: "\f0d5"; -} -.fa-money:before { - content: "\f0d6"; -} -.fa-caret-down:before { - content: "\f0d7"; -} -.fa-caret-up:before { - content: "\f0d8"; -} -.fa-caret-left:before { - content: "\f0d9"; -} -.fa-caret-right:before { - content: "\f0da"; -} -.fa-columns:before { - content: "\f0db"; -} -.fa-unsorted:before, -.fa-sort:before { - content: "\f0dc"; -} -.fa-sort-down:before, -.fa-sort-desc:before { - content: "\f0dd"; -} -.fa-sort-up:before, -.fa-sort-asc:before { - content: "\f0de"; -} -.fa-envelope:before { - content: "\f0e0"; -} -.fa-linkedin:before { - content: "\f0e1"; -} -.fa-rotate-left:before, -.fa-undo:before { - content: "\f0e2"; -} -.fa-legal:before, -.fa-gavel:before { - content: "\f0e3"; -} -.fa-dashboard:before, -.fa-tachometer:before { - content: "\f0e4"; -} -.fa-comment-o:before { - content: "\f0e5"; -} -.fa-comments-o:before { - content: "\f0e6"; -} -.fa-flash:before, -.fa-bolt:before { - content: "\f0e7"; -} -.fa-sitemap:before { - content: "\f0e8"; -} -.fa-umbrella:before { - content: "\f0e9"; -} -.fa-paste:before, -.fa-clipboard:before { - content: "\f0ea"; -} -.fa-lightbulb-o:before { - content: "\f0eb"; -} -.fa-exchange:before { - content: "\f0ec"; -} -.fa-cloud-download:before { - content: "\f0ed"; -} -.fa-cloud-upload:before { - content: "\f0ee"; -} -.fa-user-md:before { - content: "\f0f0"; -} -.fa-stethoscope:before { - content: "\f0f1"; -} -.fa-suitcase:before { - content: "\f0f2"; -} -.fa-bell-o:before { - content: "\f0a2"; -} -.fa-coffee:before { - content: "\f0f4"; -} -.fa-cutlery:before { - content: "\f0f5"; -} -.fa-file-text-o:before { - content: "\f0f6"; -} -.fa-building-o:before { - content: "\f0f7"; -} -.fa-hospital-o:before { - content: "\f0f8"; -} -.fa-ambulance:before { - content: "\f0f9"; -} -.fa-medkit:before { - content: "\f0fa"; -} -.fa-fighter-jet:before { - content: "\f0fb"; -} -.fa-beer:before { - content: "\f0fc"; -} -.fa-h-square:before { - content: "\f0fd"; -} -.fa-plus-square:before { - content: "\f0fe"; -} -.fa-angle-double-left:before { - content: "\f100"; -} -.fa-angle-double-right:before { - content: "\f101"; -} -.fa-angle-double-up:before { - content: "\f102"; -} -.fa-angle-double-down:before { - content: "\f103"; -} -.fa-angle-left:before { - content: "\f104"; -} -.fa-angle-right:before { - content: "\f105"; -} -.fa-angle-up:before { - content: "\f106"; -} -.fa-angle-down:before { - content: "\f107"; -} -.fa-desktop:before { - content: "\f108"; -} -.fa-laptop:before { - content: "\f109"; -} -.fa-tablet:before { - content: "\f10a"; -} -.fa-mobile-phone:before, -.fa-mobile:before { - content: "\f10b"; -} -.fa-circle-o:before { - content: "\f10c"; -} -.fa-quote-left:before { - content: "\f10d"; -} -.fa-quote-right:before { - content: "\f10e"; -} -.fa-spinner:before { - content: "\f110"; -} -.fa-circle:before { - content: "\f111"; -} -.fa-mail-reply:before, -.fa-reply:before { - content: "\f112"; -} -.fa-github-alt:before { - content: "\f113"; -} -.fa-folder-o:before { - content: "\f114"; -} -.fa-folder-open-o:before { - content: "\f115"; -} -.fa-smile-o:before { - content: "\f118"; -} -.fa-frown-o:before { - content: "\f119"; -} -.fa-meh-o:before { - content: "\f11a"; -} -.fa-gamepad:before { - content: "\f11b"; -} -.fa-keyboard-o:before { - content: "\f11c"; -} -.fa-flag-o:before { - content: "\f11d"; -} -.fa-flag-checkered:before { - content: "\f11e"; -} -.fa-terminal:before { - content: "\f120"; -} -.fa-code:before { - content: "\f121"; -} -.fa-mail-reply-all:before, -.fa-reply-all:before { - content: "\f122"; -} -.fa-star-half-empty:before, -.fa-star-half-full:before, -.fa-star-half-o:before { - content: "\f123"; -} -.fa-location-arrow:before { - content: "\f124"; -} -.fa-crop:before { - content: "\f125"; -} -.fa-code-fork:before { - content: "\f126"; -} -.fa-unlink:before, -.fa-chain-broken:before { - content: "\f127"; -} -.fa-question:before { - content: "\f128"; -} -.fa-info:before { - content: "\f129"; -} -.fa-exclamation:before { - content: "\f12a"; -} -.fa-superscript:before { - content: "\f12b"; -} -.fa-subscript:before { - content: "\f12c"; -} -.fa-eraser:before { - content: "\f12d"; -} -.fa-puzzle-piece:before { - content: "\f12e"; -} -.fa-microphone:before { - content: "\f130"; -} -.fa-microphone-slash:before { - content: "\f131"; -} -.fa-shield:before { - content: "\f132"; -} -.fa-calendar-o:before { - content: "\f133"; -} -.fa-fire-extinguisher:before { - content: "\f134"; -} -.fa-rocket:before { - content: "\f135"; -} -.fa-maxcdn:before { - content: "\f136"; -} -.fa-chevron-circle-left:before { - content: "\f137"; -} -.fa-chevron-circle-right:before { - content: "\f138"; -} -.fa-chevron-circle-up:before { - content: "\f139"; -} -.fa-chevron-circle-down:before { - content: "\f13a"; -} -.fa-html5:before { - content: "\f13b"; -} -.fa-css3:before { - content: "\f13c"; -} -.fa-anchor:before { - content: "\f13d"; -} -.fa-unlock-alt:before { - content: "\f13e"; -} -.fa-bullseye:before { - content: "\f140"; -} -.fa-ellipsis-h:before { - content: "\f141"; -} -.fa-ellipsis-v:before { - content: "\f142"; -} -.fa-rss-square:before { - content: "\f143"; -} -.fa-play-circle:before { - content: "\f144"; -} -.fa-ticket:before { - content: "\f145"; -} -.fa-minus-square:before { - content: "\f146"; -} -.fa-minus-square-o:before { - content: "\f147"; -} -.fa-level-up:before { - content: "\f148"; -} -.fa-level-down:before { - content: "\f149"; -} -.fa-check-square:before { - content: "\f14a"; -} -.fa-pencil-square:before { - content: "\f14b"; -} -.fa-external-link-square:before { - content: "\f14c"; -} -.fa-share-square:before { - content: "\f14d"; -} -.fa-compass:before { - content: "\f14e"; -} -.fa-toggle-down:before, -.fa-caret-square-o-down:before { - content: "\f150"; -} -.fa-toggle-up:before, -.fa-caret-square-o-up:before { - content: "\f151"; -} -.fa-toggle-right:before, -.fa-caret-square-o-right:before { - content: "\f152"; -} -.fa-euro:before, -.fa-eur:before { - content: "\f153"; -} -.fa-gbp:before { - content: "\f154"; -} -.fa-dollar:before, -.fa-usd:before { - content: "\f155"; -} -.fa-rupee:before, -.fa-inr:before { - content: "\f156"; -} -.fa-cny:before, -.fa-rmb:before, -.fa-yen:before, -.fa-jpy:before { - content: "\f157"; -} -.fa-ruble:before, -.fa-rouble:before, -.fa-rub:before { - content: "\f158"; -} -.fa-won:before, -.fa-krw:before { - content: "\f159"; -} -.fa-bitcoin:before, -.fa-btc:before { - content: "\f15a"; -} -.fa-file:before { - content: "\f15b"; -} -.fa-file-text:before { - content: "\f15c"; -} -.fa-sort-alpha-asc:before { - content: "\f15d"; -} -.fa-sort-alpha-desc:before { - content: "\f15e"; -} -.fa-sort-amount-asc:before { - content: "\f160"; -} -.fa-sort-amount-desc:before { - content: "\f161"; -} -.fa-sort-numeric-asc:before { - content: "\f162"; -} -.fa-sort-numeric-desc:before { - content: "\f163"; -} -.fa-thumbs-up:before { - content: "\f164"; -} -.fa-thumbs-down:before { - content: "\f165"; -} -.fa-youtube-square:before { - content: "\f166"; -} -.fa-youtube:before { - content: "\f167"; -} -.fa-xing:before { - content: "\f168"; -} -.fa-xing-square:before { - content: "\f169"; -} -.fa-youtube-play:before { - content: "\f16a"; -} -.fa-dropbox:before { - content: "\f16b"; -} -.fa-stack-overflow:before { - content: "\f16c"; -} -.fa-instagram:before { - content: "\f16d"; -} -.fa-flickr:before { - content: "\f16e"; -} -.fa-adn:before { - content: "\f170"; -} -.fa-bitbucket:before { - content: "\f171"; -} -.fa-bitbucket-square:before { - content: "\f172"; -} -.fa-tumblr:before { - content: "\f173"; -} -.fa-tumblr-square:before { - content: "\f174"; -} -.fa-long-arrow-down:before { - content: "\f175"; -} -.fa-long-arrow-up:before { - content: "\f176"; -} -.fa-long-arrow-left:before { - content: "\f177"; -} -.fa-long-arrow-right:before { - content: "\f178"; -} -.fa-apple:before { - content: "\f179"; -} -.fa-windows:before { - content: "\f17a"; -} -.fa-android:before { - content: "\f17b"; -} -.fa-linux:before { - content: "\f17c"; -} -.fa-dribbble:before { - content: "\f17d"; -} -.fa-skype:before { - content: "\f17e"; -} -.fa-foursquare:before { - content: "\f180"; -} -.fa-trello:before { - content: "\f181"; -} -.fa-female:before { - content: "\f182"; -} -.fa-male:before { - content: "\f183"; -} -.fa-gittip:before, -.fa-gratipay:before { - content: "\f184"; -} -.fa-sun-o:before { - content: "\f185"; -} -.fa-moon-o:before { - content: "\f186"; -} -.fa-archive:before { - content: "\f187"; -} -.fa-bug:before { - content: "\f188"; -} -.fa-vk:before { - content: "\f189"; -} -.fa-weibo:before { - content: "\f18a"; -} -.fa-renren:before { - content: "\f18b"; -} -.fa-pagelines:before { - content: "\f18c"; -} -.fa-stack-exchange:before { - content: "\f18d"; -} -.fa-arrow-circle-o-right:before { - content: "\f18e"; -} -.fa-arrow-circle-o-left:before { - content: "\f190"; -} -.fa-toggle-left:before, -.fa-caret-square-o-left:before { - content: "\f191"; -} -.fa-dot-circle-o:before { - content: "\f192"; -} -.fa-wheelchair:before { - content: "\f193"; -} -.fa-vimeo-square:before { - content: "\f194"; -} -.fa-turkish-lira:before, -.fa-try:before { - content: "\f195"; -} -.fa-plus-square-o:before { - content: "\f196"; -} -.fa-space-shuttle:before { - content: "\f197"; -} -.fa-slack:before { - content: "\f198"; -} -.fa-envelope-square:before { - content: "\f199"; -} -.fa-wordpress:before { - content: "\f19a"; -} -.fa-openid:before { - content: "\f19b"; -} -.fa-institution:before, -.fa-bank:before, -.fa-university:before { - content: "\f19c"; -} -.fa-mortar-board:before, -.fa-graduation-cap:before { - content: "\f19d"; -} -.fa-yahoo:before { - content: "\f19e"; -} -.fa-google:before { - content: "\f1a0"; -} -.fa-reddit:before { - content: "\f1a1"; -} -.fa-reddit-square:before { - content: "\f1a2"; -} -.fa-stumbleupon-circle:before { - content: "\f1a3"; -} -.fa-stumbleupon:before { - content: "\f1a4"; -} -.fa-delicious:before { - content: "\f1a5"; -} -.fa-digg:before { - content: "\f1a6"; -} -.fa-pied-piper-pp:before { - content: "\f1a7"; -} -.fa-pied-piper-alt:before { - content: "\f1a8"; -} -.fa-drupal:before { - content: "\f1a9"; -} -.fa-joomla:before { - content: "\f1aa"; -} -.fa-language:before { - content: "\f1ab"; -} -.fa-fax:before { - content: "\f1ac"; -} -.fa-building:before { - content: "\f1ad"; -} -.fa-child:before { - content: "\f1ae"; -} -.fa-paw:before { - content: "\f1b0"; -} -.fa-spoon:before { - content: "\f1b1"; -} -.fa-cube:before { - content: "\f1b2"; -} -.fa-cubes:before { - content: "\f1b3"; -} -.fa-behance:before { - content: "\f1b4"; -} -.fa-behance-square:before { - content: "\f1b5"; -} -.fa-steam:before { - content: "\f1b6"; -} -.fa-steam-square:before { - content: "\f1b7"; -} -.fa-recycle:before { - content: "\f1b8"; -} -.fa-automobile:before, -.fa-car:before { - content: "\f1b9"; -} -.fa-cab:before, -.fa-taxi:before { - content: "\f1ba"; -} -.fa-tree:before { - content: "\f1bb"; -} -.fa-spotify:before { - content: "\f1bc"; -} -.fa-deviantart:before { - content: "\f1bd"; -} -.fa-soundcloud:before { - content: "\f1be"; -} -.fa-database:before { - content: "\f1c0"; -} -.fa-file-pdf-o:before { - content: "\f1c1"; -} -.fa-file-word-o:before { - content: "\f1c2"; -} -.fa-file-excel-o:before { - content: "\f1c3"; -} -.fa-file-powerpoint-o:before { - content: "\f1c4"; -} -.fa-file-photo-o:before, -.fa-file-picture-o:before, -.fa-file-image-o:before { - content: "\f1c5"; -} -.fa-file-zip-o:before, -.fa-file-archive-o:before { - content: "\f1c6"; -} -.fa-file-sound-o:before, -.fa-file-audio-o:before { - content: "\f1c7"; -} -.fa-file-movie-o:before, -.fa-file-video-o:before { - content: "\f1c8"; -} -.fa-file-code-o:before { - content: "\f1c9"; -} -.fa-vine:before { - content: "\f1ca"; -} -.fa-codepen:before { - content: "\f1cb"; -} -.fa-jsfiddle:before { - content: "\f1cc"; -} -.fa-life-bouy:before, -.fa-life-buoy:before, -.fa-life-saver:before, -.fa-support:before, -.fa-life-ring:before { - content: "\f1cd"; -} -.fa-circle-o-notch:before { - content: "\f1ce"; -} -.fa-ra:before, -.fa-resistance:before, -.fa-rebel:before { - content: "\f1d0"; -} -.fa-ge:before, -.fa-empire:before { - content: "\f1d1"; -} -.fa-git-square:before { - content: "\f1d2"; -} -.fa-git:before { - content: "\f1d3"; -} -.fa-y-combinator-square:before, -.fa-yc-square:before, -.fa-hacker-news:before { - content: "\f1d4"; -} -.fa-tencent-weibo:before { - content: "\f1d5"; -} -.fa-qq:before { - content: "\f1d6"; -} -.fa-wechat:before, -.fa-weixin:before { - content: "\f1d7"; -} -.fa-send:before, -.fa-paper-plane:before { - content: "\f1d8"; -} -.fa-send-o:before, -.fa-paper-plane-o:before { - content: "\f1d9"; -} -.fa-history:before { - content: "\f1da"; -} -.fa-circle-thin:before { - content: "\f1db"; -} -.fa-header:before { - content: "\f1dc"; -} -.fa-paragraph:before { - content: "\f1dd"; -} -.fa-sliders:before { - content: "\f1de"; -} -.fa-share-alt:before { - content: "\f1e0"; -} -.fa-share-alt-square:before { - content: "\f1e1"; -} -.fa-bomb:before { - content: "\f1e2"; -} -.fa-soccer-ball-o:before, -.fa-futbol-o:before { - content: "\f1e3"; -} -.fa-tty:before { - content: "\f1e4"; -} -.fa-binoculars:before { - content: "\f1e5"; -} -.fa-plug:before { - content: "\f1e6"; -} -.fa-slideshare:before { - content: "\f1e7"; -} -.fa-twitch:before { - content: "\f1e8"; -} -.fa-yelp:before { - content: "\f1e9"; -} -.fa-newspaper-o:before { - content: "\f1ea"; -} -.fa-wifi:before { - content: "\f1eb"; -} -.fa-calculator:before { - content: "\f1ec"; -} -.fa-paypal:before { - content: "\f1ed"; -} -.fa-google-wallet:before { - content: "\f1ee"; -} -.fa-cc-visa:before { - content: "\f1f0"; -} -.fa-cc-mastercard:before { - content: "\f1f1"; -} -.fa-cc-discover:before { - content: "\f1f2"; -} -.fa-cc-amex:before { - content: "\f1f3"; -} -.fa-cc-paypal:before { - content: "\f1f4"; -} -.fa-cc-stripe:before { - content: "\f1f5"; -} -.fa-bell-slash:before { - content: "\f1f6"; -} -.fa-bell-slash-o:before { - content: "\f1f7"; -} -.fa-trash:before { - content: "\f1f8"; -} -.fa-copyright:before { - content: "\f1f9"; -} -.fa-at:before { - content: "\f1fa"; -} -.fa-eyedropper:before { - content: "\f1fb"; -} -.fa-paint-brush:before { - content: "\f1fc"; -} -.fa-birthday-cake:before { - content: "\f1fd"; -} -.fa-area-chart:before { - content: "\f1fe"; -} -.fa-pie-chart:before { - content: "\f200"; -} -.fa-line-chart:before { - content: "\f201"; -} -.fa-lastfm:before { - content: "\f202"; -} -.fa-lastfm-square:before { - content: "\f203"; -} -.fa-toggle-off:before { - content: "\f204"; -} -.fa-toggle-on:before { - content: "\f205"; -} -.fa-bicycle:before { - content: "\f206"; -} -.fa-bus:before { - content: "\f207"; -} -.fa-ioxhost:before { - content: "\f208"; -} -.fa-angellist:before { - content: "\f209"; -} -.fa-cc:before { - content: "\f20a"; -} -.fa-shekel:before, -.fa-sheqel:before, -.fa-ils:before { - content: "\f20b"; -} -.fa-meanpath:before { - content: "\f20c"; -} -.fa-buysellads:before { - content: "\f20d"; -} -.fa-connectdevelop:before { - content: "\f20e"; -} -.fa-dashcube:before { - content: "\f210"; -} -.fa-forumbee:before { - content: "\f211"; -} -.fa-leanpub:before { - content: "\f212"; -} -.fa-sellsy:before { - content: "\f213"; -} -.fa-shirtsinbulk:before { - content: "\f214"; -} -.fa-simplybuilt:before { - content: "\f215"; -} -.fa-skyatlas:before { - content: "\f216"; -} -.fa-cart-plus:before { - content: "\f217"; -} -.fa-cart-arrow-down:before { - content: "\f218"; -} -.fa-diamond:before { - content: "\f219"; -} -.fa-ship:before { - content: "\f21a"; -} -.fa-user-secret:before { - content: "\f21b"; -} -.fa-motorcycle:before { - content: "\f21c"; -} -.fa-street-view:before { - content: "\f21d"; -} -.fa-heartbeat:before { - content: "\f21e"; -} -.fa-venus:before { - content: "\f221"; -} -.fa-mars:before { - content: "\f222"; -} -.fa-mercury:before { - content: "\f223"; -} -.fa-intersex:before, -.fa-transgender:before { - content: "\f224"; -} -.fa-transgender-alt:before { - content: "\f225"; -} -.fa-venus-double:before { - content: "\f226"; -} -.fa-mars-double:before { - content: "\f227"; -} -.fa-venus-mars:before { - content: "\f228"; -} -.fa-mars-stroke:before { - content: "\f229"; -} -.fa-mars-stroke-v:before { - content: "\f22a"; -} -.fa-mars-stroke-h:before { - content: "\f22b"; -} -.fa-neuter:before { - content: "\f22c"; -} -.fa-genderless:before { - content: "\f22d"; -} -.fa-facebook-official:before { - content: "\f230"; -} -.fa-pinterest-p:before { - content: "\f231"; -} -.fa-whatsapp:before { - content: "\f232"; -} -.fa-server:before { - content: "\f233"; -} -.fa-user-plus:before { - content: "\f234"; -} -.fa-user-times:before { - content: "\f235"; -} -.fa-hotel:before, -.fa-bed:before { - content: "\f236"; -} -.fa-viacoin:before { - content: "\f237"; -} -.fa-train:before { - content: "\f238"; -} -.fa-subway:before { - content: "\f239"; -} -.fa-medium:before { - content: "\f23a"; -} -.fa-yc:before, -.fa-y-combinator:before { - content: "\f23b"; -} -.fa-optin-monster:before { - content: "\f23c"; -} -.fa-opencart:before { - content: "\f23d"; -} -.fa-expeditedssl:before { - content: "\f23e"; -} -.fa-battery-4:before, -.fa-battery:before, -.fa-battery-full:before { - content: "\f240"; -} -.fa-battery-3:before, -.fa-battery-three-quarters:before { - content: "\f241"; -} -.fa-battery-2:before, -.fa-battery-half:before { - content: "\f242"; -} -.fa-battery-1:before, -.fa-battery-quarter:before { - content: "\f243"; -} -.fa-battery-0:before, -.fa-battery-empty:before { - content: "\f244"; -} -.fa-mouse-pointer:before { - content: "\f245"; -} -.fa-i-cursor:before { - content: "\f246"; -} -.fa-object-group:before { - content: "\f247"; -} -.fa-object-ungroup:before { - content: "\f248"; -} -.fa-sticky-note:before { - content: "\f249"; -} -.fa-sticky-note-o:before { - content: "\f24a"; -} -.fa-cc-jcb:before { - content: "\f24b"; -} -.fa-cc-diners-club:before { - content: "\f24c"; -} -.fa-clone:before { - content: "\f24d"; -} -.fa-balance-scale:before { - content: "\f24e"; -} -.fa-hourglass-o:before { - content: "\f250"; -} -.fa-hourglass-1:before, -.fa-hourglass-start:before { - content: "\f251"; -} -.fa-hourglass-2:before, -.fa-hourglass-half:before { - content: "\f252"; -} -.fa-hourglass-3:before, -.fa-hourglass-end:before { - content: "\f253"; -} -.fa-hourglass:before { - content: "\f254"; -} -.fa-hand-grab-o:before, -.fa-hand-rock-o:before { - content: "\f255"; -} -.fa-hand-stop-o:before, -.fa-hand-paper-o:before { - content: "\f256"; -} -.fa-hand-scissors-o:before { - content: "\f257"; -} -.fa-hand-lizard-o:before { - content: "\f258"; -} -.fa-hand-spock-o:before { - content: "\f259"; -} -.fa-hand-pointer-o:before { - content: "\f25a"; -} -.fa-hand-peace-o:before { - content: "\f25b"; -} -.fa-trademark:before { - content: "\f25c"; -} -.fa-registered:before { - content: "\f25d"; -} -.fa-creative-commons:before { - content: "\f25e"; -} -.fa-gg:before { - content: "\f260"; -} -.fa-gg-circle:before { - content: "\f261"; -} -.fa-tripadvisor:before { - content: "\f262"; -} -.fa-odnoklassniki:before { - content: "\f263"; -} -.fa-odnoklassniki-square:before { - content: "\f264"; -} -.fa-get-pocket:before { - content: "\f265"; -} -.fa-wikipedia-w:before { - content: "\f266"; -} -.fa-safari:before { - content: "\f267"; -} -.fa-chrome:before { - content: "\f268"; -} -.fa-firefox:before { - content: "\f269"; -} -.fa-opera:before { - content: "\f26a"; -} -.fa-internet-explorer:before { - content: "\f26b"; -} -.fa-tv:before, -.fa-television:before { - content: "\f26c"; -} -.fa-contao:before { - content: "\f26d"; -} -.fa-500px:before { - content: "\f26e"; -} -.fa-amazon:before { - content: "\f270"; -} -.fa-calendar-plus-o:before { - content: "\f271"; -} -.fa-calendar-minus-o:before { - content: "\f272"; -} -.fa-calendar-times-o:before { - content: "\f273"; -} -.fa-calendar-check-o:before { - content: "\f274"; -} -.fa-industry:before { - content: "\f275"; -} -.fa-map-pin:before { - content: "\f276"; -} -.fa-map-signs:before { - content: "\f277"; -} -.fa-map-o:before { - content: "\f278"; -} -.fa-map:before { - content: "\f279"; -} -.fa-commenting:before { - content: "\f27a"; -} -.fa-commenting-o:before { - content: "\f27b"; -} -.fa-houzz:before { - content: "\f27c"; -} -.fa-vimeo:before { - content: "\f27d"; -} -.fa-black-tie:before { - content: "\f27e"; -} -.fa-fonticons:before { - content: "\f280"; -} -.fa-reddit-alien:before { - content: "\f281"; -} -.fa-edge:before { - content: "\f282"; -} -.fa-credit-card-alt:before { - content: "\f283"; -} -.fa-codiepie:before { - content: "\f284"; -} -.fa-modx:before { - content: "\f285"; -} -.fa-fort-awesome:before { - content: "\f286"; -} -.fa-usb:before { - content: "\f287"; -} -.fa-product-hunt:before { - content: "\f288"; -} -.fa-mixcloud:before { - content: "\f289"; -} -.fa-scribd:before { - content: "\f28a"; -} -.fa-pause-circle:before { - content: "\f28b"; -} -.fa-pause-circle-o:before { - content: "\f28c"; -} -.fa-stop-circle:before { - content: "\f28d"; -} -.fa-stop-circle-o:before { - content: "\f28e"; -} -.fa-shopping-bag:before { - content: "\f290"; -} -.fa-shopping-basket:before { - content: "\f291"; -} -.fa-hashtag:before { - content: "\f292"; -} -.fa-bluetooth:before { - content: "\f293"; -} -.fa-bluetooth-b:before { - content: "\f294"; -} -.fa-percent:before { - content: "\f295"; -} -.fa-gitlab:before { - content: "\f296"; -} -.fa-wpbeginner:before { - content: "\f297"; -} -.fa-wpforms:before { - content: "\f298"; -} -.fa-envira:before { - content: "\f299"; -} -.fa-universal-access:before { - content: "\f29a"; -} -.fa-wheelchair-alt:before { - content: "\f29b"; -} -.fa-question-circle-o:before { - content: "\f29c"; -} -.fa-blind:before { - content: "\f29d"; -} -.fa-audio-description:before { - content: "\f29e"; -} -.fa-volume-control-phone:before { - content: "\f2a0"; -} -.fa-braille:before { - content: "\f2a1"; -} -.fa-assistive-listening-systems:before { - content: "\f2a2"; -} -.fa-asl-interpreting:before, -.fa-american-sign-language-interpreting:before { - content: "\f2a3"; -} -.fa-deafness:before, -.fa-hard-of-hearing:before, -.fa-deaf:before { - content: "\f2a4"; -} -.fa-glide:before { - content: "\f2a5"; -} -.fa-glide-g:before { - content: "\f2a6"; -} -.fa-signing:before, -.fa-sign-language:before { - content: "\f2a7"; -} -.fa-low-vision:before { - content: "\f2a8"; -} -.fa-viadeo:before { - content: "\f2a9"; -} -.fa-viadeo-square:before { - content: "\f2aa"; -} -.fa-snapchat:before { - content: "\f2ab"; -} -.fa-snapchat-ghost:before { - content: "\f2ac"; -} -.fa-snapchat-square:before { - content: "\f2ad"; -} -.fa-pied-piper:before { - content: "\f2ae"; -} -.fa-first-order:before { - content: "\f2b0"; -} -.fa-yoast:before { - content: "\f2b1"; -} -.fa-themeisle:before { - content: "\f2b2"; -} -.fa-google-plus-circle:before, -.fa-google-plus-official:before { - content: "\f2b3"; -} -.fa-fa:before, -.fa-font-awesome:before { - content: "\f2b4"; -} -.fa-handshake-o:before { - content: "\f2b5"; -} -.fa-envelope-open:before { - content: "\f2b6"; -} -.fa-envelope-open-o:before { - content: "\f2b7"; -} -.fa-linode:before { - content: "\f2b8"; -} -.fa-address-book:before { - content: "\f2b9"; -} -.fa-address-book-o:before { - content: "\f2ba"; -} -.fa-vcard:before, -.fa-address-card:before { - content: "\f2bb"; -} -.fa-vcard-o:before, -.fa-address-card-o:before { - content: "\f2bc"; -} -.fa-user-circle:before { - content: "\f2bd"; -} -.fa-user-circle-o:before { - content: "\f2be"; -} -.fa-user-o:before { - content: "\f2c0"; -} -.fa-id-badge:before { - content: "\f2c1"; -} -.fa-drivers-license:before, -.fa-id-card:before { - content: "\f2c2"; -} -.fa-drivers-license-o:before, -.fa-id-card-o:before { - content: "\f2c3"; -} -.fa-quora:before { - content: "\f2c4"; -} -.fa-free-code-camp:before { - content: "\f2c5"; -} -.fa-telegram:before { - content: "\f2c6"; -} -.fa-thermometer-4:before, -.fa-thermometer:before, -.fa-thermometer-full:before { - content: "\f2c7"; -} -.fa-thermometer-3:before, -.fa-thermometer-three-quarters:before { - content: "\f2c8"; -} -.fa-thermometer-2:before, -.fa-thermometer-half:before { - content: "\f2c9"; -} -.fa-thermometer-1:before, -.fa-thermometer-quarter:before { - content: "\f2ca"; -} -.fa-thermometer-0:before, -.fa-thermometer-empty:before { - content: "\f2cb"; -} -.fa-shower:before { - content: "\f2cc"; -} -.fa-bathtub:before, -.fa-s15:before, -.fa-bath:before { - content: "\f2cd"; -} -.fa-podcast:before { - content: "\f2ce"; -} -.fa-window-maximize:before { - content: "\f2d0"; -} -.fa-window-minimize:before { - content: "\f2d1"; -} -.fa-window-restore:before { - content: "\f2d2"; -} -.fa-times-rectangle:before, -.fa-window-close:before { - content: "\f2d3"; -} -.fa-times-rectangle-o:before, -.fa-window-close-o:before { - content: "\f2d4"; -} -.fa-bandcamp:before { - content: "\f2d5"; -} -.fa-grav:before { - content: "\f2d6"; -} -.fa-etsy:before { - content: "\f2d7"; -} -.fa-imdb:before { - content: "\f2d8"; -} -.fa-ravelry:before { - content: "\f2d9"; -} -.fa-eercast:before { - content: "\f2da"; -} -.fa-microchip:before { - content: "\f2db"; -} -.fa-snowflake-o:before { - content: "\f2dc"; -} -.fa-superpowers:before { - content: "\f2dd"; -} -.fa-wpexplorer:before { - content: "\f2de"; -} -.fa-meetup:before { - content: "\f2e0"; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} diff --git a/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/css/font-awesome.css.map b/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/css/font-awesome.css.map deleted file mode 100644 index 60763a8640f1c..0000000000000 --- a/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/css/font-awesome.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ -"version": 3, -"mappings": ";;;;;;;AAGA,UAUC;EATC,WAAW,EAAE,aAAa;EAC1B,GAAG,EAAE,+CAAgE;EACrE,GAAG,EAAE,ySAAmG;EAKxG,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;ACTpB,GAAmB;EACjB,OAAO,EAAE,YAAY;EACrB,IAAI,EAAE,uCAAwD;EAC9D,SAAS,EAAE,OAAO;EAClB,cAAc,EAAE,IAAI;EACpB,sBAAsB,EAAE,WAAW;EACnC,uBAAuB,EAAE,SAAS;EAClC,SAAS,EAAE,eAAe;;;ACN5B,MAAsB;EACpB,SAAS,EAAE,SAAS;EACpB,WAAW,EAAE,MAAS;EACtB,cAAc,EAAE,IAAI;;AAEtB,MAAsB;EAAE,SAAS,EAAE,GAAG;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;ACVtC,MAAsB;EACpB,KAAK,EAAE,SAAW;EAClB,UAAU,EAAE,MAAM;;ACDpB,MAAsB;EACpB,YAAY,EAAE,CAAC;EACf,WAAW,ECKU,SAAS;EDJ9B,eAAe,EAAE,IAAI;EACrB,WAAK;IAAE,QAAQ,EAAE,QAAQ;;AAE3B,MAAsB;EACpB,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,UAAa;EACnB,KAAK,ECFgB,SAAS;EDG9B,GAAG,EAAE,SAAU;EACf,UAAU,EAAE,MAAM;EAClB,YAAuB;IACrB,IAAI,EAAE,UAA0B;;AEbpC,UAA0B;EACxB,OAAO,EAAE,gBAAgB;EACzB,MAAM,EAAE,iBAA4B;EACpC,aAAa,EAAE,IAAI;;AAGrB,WAAY;EAAE,KAAK,EAAE,KAAK;;AAC1B,UAAW;EAAE,KAAK,EAAE,IAAI;;AAGtB,aAAY;EAAE,YAAY,EAAE,IAAI;AAChC,cAAa;EAAE,WAAW,EAAE,IAAI;;ACXlC,QAAwB;EACtB,iBAAiB,EAAE,0BAA0B;EACrC,SAAS,EAAE,0BAA0B;;AAG/C,SAAyB;EACvB,iBAAiB,EAAE,4BAA4B;EACvC,SAAS,EAAE,4BAA4B;;AAGjD,0BASC;EARC,EAAG;IACD,iBAAiB,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;EAEjC,IAAK;IACH,iBAAiB,EAAE,cAAc;IACzB,SAAS,EAAE,cAAc;AAIrC,kBASC;EARC,EAAG;IACD,iBAAiB,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;EAEjC,IAAK;IACH,iBAAiB,EAAE,cAAc;IACzB,SAAS,EAAE,cAAc;AC5BrC,aAA8B;ECY5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,aAAgB;EAC/B,aAAa,EAAE,aAAgB;EAC3B,SAAS,EAAE,aAAgB;;ADdrC,cAA8B;ECW5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,cAAgB;EAC/B,aAAa,EAAE,cAAgB;EAC3B,SAAS,EAAE,cAAgB;;ADbrC,cAA8B;ECU5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,cAAgB;EAC/B,aAAa,EAAE,cAAgB;EAC3B,SAAS,EAAE,cAAgB;;ADXrC,mBAAmC;ECejC,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,YAAoB;EACnC,aAAa,EAAE,YAAoB;EAC/B,SAAS,EAAE,YAAoB;;ADjBzC,iBAAmC;ECcjC,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,YAAoB;EACnC,aAAa,EAAE,YAAoB;EAC/B,SAAS,EAAE,YAAoB;;ADZzC;;;;uBAIuC;EACrC,MAAM,EAAE,IAAI;;AEfd,SAAyB;EACvB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,YAAY;EACrB,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,WAAW,EAAE,GAAG;EAChB,cAAc,EAAE,MAAM;;AAExB,0BAAyD;EACvD,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,MAAM;;AAEpB,YAA4B;EAAE,WAAW,EAAE,OAAO;;AAClD,YAA4B;EAAE,SAAS,EAAE,GAAG;;AAC5C,WAA2B;EAAE,KAAK,ELVZ,IAAI;;;;AMN1B,gBAAgC;EAAE,OAAO,ENoQ1B,GAAO;;AMnQtB,gBAAgC;EAAE,OAAO,EN0W1B,GAAO;;AMzWtB,iBAAiC;EAAE,OAAO,ENmb1B,GAAO;;AMlbvB,qBAAqC;EAAE,OAAO,ENmL1B,GAAO;;AMlL3B,gBAAgC;EAAE,OAAO,ENkR1B,GAAO;;AMjRtB,eAA+B;EAAE,OAAO,ENke1B,GAAO;;AMjerB,iBAAiC;EAAE,OAAO,ENse1B,GAAO;;AMrevB,eAA+B;EAAE,OAAO,EN+iB1B,GAAO;;AM9iBrB,eAA+B;EAAE,OAAO,ENyN1B,GAAO;;AMxNrB,mBAAmC;EAAE,OAAO,ENggB1B,GAAO;;AM/fzB,aAA6B;EAAE,OAAO,EN8f1B,GAAO;;AM7fnB,kBAAkC;EAAE,OAAO,EN+f1B,GAAO;;AM9fxB,gBAAgC;EAAE,OAAO,ENoG1B,GAAO;;AMnGtB;;gBAEgC;EAAE,OAAO,ENkgB1B,GAAO;;AMjgBtB,sBAAsC;EAAE,OAAO,ENua1B,GAAO;;AMta5B,uBAAuC;EAAE,OAAO,ENqa1B,GAAO;;AMpa7B,oBAAoC;EAAE,OAAO,EN+X1B,GAAO;;AM9X1B,iBAAiC;EAAE,OAAO,ENsb1B,GAAO;;AMrbvB;cAC8B;EAAE,OAAO,ENwH1B,GAAO;;AMvHpB,kBAAkC;EAAE,OAAO,ENygB1B,GAAO;;AMxgBxB,eAA+B;EAAE,OAAO,ENmQ1B,GAAO;;AMlQrB,iBAAiC;EAAE,OAAO,EN6L1B,GAAO;;AM5LvB,kBAAkC;EAAE,OAAO,EN0G1B,GAAO;;AMzGxB,eAA+B;EAAE,OAAO,EN+Y1B,GAAO;;AM9YrB,mBAAmC;EAAE,OAAO,ENiJ1B,GAAO;;AMhJzB,8BAA8C;EAAE,OAAO,ENI1B,GAAO;;AMHpC,4BAA4C;EAAE,OAAO,ENM1B,GAAO;;AMLlC,gBAAgC;EAAE,OAAO,ENkQ1B,GAAO;;AMjQtB,wBAAwC;EAAE,OAAO,EN4W1B,GAAO;;AM3W9B;iBACiC;EAAE,OAAO,ENmY1B,GAAO;;AMlYvB,kBAAkC;EAAE,OAAO,EN8X1B,GAAO;;AM7XxB,mBAAmC;EAAE,OAAO,ENiS1B,GAAO;;AMhSzB,eAA+B;EAAE,OAAO,ENoS1B,GAAO;;AMnSrB,eAA+B;EAAE,OAAO,ENgM1B,GAAO;;AM/LrB,qBAAqC;EAAE,OAAO,EN+O1B,GAAO;;AM9O3B,qBAAqC;EAAE,OAAO,EN8hB1B,GAAO;;AM7hB3B,sBAAsC;EAAE,OAAO,EN4hB1B,GAAO;;AM3hB5B,oBAAoC;EAAE,OAAO,EN6hB1B,GAAO;;AM5hB1B,iBAAiC;EAAE,OAAO,EN2W1B,GAAO;;AM1WvB,kBAAkC;EAAE,OAAO,ENW1B,GAAO;;AMVxB,cAA8B;EAAE,OAAO,ENod1B,GAAO;;AMndpB,eAA+B;EAAE,OAAO,ENod1B,GAAO;;AMndrB,eAA+B;EAAE,OAAO,EN2B1B,GAAO;;AM1BrB,mBAAmC;EAAE,OAAO,EN2B1B,GAAO;;AM1BzB,gBAAgC;EAAE,OAAO,ENkW1B,GAAO;;AMjWtB,iBAAiC;EAAE,OAAO,ENwC1B,GAAO;;AMvCvB,eAA+B;EAAE,OAAO,EN8L1B,GAAO;;AM7LrB,eAA+B;EAAE,OAAO,ENmB1B,GAAO;;AMlBrB,iBAAiC;EAAE,OAAO,ENoP1B,GAAO;;AMnPvB,sBAAsC;EAAE,OAAO,ENid1B,GAAO;;AMhd5B,qBAAqC;EAAE,OAAO,ENid1B,GAAO;;AMhd3B,qBAAqC;EAAE,OAAO,EN1C1B,GAAO;;AM2C3B,uBAAuC;EAAE,OAAO,EN7C1B,GAAO;;AM8C7B,sBAAsC;EAAE,OAAO,EN3C1B,GAAO;;AM4C5B,wBAAwC;EAAE,OAAO,EN9C1B,GAAO;;AM+C9B,eAA+B;EAAE,OAAO,ENwQ1B,GAAO;;AMvQrB;kBACkC;EAAE,OAAO,ENmT1B,GAAO;;AMlTxB,iBAAiC;EAAE,OAAO,ENmO1B,GAAO;;AMlOvB,uBAAuC;EAAE,OAAO,ENigB1B,GAAO;;AMhgB7B;;oBAEoC;EAAE,OAAO,EN+T1B,GAAO;;AM9T1B,iBAAiC;EAAE,OAAO,ENwT1B,GAAO;;AMvTvB,qBAAqC;EAAE,OAAO,EN+Q1B,GAAO;;AM9Q3B,iBAAiC;EAAE,OAAO,EN5D1B,GAAO;;AM6DvB,eAA+B;EAAE,OAAO,EN8c1B,GAAO;;AM7crB;0BAC0C;EAAE,OAAO,ENqT1B,GAAO;;AMpThC,yBAAyC;EAAE,OAAO,ENuX1B,GAAO;;AMtX/B,yBAAyC;EAAE,OAAO,EN0C1B,GAAO;;AMzC/B,iBAAiC;EAAE,OAAO,ENjC1B,GAAO;;AMkCvB,wBAAwC;EAAE,OAAO,ENma1B,GAAO;;AMla9B,wBAAwC;EAAE,OAAO,EN4H1B,GAAO;;AM3H9B,mBAAmC;EAAE,OAAO,EN7B1B,GAAO;;AM8BzB,eAA+B;EAAE,OAAO,EN0T1B,GAAO;;AMzTrB,gBAAgC;EAAE,OAAO,ENwS1B,GAAO;;AMvStB,eAA+B;EAAE,OAAO,ENia1B,GAAO;;AMharB,kBAAkC;EAAE,OAAO,ENgK1B,GAAO;;AM/JxB,uBAAuC;EAAE,OAAO,ENuH1B,GAAO;;AMtH7B,uBAAuC;EAAE,OAAO,EN4Z1B,GAAO;;AM3Z7B,gBAAgC;EAAE,OAAO,EN4F1B,GAAO;;AM3FtB,uBAAuC;EAAE,OAAO,ENoC1B,GAAO;;AMnC7B,wBAAwC;EAAE,OAAO,ENoC1B,GAAO;;AMnC9B,sBAAsC;EAAE,OAAO,ENsT1B,GAAO;;AMrT5B,uBAAuC;EAAE,OAAO,ENyQ1B,GAAO;;AMxQ7B,uBAAuC;EAAE,OAAO,ENwb1B,GAAO;;AMvb7B,uBAAuC;EAAE,OAAO,ENsB1B,GAAO;;AMrB7B,0BAA0C;EAAE,OAAO,EN2T1B,GAAO;;AM1ThC,sBAAsC;EAAE,OAAO,ENsM1B,GAAO;;AMrM5B,qBAAqC;EAAE,OAAO,EN6D1B,GAAO;;AM5D3B,yBAAyC;EAAE,OAAO,ENob1B,GAAO;;AMnb/B,yBAAyC;EAAE,OAAO,ENkB1B,GAAO;;AMjB/B,cAA8B;EAAE,OAAO,EN/C1B,GAAO;;AMgDpB,qBAAqC;EAAE,OAAO,EN3D1B,GAAO;;AM4D3B,sBAAsC;EAAE,OAAO,EN3D1B,GAAO;;AM4D5B,mBAAmC;EAAE,OAAO,EN3D1B,GAAO;;AM4DzB,qBAAqC;EAAE,OAAO,EN/D1B,GAAO;;AMgE3B;gBACgC;EAAE,OAAO,ENqV1B,GAAO;;AMpVtB,iBAAiC;EAAE,OAAO,ENuF1B,GAAO;;AMtFvB,mBAAmC;EAAE,OAAO,EN4C1B,GAAO;;AM3CzB,eAA+B;EAAE,OAAO,ENmS1B,GAAO;;AMlSrB,gBAAgC;EAAE,OAAO,ENsP1B,GAAO;;AMrPtB,mBAAmC;EAAE,OAAO,EN9D1B,GAAO;;AM+DzB,6BAA6C;EAAE,OAAO,ENgF1B,GAAO;;AM/EnC,eAA+B;EAAE,OAAO,EN+I1B,GAAO;;AM9IrB,eAA+B;EAAE,OAAO,ENoM1B,GAAO;;AMnMrB,eAA+B;EAAE,OAAO,ENmH1B,GAAO;;AMlHrB,cAA8B;EAAE,OAAO,ENiF1B,GAAO;;AMhFpB,oBAAoC;EAAE,OAAO,ENiF1B,GAAO;;AMhF1B;+BAC+C;EAAE,OAAO,EN0E1B,GAAO;;AMzErC,gBAAgC;EAAE,OAAO,ENmR1B,GAAO;;AMlRtB,mBAAmC;EAAE,OAAO,EN/B1B,GAAO;;AMgCzB,iBAAiC;EAAE,OAAO,ENoS1B,GAAO;;AMnSvB,kBAAkC;EAAE,OAAO,ENwB1B,GAAO;;AMvBxB,iBAAiC;EAAE,OAAO,ENqN1B,GAAO;;AMpNvB,qBAAqC;EAAE,OAAO,ENE1B,GAAO;;AMD3B,uBAAuC;EAAE,OAAO,ENF1B,GAAO;;AMG7B,kBAAkC;EAAE,OAAO,EN2S1B,GAAO;;AM1SxB,wBAAwC;EAAE,OAAO,ENyU1B,GAAO;;AMxU9B,iBAAiC;EAAE,OAAO,EN8G1B,GAAO;;AM7GvB,sBAAsC;EAAE,OAAO,EN+G1B,GAAO;;AM9G5B,mBAAmC;EAAE,OAAO,ENnF1B,GAAO;;AMoFzB,mBAAmC;EAAE,OAAO,ENrF1B,GAAO;;AMsFzB;oBACoC;EAAE,OAAO,EN/E1B,GAAO;;AMgF1B,yBAAyC;EAAE,OAAO,ENua1B,GAAO;;AMta/B,0BAA0C;EAAE,OAAO,ENmE1B,GAAO;;AMlEhC,uBAAuC;EAAE,OAAO,EN5C1B,GAAO;;AM6C7B,cAA8B;EAAE,OAAO,ENqK1B,GAAO;;AMpKpB;eAC+B;EAAE,OAAO,ENK1B,GAAO;;AMJrB,mBAAmC;EAAE,OAAO,ENQ1B,GAAO;;AMPzB,sBAAsC;EAAE,OAAO,ENmY1B,GAAO;;AMlY5B,wBAAwC;EAAE,OAAO,ENiY1B,GAAO;;AMhY9B,oBAAoC;EAAE,OAAO,EN2V1B,GAAO;;AM1V1B,kBAAkC;EAAE,OAAO,ENyI1B,GAAO;;AMxIxB,mBAAmC;EAAE,OAAO,ENyT1B,GAAO;;AMxTzB,0BAA0C;EAAE,OAAO,ENiL1B,GAAO;;AMhLhC,qBAAqC;EAAE,OAAO,EN0X1B,GAAO;;AMzX3B,wBAAwC;EAAE,OAAO,EN8C1B,GAAO;;AM7C9B,kBAAkC;EAAE,OAAO,ENoT1B,GAAO;;AMnTxB,iBAAiC;EAAE,OAAO,EN8Y1B,GAAO;;AM7YvB,wBAAwC;EAAE,OAAO,EN6G1B,GAAO;;AM5G9B,iBAAiC;EAAE,OAAO,EN8Z1B,GAAO;;AM7ZvB,kBAAkC;EAAE,OAAO,EN+J1B,GAAO;;AM9JxB,gBAAgC;EAAE,OAAO,ENsO1B,GAAO;;AMrOtB,mBAAmC;EAAE,OAAO,EN2U1B,GAAO;;AM1UzB,qBAAqC;EAAE,OAAO,EN/E1B,GAAO;;AMgF3B,uBAAuC;EAAE,OAAO,ENoO1B,GAAO;;AMnO7B,kBAAkC;EAAE,OAAO,EN8Y1B,GAAO;;AM7YxB;mBACmC;EAAE,OAAO,ENuC1B,GAAO;;AMtCzB,iBAAiC;EAAE,OAAO,ENiG1B,GAAO;;AMhGvB,iBAAiC;EAAE,OAAO,ENiZ1B,GAAO;;AMhZvB,sBAAsC;EAAE,OAAO,ENR1B,GAAO;;AMS5B,cAA8B;EAAE,OAAO,EN4Q1B,GAAO;;AM3QpB,gBAAgC;EAAE,OAAO,ENgH1B,GAAO;;AM/GtB,mBAAmC;EAAE,OAAO,ENnF1B,GAAO;;AMoFzB,eAA+B;EAAE,OAAO,ENzG1B,GAAO;;AM0GrB,sBAAsC;EAAE,OAAO,ENzD1B,GAAO;;AM0D5B,uBAAuC;EAAE,OAAO,EN0G1B,GAAO;;AMzG7B,sBAAsC;EAAE,OAAO,ENwG1B,GAAO;;AMvG5B,oBAAoC;EAAE,OAAO,ENyG1B,GAAO;;AMxG1B,sBAAsC;EAAE,OAAO,ENqG1B,GAAO;;AMpG5B,4BAA4C;EAAE,OAAO,EN5I1B,GAAO;;AM6IlC,6BAA6C;EAAE,OAAO,ENxI1B,GAAO;;AMyInC,0BAA0C;EAAE,OAAO,ENxI1B,GAAO;;AMyIhC,4BAA4C;EAAE,OAAO,ENhJ1B,GAAO;;AMiJlC,gBAAgC;EAAE,OAAO,ENsF1B,GAAO;;AMrFtB,iBAAiC;EAAE,OAAO,ENia1B,GAAO;;AMhavB,gBAAgC;EAAE,OAAO,ENiV1B,GAAO;;AMhVtB,iBAAiC;EAAE,OAAO,ENgD1B,GAAO;;AM/CvB,oBAAoC;EAAE,OAAO,ENvG1B,GAAO;;AMwG1B,qBAAqC;EAAE,OAAO,ENzI1B,GAAO;;AM0I3B;gBACgC;EAAE,OAAO,ENqY1B,GAAO;;AMpYtB;eAC+B;EAAE,OAAO,ENuI1B,GAAO;;AMtIrB,gBAAgC;EAAE,OAAO,ENpD1B,GAAO;;AMqDtB,gBAAgC;EAAE,OAAO,EN+C1B,GAAO;;AM9CtB;mBACmC;EAAE,OAAO,ENwP1B,GAAO;;AMvPzB;kBACkC;EAAE,OAAO,ENkC1B,GAAO;;AMjCxB,oBAAoC;EAAE,OAAO,ENsL1B,GAAO;;AMrL1B;mBACmC;EAAE,OAAO,EN0C1B,GAAO;;AMzCzB,iBAAiC;EAAE,OAAO,ENiS1B,GAAO;;AMhSvB;;eAE+B;EAAE,OAAO,EN9I1B,GAAO;;AM+IrB,kBAAkC;EAAE,OAAO,ENgI1B,GAAO;;AM/HxB,kBAAkC;EAAE,OAAO,EN8H1B,GAAO;;AM7HxB,wBAAwC;EAAE,OAAO,EN4S1B,GAAO;;AM3S9B,oBAAoC;EAAE,OAAO,ENoW1B,GAAO;;AMnW1B,gBAAgC;EAAE,OAAO,ENmT1B,GAAO;;AMlTtB,gBAAgC;EAAE,OAAO,ENkI1B,GAAO;;AMjItB,gBAAgC;EAAE,OAAO,ENuV1B,GAAO;;AMtVtB,oBAAoC;EAAE,OAAO,ENwL1B,GAAO;;AMvL1B,2BAA2C;EAAE,OAAO,ENyL1B,GAAO;;AMxLjC,6BAA6C;EAAE,OAAO,ENyD1B,GAAO;;AMxDnC,sBAAsC;EAAE,OAAO,ENuD1B,GAAO;;AMtD5B,gBAAgC;EAAE,OAAO,ENsJ1B,GAAO;;AMrJtB,qBAAqC;EAAE,OAAO,ENtH1B,GAAO;;AMuH3B,mBAAmC;EAAE,OAAO,ENhH1B,GAAO;;AMiHzB,qBAAqC;EAAE,OAAO,ENvH1B,GAAO;;AMwH3B,sBAAsC;EAAE,OAAO,ENvH1B,GAAO;;AMwH5B,kBAAkC;EAAE,OAAO,ENvE1B,GAAO;;AMwExB;eAC+B;EAAE,OAAO,EN2P1B,GAAO;;AM1PrB;oBACoC;EAAE,OAAO,EN+P1B,GAAO;;AM9P1B;mBACmC;EAAE,OAAO,EN4P1B,GAAO;;AM3PzB,mBAAmC;EAAE,OAAO,ENxC1B,GAAO;;AMyCzB,mBAAmC;EAAE,OAAO,ENkG1B,GAAO;;AMjGzB;eAC+B;EAAE,OAAO,EN8U1B,GAAO;;AM7UrB;gBACgC;EAAE,OAAO,ENqB1B,GAAO;;AMpBtB;qBACqC;EAAE,OAAO,EN2R1B,GAAO;;AM1R3B,oBAAoC;EAAE,OAAO,ENpF1B,GAAO;;AMqF1B,qBAAqC;EAAE,OAAO,ENnF1B,GAAO;;AMoF3B;eAC+B;EAAE,OAAO,ENjK1B,GAAO;;AMkKrB,kBAAkC;EAAE,OAAO,ENkO1B,GAAO;;AMjOxB,mBAAmC;EAAE,OAAO,ENkU1B,GAAO;;AMjUzB;oBACoC;EAAE,OAAO,EN1G1B,GAAO;;AM2G1B,sBAAsC;EAAE,OAAO,ENgF1B,GAAO;;AM/E5B,mBAAmC;EAAE,OAAO,ENnD1B,GAAO;;AMoDzB,yBAAyC;EAAE,OAAO,ENzG1B,GAAO;;AM0G/B,uBAAuC;EAAE,OAAO,ENzG1B,GAAO;;AM0G7B,kBAAkC;EAAE,OAAO,ENsU1B,GAAO;;AMrUxB,sBAAsC;EAAE,OAAO,EN+P1B,GAAO;;AM9P5B,mBAAmC;EAAE,OAAO,ENsQ1B,GAAO;;AMrQzB,iBAAiC;EAAE,OAAO,ENvL1B,GAAO;;AMwLvB,iBAAiC;EAAE,OAAO,ENzG1B,GAAO;;AM0GvB,kBAAkC;EAAE,OAAO,ENtF1B,GAAO;;AMuFxB,sBAAsC;EAAE,OAAO,EN3B1B,GAAO;;AM4B5B,qBAAqC;EAAE,OAAO,ENxK1B,GAAO;;AMyK3B,qBAAqC;EAAE,OAAO,ENkC1B,GAAO;;AMjC3B,oBAAoC;EAAE,OAAO,EN3O1B,GAAO;;AM4O1B,iBAAiC;EAAE,OAAO,ENiG1B,GAAO;;AMhGvB,sBAAsC;EAAE,OAAO,EN/C1B,GAAO;;AMgD5B,eAA+B;EAAE,OAAO,ENpM1B,GAAO;;AMqMrB,mBAAmC;EAAE,OAAO,ENe1B,GAAO;;AMdzB,sBAAsC;EAAE,OAAO,ENgJ1B,GAAO;;AM/I5B,4BAA4C;EAAE,OAAO,EN5O1B,GAAO;;AM6OlC,6BAA6C;EAAE,OAAO,EN5O1B,GAAO;;AM6OnC,0BAA0C;EAAE,OAAO,EN5O1B,GAAO;;AM6OhC,4BAA4C;EAAE,OAAO,ENhP1B,GAAO;;AMiPlC,qBAAqC;EAAE,OAAO,EN5O1B,GAAO;;AM6O3B,sBAAsC;EAAE,OAAO,EN5O1B,GAAO;;AM6O5B,mBAAmC;EAAE,OAAO,EN5O1B,GAAO;;AM6OzB,qBAAqC;EAAE,OAAO,ENhP1B,GAAO;;AMiP3B,kBAAkC;EAAE,OAAO,ENlG1B,GAAO;;AMmGxB,iBAAiC;EAAE,OAAO,ENuC1B,GAAO;;AMtCvB,iBAAiC;EAAE,OAAO,ENoP1B,GAAO;;AMnPvB;iBACiC;EAAE,OAAO,ENyF1B,GAAO;;AMxFvB,mBAAmC;EAAE,OAAO,EN9I1B,GAAO;;AM+IzB,qBAAqC;EAAE,OAAO,EN0I1B,GAAO;;AMzI3B,sBAAsC;EAAE,OAAO,EN0I1B,GAAO;;AMzI5B,kBAAkC;EAAE,OAAO,ENgN1B,GAAO;;AM/MxB,iBAAiC;EAAE,OAAO,ENnJ1B,GAAO;;AMoJvB;gBACgC;EAAE,OAAO,ENkJ1B,GAAO;;AMjJtB,qBAAqC;EAAE,OAAO,ENnB1B,GAAO;;AMoB3B,mBAAmC;EAAE,OAAO,ENxC1B,GAAO;;AMyCzB,wBAAwC;EAAE,OAAO,ENvC1B,GAAO;;AMwC9B,kBAAkC;EAAE,OAAO,EN0L1B,GAAO;;AMzLxB,kBAAkC;EAAE,OAAO,ENpC1B,GAAO;;AMqCxB,gBAAgC;EAAE,OAAO,ENoE1B,GAAO;;AMnEtB,kBAAkC;EAAE,OAAO,ENpC1B,GAAO;;AMqCxB,qBAAqC;EAAE,OAAO,ENkB1B,GAAO;;AMjB3B,iBAAiC;EAAE,OAAO,ENrD1B,GAAO;;AMsDvB,yBAAyC;EAAE,OAAO,ENvD1B,GAAO;;AMwD/B,mBAAmC;EAAE,OAAO,ENuO1B,GAAO;;AMtOzB,eAA+B;EAAE,OAAO,ENtJ1B,GAAO;;AMuJrB;oBACoC;EAAE,OAAO,ENqI1B,GAAO;;AMpI1B;;sBAEsC;EAAE,OAAO,ENuM1B,GAAO;;AMtM5B,yBAAyC;EAAE,OAAO,ENkC1B,GAAO;;AMjC/B,eAA+B;EAAE,OAAO,EN5I1B,GAAO;;AM6IrB,oBAAoC;EAAE,OAAO,EN7J1B,GAAO;;AM8J1B;uBACuC;EAAE,OAAO,EN1L1B,GAAO;;AM2L7B,mBAAmC;EAAE,OAAO,EN4G1B,GAAO;;AM3GzB,eAA+B;EAAE,OAAO,ENT1B,GAAO;;AMUrB,sBAAsC;EAAE,OAAO,ENhH1B,GAAO;;AMiH5B,sBAAsC;EAAE,OAAO,EN8M1B,GAAO;;AM7M5B,oBAAoC;EAAE,OAAO,ENyM1B,GAAO;;AMxM1B,iBAAiC;EAAE,OAAO,ENvH1B,GAAO;;AMwHvB,uBAAuC;EAAE,OAAO,ENmG1B,GAAO;;AMlG7B,qBAAqC;EAAE,OAAO,EN8C1B,GAAO;;AM7C3B,2BAA2C;EAAE,OAAO,EN8C1B,GAAO;;AM7CjC,iBAAiC;EAAE,OAAO,ENgJ1B,GAAO;;AM/IvB,qBAAqC;EAAE,OAAO,EN5N1B,GAAO;;AM6N3B,4BAA4C;EAAE,OAAO,ENjF1B,GAAO;;AMkFlC,iBAAiC;EAAE,OAAO,ENoH1B,GAAO;;AMnHvB,iBAAiC;EAAE,OAAO,ENkC1B,GAAO;;AMjCvB,8BAA8C;EAAE,OAAO,ENlM1B,GAAO;;AMmMpC,+BAA+C;EAAE,OAAO,ENlM1B,GAAO;;AMmMrC,4BAA4C;EAAE,OAAO,ENlM1B,GAAO;;AMmMlC,8BAA8C;EAAE,OAAO,ENtM1B,GAAO;;AMuMpC,gBAAgC;EAAE,OAAO,EN/B1B,GAAO;;AMgCtB,eAA+B;EAAE,OAAO,ENjK1B,GAAO;;AMkKrB,iBAAiC;EAAE,OAAO,EN9S1B,GAAO;;AM+SvB,qBAAqC;EAAE,OAAO,ENmP1B,GAAO;;AMlP3B,mBAAmC;EAAE,OAAO,EN9O1B,GAAO;;AM+OzB,qBAAqC;EAAE,OAAO,EN/I1B,GAAO;;AMgJ3B,qBAAqC;EAAE,OAAO,EN/I1B,GAAO;;AMgJ3B,qBAAqC;EAAE,OAAO,EN4G1B,GAAO;;AM3G3B,sBAAsC;EAAE,OAAO,ENsE1B,GAAO;;AMrE5B,iBAAiC;EAAE,OAAO,EN2M1B,GAAO;;AM1MvB,uBAAuC;EAAE,OAAO,EN6B1B,GAAO;;AM5B7B,yBAAyC;EAAE,OAAO,EN6B1B,GAAO;;AM5B/B,mBAAmC;EAAE,OAAO,ENhB1B,GAAO;;AMiBzB,qBAAqC;EAAE,OAAO,ENlB1B,GAAO;;AMmB3B,uBAAuC;EAAE,OAAO,ENvN1B,GAAO;;AMwN7B,wBAAwC;EAAE,OAAO,ENiD1B,GAAO;;AMhD9B,+BAA+C;EAAE,OAAO,EN3I1B,GAAO;;AM4IrC,uBAAuC;EAAE,OAAO,ENkH1B,GAAO;;AMjH7B,kBAAkC;EAAE,OAAO,EN1L1B,GAAO;;AM2LxB;8BAC8C;EAAE,OAAO,ENjP1B,GAAO;;AMkPpC;4BAC4C;EAAE,OAAO,ENhP1B,GAAO;;AMiPlC;+BAC+C;EAAE,OAAO,ENnP1B,GAAO;;AMoPrC;cAC8B;EAAE,OAAO,EN7J1B,GAAO;;AM8JpB,cAA8B;EAAE,OAAO,EN/F1B,GAAO;;AMgGpB;cAC8B;EAAE,OAAO,EN4N1B,GAAO;;AM3NpB;cAC8B;EAAE,OAAO,ENvD1B,GAAO;;AMwDpB;;;cAG8B;EAAE,OAAO,ENrD1B,GAAO;;AMsDpB;;cAE8B;EAAE,OAAO,EN8E1B,GAAO;;AM7EpB;cAC8B;EAAE,OAAO,ENtD1B,GAAO;;AMuDpB;cAC8B;EAAE,OAAO,ENzR1B,GAAO;;AM0RpB,eAA+B;EAAE,OAAO,ENzJ1B,GAAO;;AM0JrB,oBAAoC;EAAE,OAAO,EN7I1B,GAAO;;AM8I1B,yBAAyC;EAAE,OAAO,EN2G1B,GAAO;;AM1G/B,0BAA0C;EAAE,OAAO,EN2G1B,GAAO;;AM1GhC,0BAA0C;EAAE,OAAO,EN2G1B,GAAO;;AM1GhC,2BAA2C;EAAE,OAAO,EN2G1B,GAAO;;AM1GjC,2BAA2C;EAAE,OAAO,EN8G1B,GAAO;;AM7GjC,4BAA4C;EAAE,OAAO,EN8G1B,GAAO;;AM7GlC,oBAAoC;EAAE,OAAO,ENgK1B,GAAO;;AM/J1B,sBAAsC;EAAE,OAAO,EN4J1B,GAAO;;AM3J5B,yBAAyC;EAAE,OAAO,ENwO1B,GAAO;;AMvO/B,kBAAkC;EAAE,OAAO,ENqO1B,GAAO;;AMpOxB,eAA+B;EAAE,OAAO,EN+N1B,GAAO;;AM9NrB,sBAAsC;EAAE,OAAO,EN+N1B,GAAO;;AM9N5B,uBAAuC;EAAE,OAAO,ENmO1B,GAAO;;AMlO7B,kBAAkC;EAAE,OAAO,ENxM1B,GAAO;;AMyMxB,yBAAyC;EAAE,OAAO,EN+G1B,GAAO;;AM9G/B,oBAAoC;EAAE,OAAO,ENnF1B,GAAO;;AMoF1B,iBAAiC;EAAE,OAAO,EN/I1B,GAAO;;AMgJvB,cAA8B;EAAE,OAAO,ENhX1B,GAAO;;AMiXpB,oBAAoC;EAAE,OAAO,ENxT1B,GAAO;;AMyT1B,2BAA2C;EAAE,OAAO,ENxT1B,GAAO;;AMyTjC,iBAAiC;EAAE,OAAO,ENyK1B,GAAO;;AMxKvB,wBAAwC;EAAE,OAAO,ENyK1B,GAAO;;AMxK9B,0BAA0C;EAAE,OAAO,ENtD1B,GAAO;;AMuDhC,wBAAwC;EAAE,OAAO,ENpD1B,GAAO;;AMqD9B,0BAA0C;EAAE,OAAO,ENvD1B,GAAO;;AMwDhC,2BAA2C;EAAE,OAAO,ENvD1B,GAAO;;AMwDjC,gBAAgC;EAAE,OAAO,ENxW1B,GAAO;;AMyWtB,kBAAkC;EAAE,OAAO,EN0M1B,GAAO;;AMzMxB,kBAAkC;EAAE,OAAO,ENpX1B,GAAO;;AMqXxB,gBAAgC;EAAE,OAAO,ENpE1B,GAAO;;AMqEtB,mBAAmC;EAAE,OAAO,EN1N1B,GAAO;;AM2NzB,gBAAgC;EAAE,OAAO,ENqE1B,GAAO;;AMpEtB,qBAAqC;EAAE,OAAO,ENtJ1B,GAAO;;AMuJ3B,iBAAiC;EAAE,OAAO,ENuJ1B,GAAO;;AMtJvB,iBAAiC;EAAE,OAAO,EN/L1B,GAAO;;AMgMvB,eAA+B;EAAE,OAAO,EN1D1B,GAAO;;AM2DrB;mBACmC;EAAE,OAAO,ENnI1B,GAAO;;AMoIzB,gBAAgC;EAAE,OAAO,EN2G1B,GAAO;;AM1GtB,iBAAiC;EAAE,OAAO,ENxC1B,GAAO;;AMyCvB,kBAAkC;EAAE,OAAO,ENrX1B,GAAO;;AMsXxB,cAA8B;EAAE,OAAO,ENpU1B,GAAO;;AMqUpB,aAA6B;EAAE,OAAO,ENgL1B,GAAO;;AM/KnB,gBAAgC;EAAE,OAAO,ENqL1B,GAAO;;AMpLtB,iBAAiC;EAAE,OAAO,ENa1B,GAAO;;AMZvB,oBAAoC;EAAE,OAAO,ENrC1B,GAAO;;AMsC1B,yBAAyC;EAAE,OAAO,EN8E1B,GAAO;;AM7E/B,+BAA+C;EAAE,OAAO,ENtX1B,GAAO;;AMuXrC,8BAA8C;EAAE,OAAO,ENxX1B,GAAO;;AMyXpC;8BAC8C;EAAE,OAAO,EN3T1B,GAAO;;AM4TpC,uBAAuC;EAAE,OAAO,ENjP1B,GAAO;;AMkP7B,qBAAqC;EAAE,OAAO,EN+K1B,GAAO;;AM9K3B,uBAAuC;EAAE,OAAO,ENmK1B,GAAO;;AMlK7B;cAC8B;EAAE,OAAO,ENoI1B,GAAO;;AMnIpB,wBAAwC;EAAE,OAAO,ENjB1B,GAAO;;AMkB9B,wBAAwC;EAAE,OAAO,EN6D1B,GAAO;;AM5D9B,gBAAgC;EAAE,OAAO,EN2C1B,GAAO;;AM1CtB,0BAA0C;EAAE,OAAO,EN7O1B,GAAO;;AM8OhC,oBAAoC;EAAE,OAAO,EN2K1B,GAAO;;AM1K1B,iBAAiC;EAAE,OAAO,ENvD1B,GAAO;;AMwDvB;;qBAEqC;EAAE,OAAO,ENsI1B,GAAO;;AMrI3B;yBACyC;EAAE,OAAO,ENjK1B,GAAO;;AMkK/B,gBAAgC;EAAE,OAAO,ENwK1B,GAAO;;AMvKtB,iBAAiC;EAAE,OAAO,ENvK1B,GAAO;;AMwKvB,iBAAiC;EAAE,OAAO,ENhB1B,GAAO;;AMiBvB,wBAAwC;EAAE,OAAO,ENhB1B,GAAO;;AMiB9B,6BAA6C;EAAE,OAAO,ENsE1B,GAAO;;AMrEnC,sBAAsC;EAAE,OAAO,ENoE1B,GAAO;;AMnE5B,oBAAoC;EAAE,OAAO,EN7Q1B,GAAO;;AM8Q1B,eAA+B;EAAE,OAAO,EN1Q1B,GAAO;;AM2QrB,qBAAqC;EAAE,OAAO,ENjD1B,GAAO;;AMkD3B,yBAAyC;EAAE,OAAO,ENjD1B,GAAO;;AMkD/B,iBAAiC;EAAE,OAAO,ENvQ1B,GAAO;;AMwQvB,iBAAiC;EAAE,OAAO,EN9I1B,GAAO;;AM+IvB,mBAAmC;EAAE,OAAO,ENzI1B,GAAO;;AM0IzB,cAA8B;EAAE,OAAO,EN9O1B,GAAO;;AM+OpB,mBAAmC;EAAE,OAAO,EN3W1B,GAAO;;AM4WzB,gBAAgC;EAAE,OAAO,EN9T1B,GAAO;;AM+TtB,cAA8B;EAAE,OAAO,ENnE1B,GAAO;;AMoEpB,gBAAgC;EAAE,OAAO,ENoC1B,GAAO;;AMnCtB,eAA+B;EAAE,OAAO,ENjS1B,GAAO;;AMkSrB,gBAAgC;EAAE,OAAO,ENjS1B,GAAO;;AMkStB,kBAAkC;EAAE,OAAO,ENtY1B,GAAO;;AMuYxB,yBAAyC;EAAE,OAAO,ENtY1B,GAAO;;AMuY/B,gBAAgC;EAAE,OAAO,EN2C1B,GAAO;;AM1CtB,uBAAuC;EAAE,OAAO,EN2C1B,GAAO;;AM1C7B,kBAAkC;EAAE,OAAO,ENvC1B,GAAO;;AMwCxB;cAC8B;EAAE,OAAO,EN3W1B,GAAO;;AM4WpB;eAC+B;EAAE,OAAO,EN2D1B,GAAO;;AM1DrB,eAA+B;EAAE,OAAO,ENuF1B,GAAO;;AMtFrB,kBAAkC;EAAE,OAAO,ENwB1B,GAAO;;AMvBxB,qBAAqC;EAAE,OAAO,ENpS1B,GAAO;;AMqS3B,qBAAqC;EAAE,OAAO,ENkB1B,GAAO;;AMjB3B,mBAAmC;EAAE,OAAO,EN1S1B,GAAO;;AM2SzB,qBAAqC;EAAE,OAAO,ENxP1B,GAAO;;AMyP3B,sBAAsC;EAAE,OAAO,ENjP1B,GAAO;;AMkP5B,uBAAuC;EAAE,OAAO,EN9P1B,GAAO;;AM+P7B,4BAA4C;EAAE,OAAO,ENxP1B,GAAO;;AMyPlC;;uBAEuC;EAAE,OAAO,ENjQ1B,GAAO;;AMkQ7B;yBACyC;EAAE,OAAO,ENvQ1B,GAAO;;AMwQ/B;uBACuC;EAAE,OAAO,ENxQ1B,GAAO;;AMyQ7B;uBACuC;EAAE,OAAO,EN7P1B,GAAO;;AM8P7B,sBAAsC;EAAE,OAAO,EN1Q1B,GAAO;;AM2Q5B,eAA+B;EAAE,OAAO,ENsG1B,GAAO;;AMrGrB,kBAAkC;EAAE,OAAO,ENlV1B,GAAO;;AMmVxB,mBAAmC;EAAE,OAAO,ENnL1B,GAAO;;AMoLzB;;;;oBAIoC;EAAE,OAAO,ENxK1B,GAAO;;AMyK1B,yBAAyC;EAAE,OAAO,ENpW1B,GAAO;;AMqW/B;gBACgC;EAAE,OAAO,EN1E1B,GAAO;;AM2EtB;iBACiC;EAAE,OAAO,ENpT1B,GAAO;;AMqTvB,qBAAqC;EAAE,OAAO,EN1O1B,GAAO;;AM2O3B,cAA8B;EAAE,OAAO,EN5O1B,GAAO;;AM6OpB,sBAAsC;EAAE,OAAO,EN7N1B,GAAO;;AM8N5B,wBAAwC;EAAE,OAAO,ENwB1B,GAAO;;AMvB9B,aAA6B;EAAE,OAAO,ENzF1B,GAAO;;AM0FnB;iBACiC;EAAE,OAAO,EN2F1B,GAAO;;AM1FvB;sBACsC;EAAE,OAAO,EN9H1B,GAAO;;AM+H5B;wBACwC;EAAE,OAAO,EN/H1B,GAAO;;AMgI9B,kBAAkC;EAAE,OAAO,EN3N1B,GAAO;;AM4NxB;sBACsC;EAAE,OAAO,ENrX1B,GAAO;;AMsX5B,iBAAiC;EAAE,OAAO,ENnO1B,GAAO;;AMoOvB,oBAAoC;EAAE,OAAO,ENlI1B,GAAO;;AMmI1B,kBAAkC;EAAE,OAAO,EN1C1B,GAAO;;AM2CxB,oBAAoC;EAAE,OAAO,EN7D1B,GAAO;;AM8D1B,2BAA2C;EAAE,OAAO,EN7D1B,GAAO;;AM8DjC,eAA+B;EAAE,OAAO,ENpb1B,GAAO;;AMqbrB;mBACmC;EAAE,OAAO,ENzQ1B,GAAO;;AM0QzB,cAA8B;EAAE,OAAO,ENsC1B,GAAO;;AMrCpB,qBAAqC;EAAE,OAAO,EN/b1B,GAAO;;AMgc3B,eAA+B;EAAE,OAAO,ENrH1B,GAAO;;AMsHrB,qBAAqC;EAAE,OAAO,ENlD1B,GAAO;;AMmD3B,iBAAiC;EAAE,OAAO,ENsC1B,GAAO;;AMrCvB,eAA+B;EAAE,OAAO,ENiF1B,GAAO;;AMhFrB,sBAAsC;EAAE,OAAO,ENvJ1B,GAAO;;AMwJ5B,eAA+B;EAAE,OAAO,ENuE1B,GAAO;;AMtErB,qBAAqC;EAAE,OAAO,ENjb1B,GAAO;;AMkb3B,iBAAiC;EAAE,OAAO,EN9I1B,GAAO;;AM+IvB,wBAAwC;EAAE,OAAO,ENhQ1B,GAAO;;AMiQ9B,kBAAkC;EAAE,OAAO,EN9Z1B,GAAO;;AM+ZxB,wBAAwC;EAAE,OAAO,ENla1B,GAAO;;AMma9B,sBAAsC;EAAE,OAAO,ENpa1B,GAAO;;AMqa5B,kBAAkC;EAAE,OAAO,ENta1B,GAAO;;AMuaxB,oBAAoC;EAAE,OAAO,ENpa1B,GAAO;;AMqa1B,oBAAoC;EAAE,OAAO,ENpa1B,GAAO;;AMqa1B,qBAAqC;EAAE,OAAO,ENld1B,GAAO;;AMmd3B,uBAAuC;EAAE,OAAO,ENld1B,GAAO;;AMmd7B,gBAAgC;EAAE,OAAO,ENY1B,GAAO;;AMXtB,oBAAoC;EAAE,OAAO,EN3X1B,GAAO;;AM4X1B,aAA6B;EAAE,OAAO,ENre1B,GAAO;;AMsenB,qBAAqC;EAAE,OAAO,ENjV1B,GAAO;;AMkV3B,sBAAsC;EAAE,OAAO,ENpK1B,GAAO;;AMqK5B,wBAAwC;EAAE,OAAO,ENrd1B,GAAO;;AMsd9B,qBAAqC;EAAE,OAAO,EN3f1B,GAAO;;AM4f3B,oBAAoC;EAAE,OAAO,ENvJ1B,GAAO;;AMwJ1B,qBAAqC;EAAE,OAAO,EN5N1B,GAAO;;AM6N3B,iBAAiC;EAAE,OAAO,EN1O1B,GAAO;;AM2OvB,wBAAwC;EAAE,OAAO,EN1O1B,GAAO;;AM2O9B,qBAAqC;EAAE,OAAO,ENN1B,GAAO;;AMO3B,oBAAoC;EAAE,OAAO,ENN1B,GAAO;;AMO1B,kBAAkC;EAAE,OAAO,EN/d1B,GAAO;;AMgexB,cAA8B;EAAE,OAAO,EN7c1B,GAAO;;AM8cpB,kBAAkC;EAAE,OAAO,EN1P1B,GAAO;;AM2PxB,oBAAoC;EAAE,OAAO,ENhhB1B,GAAO;;AMihB1B,aAA6B;EAAE,OAAO,EN7b1B,GAAO;;AM8bnB;;cAE8B;EAAE,OAAO,ENxQ1B,GAAO;;AMyQpB,mBAAmC;EAAE,OAAO,EN7M1B,GAAO;;AM8MzB,qBAAqC;EAAE,OAAO,ENpd1B,GAAO;;AMqd3B,yBAAyC;EAAE,OAAO,ENnZ1B,GAAO;;AMoZ/B,mBAAmC;EAAE,OAAO,ENxY1B,GAAO;;AMyYzB,mBAAmC;EAAE,OAAO,EN1T1B,GAAO;;AM2TzB,kBAAkC;EAAE,OAAO,ENxP1B,GAAO;;AMyPxB,iBAAiC;EAAE,OAAO,ENrH1B,GAAO;;AMsHvB,uBAAuC;EAAE,OAAO,ENzG1B,GAAO;;AM0G7B,sBAAsC;EAAE,OAAO,ENrG1B,GAAO;;AMsG5B,mBAAmC;EAAE,OAAO,ENpG1B,GAAO;;AMqGzB,oBAAoC;EAAE,OAAO,EN5c1B,GAAO;;AM6c1B,0BAA0C;EAAE,OAAO,EN9c1B,GAAO;;AM+chC,kBAAkC;EAAE,OAAO,EN3Y1B,GAAO;;AM4YxB,eAA+B;EAAE,OAAO,ENhH1B,GAAO;;AMiHrB,sBAAsC;EAAE,OAAO,ENI1B,GAAO;;AMH5B,qBAAqC;EAAE,OAAO,EN5M1B,GAAO;;AM6M3B,sBAAsC;EAAE,OAAO,ENpE1B,GAAO;;AMqE5B,oBAAoC;EAAE,OAAO,ENhS1B,GAAO;;AMiS1B,gBAAgC;EAAE,OAAO,ENG1B,GAAO;;AMFtB,eAA+B;EAAE,OAAO,ENtO1B,GAAO;;AMuOrB,kBAAkC;EAAE,OAAO,EN7N1B,GAAO;;AM8NxB,sBAAsC;EAAE,OAAO,ENhC1B,GAAO;;AMiC5B,0BAA0C;EAAE,OAAO,ENhC1B,GAAO;;AMiChC,uBAAuC;EAAE,OAAO,END1B,GAAO;;AME7B,sBAAsC;EAAE,OAAO,EN1O1B,GAAO;;AM2O5B,qBAAqC;EAAE,OAAO,ENF1B,GAAO;;AMG3B,sBAAsC;EAAE,OAAO,EN3O1B,GAAO;;AM4O5B,wBAAwC;EAAE,OAAO,EN1O1B,GAAO;;AM2O9B,wBAAwC;EAAE,OAAO,EN5O1B,GAAO;;AM6O9B,iBAAiC;EAAE,OAAO,ENvN1B,GAAO;;AMwNvB,4BAA4C;EAAE,OAAO,EN9X1B,GAAO;;AM+XlC,sBAAsC;EAAE,OAAO,ENhM1B,GAAO;;AMiM5B,mBAAmC;EAAE,OAAO,ENI1B,GAAO;;AMHzB,iBAAiC;EAAE,OAAO,EN7I1B,GAAO;;AM8IvB,oBAAoC;EAAE,OAAO,ENjB1B,GAAO;;AMkB1B,qBAAqC;EAAE,OAAO,ENhB1B,GAAO;;AMiB3B;cAC8B;EAAE,OAAO,ENphB1B,GAAO;;AMqhBpB,kBAAkC;EAAE,OAAO,ENd1B,GAAO;;AMexB,gBAAgC;EAAE,OAAO,ENnD1B,GAAO;;AMoDtB,iBAAiC;EAAE,OAAO,ENvF1B,GAAO;;AMwFvB,iBAAiC;EAAE,OAAO,ENrP1B,GAAO", -"sources": ["../scss/_path.scss","../scss/_core.scss","../scss/_larger.scss","../scss/_fixed-width.scss","../scss/_list.scss","../scss/_variables.scss","../scss/_bordered-pulled.scss","../scss/_animated.scss","../scss/_rotated-flipped.scss","../scss/_mixins.scss","../scss/_stacked.scss","../scss/_icons.scss"], -"names": [], -"file": "font-awesome.css" -} diff --git a/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/css/font-awesome.min.css b/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/css/font-awesome.min.css deleted file mode 100644 index 540440ce89f2a..0000000000000 --- a/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/fonts/FontAwesome.otf b/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/fonts/FontAwesome.otf deleted file mode 100644 index 401ec0f36e4f73b8efa40bd6f604fe80d286db70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134808 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 diff --git a/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/fonts/fontawesome-webfont.eot b/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca953f93e35eab4108bd414bc02ddcf3928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165742 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 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW 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

5q!RY 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 - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/fonts/fontawesome-webfont.ttf b/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2fa1196aad98c2adf4378a7611dd713aa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165548 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 z 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 d0mRO}xo^G_%I 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 SdSQM28?+M|D(2r_;{O0|uQ74} diff --git a/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/fonts/fontawesome-webfont.woff2 b/docs/reference/generated/kubernetes-api/v1.10/node_modules/font-awesome/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc60404b91e398a37200c4a77b645cfd9586..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77160 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 diff --git a/docs/reference/generated/kubernetes-api/v1.10/node_modules/highlight.js/styles/default.css b/docs/reference/generated/kubernetes-api/v1.10/node_modules/highlight.js/styles/default.css deleted file mode 100644 index f1bfade31e5dc..0000000000000 --- a/docs/reference/generated/kubernetes-api/v1.10/node_modules/highlight.js/styles/default.css +++ /dev/null @@ -1,99 +0,0 @@ -/* - -Original highlight.js style (c) Ivan Sagalaev - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #F0F0F0; -} - - -/* Base color: saturation 0; */ - -.hljs, -.hljs-subst { - color: #444; -} - -.hljs-comment { - color: #888888; -} - -.hljs-keyword, -.hljs-attribute, -.hljs-selector-tag, -.hljs-meta-keyword, -.hljs-doctag, -.hljs-name { - font-weight: bold; -} - - -/* User color: hue: 0 */ - -.hljs-type, -.hljs-string, -.hljs-number, -.hljs-selector-id, -.hljs-selector-class, -.hljs-quote, -.hljs-template-tag, -.hljs-deletion { - color: #880000; -} - -.hljs-title, -.hljs-section { - color: #880000; - font-weight: bold; -} - -.hljs-regexp, -.hljs-symbol, -.hljs-variable, -.hljs-template-variable, -.hljs-link, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #BC6060; -} - - -/* Language color: hue: 90; */ - -.hljs-literal { - color: #78A960; -} - -.hljs-built_in, -.hljs-bullet, -.hljs-code, -.hljs-addition { - color: #397300; -} - - -/* Meta color: hue: 200 */ - -.hljs-meta { - color: #1f7199; -} - -.hljs-meta-string { - color: #4d99bf; -} - - -/* Misc effects */ - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/docs/reference/generated/kubernetes-api/v1.10/node_modules/jquery.scrollto/jquery.scrollTo.min.js b/docs/reference/generated/kubernetes-api/v1.10/node_modules/jquery.scrollto/jquery.scrollTo.min.js deleted file mode 100644 index 65a020d92ad28..0000000000000 --- a/docs/reference/generated/kubernetes-api/v1.10/node_modules/jquery.scrollto/jquery.scrollTo.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) 2007-2015 Ariel Flesler - afleslergmailcom | http://flesler.blogspot.com - * Licensed under MIT - * @author Ariel Flesler - * @version 2.1.2 - */ -;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), -a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), -null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" - -

This glossary is intended to be a comprehensive, standardized list of Kubernetes terminology. It includes technical terms that are specific to K8s, as well as more general terms that provide useful context.

- -
-

Filter terms according to their tags:

- -{% for tag in site.data.canonical-tags %} -{% assign tag_info = tag[1] %} -
-{{ tag_info.description }} -
-{% endfor %} - -{% assign sorted_tags = site.data.canonical-tags | where_exp: "tag", "true" | sort: 'name' %} -{% for tag_info in sorted_tags %} - -{% assign tag_state_class = "" %} - -{% assign fullTagName = tag_info.id | prepend: "tag-" %} - -{{ tag_info.name }} - -{% endfor %} -Select all -Deselect all -
- -

Click on the [+] indicators below to get a longer explanation for any particular term.

- -{% assign glossary_terms = site.data.glossary | where_exp: "term", "term.id != '_example'" | sort_natural: 'name' %} - -
    -{% for term in glossary_terms %} - -{% assign tag_classes = term.tags | join: " tag-" | prepend: "tag-" %} - -{% assign term_visibility_class = "hide" %} -{% assign show_count = 0 %} -{% assign term_identifier = term.id | prepend: 'term-' %} - -
  • -
    -
    -
    {{ term.name }}
    -{% if term.aka %} -Also known as: {{ term.aka | join: ", " }} -
    -{% endif %} - -{{ term.short-description | liquify | markdownify }} [+] -
    -{{ term.long-description | liquify | markdownify }} -
    -
    -
  • -{% endfor %} -
diff --git a/docs/reference/setup-tools/kubeadm/generated/README.md b/docs/reference/setup-tools/kubeadm/generated/README.md deleted file mode 100644 index 020bc76f624cd..0000000000000 --- a/docs/reference/setup-tools/kubeadm/generated/README.md +++ /dev/null @@ -1 +0,0 @@ -All files in this directory are auto-generated from other repos. **Do not edit them manually. You must edit them in their upstream repo.** \ No newline at end of file diff --git a/docs/reference/setup-tools/kubeadm/kubeadm-alpha.md b/docs/reference/setup-tools/kubeadm/kubeadm-alpha.md deleted file mode 100755 index de9d2815c6c50..0000000000000 --- a/docs/reference/setup-tools/kubeadm/kubeadm-alpha.md +++ /dev/null @@ -1,265 +0,0 @@ ---- -approvers: -- mikedanese -- luxas -- jbeda -title: kubeadm alpha ---- -`kubeadm alpha` provides a preview of a set of features made available for gathering feedback - from the community. Please try it out and give us feedback! -{: .caution} - -In v1.8.0, kubeadm introduced the `kubeadm alpha phase` command with the aim of making kubeadm more modular. This modularity enables you to invoke atomic sub-steps of the bootstrap process; you can let kubeadm do some parts and fill in yourself where you need customizations. - -`kubeadm alpha phase` is consistent with [kubeadm init workflow](kubeadm-init.md#init-workflow), -and behind the scene both use the same code. - -* [kubeadm alpha phase preflight](#cmd-phase-preflight) -* [kubeadm alpha phase certs](#cmd-phase-certs) -* [kubeadm alpha phase kubeconfig](#cmd-phase-kubeconfig) -* [kubeadm alpha phase controlplane](#cmd-phase-controlplane) -* [kubeadm alpha phase etcd](#cmd-phase-etcd) -* [kubeadm alpha phase mark-master](#cmd-phase-mark-master) -* [kubeadm alpha phase bootstrap-token](#cmd-phase-bootstrap-token) -* [kubeadm alpha phase upload-config](#cmd-phase-upload-config) -* [kubeadm alpha phase addon](#cmd-phase-addon) -* [kubeadm alpha phase selfhosting](#cmd-phase-self-hosting) - -## kubeadm alpha phase preflight {#cmd-phase-preflight} - -You can execute preflight checks both for the master node, like in `kubeadm init`, or for the worker node -like in `kubeadm join`. - -{% capture preflight_master %} -{% include_relative generated/kubeadm_alpha_phase_preflight_master.md %} -{% endcapture %} - -{% capture preflight_node %} -{% include_relative generated/kubeadm_alpha_phase_preflight_node.md %} -{% endcapture %} - -{% assign tab_set_name = "tab-preflight" %} -{% assign tab_names = "master,node" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: preflight_master | push: preflight_node %} - -{% include tabs.md %} - -## kubeadm alpha phase certs {#cmd-phase-certs} - -You can create all required certificates with the `all` subcommand or selectively create certificates. - -{% capture certs_all %} -{% include_relative generated/kubeadm_alpha_phase_certs_all.md %} -{% endcapture %} - -{% capture certs_ca %} -{% include_relative generated/kubeadm_alpha_phase_certs_ca.md %} -{% endcapture %} - -{% capture certs_apiserver %} -{% include_relative generated/kubeadm_alpha_phase_certs_apiserver.md %} -{% endcapture %} - -{% capture certs_apiserver-kubelet-client %} -{% include_relative generated/kubeadm_alpha_phase_certs_apiserver-kubelet-client.md %} -{% endcapture %} - -{% capture certs_sa %} -{% include_relative generated/kubeadm_alpha_phase_certs_sa.md %} -{% endcapture %} - -{% capture certs_front-proxy-ca %} -{% include_relative generated/kubeadm_alpha_phase_certs_front-proxy-ca.md %} -{% endcapture %} - -{% capture certs_front-proxy-client %} -{% include_relative generated/kubeadm_alpha_phase_certs_front-proxy-client.md %} -{% endcapture %} - -{% assign tab_set_name = "tab-certs" %} -{% assign tab_names = "all,ca,apiserver,apiserver-kubelet-client,sa,front-proxy-ca,front-proxy-client" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: certs_all | push: certs_ca | push: certs_apiserver | push: certs_apiserver-kubelet-client | push: certs_sa | push: certs_front-proxy-ca | push: certs_front-proxy-client %} - -{% include tabs.md %} - -## kubeadm alpha phase kubeconfig {#cmd-phase-kubeconfig} - -You can create all required kubeconfig files with the `all` subcommand, or selectively create the files. -Additionally, the `user` subcommand supports the creation of kubeconfig files for additional users. - -{% capture kubeconfig_all %} -{% include_relative generated/kubeadm_alpha_phase_kubeconfig_all.md %} -{% endcapture %} - -{% capture kubeconfig_admin %} -{% include_relative generated/kubeadm_alpha_phase_kubeconfig_admin.md %} -{% endcapture %} - -{% capture kubeconfig_kubelet %} -{% include_relative generated/kubeadm_alpha_phase_kubeconfig_kubelet.md %} -{% endcapture %} - -{% capture kubeconfig_controller-manager %} -{% include_relative generated/kubeadm_alpha_phase_kubeconfig_controller-manager.md %} -{% endcapture %} - -{% capture kubeconfig_scheduler %} -{% include_relative generated/kubeadm_alpha_phase_kubeconfig_scheduler.md %} -{% endcapture %} - -{% capture kubeconfig_user %} -{% include_relative generated/kubeadm_alpha_phase_kubeconfig_user.md %} -{% endcapture %} - -{% assign tab_set_name = "tab-kubeconfig" %} -{% assign tab_names = "all,admin,kubelet,controller-manager,scheduler,user" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: kubeconfig_all | push: kubeconfig_admin | push: kubeconfig_kubelet | push: kubeconfig_controller-manager | push: kubeconfig_scheduler | push: kubeconfig_user %} - -{% include tabs.md %} - -## kubeadm alpha phase controlplane {#cmd-phase-controlplane} - -You can create all required static Pod files for the control plane components with the `all` subcommand, -or selectively create the files. - -{% capture controlplane_all %} -{% include_relative generated/kubeadm_alpha_phase_controlplane_all.md %} -{% endcapture %} - -{% capture controlplane_apiserver %} -{% include_relative generated/kubeadm_alpha_phase_controlplane_apiserver.md %} -{% endcapture %} - -{% capture controlplane_controller-manager %} -{% include_relative generated/kubeadm_alpha_phase_controlplane_controller-manager.md %} -{% endcapture %} - -{% capture controlplane_scheduler %} -{% include_relative generated/kubeadm_alpha_phase_controlplane_scheduler.md %} -{% endcapture %} - -{% assign tab_set_name = "tab-controlplane" %} -{% assign tab_names = "all,apiserver,controller-manager,scheduler" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: controlplane_all | push: controlplane_apiserver | push: controlplane_controller-manager | push: controlplane_scheduler %} - -{% include tabs.md %} - -## kubeadm alpha phase etcd {#cmd-phase-etcd} - -Use the following command to create a self-hosted, local etcd instance based on a static Pod file. - -{% capture etcd-local %} -{% include_relative generated/kubeadm_alpha_phase_etcd_local.md %} -{% endcapture %} - -{% assign tab_set_name = "tab-etcd" %} -{% assign tab_names = "etcd local" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: etcd-local %} - -{% include tabs.md %} - -## kubeadm alpha phase mark-master {#cmd-phase-mark-master} - -Use the following command to label and taint the node with the `node-role.kubernetes.io/master=""` key-value pair. - -{% capture mark-master %} -{% include_relative generated/kubeadm_alpha_phase_mark-master.md %} -{% endcapture %} - -{% assign tab_set_name = "tab-mark-master" %} -{% assign tab_names = "mark-master" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: mark-master %} - -{% include tabs.md %} - -## kubeadm alpha phase bootstrap-token {#cmd-phase-bootstrap-token} - -Use the following actions to fully configure bootstrap tokens. -You can fully configure bootstrap tokens with the `all` subcommand, -or selectively configure single elements. - -{% capture bootstrap-token_all %} -{% include_relative generated/kubeadm_alpha_phase_bootstrap-token_all.md %} -{% endcapture %} - -{% capture bootstrap-token_create %} -{% include_relative generated/kubeadm_alpha_phase_bootstrap-token_create.md %} -{% endcapture %} - -{% capture bootstrap-token_cluster-info %} -{% include_relative generated/kubeadm_alpha_phase_bootstrap-token_cluster-info.md %} -{% endcapture %} - -{% capture bootstrap-token_node_allow-post-csrs %} -{% include_relative generated/kubeadm_alpha_phase_bootstrap-token_node_allow-post-csrs.md %} -{% endcapture %} - -{% capture bootstrap-token_node_allow-auto-approve %} -{% include_relative generated/kubeadm_alpha_phase_bootstrap-token_node_allow-auto-approve.md %} -{% endcapture %} - -{% assign tab_set_name = "tab-bootstrap-token" %} -{% assign tab_names = "all,create,cluster-info,node allow-auto-approve,node allow-post-csrs" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: bootstrap-token_all | push: bootstrap-token_create | push: bootstrap-token_cluster-info | push: bootstrap-token_node_allow-auto-approve | push: bootstrap-token_node_allow-post-csrs %} - -{% include tabs.md %} - -## kubeadm alpha phase upload-config {#cmd-phase-upload-config} - -You can use this command to upload the kubeadm configuration to your cluster. -Alternatively, you can use [kubeadm config](kubeadm-config.md). - -{% capture upload-config %} -{% include_relative generated/kubeadm_alpha_phase_upload-config.md %} -{% endcapture %} - -{% assign tab_set_name = "tab-upload-config" %} -{% assign tab_names = "upload-config" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: upload-config %} - -{% include tabs.md %} - -## kubeadm alpha phase addon {#cmd-phase-addon} - -You can install all the available addons with the `all` subcommand, or -install them selectively. - -Please note that if kubeadm is invoked with `--feature-gates=CoreDNS=true`, [CoreDNS](https://coredns.io/) is installed instead of `kube-dns`. - -{% capture addon-all %} -{% include_relative generated/kubeadm_alpha_phase_addon_all.md %} -{% endcapture %} - -{% capture addon-kube-proxy %} -{% include_relative generated/kubeadm_alpha_phase_addon_kube-proxy.md %} -{% endcapture %} - -{% capture addon-kube-dns %} -{% include_relative generated/kubeadm_alpha_phase_addon_kube-dns.md %} -{% endcapture %} - -{% assign tab_set_name = "tab-addon" %} -{% assign tab_names = "all,kube-proxy,kube-dns" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: addon-all | push: addon-kube-proxy | push: addon-kube-dns %} - -{% include tabs.md %} - -## kubeadm alpha phase self-hosting {#cmd-phase-self-hosting} - -**Caution:** Self-hosting is an alpha feature. See [kubeadm init](kubeadm-init.md) documentation for self-hosting limitations. -{: .caution} - -{% capture self-hosting %} -{% include_relative generated/kubeadm_alpha_phase_selfhosting_convert-from-staticpods.md %} -{% endcapture %} - -{% assign tab_set_name = "tab-self-hosting" %} -{% assign tab_names = "self-hosting" | split: ',' | compact %} -{% assign tab_contents = site.emptyArray | push: self-hosting %} - -{% include tabs.md %} - -## What's next -* [kubeadm init](kubeadm-init.md) to bootstrap a Kubernetes master node -* [kubeadm join](kubeadm-join.md) to connect a node to the cluster -* [kubeadm reset](kubeadm-reset.md) to revert any changes made to this host by `kubeadm init` or `kubeadm join` diff --git a/docs/reference/setup-tools/kubeadm/kubeadm-version.md b/docs/reference/setup-tools/kubeadm/kubeadm-version.md deleted file mode 100644 index 059f6892afe5d..0000000000000 --- a/docs/reference/setup-tools/kubeadm/kubeadm-version.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -approvers: -- mikedanese -- luxas -- jbeda -title: kubeadm version ---- -{% capture overview %} -{% endcapture %} - -{% capture body %} -{% include_relative generated/kubeadm_version.md %} -{% endcapture %} - -{% include templates/concept.md %} diff --git a/docs/user-journeys/users/application-developer/advanced.md b/docs/user-journeys/users/application-developer/advanced.md deleted file mode 100644 index bfcfd5fd3a387..0000000000000 --- a/docs/user-journeys/users/application-developer/advanced.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -reviewers: -- chenopis -layout: docsportal -css: /css/style_user_journeys.css -js: https://use.fontawesome.com/4bcc658a89.js, https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js -title: Advanced Topics -track: "USERS › APPLICATION DEVELOPER › ADVANCED" ---- - -{% capture overview %} - -{: .note } -This page assumes that you're familiar with core Kubernetes concepts, and are comfortable deploying your own apps. If not, you should review the [Intermediate App Developer](/docs/user-journeys/users/application-developer/intermediate/){:target="_blank"} topics first. - -After checking out the current page and its linked sections, you should have a better understanding of the following: -* Advanced features that you can leverage in your application -* The various ways of extending the Kubernetes API - -{% endcapture %} - - -{% capture body %} - -## Deploy an application with advanced features - -Now you know the set of API objects that Kubernetes provides. Understanding the difference between a {% glossary_tooltip term_id="daemonset" %} and a {% glossary_tooltip term_id="deployment" %} is oftentimes sufficient for app deployment. That being said, it's also worth familiarizing yourself with Kubernetes's lesser known features. They can be quite powerful when applied to the right use cases. - -#### Container-level features - -As you may know, it's an antipattern to migrate an entire app (e.g. containerized Rails app, MySQL database, and all) into a single Pod. That being said, there are some very useful patterns that go beyond a 1:1 correspondence between a container and its Pod: -* **Sidecar container**: Although your Pod should still have a single main container, you can add a secondary container that acts as a helper (see a [logging example](/docs/concepts/cluster-administration/logging/#sidecar-container-with-a-logging-agent){:target="_blank"}). Two containers within a single Pod can communicate [via a shared volume](/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/){:target="_blank"}. -* **Init containers**: *Init containers* run before any of a Pod's *app containers* (such as main and sidecar containers). [Read more](/docs/concepts/workloads/pods/init-containers/){:target="_blank"}, see an [nginx server example](/docs/tasks/configure-pod-container/configure-pod-initialization/){:target="_blank"}, and [learn how to debug these containers](/docs/tasks/debug-application-cluster/debug-init-containers/){:target="_blank"}. - -#### Pod configuration - -Usually, you use {% glossary_tooltip text="labels" term_id="label" %} and {% glossary_tooltip text="annotations" term_id="annotation" %} to attach metadata to your resources. To inject data into your resources, you'd likely create {% glossary_tooltip text="ConfigMaps" term_id="configmap" %} (for nonconfidential data) or {% glossary_tooltip text="Secrets" term_id="secret" %} (for confidential data). - -Below are some other, lesser-known ways of configuring your resources' Pods: - -* **Taints and Tolerations** - These provide a way for nodes to "attract" or "repel" your Pods. They are often used when an application needs to be deployed onto specific hardware, such as GPUs for scientific computing. [Read more](/docs/concepts/configuration/taint-and-toleration/){:target="_blank"}. -* **Downward API** - This allows your containers to consume information about themselves or the cluster, without being overly coupled to the Kubernetes API server. This can be achieved with [environment variables](/docs/tasks/inject-data-application/environment-variable-expose-pod-information/){:target="_blank"} or [DownwardAPIVolumeFiles](/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/){:target="_blank"}. -* **Pod Presets** - Normally, to mount runtime requirements (such as environmental variables, ConfigMaps, and Secrets) into a resource, you specify them in the resource's configuration file. [PodPresets](/docs/concepts/workloads/pods/podpreset/){:target="_blank"} allow you to dynamically inject these requirements instead, when the resource is created. For instance, this allows team A to mount any number of new Secrets into the resources created by teams B and C, without requiring action from B and C. [See an example](/docs/tasks/inject-data-application/podpreset/){:target="_blank"}. - -#### Additional API Objects - -{: .note } -Before setting up the following resources, check to see if they are the responsibility of your organization's {% glossary_tooltip text="cluster operators" term_id="cluster-operator" %}. - -* **{% glossary_tooltip text="Horizontal Pod Autoscaler (HPA)" term_id="horizontal-pod-autoscaler" %}** - These resources are a great way to automate the process of scaling your application when CPU usage or other [custom metrics](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/custom-metrics-api.md){:target="_blank"} spike. [See an example](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/){:target="_blank"} to understand how HPAs are set up. - -* **Federated cluster objects** - If you are running an application on multiple Kubernetes clusters using *federation*, you need to deploy the federated version of the standard Kubernetes API objects. For reference, check out the guides for setting up [Federated ConfigMaps](/docs/tasks/administer-federation/configmap/){:target="_blank"} and [Federated Deployments](/docs/tasks/administer-federation/deployment/){:target="_blank"}. - -## Extend the Kubernetes API - -Kubernetes is designed with extensibility in mind. If the API resources and features mentioned above are not enough for your needs, there are ways to customize its behavior without having to modify core Kubernetes code. - -#### Understand Kubernetes's default behavior - -Before making any customizations, it's important that you understand the general abstraction behind Kubernetes API objects. Although Deployments and Secrets may seem quite different, the following concepts are true for *any* object: - -* **Kubernetes objects are a way of storing structured data about your cluster.** - In the case of Deployments, this data represents desired state (such as "How many replicas should be running?"), but it can also be general metadata (such as database credentials). -* **Kubernetes objects are modified via the {% glossary_tooltip text="Kubernetes API" term_id="kubernetes-api" %}**. - In other words, you can make `GET` and `POST` requests to a specific resource path (such as `/api/v1/namespaces/default/deployments`) to read and write the corresponding object type. -* **By leveraging the [Controller pattern](/docs/concepts/api-extension/custom-resources/#custom-controllers){:target="_blank"}, Kubernetes objects can be used to enforce desired state**. For simplicity, you can think of the Controller pattern as the following continuous loop: - -
- 1. Check current state (number of replicas, container image, etc) - 2. Compare current state to desired state - 3. Update if there's a mismatch -
- - These states are obtained from the Kubernetes API. - - {: .note } - Not all Kubernetes objects need to have a Controller. Though Deployments trigger the cluster to make state changes, ConfigMaps act purely as storage. - -#### Create Custom Resources - -Based on the ideas above, you can define a new [Custom Resource](/docs/concepts/api-extension/custom-resources/#custom-resources){:target="_blank"} that is just as legitimate as a Deployment. For example, you might want to define a `Backup` object for periodic backups, if `CronJobs` don't provide all the functionality you need. - -There are two main ways of setting up custom resources: -1. **Custom Resource Definitions (CRDs)** - This method requires the least amount of implementation work. See [an example](/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/){:target="_blank"}. -2. **API aggregation** - This method requires some [pre-configuration](/docs/tasks/access-kubernetes-api/configure-aggregation-layer/){:target="_blank"} before you actually [set up a separate, extension API server](/docs/tasks/access-kubernetes-api/setup-extension-api-server/){:target="_blank"}. - -Note that unlike standard Kubernetes objects, which rely on the built-in [`kube-controller-manager`](/docs/reference/generated/kube-controller-manager/){:target="_blank"}, you'll need to write and run your own [custom controllers](https://github.com/kubernetes/sample-controller){:target="_blank"}. - -You may also find the following info helpful: -* [How to know if custom resources are right for your use case](/docs/concepts/api-extension/custom-resources/#should-i-use-a-configmap-or-a-custom-resource){:target="_blank"} -* [How to decide between CRDs and API aggregation](/docs/concepts/api-extension/custom-resources/#choosing-a-method-for-adding-custom-resources){:target="_blank"} - -#### Service Catalog - -If you want to consume or provide complete services (rather than individual resources), **{% glossary_tooltip text="Service Catalog" term_id="service-catalog" %}** provides a [specification](https://github.com/openservicebrokerapi/servicebroker){:target="_blank"} for doing so. These services are registered using {% glossary_tooltip text="Service Brokers" term_id="service-broker" %} (see [some examples](https://github.com/openservicebrokerapi/servicebroker/blob/master/gettingStarted.md#example-service-brokers){:target="_blank"}). - -If you do not have a {% glossary_tooltip text="cluster operator" term_id="cluster-operator" %} to manage the installation of Service Catalog, you can do so using [Helm](/docs/tasks/service-catalog/install-service-catalog-using-helm/){:target="_blank"} or an [installer binary](/docs/tasks/service-catalog/install-service-catalog-using-sc/){:target="_blank"}. - - -## Explore additional resources - -#### References - -The following topics are also useful for building more complex applications: -* [Other points of extensibility within Kubernetes](/docs/concepts/overview/extending/){:target="_blank"} - A conceptual overview of where you can hook into the Kubernetes architecture. -* [Kubernetes Client Libraries](/docs/reference/client-libraries/){:target="_blank"} - Useful for building apps that need to interact heavily with the Kubernetes API. - -#### What's next -Congrats on completing the Application Developer user journey! You've covered the majority of features that Kubernetes has to offer. What now? - -* If you'd like to suggest new features or keep up with the latest developments around Kubernetes app development, consider joining a {% glossary_tooltip term_id="sig" %} such as [SIG Apps](https://github.com/kubernetes/community/tree/master/sig-apps){:target="_blank"}. - -* If you are interested in learning more about the inner workings of Kubernetes (e.g. networking), consider checking out the [Cluster Operator journey](/docs/user-journeys/users/cluster-operator/foundational/){:target="_blank"}. - -{% endcapture %} - -{% include templates/user-journey-content.md %} diff --git a/docs/user-journeys/users/application-developer/foundational.md b/docs/user-journeys/users/application-developer/foundational.md deleted file mode 100644 index 6cce654826cf4..0000000000000 --- a/docs/user-journeys/users/application-developer/foundational.md +++ /dev/null @@ -1,232 +0,0 @@ ---- -reviewers: -- chenopis -layout: docsportal -css: /css/style_user_journeys.css -js: https://use.fontawesome.com/4bcc658a89.js, https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js -title: Foundational -track: "USERS › APPLICATION DEVELOPER › FOUNDATIONAL" ---- - -{% capture overview %} -If you're a developer looking to run applications on Kubernetes, this page and its linked topics can help you get started with the fundamentals. Though this page primarily describes development workflows, [the subsequent page in the series](/docs/home/?path=users&persona=app-developer&level=intermediate){:target="_blank"} covers more advanced, production setups. - -{: .note } -**A quick note**
This app developer "user journey" is *not* a comprehensive overview of Kubernetes. It focuses more on *what* you develop, test, and deploy to Kubernetes, rather than *how* the underlying infrastructure works.

Though it's possible for a single person to manage both, in many organizations, it’s common to assign the latter to a dedicated {% glossary_tooltip text="cluster operator" term_id="cluster-operator" %}. - -{% endcapture %} - - -{% capture body %} -## Get started with a cluster - -#### Web-based environment - -If you're brand new to Kubernetes and simply want to experiment without setting up a full development environment, *web-based environments* are a good place to start: - -* [Kubernetes Basics](/docs/tutorials/kubernetes-basics/#basics-modules){:target="_blank"} - Introduces you to six common Kubernetes workflows. Each section walks you through browser-based, interactive exercises complete with their own Kubernetes environment. - -* [Katacoda](https://www.katacoda.com/courses/kubernetes/playground){:target="_blank"} - The playground equivalent of the environment used in *Kubernetes Basics* above. Katacoda also provides [more advanced tutorials](https://www.katacoda.com/courses/kubernetes/){:target="_blank"}, such as "Liveness and Readiness Healthchecks". - - -* [Play with Kubernetes](http://labs.play-with-k8s.com/){:target="_blank"} - A less structured environment than the *Katacoda* playground, for those who are more comfortable with Kubernetes concepts and want to explore further. It supports the ability to spin up multiple nodes. - - -#### Minikube (recommended) - -Web-based environments are easy to access, but are not persistent. If you want to continue exploring Kubernetes in a workspace that you can come back to and change, *Minikube* is a good option. - -Minikube can be installed locally, and runs a simple, single-node Kubernetes cluster inside a virtual machine (VM). This cluster is fully functioning and contains all core Kubernetes components. Many developers have found this sufficient for local application development. - -* [Install Minikube](/docs/tasks/tools/install-minikube/){:target="_blank"}. - -* [Install kubectl](/docs/tasks/tools/install-kubectl/){:target="_blank"}. ({% glossary_tooltip text="What is kubectl?" term_id="kubectl" %}) - -* *(Optional)* [Install Docker](/docs/setup/independent/install-kubeadm/#installing-docker){:target="_blank"} if you plan to run your Minikube cluster as part of a local development environment. - - Minikube includes a Docker daemon, but if you're developing applications locally, you'll want an independent Docker instance to support your workflow. This allows you to create {% glossary_tooltip text="containers" term_id="container" %} and push them to a container registry. - - {: .note } - Version 1.12 is recommended for full compatibility with Kubernetes, but a few other versions are tested and known to work. - - -You can get basic information about your cluster with the commands `kubectl cluster-info` and `kubectl get nodes`. However, to get a good idea of what's really going on, you need to deploy an application to your cluster. This is covered in the next section. - -## Deploy an application - -#### Basic workloads - -The following examples demonstrate the fundamentals of deploying Kubernetes apps: - * **Stateless apps**: [Deploy a simple nginx server](/docs/tasks/run-application/run-stateless-application-deployment/){:target="_blank"}. - - * **Stateful apps**: [Deploy a MySQL database](/docs/tasks/run-application/run-single-instance-stateful-application/){:target="_blank"}. - -Through these deployment tasks, you'll gain familiarity with the following: -* General concepts - - * **Configuration files** - Written in YAML or JSON, these files describe the desired state of your application in terms of Kubernetes API objects. A file can include one or more API object descriptions (*manifests*). (See [the example YAML](/docs/tasks/run-application/run-stateless-application-deployment/#creating-and-exploring-an-nginx-deployment) from the stateless app). - - * **{% glossary_tooltip text="Pods" term_id="pod" %}** - This is the basic unit for all of the workloads you run on Kubernetes. These workloads, such as *Deployments* and *Jobs*, are composed of one or more Pods. To learn more, check out [this explanation of Pods and Nodes](/docs/tutorials/kubernetes-basics/explore-intro/){:target="_blank"}. - -* Common workload objects - * **{% glossary_tooltip text="Deployment" term_id="deployment" %}** - The most common way of running *X* copies (Pods) of your application. Supports rolling updates to your container images. - - * **{% glossary_tooltip text="Service" term_id="service" %}** - By itself, a Deployment can't receive traffic. Setting up a Service is one of the simplest ways to configure a Deployment to receive and loadbalance requests. Depending on the `type` of Service used, these requests can come from external client apps or be limited to apps within the same cluster. A Service is tied to a specific Deployment using {% glossary_tooltip text="label" term_id="label" %} selection. - -The subsequent topics are also useful to know for basic application deployment. - -#### Metadata - -You can also specify custom information about your Kubernetes API objects by attaching key/value fields. Kubernetes provides two ways of doing this: - -* **{% glossary_tooltip text="Labels" term_id="label" %}** - Identifying metadata that you can use to sort and select sets of API objects. Labels have many applications, including the following: - - * *To keep the right number of replicas (Pods) running in a Deployment.* The specified label (`app: nginx` in the [stateless app example](/docs/tasks/run-application/run-stateless-application-deployment/#creating-and-exploring-an-nginx-deployment){:target="_blank"}) is used to stamp the Deployment's newly created Pods (as the value of the `spec.template.labels` configuration field), and to query which Pods it already manages (as the value of `spec.selector.matchLabels`). - - * *To tie a Service to a Deployment* using the `selector` field, which is demonstrated in the [stateful app example](/docs/tasks/run-application/run-single-instance-stateful-application/#deploy-mysql){:target="_blank"}. - - * *To look for specific subset of Kubernetes objects, when you are using {% glossary_tooltip text="kubectl" term_id="kubectl" %}.* For instance, the command `kubectl get deployments --selector=app=nginx` only displays Deployments from the nginx app. - -* **{% glossary_tooltip text="Annotations" term_id="annotation" %}** - Nonidentifying metadata that you can attach to API objects, usually if you don't intend to use them for sorting purposes. These often serve as supplementary data about an app's deployment, such as Git SHAs, PR numbers, or URL pointers to observability dashboards. - - -#### Storage - -You'll also want to think about storage. Kubernetes provides different types of storage API objects for different storage needs: - -* **{% glossary_tooltip text="Volumes" term_id="volume" %}** - Let you define storage for your cluster that is tied to the lifecycle of a Pod. It is therefore more persistent than container storage. Learn [how to configure volume storage](/docs/tasks/configure-pod-container/configure-volume-storage/){:target="_blank"}, or [read more about volume storage](/docs/concepts/storage/volumes/){:target="_blank"}. - -* **{% glossary_tooltip text="PersistentVolumes" term_id="persistent-volume" %}** and **{% glossary_tooltip text="PersistentVolumeClaims" term_id="persistent-volume-claim" %}** - Let you define storage at the cluster level. Typically a cluster operator defines the PersistentVolume objects for the cluster, and cluster users (application developers, you) define the PersistentVolumeClaim objects that your application requires. Learn [how to set up persistent storage for your cluster](/docs/tasks/configure-pod-container/configure-persistent-volume-storage/){:target="_blank"} or [read more about persistent volumes](/docs/concepts/storage/persistent-volumes/){:target="_blank"}. - -#### Configuration - -To avoid having to unnecessarily rebuild your container images, you should decouple your application's *configuration data* from the code required to run it. There are a couple ways of doing this, which you should choose according to your use case: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ApproachType of DataHow it's mountedExample
Using a manifest's container definitionNon-confidentialEnvironment variableCommand-line flag
Using {% glossary_tooltip text="ConfigMaps" term_id="configmap" %}Non-confidentialEnvironment variable OR local filenginx configuration
Using {% glossary_tooltip text="Secrets" term_id="secret" %}ConfidentialEnvironment variable OR local fileDatabase credentials
- -{: .note } -If you have any data that you want to keep private, you should be using a Secret. Otherwise there is nothing stopping that data from being exposed to malicious users. - -## Understand basic Kubernetes architecture - -As an app developer, you don't need to know everything about the inner workings of Kubernetes, but you may find it helpful to understand it at a high level. - -#### What Kubernetes offers - -Say that your team is deploying an ordinary Rails application. You've run some calculations and determined that you need five instances of your app running at any given time, in order to handle external traffic. - -If you're not running Kubernetes or a similar automated system, you might find the following scenario familiar: - -
- -1. One instance of your app (a complete machine instance or just a container) goes down. -2. Because your team has monitoring set up, this pages the person on call. -3. The on-call person has to go in, investigate, and manually spin up a new instance. -4. Depending how your team handles DNS/networking, the on-call person may also need to also update the service discovery mechanism to point at the IP of the new Rails instance rather than the old. - -
- -This process can be tedious and also inconvenient, especially if (2) happens in the early hours of the morning! - -**If you have Kubernetes set up, however, manual intervention is not as necessary.** The Kubernetes [control plane](/docs/concepts/overview/components/#master-components){:target="_blank"}, which runs on your cluster's master node, gracefully handles (3) and (4) on your behalf. As a result, Kubernetes is often referred to as a *self-healing* system. - -There are two key parts of the control plane that facilitate this behavior: the *Kubernetes API server* and the *Controllers*. - -#### Kubernetes API server - -For Kubernetes to be useful, it needs to know *what* sort of cluster state you want it to maintain. Your YAML or JSON *configuration files* declare this desired state in terms of one or more API objects, such as {% glossary_tooltip text="Deployments" term_id="deployment" %}. To make updates to your cluster's state, you submit these files to the {% glossary_tooltip text="Kubernetes API" term_id="kubernetes-api" %} server (`kube-apiserver`). - -Examples of state include but are not limited to the following: - -* The applications or other workloads to run -* The container images for your applications and workloads -* Allocation of network and disk resources - -Note that the API server is just the gateway, and that object data is actually stored in a highly available datastore called [*etcd*](https://github.com/coreos/etcd){:target="_blank"}. For most intents and purposes, though, you can focus on the API server. Most reads and writes to cluster state take place as API requests. - -You can read more about the Kubernetes API [here](/docs/concepts/overview/working-with-objects/kubernetes-objects/){:target="_blank"}. - -#### Controllers - -Once you’ve declared your desired state through the Kubernetes API, the *controllers* work to make the cluster’s current state match this desired state. - -The standard controller processes are [`kube-controller-manager`](/docs/reference/generated/kube-controller-manager/){:target="_blank"} and [`cloud-controller-manager`](/docs/concepts/overview/components/#cloud-controller-manager){:target="_blank"}, but you can also write your own controllers as well. - -All of these controllers implement a *control loop*. For simplicity, you can think of this as the following: - -
- 1. What is the current state of the cluster (X)? - 2. What is the desired state of the cluster (Y)? - 3. X == Y ? - * `true` - Do nothing. - * `false` - Perform tasks to get to Y (such as starting or restarting containers, -or scaling the number of replicas of a given application).
- - *(Return to 1)* -
- -By continuously looping, these controllers ensure the cluster can pick up new updates and avoid drifting from the desired state. These ideas are covered in more detail [here](https://kubernetes.io/docs/concepts/){:target="_blank"}. - -## Additional resources - -The Kubernetes documentation is rich in detail. Here's a curated list of resources to help you start digging deeper. - -### Basic concepts - -* [More about the components that run Kubernetes](/docs/concepts/overview/components/){:target="_blank"} - -* [Understanding Kubernetes objects](/docs/concepts/overview/working-with-objects/kubernetes-objects/){:target="_blank"} - -* [More about Node objects](/docs/concepts/architecture/nodes/){:target="_blank"} - -* [More about Pod objects](/docs/concepts/workloads/pods/pod-overview/){:target="_blank"} - -### Tutorials - -* [Kubernetes Basics](/docs/tutorials/kubernetes-basics/){:target="_blank"} - -* [Hello Minikube](/docs/tutorials/stateless-application/hello-minikube/){:target="_blank"} *(Runs on Mac only)* - -* [Kubernetes 101](/docs/user-guide/walkthrough/){:target="_blank"} - -* [Kubernetes 201](/docs/user-guide/walkthrough/k8s201/){:target="_blank"} - -* [Kubernetes object management](/docs/tutorials/object-management-kubectl/object-management/){:target="_blank"} - -### What's next -If you feel fairly comfortable with the topics on this page and want to learn more, check out the following user journeys: -* [Intermediate App Developer](/docs/user-journeys/users/application-developer/intermediate/){:target="_blank"} - Dive deeper, with the next level of this journey. -* [Foundational Cluster Operator](/docs/user-journeys/users/cluster-operator/foundational/){:target="_blank"} - Build breadth, by exploring other journeys. - -{% endcapture %} - - -{% include templates/user-journey-content.md %} diff --git a/docs/user-journeys/users/application-developer/intermediate.md b/docs/user-journeys/users/application-developer/intermediate.md deleted file mode 100644 index a008ac685d339..0000000000000 --- a/docs/user-journeys/users/application-developer/intermediate.md +++ /dev/null @@ -1,157 +0,0 @@ ---- -reviewers: -- chenopis -layout: docsportal -css: /css/style_user_journeys.css -js: https://use.fontawesome.com/4bcc658a89.js, https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js -title: Intermediate -track: "USERS › APPLICATION DEVELOPER › INTERMEDIATE" ---- -{% assign reference_docs_url = '/docs/reference/generated/kubernetes-api/' | append: site.latest %} - -{% capture overview %} - -{: .note } - This page assumes that you've experimented with Kubernetes before. At this point, you should have basic experience interacting with a Kubernetes cluster (locally with Minikube, or elsewhere), and using API objects like Deployments to run your applications.

If not, you should review the [Beginner App Developer](/docs/user-journeys/users/application-developer/foundational/){:target="_blank"} topics first. - -After checking out the current page and its linked sections, you should have a better understanding of the following: -* Additional Kubernetes workload patterns, beyond Deployments -* What it takes to make a Kubernetes application production-ready -* Community tools that can improve your development workflow - -{% endcapture %} - - -{% capture body %} - -## Learn additional workload patterns - -As your Kubernetes use cases become more complex, you may find it helpful to familiarize yourself with more of the toolkit that Kubernetes provides. [Basic workload](/docs/user-journeys/users/application-developer/foundational/#section-2){:target="_blank"} objects like {% glossary_tooltip text="Deployments" term_id="deployment" %} make it straightforward to run, update, and scale applications, but they are not ideal for every scenario. - -The following API objects provide functionality for additional workload types, whether they are *persistent* or *terminating*. - -#### Persistent workloads - -Like Deployments, these API objects run indefinitely on a cluster until they are manually terminated. They are best for long-running applications. - -* **{% glossary_tooltip text="StatefulSets" term_id="statefulset" %}** - Like Deployments, StatefulSets allow you to specify that a certain number of replicas should be running for your application. - - {: .note } - It's misleading to say that Deployments can't handle stateful workloads. Using {% glossary_tooltip text="PersistentVolumes" term_id="persistent-volume" %}, you can persist data beyond the lifecycle of any individual Pod in your Deployment. - - However, StatefulSets can provide stronger guarantees about "recovery" behavior than Deployments. StatefulSets maintain a sticky, stable identity for their Pods. The following table provides some concrete examples of what this might look like: - - | | Deployment | StatefulSet | - |---|---|---| - | **Example Pod name** | `example-b1c4` | `example-0` | - | **When a Pod dies** | Reschedule on *any* node, with new name `example-a51z` | Reschedule on same node, as `example-0` | - | **When a node becomes unreachable** | Pod(s) are scheduled onto new node, with new names | Pod(s) are marked as "Unknown", and aren't rescheduled unless the Node object is forcefully deleted | - - In practice, this means that StatefulSets are best suited for scenarios where replicas (Pods) need to coordinate their workloads in a strongly consistent manner. Guaranteeing an identity for each Pod helps avoid [split-brain](https://en.wikipedia.org/wiki/Split-brain_(computing)){:target="_blank"} side effects in the case when a node becomes unreachable ([network partition](https://en.wikipedia.org/wiki/Network_partition){:target="_blank"}). This makes StatefulSets a great fit for distributed datastores like Cassandra or Elasticsearch. - - -* **{% glossary_tooltip text="DaemonSets" term_id="daemonset" %}** - DaemonSets run continuously on every node in your cluster, even as nodes are added or swapped in. This guarantee is particularly useful for setting up global behavior across your cluster, such as: - - * Logging and monitoring, from applications like `fluentd` - * Network proxy or [service mesh](https://www.linux.com/news/whats-service-mesh-and-why-do-i-need-one){:target="_blank"} - - -#### Terminating workloads - -In contrast to Deployments, these API objects are finite. They stop once the specified number of Pods have completed successfully. - -* **{% glossary_tooltip text="Jobs" term_id="job" %}** - You can use these for one-off tasks like running a script or setting up a work queue. These tasks can be executed sequentially or in parallel. These tasks should be relatively independent, as Jobs do not support closely communicating parallel processes. [Read more about Job patterns](/docs/concepts/workloads/controllers/jobs-run-to-completion/#job-patterns){:target="_blank"}. - -* **{% glossary_tooltip text="CronJobs" term_id="cronjob" %}** - These are similar to Jobs, but allow you to schedule their execution for a specific time or for periodic recurrence. You might use CronJobs to send reminder emails or to run backup jobs. They are set up with a similar syntax as *crontab*. - -#### Other resources - -For more info, you can check out [a list of additional Kubernetes resource types](/docs/reference/kubectl/overview/#resource-types){:target="_blank"} as well as the [API reference docs]({{ reference_docs_url }}){:target="_blank"}. - -There may be additional features not mentioned here that you may find useful, which are covered in the [full Kubernetes documentation](/docs/home/?path=browse){:target="_blank"}. - -## Deploy a production-ready workload - -The beginner tutorials on this site, such as the [Guestbook app](/docs/tutorials/stateless-application/guestbook/){:target="_blank"}, are geared towards getting workloads up and running on your cluster. This prototyping is great for building your intuition around Kubernetes! However, in order to reliably and securely promote your workloads to production, you need to follow some additional best practices. - -#### Declarative configuration - -You are likely interacting with your Kubernetes cluster via {% glossary_tooltip text="kubectl" term_id="kubectl" %}. kubectl can be used to debug the current state of your cluster (such as checking the number of nodes), or to modify live Kubernetes objects (such as updating a workload's replica count with `kubectl scale`). - -When using kubectl to update your Kubernetes objects, it's important to be aware that different commands correspond to different approaches: -* [Purely imperative](/docs/tutorials/object-management-kubectl/imperative-object-management-command/){:target="_blank"} -* [Imperative with local configuration files](/docs/tutorials/object-management-kubectl/imperative-object-management-configuration/){:target="_blank"} (typically YAML) -* [Declarative with local configuration files](/docs/tutorials/object-management-kubectl/declarative-object-management-configuration/){:target="_blank"} (typically YAML) - -There are pros and cons to each approach, though the declarative approach (such as `kubectl apply -f`) may be most helpful in production. With this approach, you rely on local YAML files as the source of truth about your desired state. This enables you to version control your configuration, which is helpful for code reviews and audit tracking. - -For additional configuration best practices, familiarize yourself with [this guide](/docs/concepts/configuration/overview/){:target="_blank"}. - -#### Security - -You may be familiar with the *principle of least privilege*---if you are too generous with permissions when writing or using software, the negative effects of a compromise can escalate out of control. Would you be cautious handing out `sudo` privileges to software on your OS? If so, you should be just as careful when granting your workload permissions to the {% glossary_tooltip text="Kubernetes API" term_id="kubernetes-api" %} server! The API server is the gateway for your cluster's source of truth; it provides endpoints to read or modify cluster state. - -You (or your {% glossary_tooltip text="cluster operator" term_id="cluster-operator" %}) can lock down API access with the following: -* **{% glossary_tooltip text="ServiceAccounts" term_id="service-account" %}** - An "identity" that your Pods can be tied to -* **{% glossary_tooltip text="RBAC" term_id="rbac" %}** - One way of granting your ServiceAccount explicit permissions - -For even more comprehensive reading about security best practices, consider checking out the following topics: -* [Authentication](/docs/admin/authentication/){:target="_blank"} (Is the user who they say they are?) -* [Authorization](/docs/admin/authorization/){:target="_blank"} (Does the user actually have permissions to do what they're asking?) - -#### Resource isolation and management - -If your workloads are operating in a *multi-tenant* environment with multiple teams or projects, your container(s) are not necessarily running alone on their node(s). They are sharing node resources with other containers which you do not own. - -Even if your cluster operator is managing the cluster on your behalf, it is helpful to be aware of the following: -* **{% glossary_tooltip text="Namespaces" term_id="namespace" %}**, used for isolation -* **[Resource quotas](/docs/concepts/policy/resource-quotas/){:target="_blank"}**, which affect what your team's workloads can use -* **[Memory](/docs/tasks/configure-pod-container/assign-memory-resource/){:target="_blank"} and [CPU](/docs/tasks/configure-pod-container/assign-cpu-resource/){:target="_blank"} requests**, for a given Pod or container -* **[Monitoring](/docs/tasks/debug-application-cluster/resource-usage-monitoring/){:target="_blank"}**, both on the cluster level and the app level - -This list may not be completely comprehensive, but many teams have existing processes that take care of all this. If this is not the case, you'll find the Kubernetes documentation fairly rich in detail. - -## Improve your dev workflow with tooling - -As an app developer, you'll likely encounter the following tools in your workflow. - -#### kubectl - -`kubectl` is a command-line tool that allows you to easily read or modify your Kubernetes cluster. It provides convenient, short commands for common operations like scaling app instances and getting node info. How does kubectl do this? It's basically just a user-friendly wrapper for making API requests. It's written using [client-go](https://github.com/kubernetes/client-go/#client-go){:target="_blank"}, the Go library for the Kubernetes API. - -To learn about the most commonly used kubectl commands, check out the [kubectl cheatsheet](/docs/reference/kubectl/cheatsheet/){:target="_blank"}. It explains topics such as the following: -* [kubeconfig files](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/){:target="_blank"} - Your kubeconfig file tells kubectl what cluster to talk to, and can reference multiple clusters (such as dev and prod). -* [The various output formats available](/docs/reference/kubectl/cheatsheet/#formatting-output){:target="_blank"} - This is useful to know when you are using `kubectl get` to list information about certain API objects. - -* [The JSONPath output format](/docs/reference/kubectl/jsonpath/){:target="_blank"} - This is related to the output formats above. JSONPath is especially useful for parsing specific subfields out of `kubectl get` output (such as the URL of a {% glossary_tooltip text="Service" term_id="service" %}). - -* [`kubectl run` vs `kubectl apply`](/docs/reference/kubectl/conventions/){:target="_blank"} - This ties into the [declarative configuration](#declarative-configuration) discussion in the previous section. - -For the full list of kubectl commands and their options, check out [the reference guide](/docs/reference/generated/kubectl/kubectl-commands){:target="_blank"}. - -#### Helm - -To leverage pre-packaged configurations from the community, you can use **{% glossary_tooltip text="Helm charts" term_id="helm-chart" %}**. - -Helm charts package up YAML configurations for specific apps like Jenkins and Postgres. You can then install and run these apps on your cluster with minimal extra configuration. This approach makes the most sense for "off-the-shelf" components which do not require much custom implementation logic. - -For writing your own Kubernetes app configurations, there is a [thriving ecosystem of tools](https://docs.google.com/a/heptio.com/spreadsheets/d/1FCgqz1Ci7_VCz_wdh8vBitZ3giBtac_H8SBw4uxnrsE/edit?usp=drive_web){:target="_blank"} that you may find useful. - -## Explore additional resources - -#### References -Now that you're fairly familiar with Kubernetes, you may find it useful to browse the following reference pages. Doing so provides a high level view of what other features may exist: - -* [Commonly used `kubectl` commands](/docs/reference/kubectl/cheatsheet/){:target="_blank"} -* [Kubernetes API reference]({{ reference_docs_url }}){:target="_blank"} -* [Standardized Glossary](/docs/reference/glossary/){:target="_blank"} - -In addition, [the Kubernetes blog](http://blog.kubernetes.io/){:target="_blank"} often has helpful posts on Kubernetes design patterns and case studies. - -#### What's next -If you feel fairly comfortable with the topics on this page and want to learn more, check out the following user journeys: -* [Advanced App Developer](/docs/user-journeys/users/application-developer/advanced/){:target="_blank"} - Dive deeper, with the next level of this journey. -* [Foundational Cluster Operator](/docs/user-journeys/users/cluster-operator/foundational/){:target="_blank"} - Build breadth, by exploring other journeys. -{% endcapture %} - -{% include templates/user-journey-content.md %} diff --git a/images/blog/2018-04-30-zero-downtime-deployment-kubernetes-jenkins/deployment-process.png b/images/blog/2018-04-30-zero-downtime-deployment-kubernetes-jenkins/deployment-process.png deleted file mode 100644 index 994a275f32af768b36e170406de78dd2f604a016..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129090 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

8ho54 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 xkYBjKp97)pKlh;SYX8ZRO`85{|TU%&x`;7 diff --git a/images/blog/2018-04-30-zero-downtime-deployment-kubernetes-jenkins/jenkins-pipeline.png b/images/blog/2018-04-30-zero-downtime-deployment-kubernetes-jenkins/jenkins-pipeline.png deleted file mode 100644 index c25685f64cb01692c750ca6ad2f12a6a3f66be27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18643 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 diff --git a/images/blog/2018-04-30-zero-downtime-deployment-kubernetes-jenkins/resources.png b/images/blog/2018-04-30-zero-downtime-deployment-kubernetes-jenkins/resources.png deleted file mode 100644 index be36064ae72794a367d63b9077f068c48fbeff6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140669 zcmZsC19WE1vUW7F?TKyM<{LW`V`AI3tv9x9ClgF;+xA5B=ey@ztpDD<)?T}-yQ-_I z-B0(904PWzz~aJ!fPf%KONl9ifPe!)KtO*%Lw>~w)x&XsfWT8*ii!fHMMa4Kj&^32 z)}|mJQV}T{P?{=Zn7KNM@$oZYDDkMCXhj<3`QjDMbts8KA`#5Q;VZM^-*)EkH%%A*Qt^geGrPd)$65j3C5zRzuMsilC#H1dqOh-5zBL{!(ApfQxPYs84%)^?2`%q=;iY z1oIyf$?i{byeATX2DzHTki7#XdJyVfZSrOw68nW}Axk72{`-(iHiG|YaT9ncqkvBxru9Z9)108 z@-b*WQm2SWX@yPeq!cbw2cVfcl=~|jCSF^W;1Ifvo6W7?Wf{IC(2|${`sf;_C+0PGgui2L=pkVhZ1E3z(rY z+t5$s?UbV-N%%EBM%223Fl({~E^hOeDdu=;m>88cgCmc*{4OTDfOrD_aMJs4FuUXJ zD`X6k{qk6Q);(r9A7sJ#2{ygY&BlQCB{~PCd zs5{i%r;(D6xCxCAwFZR;rj-INid>M%JdkPzhC39|EbZ3EwT=AYEEHF_;O+3-rJ#=qJ;P+j{ zTdpAHL$xHHB_3B^UqXEFKkozHe?|u~Npcxb%wX;^0_j550OF ztvm(+7pKts1Du=QXdvFDNbvA%e)Hl@p!Pe^Aj#|7&gyzMPCX!f?d-Z4MMC9+he%++ zK0gc_AXN0umMH?OBji;d6ofxA6XuXVL_91-KM&jvPl~^#0Yy5Lj1Z0{qI!@_9gOui z-hRTm?`-~N_F&ndSi*R1Ut-O3-}L?UZxA0yp+!V2pb2J0qfy|75FI4=Pz1>!BE$KxG~P*(#NhJf(4YFZMIO%mP@X==i!hMF3o zT63sJsu?V55-dS%KVVd$o%ajuiDk#KI(W6|58jGpM=1`Q@5|oEcvI@fM{ z(*{T|5v`zf!B~sH5=Sw`07S}&tSRwHvO~8OuyzR&q)d>j!wGNJWy#IZ%#qWOIgy`H zIiEICiH%YzogUx5V`Mpb)Ns1=DNB+At4<$%>< zN7Z7{!*UrxtsraRCyLQ{kAu?#(*v6WiaS$BtoFPD>H2~fWmKxwWRK+LWS()$alLUo zH8nLAHO57U3X#S33M;ke@>~@k;A=vKcyn<>8Cn_3nerLpnZp_V86IwonKT@*c=pax z){?y`sp+i=>8CS06nhJQ+6UZ+tJD40me>7<(o?$y z!Rl>RWv`-XsjFXe32%~H96|`z2z&5m*w*ZACNt(1CfH_F9J=Q2b9JNPhUf;#HcjIv zWlF8gn=8|r7G2{n>9#HNHepX*; z&sTj^muhS1{Aea#b6-1Hv97ah6t~&5{??+_l6DE;b>q$7gzS7$3RcoD6f3Nd+^j2I zgIdE{SzZ&gH{cTELFZ-T>cY1X;IVm#oHdv9b8&W>blEs^AC;c4tWv30Nt(AZ*D~hqJuhtSbnAKcz3%n7@Nx8Z{lkZ6%pNLeww^B8Q__RKP2ZE_E7$AX z``b6?lj0Nq@6W$spk|<5{+FPN;5J~5;BHVo@Q(0_5CpKE(|2aSjR=rN0tW+SgLFij zL{LR(M6bd!L(M{#LZ3q0Lw-Z^5-LE)LH|JU4YK)l)L^yJZOlJ1h3iEVh>P-F3Fnq+ zjzbxB6+J{ECPo{_g>#KW8+{WQ+-QZF*7#~zdsrdn!x-N|_oA)BL2)m8&uk zb{pd_12L7M)BtD_cBB)3^`hjVpFCj*X=vmhje>Vtekq@WQI3UPJC{55A6plWvI&U(+LCfs_B!% zhBm7q?n3t1Mc zRmKLWZ@%BuzI`ttm*)kPX;IO1v2D7(?wu+|iA4Ek1x)WuS!7tUIBiWrHG-MjWW-EP zrEju~T2BRX>p2Y`U1dvVq_JL48;$PW?X}(~9dpt%=`y+X7ycOVEvHwaO-SC*JZZF_ zC-F|OS2{OJ8$QSMqd!d1r*fjJqxgy*|BO zua}=CFYLH?Jb+ig;r_?4lQ5a{gxAx@ZiK+lsgZ?|r$J++R<=KE1h0d;aRk39eyd43 z$I|i2aChvS^wk#_`-~2cdMTLXxG%7@A5M)WCuu0g@Gg4t>^-!z=9??zBJg=#WM8)* z-ESQu{kZ9xv7h}g`XFzW4f}L{y9ZQyS$&wsO~lyf+sI!Uuf@5(xMjDYdLK@zJuOBp z7t}WYQ0(%(9|^|G;q>6l+Z^wHJag^8{N#1IM!ibins3u^*xvDd?6v-EZk_MG{}r?Y zl}0!s*mWQNb~0>yx<9Q4mphZI%E#`jeLwj}%gN2cZTG;=$HQ~-d-0#;*R&-@ zq)&pI=i;s8ts0F)4e;8uu34|f{p$1e)Si`|x9hvD$6m${;IrYeHQib$B)b&3GZ&+cuppwBPp)PLJ&y2%nX>ma{`bVWl-QCD}-s+ooxxSm`9!}(M?|6 z-De518_1afrC?}dEO;Ff$3*)K=f$DqO)!XmM;m;raDrI}7p;%dZcNCHp}|fJF-Q>w zNRJdGk!#7u+x%m97ro8YfrP>2b~VohtB@vprDjJ=eW z69@<<`9CkHv@+Sv*R~?ZQdQGgQ(lh8*v^K*(8SKjl)>G`{)-y~gwLJlD`;ctY)Is8 zV{PliBx>hqO2p2<#=t}(082zf#OG*Y#-l7I z@o(`jil4;7+1Z|lk=G%@{gkbdj4gnsk`NWYqE9vw_9HhGX9go$jrdR z_+NQ{iSqpu%LA}#RCo8$=LkF=17A(2H)3c#~5Xil^e|7Mh9mtDmekC8b{YW=yO%p=3fz!i5RO zRc*4&MJw@vb4i2`b<>gT#MFWLnj;bx&A~$}J!WOB|1aTRBm$^7a6#yQN&S=PB_@PY#t&A^pz{Cc`A=%3P&xDep^ggTDcqj~ z-~}P0SMtA&`4S9JHvYfuMESDh2|Bq$?*H^PQ)@c&;~?`k+{FOqe{2A7e1lH^Y%Q#d;l~i2du_+_J*Sn zB!!Z9N6}PX9+Z$PZ;b}8Yi-@zp!t?-2cwpALl%G9oCLvzfT?RNGYK??XX`JayEL(a zjfmibZ|XlhJqe+&x^iP;Vlr{JMs^9u^t+xmUancvP%y3ROA^h@+6O7pZH-)p z(6PucZq>l8?R9PEk2aDLM#mrym^HF@{eHgM9`)1>>r#l0mC>-}>I-unB&iza3We%y zFM)9NKFft(2pXN2I{Ba~xUKRTT`EVyi}de_51mFIE|yKh_59JEfm|lJui}2Jfb4`K z4#Y*gA>O{BEe&AovM-K+`1#GU@NfLK41dimbo#v^yes#5qLBP#HK~=daow!(Ufs1h zwLQG6*UTar*keCs>&?V1zH+1xf$K8Ig9kqYfj;+ff4hpPJTbuSdQ+0gvcwP&9UCdc z-gJ+6YsSMuV8t9f`#B|nT86l#ju0t&F&Zj(#ss~vE&?3*;_A9b{1f_vz=|axlRSWh z>hLkXvw1g81)^d%z5-8x94t&2xP=B*OcI;dV6J_BN7#y3%aI{eT|D_9L=Cp6&HuNl zntGrFdSO1$^}SXD;_T(wp>PX;QYJy{(RE!2y>NTA?dr}e4qVGmi|vW|GTY~SlO!B^ zz|S~eo&$9nFqdEct+)GM^!^m@Pzf!VOSnO$UOwI-9onCxB<5 z@MI|tRB-((_6l!*dYL>ds6bCAoqc1HlYh@SQ>M%e%D~BjzBv>Q}JNKDUfw>5QDE?ah z%9NPEXJ=Uz;;avua1`$=9^b2(`??5P)ybaU*3AYoAkpW*cDpBLY)snwxpUj*WlLZV z>dU>ngt9NEPbbWJB1izg#h$q~bx_Lo7qSq%u)g{_Qt`z3z~MY-TLJCMZP05L4eoCV z-8OIBY0T7{YXOAIzlQWT@?Qo6(bj-4zexbgwLg}j7qaYn%Ar;9qJs*p3rGNOl70{G zRQmQ5H&-9*bYkbrme)8J{fi8wM{Ra%=27Jzf*0Yv<Bd9Z@Tdw#}ZbJM&N37hp^xpU$(dO^Y_gAWou*hbd7NSZpXNo++C_{>7h{JV0x}x zV!}VH8LXQ@g?Tdsm5*Vcshsg6RJZgU+&bykQFv-K%GtHi59m7$C8 zy22$goCz(@Cf_i{J^8H}@Dw~AHM8Rkt8*~XdwSQPA_s|PwgZ$@a9hiXMp@qoVN;Y! zKNd3Npq+V`Oc;%RQUs>Ry-8&z$pL#9sn+4@C(Oy0IZp@8eoO>Md={!3LrXN-T;X};b zsUo^2npyZ?ea}`>i$ERTdCgE^#KGKyvvGQBy~K^@b_0l!FwA5&pjCuN%J97953cK> z46`sSJLtZMGLZLS4SLS@ge{Mm-OdxZO}MxVCD;{)H@o?5Y96hO>;e(a`$4}5mAZ<2 z&AeV2qT-Y6-o=AS&d1f3JOBe%5!c}a9+JyPLHCTs;Ov&?XudOUSc0#W`56EqGw47G zcKE$c;l>-vkx^N9e3|RBZ%LI%=KzQb%+nm`WQEcoMxnS?(I1~in2jn9V!tv? zO=mJDvCmri4d<+OhwC4yFv*Ym%q0E75cC)jL+SWonqI|8VL}y)P-wZaf8x!Fn4<^q zY)q|02;oFSzVPb8t6^rSAKWDmPde-BWEG|GG=3|UUZBUXbQDt`)C|WkaGoVvu@o&G z^w;H?VAd34LmxCEgZoWXt+(0nR|!G}8vRYf&cCx2$?wLLvF7g$#}*t$ONyWdoznZB zFmyN8^iN{%YX;0&`JB?h5=mx)(bDIo8+Z2NQ_(EZ7t|X!C3Q#osM>FqQZhfmMID0~ zqaSygN{bY$p-5j&MrhO{s|&HH!PNW^uf>4YY%36447z5g8VT~$bj*>Gtef^-?Yfu` zf9RR+=55_HsN2DoG)Oe1nx@>#;zG04zUtqM7mWO%JPuZt zCPy?dm%1|wTx_~+x|s~e9fhG60ko8G)dZ3m5i(0$(lEK-kqU_wN)<`)+5~!g{3jT( zui)@GY7Ft!`m-gtfD**dAfXIzf|sRxJ^Rq58wMEFguvrw6khcbteeKs;<{iVJCNGk z>tJ6G#J_dceU-}+4zrnkgMXl}7|nMI7N5qs@s8|%??KVg)u#wWDEnN-SiO`OV*V|_ zAK>)1#r}cIZ2XfXn7v~Rfz0yb*2S9(jU2{~ps|(&(2Qow3syXz#K)}bJ|jV^UxvPR zeCa%pE3-2zf;tum>J!A^4r>X4_U!;x;zjoxor_MWf+m$|;5l6-#MLz_>G*iq5aBcbLYpQ1nC|KO)WeXPcT#Rs&0{Y_6 zEdBa^Iyu4kV`P~?_$CyfHRkWJ;YZ9GmdI>?qQ+x!Yn;C?e@ugzpDs}AUslNQPQ3l%+yJF z`7u3z;*gu+u5Lx%o;8_kirpx;qfT6aQhLr|A_5=-#kx!cH`<5qLfZX1(0@CYxRr21 zmKg$PH>rfQfFL?BQYd9q`fI1bn#r`Fcu0{mKsRVw(A1J~$pP=C6X1?|f9~PlnSFz& zWgke;D`FnJS_P#-9KT0IQ-R#m(a4l_xW_FJ(s~WSjActt8+0I~7ItGw@2cA~6Q=R@ z;C^F(avdkRgLk%_BGm0@iX4=o_Wp9O7J9&(G`>63sPT3i$r}6jd9)EaLtZCR%9;Y8 z)rj|ZOha+7lO^K&2E1X)7z57{;e(dcR(k`P4wa+~O4*vBewt7MSr#2;Hh}|4EB3$# zU@Xz-zRjV0J6sF(FeMx3cy!}eZH+PCuN$gFim)6=Tw>`5nKM=BZHhYbQc1Plb%?Pf z!824Ug8PTE$>;~o1YKBTlEhL@5u~)~ko!$fIliKL3G-p6WB%}Ix_x4Pv=9=((gY^) zhUDTj)sP$h0QY&ua%bG{-i~nBF~>rk5)=4|;LX&*amIbSkNbGF54+xm1b(lLT1Pns ziV$b#n;zbu_9)-whuMN0wlnm-@2kF{wWi(dnxN-oMM{wY888NK!5c_`B_xGMh=wvZN7dP%5)&q9QfD;-C%&{|smED3Lj;_=Q zXb65ElMdQC&_T_s21SXJ=<=S~Wt5f3J*X=QQV>Xlilq71K;z1T*V=7_YPS}`fJBp3 zb4dKUd4h~zb-3SMd{8(LM;;;{ZBo?@Nt4cA`QW#Wp@(>qI+oLQHO6EC+z|q7K~vU-c~)pgSt!pvnm89R3#|I8#;QC^E7l~70zzrzzU_Um+lmpg<^BX-7N6FA)`b> ziLn5d!6dl-H2B`m?&P`gzjiVH@to^t0c+YJ(;JI1e;>XHvZ%OtF zdg!&+@h@${}6VNpfB!^OTDd1`&uPZ22^&1cChEnFpMUYwLQpi1anG_}1l@9@n zE!i9$v^i#6)eK z1qMALas7H=*gxUG+sSl=#0g+Dse=p-{A~$N>gY~S%H*g;Mzw5~rXm%IrHYZT66kz7 zok{^nle|f(p%ZAso0D0w@*#lVC+^;GT!14^yZ0gmWKm~Oqs!i z%@W9iF{D_Ws^8OE8gdXTL@XeCtbqOgwdf`AN?~<@Np=TzA!eVm7$)ejPcp^1m5PQZ zPaB%uqLQYXiKd&UtM!jJtl$qiFte1?cq{H$nSyrLdvAZ{n&PO-9VM#A+WqbgS(22wzTW7JTzv^*9()}5``cS%)>p8`( zo>}w*O`K?otx2AarBMm|sbFU21Dazj6;aKQ3=f%1r4=^>dB_4V)i}8JgSBZ~Q^D$? zjeU;ugrOIw8FX0Yh;323-XYcsaL2-Oxx8G+c@pa{qfa>!>(gu)}bNkN3A!8-tFd% z#xmDUUEl9d)5jZ<`uXkeQz@L(l66rhIh4%xfSs=we0PG!`{E-8-Q2h0WB%M{tXum8 zVs>~&>y)qgc`dh07Dz=EW5zm_^E7~puz$a*d`Ke^Tv$39oUZxu$3qZKj&3H1o?FpV zeXEnpL^3s{qQs(F7DtmH1`|g`StLAZa-zz|wK7*poD8wm{0xPv16NZ!)2oJwjUXTT zioT@TXY7Fvady$v#PSYZxrr)n1y)-LggUy!jmthp+-bn+Jl$kNK9}qhXKY_5${=%1 z8IE4O6RavyDmhYW0c6<0;d6N6B`1LFb5LjBU8-P%e-JJ|2uw>^9aL^P%} z?WXbVd?5_J&D#dL_VL_)|A=)aO0!8z01Zf6#}wJd*>(%?OL3 z_U6*5nA4bVA?3>F13U`XN&zhKBmj!3KI+vHp3Pd_^ON007kr&! zvUR~19;d4Um&?Y!nGzXn%Vebl$52(8S=xgO3=%o7^t=^~6|i}s-re|A_3&K3Qr~z^ z9Zg>JLrp`;T4hJ;GMPjPH03kNCvnb%P*bMoGY0|;4ae@}=pwjbQ4175+*q{*{cQ%OA~<}Er#^B`wv!QZyRSrNi0k@u*bPW;bIFoxa^Bv z(3OOoU~IZ(nmBBzrZt50+^F&!XOgVYs`-Gv!7wCdX667ppK~2;D&;~4&7JIAB9C90 z?=d|tD%TomLbnl+wl`b5jrm!jedvQ$O({iEv|OV*d@yPfusIJa@rH=G_&kZ88pI)| z|A~PQ|WBE1`bIU!Ny5e`18fupZ~y3V8gjiZuM&y6QWfdow46SE8p-b zhU68p>1R%!`y13luGt0QOzQHM$>^dW_k3ykCuD_n{lpZ(=J8!?2Czy6hCY0!zS)o4 z9kdX#5!I*rEBz2UxnByE+O95MM|40$^3=!ddTjdAUTmCE4u<%z!9JQSAsRHV zG;8MK9cs^BvJg{xvOJQbwVuqBw)Jz;){?_UPwqh8k_OqXw4XkEMixcskTU)3MnDt? zHYqeXQJOGLB-JXHkEssZ!$vqZ_;yFZI8YohNv#e*7;};?Xp)f&yLvs_=Tl#z3}0%s zaY~R)>4r9#uKdc`C2vyvxqp1x94V1xP#uvfs6Z3o_`=7vUkK2Qoz+%WXE=LEo!>vu z=eMO$a1=Aq&lpM%CDw1iIMc%Mw zZ4LieQa|G!xmyqm=slKX`TYac>BhSA#R8~;0|EkmBU#Vpk z4icZorFpe*HHCz{2_=MwE}zcQp*cWRn*C`f4-0l3O91XNN)>DCq`tH!)2AXR$KV%I zs}~{6a#7vYEyg8D0pSy)e)}9lPFikcMmuo!U&iI;6Gk%|Nu=hABqMs!$DL&h+Gxkl&aK4B*%h^enAqY~gr zr1H#u#aT5@bVWbO-@!zzvc+5N(F*(gLKh#2mran~=w-m@B{pLU#R@h|+sQl|7GR)R zDP@#LP3av~2zi?M3)-^IF!eO2_pB9o@Va!JB6XvTbnTYb`(}x*EonoU*0#sEF<1Nx zr|fuOD+$0$*14f7rrvT-R47w~a!wSsk0)rsniY2xR+ck`fr#J(uH=BQ0QpY-eKOQC z*YiSki?2Om^$gtQ4CH@+yolZZfV?~hHg7^-bjvwn^X?Z-vvFqV@&(~mAX1&FB77ZR zED9AUEc^@Q&3;IV6v}x(se69bfcSZ>nR7t<1;37UZ{uEnVY*fiqLr=x3?Xvz5 zs^-w>7r)xNb_K6?2lE%E>-^j#_YZ!YQNvY_pagL?ve;~43lft4V?)fv%F62g=P)fVdDE5*_6vVU{ax6d_N5}q zuai&j%Y@VNLR)h@RH~p^kgQ=4pIAKUl1i)D@9gQL$A7*GGOx$_DeDUuv<{9N{m2pq z-fjH2EQ}KvczNO4^1lE5wR*$M!a=m9!#y0)UzLADA&g_TU$D!EUQl`#^5Xk}QucIG zT4-k)g+f)h3e7u~(B2hM1fmLzmn(6UI+9rjtm3ObxUCt=j5xTpXLQ<}8Z0V_{ z^3xWR!($lowiz4TTVx?3mf|dlAPUzI_^ zSeZWLC&!De>o*Y7NJEQ-=S0@E3ern)69!_yB*)@~cxF@B*N#>M;XQ~qN;z@P6lQ9u z#jM^{BD#iYt;csZxs+QojkPF8*qZ4)Zrm*QvrolOTV_4lTB?fvwZ;tS@crPSprq8v z5~^3J=CCFEV{(6h+SKkW!3w6%QFeLqXuOa(95l>D(g1Fngt*!^*N?D6pP7A#O^b;f z!R8iZoAk@I$B!XP@;%&jlOG2{1}bVXS}2U5=1yWPLoPFS4MIkzh0_>ty8E;;(;ss< zn1CL*@zR+Smr4fM@ZXf#)O;}hK(mkfHSR6Lruf6-uFU7%Xb-Z(wGy=Cj)&AqaOt5% z*{&70f0QI+idgRm;mzWcuxHK)V*Jw0kjo$>18q z)hPt4XXmB8BMMDqFe`cjY-v5d3@MGxI(V0&SA>H3P&q5X$#1dSiSnVOob9|P0jTaz z6J#p>_ZUjA$Hz2@TGzCFKO2`giV#P z?{C!-Ksr@bJ=ZC{+Jt*oaKa#*aJu1oA@TZVspM!FxKK|5CRQ?em690oAq`Yb6CD+K zQtx7RTay_CFOo>bBV{}T_TAPmOxIbJ$P*HrYoCDxe?nM=F$VoEgN%@#JU6~7Z>SVFRQ6Q(S88X#cQl5d!{D~+AqyrYMs#>!8 zxrLUq+4*DPUiLT~+`+W=Eskpoaj-*Hk`Zy&&?xII6A?y!2>vB7%(TMvI1I$EMjnHW zYfox0Zs(SMPx13w`za+^Sfsu?aPGDuHIY0BBKR4 zm}x^gw_W$mIZJvbj4^rlZhyT;Hnt-sQ*X9Nl{94h$3u#O-M~tEoRdH-uPWbOQ~Iej zNA}ZMU013|lO>@Y!4T~XTHRn`0m-(>Kcg6Ev{ur~i!eG2jnF^nIYMVVT+RO0Pe`1G ziV`#`&s7@^S_K3i!)S4bv?A_7C$lgFV=}k6qa+K&=Gp$!hJp!GA(G4iqoxd*-%pJ< zD`-?_^x)unFXL*0Eb~q;{iWwp>60f{_xt2OAO$;7#H_vC5pN<;NK3)ncECqU1KV2X zCVv6J*_`5j*pP!2o3n*XUkk;J2GbG1+*?TxjUx&au0r&Vf_V`Kao24BCLZ;IsD5Sf zoGAJoYNFunLkf1*09u7I1HnT$m3p2 z>P<1Uin8BtjSw(5-(g-tVn8>;uZf5-69K5hHl#k{Je1BjRcjE8IHx8Oj?zgTu&(5k zHgDL056NQ37$w7~kup2SaF%iq()_)bn|wvxuB~pm}#Bc&T|ht#KZ-euMkONW|gCc>Tj;fP1x^)l|$rohS~Mll;nezCiN^T zhHkgu{CWi9ur#Il{_vX%mY%4;|G=vcWH?d*5hV&?2z*)Z>LD7;csGXG%%s+6!Y0m* zpo3#c^<(kXEy^R(MBDHgpx#|!Sd*vkG=G#D$-7ybR*kI|@@R($ot{)*nLsai*nvKO zuQ3jBYH?jk1)%O3nEg1itYaGMDmbPTMo_;~7;-c_EIL{^R1yn4R?(4)4scp0d7c>& zL*brkB|FY}2y@4y>k137QrrT-lE;Ulw~VbWWZ1MhF2%gFV8p4#R=y4*v)^Zb`Fd`#?c^6r2OA{XEdh5rG_2fVrk)}p zD-*j1<~1U)FhLlEH5jkfxVwQch%~*#61zj(Ju+#yJCE8143Po@E+HRTQbl z3behHZYk*D@PWw@b2M7!{I+--+M1Ooidt231`E1^ZB53{g(=X8^mpQ*FNv65QGGA$2#Jz0Dxwe)L$XH7Tr1d!Mh`0{$0t^KAlIZ0@uTilCw-p@B+d z)Jm{Qart16)$Z1A>-05Pfa4S81TefG;R#Ioa>Wk)^5{y>q7J#K*U_`3?711R%r^QA zD&f<-YrCI97cdgU9a8qOj3_cMr9%`fqAqK-5?mPYwp=L^#Z5L^I%rPNrtbgDVKq6`+GQniZ%}K!*JlV zQNUTn(4%hhc!nphIKSBQDzX8^06IA@Q_3_~l6(4i;(p`QsbJc4A>2FHDlmpSnOQ(` zw0SU5!N{99qG%&Nc=obhg$S>n18+d4KfH$!iN}%InZ_%|53_qp&YyztJ2w7ECu`toT{?{Os6p1jA=VhP7 zm-8gJR?;Vz)}(=rdeHUZ#wpGwYiHcHK7VIc+FEnwo}{*lIYC1{k5WHJM#-K5! z=PH&@UJI)~SN9cwQnEA4-}{#J&w@QXzWI5X=ZtWa2&ncGN46|qk3^+GF&m({VB6b6 z`NwVJj)svjIj`-vYvc`1gqq6rRiEm=K4NSveYB>%j7vib>dB}VP0tJ|6M zpvkX0k-FsKd&DqJzUEl}%f%h9{p(6D!uDIYIDRmk4@ZrvEmP&pl`;73MT{1^oyex_Xa~sL+?KW zm(h1i(J1G)7zu>j35 zigr!kH@8Au(1%WL6NU==IFXUOo%NQ1i@AS(aac+k9gLt_f>AdmQVaD@QUANEK>N<( zZkeN1yi8o9RSv2M1=XxKIvf!c1{?R=auCF+6@DYm#4$o0J(ipp0N!nTv~0rMi{5XY zykE0Dt;LKo?HZ9jv)_@)EAs&4Ok-E>M5t8Z;d3V2pIszBMEu)=;Rv>0sC?> zD8BI{$~ePBs|&@5ncvS6o6-Hg&BG5RkG^=8ew$$ZSO)wD-Jwx6mSi-(xTjySolo{#DK z>|djgoTZ#Z?Y>5;3`r2tDCx|cvFucDFzH9wRh-`$r~rS5V*i;14f7x8XJR$=C=RX^Ok3x1K=a zD_DuSktVGdf(+I2-!FKD4DiHug`$)H>}lkcKM}qK&_?NV$`Qy9voQi{OU#yXs$n~(hq*|_FKxqdZ6(At7-FQ#e zQv|rw2!C2QS>#PWl8!cP|A@bSXmC{!cjw40+P=IWNKZIO?`vkz$>Y_H-E8h~j&gXQ zZm8$?YcZSu6C%etN*fOgbh#V^Y)J+y6$b_Bio7W7Ke@Qr*UkFK$Vx}?_m}j zvnnIH19k|*H|Bn<5tdK4jbwmr!dc^^ughDnwqkIk98jJ&KfIa!XS%7o_zB6m83$Ik zqqe&)hUS9E=`!BimNX~;PL|QRSA(>r7n)hRee2Jpzqs(RO>Y_PI3g|EZpQy08u%jm zxiG@=x>Q?D$Luwb2mgJ!*GjCY6Wdt7Sq4kxiB?KBl6SA zv(m`)6R9-bov2jWh2rfUGK|x>5fjSXO_Fvkdl$fz<0a;aDMrB>Pj~pNR$dFO)9i%8hDE{*fX}y6g(b_EnX;; z^)I^WeTVc&cKV4AZ~^DUm59E?e!a^8u$0?MRaoPDD{Lg@p)wi!6MA(TQ$%zUX}YxP zK9=3rPEAj5h)D(FomIvfO>m4E#y*>Fp6nIe>Q{cjE(g|Ovq?3P zQ|Ix}9+{Io@YMf34Y*?|J%v1O!Y9G^d^>$CV80A%kkowxo(bN)HwGbc4P{QhT((|`iv@{sIM{q@9cpr51y(;OLE3h^M}kdGeZqH(bWt9G*D7JTh7s! z8&15_QR83Gu^WwIY@}l##v@OrIX1TssB|a}G7Lac#i6SPcY6p74)kH_kb!z=H zuE8t2PAPLIxc-FrIsa}r1R0eOj$)X539Lc1D}@7pNQKIn=2M(#Z;TX@7lSQE{;nN? zg>|A)AVaZaaV6?InHR9Pz5;*7ZE( z_HHB%7W{ikXNF^`q#Sekvc{>9Ps|1~S>54l4#RAR)U#l>zz6tV zjdMHhYzT9b>|<+&D)(8Pn$O&KL&`|7g6CTvAue0_(4(^k~ zmgB_qLv!?VMMQ#4`|jk!9A&O5nN%;TiLrZjEe1;v-tW~?z=}vIDa7R9Z1|@YB4(fp zItO>4uHJ|@BgFXRdmNsZKW#1efC_m!EYgu&ss!rK~)Rk;% zw6>$oXFMBwQ{L1$)I@)tI zVe8lZQE9Kt@wx-g0Rzgf?IHRcXxLS?(R;2;O_431a}D@+~(wa?^R9J)Xe;Wx}1B@KHGZtT6cBRm53r( z1PQL=63#EK^)5-4D>MU_gOHVJ4x=1BocxYbF6|sDnS<+6kTibyhYJ>-j;m*ruT0f8 z@Yw;1M8QT`1qOrOGG$==EjSPfKY9#;Xm;ShsC>nMa^O+Y3#+_!)Tgqg5EuNNNc@uXC!Kr)|Q~DJzZl~%%QYid7A*j%Qbi|L==p_MV zfsapKDj(~l0{5&mC5?y*H*U$8166+E3}3>+c=zWi`b~SJy9!KuQtH82D4$eH)30nD zx`{Ekz;zz~4MMwUmSe*o#!l4YMk^!UEWb??ZWS=nzC%Q&Ab6b;UN9dsH-#RYTG(9A zinz6n6gCyLKSPF8w{(qjc-mfqvlhw06T*}3v#3BI0X`ZytH z+>_+b2a^bTH_$sOYCn5Pr3i;y5;?Y`9#+?d1k zabSco{+vYzyO-LCtkF3Y*XN1W-_Yn4#r(#>mDB1JIEQ0?F`1SaS)M|{)JP)^zEDHq z7~Vb$95N#LvUt>IC^hpeB5OY#FnoR%)v5;Ps0_iU3AYM0m)l3S(E{7zTyZb+1L0 z%x04_-wZwbQP}{Qchf0d%Il8;%gNLs-7wc7Cp5V4*vjdm_FXCx`NH{F8I=2u&b;V& zcx9Fr(P}a7gi-yrv=f?Cc7DuZJ9fe`1%H~2V2a*z5SkEFGSwf;evKAgQXVFu{y6mG zoASv++G-|XZCJoQ^C=y2w%bf?ov4?zaV3=aa)x4mfdmx!F*#w2FibzWre{Zx446#axs>>E zpswsCTf-zTgkpzRPcFe3nMI|^3JWpJfo1E(C|a(!5rVPO%arPK}gTgSeZ}%-IM8pd>dd)Qy@4USb1aixx$u_ z)TWn*S?s|8W9N(hJViv_dfq*L8agurGd(5lCH9+(`w>UPn$3vhRi%At0Ypdl!@WF* z<}-C*`jMV-+49;e-J7r&m{LG#r3gl82E34*g7XQ^$~L1KZJ5ARJYDsY;sFgenf!U+ zPrr1JG)4t{`l@i|6q8t$I7~||+_H?BTFp~x-w8286`(8$N1t;=x`KkIAvthuA{#vn zY>QD{`?qv{t|`tS0_@_SRDgm8_-35X_KTt{upQW-jGU=my#e2wYQthsCl7^9lRW;PCUa`J-a)`Vr>FbT*v zyhFe&)}i`A-dwpdgQ6)OE9n;^TLPqW`(?bP@=GUnOH$^FE_R1opPl{qOD760Q)ZA} z?f_`$lZo!>0`GdN#^&>Q8w1~9yWc0)ZQ9Mr+vxMQmS3Hqupo#2NfgN9?z;b|_h6Kp zTf_^A-OXp#|1^LZmPk44?e+wqCYM!TTHbk|5JxmnNKBN5*4<=|Lm>CBqL$I^;Ch;o z@&>mnq1vqxF0fEMhyhO$%5o5Ko=QM0sMe5dEk`Jjh>8++(G+jEbfo2R1J9xyo8LLZ z>*y~Qf5SYdeCMwGZs1QJbw8^us<9}elV`jxEk*IW>>Fm;WHLL$s6M$4zbMv%moD zya4T6r9}QgM*Wzsps~bv#bM9&O$YM+)`>H1CmV8wzm|Kq>G<4m8d6Y;{U)m%70t2`q0IQtIkGz@MfoyObUpD6UF zk6?(`o=Bmt7O1Ee{Ld#|5g0!gbbrUVL;f{OB{A`S4P`T8zsGZt+3)^A(EEC zDO)o}ZT*veuNp6Hs1nvFN-DDan@t9Vr|e`b(N9#3>vHSLp^}z`4QN z5RQ!y%A%F|ifN`KLX;nj{5&R!1c6_63wnUk2|;_=aWexZg-i;VRY@3qjc{{|&}4_* zaD=vm$HX@n>e2+$*olT{!3nyXh9;$rwvFGTR$>RtrI_o3q`bW;7s??QqbxY1aae3>&x3k ziX#FPUy_Yg&yB~?#~!=bY>oviVYzUjlC!n@x+u4<6SL`5Jax`dsWk7v_&0)rwP8$( z;VMLhXPs%EJ)CSv6%gjmOcav^IJb**N@OA>PjH8g4}2OVJxInhJOmUqg+pfUCjzn1>D37U#U_{0ufLZqHmUEqawdN1-~a&xQ|1 z=xBCkWQ6^?a(izoe7!maJ_IQ;G2?GGJAK{B&PP*oUhihzZtuzPgXDPLQY}aq(TNw{ z3zA)aYWRiWKrB-74|ho1{_K|*CUd)ARmkTR3zE#?-)e}^noyWodYVU~neMXArf#HB ze^B0oj9=+^IUh;Zmj<%-`AAlV(6jKwh|ANbWninoEP};wa)|4;YTS6_P9srMk?6Ts z3{w_N6Y2!FUx=yYo8UMSYIeW!EJQ*`8$AzTAZf8SP?o#KjdA8O!GqYU9V@20npYkx-2e6_zB;%D-t_bEY= zC$DqsO!{`)d7NWX8+jHC2Iu?|zRlA(=kzYQHje*C5_gqTA2agbeRp2;r>!zYzPmlD z?wy$(Y+^blW|j5RUfLQDl+K=UU!A=wGUrB#N))PZ-yRh4iA-7Ou!qRCYL0Pp)ivFD z+qpkosW(g$t71g0tzi;NLF&gh0yJK6!pNS*J&*WY-7*bL`cGL_h|H){g(JabW7BFu zYz5)9p0j2B(ymKRAy@!rioihm%k}&weHSLB{@xF+(hvKw%BZ9O6VHN2BRXs&R+=SL z$TQd7ITw5UZljYvuy9q&@_oA*Nzcsezj~X#vN%6x znDRJ_!^Xl1Vrz+|OFDS;mi!fDQ_O27v)eF&`8?3n75(UIgjayDo(WFwotAUiOgckm zp0zJV_di|$3E|?YY?sE0MbR&=W1%|LTG_q|Bgn7nO`V2BhMq)F$Q7z5FkSmO70 zIyDW%8yS6`Q1};=kAaz^IyoCx9_;Q{T|jp>1VN-c5>JYD&!@nW3|2JoH2p;+{j?&x zt0h1ip(2@Y!wL{;%R&{IdtI+{V;3S+_TWBL!lAF?TnvpH#qNTu(;$ISzpK*?fE6ABIzy=lW!QfN9du0~%z zq7e*M|D>V_v<-_w55`xqW{W-I43VhW*gDtyP)yS0=Q*f~cm6>afou}jO!hn(B9tOC5%Xj%8j==?0-9T%IomAAT|h}~ zCPwMR!rkJ8RWl@3Gt3Pkw0rzv$5qC%5rnj`A{4LfhPRMS_hB%miQ1rV1vPESHvmv} z#E-C~p4GWUQBmTQdz2^bAd5BFt!YH!5~zR3w`%4SWI7G`a(Zb-W*SF8C)rRgGq-&I zNXqe4F4NSU(X@m|A2U_fmHIQCr2RUkXUgeb);#hpfw!tb2^%x}tdHJwa%w~7Okiv} zDL54?Jc%q~*PZ3sUS_EBHe5Kr9g3%Qb?Am9X-XzoTrwHEYXdr>K2{>t6AqO|t*~+Q z*92Y5^pI>n++oggs>XQ25dA~eCz(4pko?(dIG&{PyCa>bs;7w}7!rjM^z%n@r=Feo z3O}Pm)JsdpN;o?{%DVQl3+Cr(4awSQ2Jxb?eveUkTNg1XpMIj@YvJh}%>Q%=uSbTR zdYyK~U>T$@ELS7okF;`o_mrexZK*$ZTJ?0+lGk^qvc(PIAquD;a(nrwNG*mZYT|ZF z^e9BEe6xp+iNEjpRzx37hX3`ZMJ*qvl^I=&3dZ2VOFe9;QgBa8Iqp{h^WD@# z$Z*!0w=AwdvjPfV)Xd|tBO-mHnPc~oPw&KEdn@$XaojJBS^LZcTQeK zXjR=}{bY$wj866Qa#HKRas~H>2+fvi8Nz!^wtgn7btS&;e6NGcgE5Q| zRjfFwJ?it#)p)ZAa%LN!F_~c|`I}?GSd6U?gWPA1k|4-nV>XTloNEiCiq2tN=5cxFc>2;M2usq#oi@KWR_ zj(8WYRaTUypM-Q;YGZ9RI_6|Q@F>2mYpk?o(2F!3bA(Q(NUAXMCy?_eq3Ul$`^AQd z{_sIlVv#JGB#4RXt9PP)c?nRSfs30Q+C+(8H!k@Sa=`u2#$F;O%!N{lZX)uLTv!*T z;d3-baI9yraM)S(((Z5=Q(nZ9xko_zyWP^kQ`D$cuc<4rDkE4Y7)vTs?Nsy3U~v>= zWpWN{Lh|8} z!!;mR7z^J#a?1ao(&jvIl=1`;TcvZah9<8X?T{a;gV>plslr zOdn9tNnO5o^#GBw_lUIa8Uf%8V}N+ZDpBFu)$eroFy`u@FW@d6!?D6Y$%>aW&i56GJT@HuT&8>?sxO~%4yec@g zTIi>~D0p7dJKY_9kB*DmZ}ER^(RL#)U%p65S^^5Ym3@&0@TFm?LDx$OfCbeGE@Y`6G-s=noK&LV~QAvGvp z=AqEaHR!^;ABpqxX|Do&5dx=9Cr3|hnZCdq2X+Wz%XAD8cc>qFbGLdw4Mkz&e^_x} zQV9w$2c8b0D0!}hzC95Ro1k2_JsQT=kb0b*kG8(VZOf!?mk+4*F44~PTiO2UWW<2e z(AFLpT%>CuY$4EobMk4annp5ap7P(o&oQ(dxur6hT|pPJw?{?@yS@Ai?W1@jL+#*wee6WjLz2*z9?0WThWhmjcV;swi% zr#GZ!BToY5YLGBlgdF6LOrBh%-QAim`+wFzc5vR!m@(#v9rhPT9R?0FdtLIpoVaqu z6EY9#76YD?NLQR{Qx3F9Jfp=&j@0KA?eg$&g(W0Lj*y$*#M-(WOt3>KG2lq_xk}+c zKsBR|>aZAl?UoA`O2U_lx4{-}o|4YL(wVX9FsKjcONJ@(5lOJ5ghglUdtfY=#y{_P z3zL#QjhTe3><8*?Kefe=nV^&ymO4bQBoE!wEmP}nuxb4DKx8_J zE0GM%jf&i~3!hr%D)hyHph=M?NsuJaZd2Rw>Xa+-=T-^{c8e^KTd32m6#d0bh@?T6 z8s<$amMT`LSiF#79HnpQ3$>Q_3A?h-H(B#(jMF|tG~vGFn7>+u#g#K17KaWh`!_H7 zM3A>~(KgDKL4Oeewm=lsFPsR}-59~F8YUu^ZT0x>!U|&}MQChdjI$HW(P8a74#MhgBl~h>({UI#>)1+2f#Ax`PTF*pRl!K44Z$K4hvIYoDQxG9yT$k^ke$};X0xr@wc3Z`!G%9; z#1twQhieYSN2U<-ctBVcTK#$f6n0m?KEzmNpim`PD$6iGodmV}tgocwS9TEaLa3~a;v-i z|4oYOL52HfQ5GjO;E|zZv9mb;^ z1>kd2dO7PoDj+ivVDRRygjv*6SbxS7%Xb@=@NNHx-}oBk+s*%^A6hmTfut0G3%eRUq3)BqgGZ@gm%T(+X)UR=O|>m0QTJ+^WGnpmX*6O;X?8O1r1 zrT?d7F)Ey1{4Y7lpF;rSyuVo)o#2mNFfBMKCHI4;#BJfN{~lNGD-lIgE;J z4fX%M*Y`FwDZ-=)0ozyG=jw~Ds{f`AGVH}w;$I(7iS7+?|MfmRh*V)v6i|c)7ECXa z{+m6DGg;q%&lnfQdaVBJe)-qT^nW*#F$5j4^~B5)g>3DumSf2UHY5wzcFpn^ ziP%T~9h_^rXY2oLhNj7ZxFGL?I!WC&>{Ssd-n{2>-?Q zXX{LS1RnToth#^m@86A#fi$Eq&+;g5S^i=fZkVZC&H-DqcGoQcv(A9nYw<%;eq=%n z{)9OCwP3sCx3oI&?cZ9@#st>7txW!9*LSdc^F|zg@NM-E5U;F`=J2JAFp~Hvy05o= z`d`>R(FwPo_Y)oLS2vepV$p#`LRhwC)8lSw4d!}xh4S|Mld#+VjYLP?Uj!E_i|_5W zj-BrF)gP*;27hbCpSU!(k3vv!vzzeWGHYJ>x4|wX^Xs3%`jG{{og8U1L5t7c^w;#A zxeVm5EIrioET91MWd##Wxd-e-!m6wiIDI-S5p(n7K06oTp3PqnG)eSdJdSlk1fB#o zR{RJ*qH6k#npnp7Lfj5WI-3EV7RW8LM+mSdbIO7JVMz(5N`-|ge^g5(^R=@*$ix8^ zsuDeRTA)>z<0%_!m5%11z^$D4Et*sTdgQuz;~Q%E`=g5~ad}1tZs*M~z7=t~uh5zu zg!F+HRcfCXTky#^n3DA!)2r9c*`L4_)6f~yz`1;lMS-yXU;4miQ;%4L{AU-qZkYeC zb!;$lVG3E21{7J+gz;~A2!%M=AzNp{bN+CUIp5IP`2Fw+)QoNID_Nn1fe(TAxfga< z!7P4s@aE0z4>jBi17nRELT$<`fXcJj|8`xyV7boWygFpOnRrI|d zD@DJ}MdZT~DT4ioEy`>Dga81-TTmoW`EMyh{)ou~7ITyviNc&HmhuF1F{`IbYjrKd zw&+XJ=jg%A0u%qIH%w_v#5JB^wQI00QhJQ^stv+@@V~m*K4v~@cL0e$`RO6fUhdD+ zv$Itotn!$e;R9*rsaoZVb_Uj9WRunT{b-{bR#3gq<#&Aci3^x+#popNA{Gohey#u~ zg=%QUm9wnPBfD6Bvxs<3%|FPtVw3Kn1rsA!4;1<#l&u$O$ey@d<=FL?#gs@2vpa?q z4R)2Oi$H=UX8;9OrPsRh!qL@i`yY_mpU7=s10>Kt4NxKa|DoBo!3Ik)X1MA)Whxw_ zn?~}mz+wB^4rJBIsuy5V14(?2q4;aHRb0eM^6+l}J}92=@pc6`7uXU5&CAk2NIQkM zk8DPSLMJ;jEAbb@yuw#!kV2cSD31U@2h@tswF(U~uRP*xYuG&l? z?rMtYdG7@;2~;HnsZM#j@rH>a0geRI$rco z{MDDZLhEdrJ}6m8(fn1Ru$4bE&Z2Ql$arvWmeNj2Y-{nNp{VEXBs%H0%X7DU9t2p* z^if@BZa<6j1#lK@E1;rfPAOCFe7mPdSUfZ}gEFhBG%t3NQC}C$T zqlxP2F{Jd2tW!}_hJyx|lYC0xc?bh`hxdSGS*2)dwF1(Hxkq*kQI;B#H@Xtb>}kM+ z-5%}IqtFkXq-z&uQlcdixMCGJ7hYM9hvd)l%(?4hK&XRh98q2@6jF}O%}pE|qyaz9F+UA)Fsu?H5KlPa9S`E`Sa;GRs zl@6Ez3b%PacJbp1$G5pLW}mB&-#o(J&3gqENGVQ9uS_^Vi-|rW75|G3tvYCjA~2(i z9o%^e6FhFN8%GrLgqnnZJ2!UwzZs}%qhkhIg%YiK<2QooEZz*(I<#*O(F_SMFWs=g zj6S7V(BD8s<S0RzGjz~AxRSpB(_Q~{F=?-95K z5Phz?D?yy?M9>1Xt>Ax7ddGNH0NEkBiavh#393jiIBB->>f@NfgS zwf`d5K2&vpo`{I$M*!O9Ch+|)|IEW+yd*w#f%dlmZ^a8@;NnA^?qOD>kZQcehCE=U z8GdNE4JdbmzXDQW`Y-_c{zC_czfA))0_AV)M+eY;Co-`11jB^$1wP-LWo2b|TKvvi zG<;Q5nS8X^Fay1`2Hkq}P|G)&t(ItkCOrVo`Ty%f@hrLS>;J2u< z&kM+FhmE~7+<{J~19<}vVqh#C5S9oZ{&CgU5xWk10OJT*s{MgM3w}%h zCJTp%ComDh@S~?Bwn-9iVZyQXLL32tpf(+WeyRHcFRAsBqyNeeIrYPQ=l#|nylbj! zvn1S0AdAt!h$PH~Bd&mfk`HO2K*0Zepg2PPD~;zN=|qIjHMZpUEzuG84;+B#XcN2U z_n7L9zHy!HU%J5bNkXkmyY-sc#kDysrrY{{C{g{8a8?A+bauaGAYX7@+KJ^umARw3 zYcabAKC~!r0534I)X|?OsE+}9#ZbaouX)#S$V`@V112-g+6oAD2zuh z*ZEGR1|8{q?u-l({0YTA`Ky~Vtz%Wl0uVXQT{IBxEm#w~#xv`Cx4h?YtAM3UVAj^+ z4UBt%NmR<&Kt)Xn^B|wx2ZVmcYOJhnv=V->OzDQ-Up^*0=6&0nzXCHmMp7rnnF<2v?M^2jBANXf&#V=}a8uyU(` zb&&Bp!BiOOXF}&<$4UG&?$g@`11C?X1nqV1gX>WGEX=^jg23aK6`3r1ew}Zz;>AUL zCKppq2&G(5riiKj7mgT)nQxHUd2ibh{I3-CMfwFG%q^k|kP9Aa2N_5lMQ=-Z;eGil z2U(-7?*xEtsVCZWlLK0VOu|>)PY84lv4xxBl`5U266B>D7Z?~f+_N!F2HX1F^m1C_ zCBss~mYxa7nh7tJ@3Xny2WzJ$yV?^y_vedm~4^fOguyq0O&;`?hX8@ZhnQDsK0Y`Xl&t zZ_Q4FUYrj{Uo1Yvb9>}S+ul3tf&txLBdp=0=X0iJcV5Hb_tn*5uo-&!=l!P-bQCQ! zmyLIAtnFjJtKI=M!&3MA?GlL#w9eC7M;wZb$=OET8HRm#+UwO}=FbkItr~BeRU$_3 z`O6PIACP2f1fc)|niI6u+^eGa8wwVts_NGdBU)ARC1 z8fFB3tC5{;%9~x6`8%RBgqyn87`sYb6o}*=Io)`;L1%k>jH3|o=?%Y+RCWjkBCk%c zJ~&NXBLDt~Y-p3exqs7s3f)EAU=@hti~g;z^FBs|-#jw$^J;S2^;6J$8&rSEvE-Bg zeoNsSA_+;zNvXRHQ|nI91s6vwI&a+q$J%#}%`yK5%Pbp?F|&r#EWMmnM}o&7P<(vj z_Lx(#E_fA%niK!&F8j-zHs|eyBq1EwP2v+dZfCR0HrA_Y&f`hkkXf*eB^hT+zu92U zhqNr(5Tu`mV&E3>f{8?04(FGr12doRVTP)LN+6NPo;}{TD3P>TsQ8#5Fb|LMv6T2= z6^bk*0`uwnp(v|-E>&3cwwp+?Zfvt{L}@ryynnRBnJ^5Bz{u`6l3)BKQEr_mzBn84 zMOx(Q=q4FcweI?u?S+`r@fj5V_cTJ!Q;-j}9X9WqEp{FLu?Ok2LybJmo^%n*vBviE z9aW7r^k=O(g~VK385|6lWs*H!2mj@T>hFcc`5$@j_aJuK+5v3~N*DbDFfnWaFZ0NH zeP_>W>74vib3CsZ8@X%KB}TCkm`z|D*0f`A4!O{W=DfWW$jS@GW7$j0Sbz4^bln_z z$<|3qG{|GvTA-P&js@*Xs`g@Sa@^wgpuRRBa>%n5-#V2!raE%095_DcU`wB`$BVt^ zeJ2cpQao&1VQ+kBy*WAMjsqXDsQ^7JS%gsBLf}V&ypUYD`!5~WF za6+mm0bV{6uo$w^gKxr*_L+jXC!R;n+Vb|0f5ICRs{%4s#Cn4HM)n~~{uaZCKGlmC zIJqhEnmF8u6IQ4lb{{#L>0hgkuW;3##>5jgojF5oyk=|7=7=92=;eh^63-Mh*CkE9 zb|eUpz){0?Hwj+ywdNKyji`J3zs9vB2&amz)Ql49;1&sNiN)wTf!rU>X~~Ysv4JMv zP&Er}hS(kRm=f4z{q4X##|QDk{tdDKBHu`@hxi+6o!UF;7YnhC>L#9;@ASevG2U6}xl`)W z*1r)zhP=o3$UsW&cF|}UzlzE4nVio*pFpOUR+PXC`gsU){L0{=0a;vvr!?$_%%3!8 z`8bO+AMKZJ2FtGc>-4=7s{)g0h(a;fRz1>^*Z}DwP?~&!Ti-i>9w)1w38R+nEUw$K{mFwB}_ zWu00gCW@w!sMmh14>^rkE5;Oh46}}3DYzxjh+qXP;DyyA^Fxho#rrXhQgUgJhLK%9S>fuE zjfR+ESME42Z9MqZ|GP2tbRvPLA>Yyn5!IuYiryugoA$ZGu1CU3$N99`$gic;qLVYr4+BKG*f3oW=Z zif}D&;p#b+XJG{PF70QZCiZWwM&_*J@7_VFGUOU%M&$-KEk%EMu2?Q|B*>tEQS+Y| z?Q2{ORq}ne$biUrc7-h#V1JQ8MJF4n(Y)WUJiZ@G z$wudEMZI2G)iItWXy-QohgF zwNYs$$oS$5j=idHlXwcyR=hT8jC7h0?HK-!Z_-rfw{QlAv7QOtM$Lk@u8}9dAs*SI zqA^1y4By|AGnqqEHUXSxlI(ZsJ>F&b!rfxy8wW6-(PO&>ymNcEn=-@Xv<&WXqDWaNm!-*vLV1VV)`?2h&l9*;4c+ll(qvhA zK$4%ovzi#ZC**2EER7T|7Q}#O#f(dWQ2B*}3BhX3K~AA5aX;qk%KE{o{lvwwiDpXC z()l?#Av5(z!DGiWHMCQ7w_~O0wp2X#0G-bu?hUr<2nk-!BLi;QNs;DmO0EeyXU*Wl zbQ4|@#Pdx?f*7jv)rULgC2X#s1P?`6NSfLIx>>?HwZ-!TDyD~z;g=g;7Zm$;)hwb= z+uTiDyieQ0D2ACviLxhC=x7bk@7VTI29bTTR-CN^gbXF_yFAC^C65P~q2|$Ba*r`f zr&WG^+a&xc3kU`HQg1c6c=O{BV42S}AY z4-(ALKA|!R0p^7Z_-8(pw8L6x>e~R0^laDP5aAQR*41sG)r)^p+6Nc zR~m!9lf3KNkY-3x_)@dMVy9`PNj6NyU4$CE7{% z0tiK#qh1k+lzD(Xr$=~Lh%oIu?k8-+l>sh>lc|;Fnbsfl_2Z?xhp(Y(a(d1qxF!3F z$gMd~>p;4E;najCW<0#_=%(K6#o)Kl;>tma`cL@!eMD!&mWT5DlZzdU9C6z?*#TnS zfsm^hM?{PX(_%)@{7WtU2%P!uiL~2P0#x$xPy$%BMY#0rp_AjK-6JHYC0PpZU|n>h z0Sin$r)tKVA5Peg&|{!Lnhe6K1JSPf5?e8M2w07P{n?O=mO^Soz=SFPF%$nV zyLuNPo2-!)+Uf5b1F3&nSgTVei9SQKcgaS&(%G?4 zUhP_j8yzXk(e2hig5JNU-lz`_Os}q(kSU!OMM|NO!w1 z6uC)b%c+bud=JNh$D~G0J=lYq6pk(W8KF}8(@Cp*_r^%&AD$1XT|IxiBjWjc>TIl$ zWV4?niSX(M z01r49E$;-*Ko&{C6qbpoBx)3hw&x~N_$snf8ORml)m1!a(6ed*rR6JI23xod+`(K6 zjFp)0y}$lxP~e9^$pczKE~E6iI{=x;${h=9J{y)Q0+Yd%HTT7Vhhiap49nee#c}L4 zt79wI>-_|OA4YvfK$GcW5|Fh)&UnBS647DL=`}&^qHrCh>haEKXP93Q)jIq2cGIsl zqB}wLJk5`p64*{TJ-lfZ&Jy4d1@wGV*fPrBwaQfQ+M<#2gM@RCn80?w@`qq7o-2Ef zJy(VPEOxff)}s26gKBb-lvRY2k=B4P;(PpRmxP};K`4YNcf_y25m28y4Hr?C=+%@; zDGm=WH|wkr8DS!ARU{>N<+*o(_rb7Sd@x&RcR;R9=5EQzKI^Vut6j5j(&>WN(Fs$* zMuW^9_v#OM|JhzDmv?7!G=|rSu#P?yORi$~ktg#@rt!OHTk?q3DqT*We{L zEkrZDb*-{CEFqv@1++ku?;F*6{U|Qq)#@>s?o!Gz5~L-AN9YEKGmPeipS5HSXqE-O z%aUCr89o@NI=`O(gLY%RGu{-un!~oGKXi;1DgxO*m%pAY0`%$D@#t>kNYXN?FjR@V zpUFF2e7%gyNtv;g`Hu{eg?e{4Z8 z8^UrVufMg|Q^?z<*$Zf;#5xw=8d^~@e(>8+(l09VXy|OglRF>zny{WK=srh(qa@DQ zswU#qw_Pys5pA0T%TF$I7Og7BM3JYwSEQE5&~W>jBNVRV0g=MCy>- zi)+BEN>#er(4J>=g?Tl}^R1;#8BJl=I3#UTyTWaInrUX}lo1xUs%p&EK}ka@G~+ve zGse6{RX7b>p*ZTZx|4o!XvmUr(`V4no_Q7UxX&SUeQIB9hWWYMB$Z5L3t|;BD|8z7 zJ&x?&=^vAVqav40pz<_BvsRFngkKtd1qR%9HBL)LZeLqz}uPwK-MUE$k3 zZ)ydM6p#!ZB6AN+%m!6?y5ciy>J7}% zF#rBOk%3RiA`-zf1uGsLBqlyOW@Tky*#@Gt8?|#jf zUl?k!Z)>hc^IAR?OWZD1MNZTE=5xF>nS19kB9v_sH#-)omzQoojO9#3^<4Mr0w z&(!r3lSs@$v5IoiCi6cM$U$k!7QWv(BM^1FZdgo|IgD{T$i3tGZuV!)|V`%5}7 zKuZ1uDv1~UK3CbU{o9_BsKg_ff>r`k(|K2zpM^C(E0BOGRJ+wyenp#&5%@fT9^&Pg zk_Q|GKi#)7)(SwWmO>Z}^sLa!N!dvh1gb)LguMxJw5T{fGY^*p5QirKDvB)ApCgx& zz{-Kgrf^0?b=Ov1)&h2v1cVxU_5==6KNcgdHMj<}s8|l2tqL?=2faZdKKmm?qSoCCU7f#!{| zt4dxJdTGCXB{4#0u4ez)bdF^ypb=%We<`=moGl3hf;n+4B({!66&i>!=UHJpe^=74 zq)>L3ZpUDG-w^hY21}2za05qJ^SAan?apbRl`AHx-`(dg7?u5Y67hFm)k1Ar-@LJu zy4}iXDGLX4w2$88#TH!ef#F(~h2ukOJOe3vps z;^iC)6g`pS0oS^XRcCeToX>-h0)QGcu!cNH*@r%||5S}CQym5OWnf@K%Ey?C@fZYC zSc&3SID&7|tHe~uG6Lee5iT<)a(Q~j=o27>60%cI+=SX_y)hsufd0Ml-CYoAPs7?SZ6OWRy(IwGuLpP3>GuE0!Kj1^f z;uGEIMy~np=E=*}4wC%WRY}Z%FCHNDZ*kxZWC=8=a`s=58=4vgQ;@^bYAkMJGgD-> z*+%P9THo$n0qE89oso`$@P>{_se%BGpOU+IOAIV=(GpxDN=pc464>?g*Xqpw$U`G?j23!_joBSI%(F4eCSg@hDK|welZ= z?6VlVU#>lIjP_D;8-MrRuM{?~A`lKjsN#)5ElWk9Q;X8NK=wkJjRNIM%6ZzrLsCWO zhNaD!kZ=*YPzJsoy`=`|-H(5#sd$n&RRVR-m|6RCOX!1qEj4k?#*e5+ft#@l;a4_~ z9(5};o2rf%IaMw88Ja>!7oHU4|3Hd(kaXFt;vE<@^1zRA!)0JoJ_96+pR&)v@^W~A zeyYm$(oTc6oQ)tdUw;Z4>5O;RKyd^M@w?ab}0A<*dJyl{yV&4iv_ZCI9 zY>%gIo%HWGQ{N9WFnLGP7bO`3b<(KzI{`=!n9q^qYFl+o*&eb)XN<0O9ZIOD0PxN% zzQH+32OF}D-HKQAHEe}Qaec+t1*F`i$G9&s8j~qc?YUISQ)w0}igT_r!{4)VSaUvq zG10SWRybpw@~*=yQ?K2L^$CdsY4Ne@PVw%dlt+YT^V*}rCu}76H^trVn$Xvr`!OW) z^)8|0J9JCCUL=*L*CV$vzR9=UmXWc~NN9zITVvM zh)OB=B}rle0q6ii37mDxmMJ2gxGmbrZ=4-MTv7G>Xc#Y6=>%!UvEE^jhXtL>Lew4b4 ze#rpsem_b*Jz-2JXJ4mO8-~fwpqWpn)<_bR$ZPU&?&Aqx`L{pQTN#cdP1~=dfe-j8 zb{;+|L_ntURHspCj2imteM0i6VFs)kum*hPe}#)t18K6~7Qn#9HeM+G9{h3i;`QK8 zx(TJQ04)d|iGSj;G_J9HTTGdFJDHy>WYTFh>06r<;KSrQ;gQs`dcJF4^)i9p^m_K# zeJ2*{yW;6UBp7@uD*PufGS~YncY?zACmRMc$>WmoAmHDnP-5$|Q7|gQ59ONiBI+ec zy(Tk%gDegz(o5UQ75Yu)@zSCH0b&J)1;=@Wq^O}tYan3RyWfjaO!ZZ4lB`IkE{RMN zen_jV3byoNOx^!6#jeh^apg}3>5963{hgR30P;mF?q#S1lO1xbE=1x}R?PO~MEj2+ zGp`4pfXyfl8*c7nr+41L@`)`o*8~}8j6_MmR~Dpv93gJKR3O7$x(G%jtHjM(PL6|6 zqVjd?WJ&mjY@6?KOzk}K(Ty9C$`0Lqej5EibPsV}sAOSe9a89&P}A3mU!Skq*S$>f z8OG|{Z*lZ%mKTo(YAKF3dhB(|1jdslBq3ZNPs*P?TMns!gsKg6OnP8t)gfN9kYj;CI0utIy`bdi>dH<-OIv3$hUP`tuH(ah#hb$bvRHb4 zY9nBZoXie!K_MMi5^Y?naQlbUtDTpG(d5QGW;2s=mYXxl5;bb-$wxPERKp*UM=(dc zMzJj6c@=~vHAnIZRDp;1m&_6S#!c1Tu9UGi=S66tBcZrC^wjv*i=+XP#4VyGdSNu4 zoKf5@Ulow@41f`SZ%<55cKlLeZCVVGHHq}Yu9rFtEAl~jDIP15UCu_e?^xg&4>>pn z^8Q`QRY}*1h;#nksSKZoF=uAh(*fR9K>X+Yllc5W$^w`*bPV_wHh)H(NPMGw;I%`U z;!jvACsXipsUNj$3SESU5Owjr2d6?6pXf2&Mu#Vb}tM0QoWdIyqcN;O*@# zxsdNQri@1;<|3d}%6TF_kQx2reAHbJTUP+kLf30Wsm+xA|OgoK1&=+%nQ`B=xj z^Fnj`w1o+zp#Bz}rjuEN0b-SaR{1Cn(YoNt;b5Z?$Mz~o%Jk#@v0&~sRI4SI(HZOQ zo~?3jt4ipJsX~sk{$h8DXN$A%HCF?CLJQ>44QFga7?tVL%RA*yz}F&Fp__sGzkl;P zI`Hf2>Ock04~0fSthN*IHl{$vN4OQAbUWoUkAaSJFhs*ep!ge*TorPgf zETF{{&ZyHTS%Z((9Z9W}^9P{=O1nIwR4dFWaS6r(f60x>ZqId8Ft{-brxk)2MbAhX z>JIA>Q@!e};Z;dczy|o@N~2nk0aPJ+D0Sa>tlMm^m~@g59F#sEBKs>wXg<+JFY+RA zF?z!DfO1rUtIk8O5Jf1-c}OPmPUnHS+`MV38ICDMb$4oRF68pk>5=O~bDwj%485Kx zNe;)iO(=T;W6qCa^{1oB*2n!sB2r<yU%hb|8gv`&=)zP)xM$2({I zT#%)?AZxTnZ%EHpckx3do3R%$L8tuizK7WaY2~5(CEjWlp02+*U=z1)fO#}0o@6%g zk8u^lJ*kKm?R%QW5XN0m>|VOSzB%+#v)#1Ofd|n*)#`&h>g2;czrsG0_krUB@4|2} zgbm%**S>Uo752aH>F&X$r2J(Trv)ey8)Q=W4$pMt>xF=DtuNx;K&8T#ZMtRq`jI)V z*o~WE#IX0L9Nkuxx%)bxd&p(h^ys6k*rJ%u7Ow|qax_1XzL!o&NC!dv^!Y|nMR*!S zd5HyeF`&v4awf7MpCGjm)=hIc2cjs`9-6K_>u($OPQGh@3F4-Z!p#Zg1gI%xLwbWf zIxFNbAit^B(I?$w`laPsPhI5vj3QR%Cn}Xs@29~;Tt?^1ORiKe2vqbRk;T3puF1laLZG7y6g8NpP}8&aR83JzgVh&IcI%pCIV?EPwmk~w!_lA>*Ge}X z7J6I-Nrwg{bcPFxU_Vv)P0-$psdc%f(G8uwrjAtrVxW8;m$M=_p8WDIV&fN4NX7}Q zKuIIXDIsj>FE(%UtiWqkE48mdz3o5rPo*`i`o8Rc>prNbRbEk&OG)mm$9R8X0JdpoBkduLh zNGORLR~4k#(f_}o)d(zM^MPaC*VotMA|st_#U^E*xZ!INNglKeJ+OqzXtjmh;hiXb z!Dmm{0pL027!k-PD-Eh5vt5suU&2|H2Su7rp)v109arD$qr9+B(;XeRF|np6MMPio zcH;1o0g`J_6n*VNNkoK~z@H4H*WwQ_rNUt262@zGzA&+;Z?zIht@C*rS>H4zQ(Avg z)n&T8`i)Dt+o7gfnd@2pvfR#}-ES+D8Ts~);|Vi$%LiI}DXQ4JV?)2_A1xy{tNJ-( zi|ba_8+G*#KN7D>sa#6wyXdcE4y2-t(b=DmTC6$Q0e#Ngqc4SceS{d$HDiIj?qIdV z9B%ajm)A*NUVf8-OhOOq)I)KN#O+c{zsCmo(OmZwL@2$ayjmd+$%mxCW10Mv@c?c> zay^RTF2j{&NlMO%14WlZqnh)dWI}5D5z86SFa7+C^9!Ey z1xp8qzPuzpkL|%`E}n~gB%rXK5F+^xRZ!QgkDtcCZYzffYD($K{upMG8g;sAO6r%5 z5dC^Vt*Me^(y@f=LZg)?UbI?t#u*e5MbBhMKvB3!?|XPq^I50Pc>z869g|cTX2e8Ca{-`*VqoLS0kW7qXO#u-Qi^44HyePp45D{L znt_A_CJQkU4f|S|*z8l4xYqT@pS;X*4Y5={d#zu;pM|E&hevUuW1yGpg@)w~Zo^py z@A9(S^_{?Qn8{2wUbGlq9!c^Urx&7Z!s;f}+mE|jI))4C(bvf&6?sBa!T0hGSbHbK z$Y7ycDkiQp)&q|a?;ODFA`3i7$P3?{R%{3_4wW-zQ>NQH-u`%w8r*i?d;v@AWl}yp zEqC>^1!i~aQ<`4y@a5FN<&H18c$BPwSc7!h$9#el+HS)?i z2$>KfLPlj35D@q_5a9G|!q`ko%#3A-DX0EeJh!RcYD;Fv@(!SQ*7-UR@K6nlO&nx! z?#r5%&*>|Jyh0%oZ_p@<9lCeHkLzfP537TB`9PjgXE3f)XnIUzu!`|He-tL$MCC`0 zyVU(yI%aNya$@s17+P{3U{cS?3pM~0VKN<d#PoGn8A7X(9LN_P6U zi9f^p!4bGBod%hZf>g$MV7#k(S%em4i7r2bAlxkS7lA!)7=<<$I6?%n6AK{Skulzk zc6l=M_RrBlaE%4b+L%y*%GTdEpDjtLOEbsl=6u-ofrDuzUyI~{05h<6ROz?K^taLB z=<19;YC%#y7T0pSJW{cmBn}>X;IOBg_5{8twK+g`TpX4FzvS~n6a&x1z&#KK@c;D! z0A8dZLyxf;+$H!braj~lZkU(a$VvtOf@E8A5g3|al!iJow2=BeGWbaWq26rN8d@A_ zZ@n_tQEB=CH$@dMEmd)x8U@TkxTs%=o1ZNvs?VW~qtb1@}`i zRcaspI1Z?C!L)%Y1Bx=1N$BEDH;(krwRhduyA19PXgGXA|3gbJJ&1hz;bwO+p{jTg zMQ*s{TAXUM^)wVPT7IVWM)z<$yw{snNbx=b5#;gDr_Tto&(WXOB-|EM8>9+x``$v=KV7l1zY+mjEM8ZcHdj2|EJhznPWqXYDTac$oyK>DYENM7)?fXeeH za&KrqFNC>H`TqIFa4J)ijFusR1%XH;Mj9UEyNNJ@3YyvqQJ)Qz|G1L5^CFa=_Ap^o z2oDUJ&KwuuVQ(D6ewwH~z;yHLN>fkj8sB@^w}7E6AB4^fkw7X%K`sZ}eY*_tc+p~D z6A}ftjj{j($f* zycQQ^HPR_D@K+rKGk7LXitpvURHgH`adTqekns5|`G059)CkNm8C83ZqcE&C4KN(2 zO8=eKIVmjNs3hW@zrZf1GvD?nZbq-pD(R70&wCb&?_WCBw*kZNnqLOcpvPbKiY|cX zzdCcrM=WWc7PwkatT_Q@?!vSZD!TuKVY{@AjENecxW@x~vjDVQV$cVNOuA5HYYI?A z7xdLAJdKVQ<%8^^&rj2ph+y`#5mqzUC5b!)A5F9Ac(BkEMkcLB1T!PxCUvS9cNYUn zZ6t!zngv=;1Mo!e4Ws~vWsU$>PvHa_0N)G-bjRI%bYdvDDuNGeLIBcljphXh0hsQ% zjFc3|8fSLn0bm@lCW;}n9k`?rn^&GeWvX%BClgPhKt}s}K}g~{cZeB)Z@C=SYo_gN z8ixEly!UEI5Fm+F5!ibLBnw*}$Flc+xYR+Idu$Pb;PK{Tt}ibyDImCdti&|4CesFU zz&3eyVF0%{_u8%g0YDMP#|{K{&RcnGvi$l}ux)Vv9C1K7LCyjgUP9=@yK&Po!6ASv zm5BR>HERSIe$(d9md|>Rr9lD5w2YCv#)g!;l?Z#i2jPV80H!m+4f0J!cyP=YdI+BH z{OR1GfXYPU2U+>ay5GbdXZC%>q@V<}+`b5SRn9&$BqKa`p0TZ;mI3f1JT?R;HG-r= zua}so$j!B^jIjtz(!96SaM0olDkfxbu`L#SRT|rtpYZkX0A6sFfh6q7WfH%)eS*{Eq+h z4f!L?cFJ%}Wg||LyzeOs0M?q!=xwmrrBsZT7E!~C6`0!QQn?=&J0k}PJ-`y?h&Rrx zvYW~2Dgs021q&`n=&6z$t(XhCzg!?2oW%>vTN_S=^l2~^*4VxB!N{Ko&x~i8oKo3B za)OWfdR3Ig89S-g7d#^mBRotLW-*a%{{P)xvCzo@haQxy09mWGdGpU+NY^W{|Ptc z=)pX;A|TQNUwjNBcS&RsW1U4rjtW#Gdc`P5*VK-&tC?*{jI(uhDyghT0JMY> z31gb5afz?Y3&@X)an`H55CVsBU_sDhqx-jXa7#s3qBF+*F#UFHIk|st$5Tv4Ew#AK zx+C&a^$LOQy`k6QRkvnhhG%-J8A@o-zyjlHTQ|YTbz3R@2~SKvQ)|xOKt>ug{nDRD zAZZID?wt}Un|)9W65xi4fAjM#DE(!A0YMg}GqwpiQrKU{7L!N?hP$r1jK_(K>V1-m z{~90O6stur?+#P_h4jkdQ5UvOp+KBsrT6b*be4Eu;gVGt$+o!016t^TJ{q3dym3dI z6zj6wMYO{AOjunz&xpM@bp;ib82c?K99?SsTG-RRfhzZ?Ahzlbt7n%z?F}(7EYQ~n zVK>p>U^+1|bo}=d1^-N0#vOT{4XA|8ftWMq475!@u^n(Oj%CGBhOJ;5N&m*XUq$_D zm3;r>%+iz+St;B7bePsVh%pL#@A9(+X98Rj*`94JCAXnS#U9qRYr)UoSSr4>gPCM; zB+NE5!zaYM$dfaxAzLP{e+m`S#AyfX#S0SH|Jx7JOxzG|m3w8$uck1V3=>~`4MCQy z6a+`0_DnPuEo~bf(#iH0VKrM&24P>>JC{FQAw4Ug^~=B}X8S+lTYjCO5qz@HiffV` z22b#pnaFL|tthC6WbyywGCo~(h!V2T0udX14up(hU$K+?xcG| zH1=SOth|)4XzW-WJSe1=SR4r?w4;dGTu@8gkq2P?nZy1)7PSE<9yZhBTy ztb0|Y+*O&EXk%-_4ryQnDc9gctW@$;-Ib-)F-V=X9cMcTFL<^Bt?8QzvTv;8#i)ymQLl8dzRw>m>QFupiW%mmsHSDKKJ zVk)g?hn&|L%n}`0t>Z z{eyuv#Tyy3_Q#9*K?1`qDctOu+6u7q2d__r%80|~DemtU6+9TmWeDHHj$>&6SoC5< zKCVwgw*tdibQO@^oNHs-vn+eEbjL`~N-#sL+9$zw(&hi6hCA%hyzU)wW=il<+$L!z z;w@{yq_xUTS>8={eqDYe=vDmXNei87yp;n`6f2w9_s28qOf+mQ6dh5nmxi8U;sVPB z1~VhckK+ z{byRC9|wU4HQ@(^>vLOfb*@o8D{Ez@i5=yva}pxUH-Ll z!K=dpD5B`moi~i%-OT~bS zS8Hwy@dIYBlmgg;z$zX;UW~Ro{#WgILyNBMntBKiuGNBzGylyEwuT1p2K|fb;1>^5 zL8lUP8jh}@*dOM$56kuxL%P9g>+#X@t)x!4^XGyPr|>>xF#d)&PO^@rAb^>k9nC#a zt_tlN6&ckYA4no0ga?&PV0J4k?#K3t?tX8u-^Slvlhs}W+jX6YlRh9pWO$5>fj#

n0#iz=C~7D=RB8*)abSs{Fc{^-Wfs2}RgFsh{m}aG zg;xF505hV}{GN%gxrBj#0sOM+ospC^o)){jR9CN&i>t@GT!MhK4f|u?A_@*ldsz%I zO;aDtAM7JtSn1jKH@QmRolq|+FhMWJo2yOVR0)dva-=PW{5-npa77#tx@Rs4J+X&Dx-0tV>*ra1*+>k9o0py}6{C9S)XgE>_ixy+iALplxeJ*e`{~8CtzNqOa=&Gi$ zjAY$!6O&EQBR(lN080ri9Lr-6w+CPh?4=D=ty;hJB6Le}4fsnR&nrZErC)1Wx$yQt`b=t7nmR~A4956MSLRuIDfe)8<05GolS z9^HE#h{{XN+&};NX`8vnTcQCq%35t>WP%?$m!a%v(!*(?LUsBzF?dK})#F&8pgMA1LJ;q<{8B8bB zMMLl%iDQ}<67hU4t29d;>Te3HW}Gi3j`FMhZG;-Kq3h-%N@ZQ7j_^#b6w^IC-w$av zG~CI=H0A!iamnm(NR8%;P*!LF2%S?h@zK1Moj3E~nR>S9{o%F7VpB}XOtmGI$FL>) z0`Pp!B82Oh+1{UgmLWKOnG_vm6A4rkn==h4xxc0#&HWMTKC|+^<~K#Ie;pp7%I$_q z_K%>r%9yU2Y{KjIf*LA_G71V9am}k`N*beLtS_v_`^vmRJ2`CUYX`JWIDW7Q4*V$D z(gO$XnsU@`rH4(E?yl%-gF{ytj*vwkqtEfm!<^_m(Su-p>^jC=ky`JrMTxq2@}<14 zw8FKqC;Op>A?bYt2<(x1m-{Z_bcW%6n+2C2pM&XYFL66TWV6=wT2j?ELmHTx*3D-r_VJ99j{Z0H*S4 z0@MhlJ`3^WsB;sB`;%B?4Z#l7uBnKo{af2Y{@gC-s=r$v7+4filePQiQ-vZ_={1t5 zv=a(Xccp;HddUzTp7Ya`DUYW`e2;v32x&p1J~QNZh!K1V`ZmIhtCxV6joM6{DY3EE zN>Cb7qb@)Z^Cz|&UCs6c>O|V+Bq*H_O_(+owhh!(J8DJWZn}oT#Wh3M+uexF_Ghak zzq`PnE~UjpH+&RrY$qESM@rI>=f1?BDA<}MrEtKMa+4%GZQ{bv*(WaFtQ=w>7u zjN`YwPXv^jAwtcS>wtRs?y%}G&l0*q70So_VKM!FI_QAO_t5UysLH-#IAgrZ*9kB3 z^@9J^En2I@tEbvhlPHnw(9*0PK?Tt^$+`A?gYDp-ghA-Qx?qs;D~G# zTb0)4AJTfmruqR&Py}OxlHgNKwn-RF{b*qPHdL^@uS92sY8JMoB9I8#;!gn!j?5$?HvTUUNT5vS}p~T zjWr6H?8;t=TV7~|rsby!C=5t@9aD$dBV`^c$f z4gfyL6)&R^mVw$0n#;6kUh6f@=FC-iRtsvGyWgDO2e{CW6d;v6G4Qn=agyi-(E~+k zo;7UMhtix^GJ?{(*gU+xGPr#y?>v#*oYHQl!&gsk@TA4^fpZ_Q5lU0`gun*Yl%nZoVmW@tUe+kDe$05}_PMcUg;P=V zFH5l{>-{qfwA!tefFq0kAk1b&Mobrh?OnE#>MC~l`Bi@WtE8YwUHz!khTQ(V4cq4< zeIfaHGCSmmt_N{m&6G`lKR@)4JN+PUj1!(MM0dkGSfv>sjRXZQlQA7p3RzAhF~4AD zo}b{X1W$AY<`+5{auMe0k%j)6ApAB`=2o|aA&u-QXwo4pl1Pu3rHe9#yp`Pa_~eSgY2 zYw%Vp9EIzXAfIv5(-&7v0Sq_l_wZoun3a4C6mZv|VNRSHE7rg*an!|h1b?024ygnK zK8`_V_z!75kF6NwtQ7JMtT15j_R?I1-C#_YUCP)-Y79ff~TokyW79cfet5ue@SE*6x)+wrp{F*bCNo;E{St|~hcNA099 z&d(R~N$)nJh>f+^-ww5_%FhGOd$3NKOED$%d; z9;}Bh51TJSITB0arDc)W&|Y$Go2$9Fl!j8-HXZBy4HH!Z1q41@z^)|yuS&K~H*|h8 z*Ub`t!3cqggN*$MCG#y50nhXGH%|%&x1~Mr3YCTXO477-ov<&$_|@P1NN&aL5ttr# zySS%A4Rd{|syYn(z*~^)B>fP)Dg*Gl@C~xpky3>@GB%XIsfCN!B!kpI z5OPVwFGOYYcV}bip8xrB%9x@!MB@RS&Q9iZ+UkC93GR7dK5mn9B)PIw;lSg&EFJS2 ztJK{}bCcLl>~)WP#VOE5lY#e>M}4f|_TLG2Nu512jIrZ@}paj?2|-4~!RLAwTUC1=812rbo0oE)Xqhw6C-HhDflb9L1Cp%Paj|-}{N6I~| zfA_y>38x?9mNGB7qT)~=_i2v&Bj;sI82x+Vq(7(W;bViuYy#YRX;k}2wp)XISoB3T z9dLL$B(IV2;Z`o;iwgI)_w$$K3$4G#K3A2P!BHqAJL1?-3V36HYkZbG!8=IC`&O>h zf4w6XSjlM6VT3gVh8nIw$#0JLe}ZPXN{Z0mu6)=O$ti1n^M^BY!|uj029~|c&%2k| zGFF{Wqm@@0ECVqhbhSkhyl5?s%zId~+fSV=(kZoY;#=?_q?;+kh}#_!7Ux2h!(VLu zpj>gY7y};^1l|!Z`hNGDd*N zNd27j`L0SyeJBD>j|f61vVZmK#uWG|8XG=ezvM2jGYONcjasCOncJUs>qk5Jx3bSN zpFnr7e|aod-!NOsV@T>mb8Oiq}QdZGkrx0heB^i6i=)kV{09?p^|)`wr1w zYVpvp9J|EDubZ9%;{%LW6PpsH5~-8cLE@ftVYo=7O>Zq4b<`y_&6#!aYiKL856w;9 zo}!0qKmV8%p14+Z{X}Pme5wz)jcZpq!#v;}=4g^+pV8xlBDeRt>gNfIyL}_fPH*G z%#>Y6hUU6VOeNGRw{Ka_hywKRZd4?m6)@|~FQ|OqX7>%hV+&&vh>f=h;BC7v_Wj%QdOEG52^y|wGRbG;*@iYyWs?~~)6*ut0i zAX}hQe|eYT&erd}1$z!oiyN0VcS$BUJN7;$IbDjq0Ce*Abg=rUNJpMA$ts7@rMCZI z=Lj(iTj!5L@{X@QuIJTY@YxmJhYfFkk#r1+2eDwF1_?EQN5&<5aNcJ{241v@{yaO-Qvw3gk|Bss`@wtavjrJxsinQ zB4WD(i;`-r{Frk5ckDz5$e3EB2J6l;M2I%uKd9Vq38+EC_wbnO_y_AGU?}cihwKm+ zvKQ}uvn&@FqKYb%ARo=Wkil#2$tX6UwC021zpxgd_sFKhFF~63>(|1K?g!>>e8-oc zLru&)ie>wwWyYd4wM6@jyPL1|2mJW%(EiT^t z%V!l{{;TIK_ork`V|qda7mOT6w;ws|o$zxR*4?em?H20=Sg($v(&sqv^Lk{L+->;~ z&z)@h1{a&YH|7?)2xs{GlU8rPb$LqPv6r*FO#`499o5i4bS%W{!{I}VyP3x2fG+N& zg2?}NLzBZgm4|C%>(JrAb&6TpYeD_1f6+}6Kkztb?WVC7w-Rjf>|-q#Gm)c>XJ~zJEV;9F1ntIX>L6}yvoOF=9}+r zZy)9J0aA3+VsP~2F!)g{`y2*HXNO09g9qp!ORer4ik5NX#VVP}gqqZJO}2?JgD%ww z=2n!FV%SLt2RAJ?i&fRXdZBiY*RrGqgOlSRDw!m?ndQ@rpgB8+`$5B1?|2D7icnky zW@S`YSBa8*lFv9HLgfoNcO=rLxfj9HT8ksbvM2nPZa_ zA7wMT(S2K$8w{R62HTrtjOZ~zBEt(_8hJfC%8URUqK=qfv7%7R%RWNx#O&ML#qE!o z`=8$EJG7Z&U_UF)NKDu;nA-jB0jT~qi&Q>C zLk9wqBT9AVhlk)oChlCIFO&Q-${9j*0BfSmb0Gjh91_gW2M?!VtR=kW>?=%nWPLsx ztD7}j!7Q4_&4b^_kqv3UH@knpuK7n8%%p2M_-#OomocKGdEk;E!cs&lV!d74flaSw zJKpNcM7O^lj?aExW6hnY6+A*bGeW8Bjtrf+B#bvCbUm97@SRDcJ_~rfc9%zx1u*j| zjN*=6ayy8Oda`*u9GG~RTOcG>DSlL26sikW`_umwy;@X4%Q0i;B7VPHz$$aN1G#WC zC*UbH{i;}1xWrY0ZOc}Clh3_qy&>lnPDU*~@~LX5P^<$Oet34+9g*t3sg&7s9`j}p zx+wWr+dO0jQ)(A(Awzo+rzEXCH@#C-%dlrLa);j|3e4cFsi4K&KfK=+bZQvrqX1Ia z*k?qN^LU*-xJ+ zNPue>$T&?GK5`hy%X}}#<2ICS#KCNzN+L*%43(k2F0qq|tbp|kBSq$R%l@~12yaRAu{dQ0(> z3|8(OH@(Mpx6cS@wj;bBre^k4j?Dl5)~OegGG^xS??RW?1CHQ@ers>}Hy0xxJnr=~ zmF_ojpC&ZMe{zjYdCN|T@6yvl@APv6OMml7BZEU`G_aC0vt%T+t|}6Y=v!yf7}%8& zc4@H;=uX=T0H4W5E`D`teWliE7Nb(*rFy>hseq1MzCBxJ6N5sGmJZAACs+JLALL1I z|GK|7aSULAMAGvl;;g4duf4DT!U_>q+cO-9rIfa^`oM1sMXT#fWyW~pMty<@Z;`TN zf{zpr&2NSL^U^ExIbcHl`u7~h#iZS#HHY%Bi&H6#* zy@6XA=uon>m5!HG{b9e#iF@$;B;{Ov`lKqWk5W}Qw9u3vIRwYM(P@e5h(2zk7VyQE@r#%4;b=>a;#x;NHAkB>=@J&LFZ_q`_9=A!Dl zSy^c;$gh4I$CD7UT0y-WE%&)ZU7>`YN)}sUQF!g1ZeP>)0iL@ejvIo0)y+ggBSf3E zg;To;BWt)vx1Awz;?n}y(Bpaj>v)*8Drjg(5WzNs$+lPJDGTb>XCinfq-cOXpwHDMWB&e*n+q`|=j_$Kh?UVyZ`Vm=S_{c$ z(mo!@n4!#XLzIkG)gHCCeQk&kUEYy8;#5y^pbsL{U}-)0k~T*HSH{;A z??mN^L`a;;^O4E#wm8!~-i8NmR&!4F{?XZDa`vD=!n|;+3oD5$2vg_v8qaQtLCr^5 z=o4W06)=dWF48CxqcZWZx8v$TRtk;(uFN*ti_i$%+Tj^EKWfa5LNM2d2aSCI@(fv! zO-i!o2Nire4^bnc*)l~l5L^l{e@q`r%ZXVg{w+h~;9{T~*4!9Y4n>y@FOxzcT}H_#O#W#bpbsk!lY}K7K_i+b10X{G$)D|l_d*UUPqbq8{ zS@`}EPE=~Wx{blvktO{+B!O@izly-b!WomlGSeJp06`_%_4@wr#>69lqI{<+EktCm zms21rw`=98q^JWfGj}D%ZngRTE>3Mg#uz5TGey$}X#+~7_%~VPZ-ycQQmncya&S3a z0EEF00;Bx{#JAgVoq{p?E=r#g#)nrVX8#P)ML-nR1yNg9a|ireh7i;Q#1ZimJu zCF#9_&>+sU7M=Tre7NUbfsza4Y|4$>^i8ZmmcRSk4Q*EoieyZS!5qAF1hs?CvsiUr zQ*IUL{_CH@tn2ZDr;uMlSezXl{3c+HM~)PnQ&hcuMB827ai1_A2`YLI5BAykvovSA zrpaN?M+6r%6N?Q44qJBHP!5gZnWi5ZWK7sRBU>1Xkk(%|t+FngxhVp?#f7N_t~EAz z;s${}j|Jm8n&IA6=v_z4!_^^LuOzCy${CiH(C(-sjtpeQvx&X9mKD0}kK^?c6g?>5 zI!6g1>?4Q40lu2C`>u&7tgjyRL_B*JGF!fHzu(O_5^ndH9`*oz)OYI74gUhk%f0fI zWt0)8w}K|u7GmTY6Vri(M_Cr&LxF83No{*^~!)gQXdO0?BPl?&41dDw&U>l zz|bXYRc?EO)R3VQi;EFCOP;nPL0}l_#YNNIE2)d0%0;#EJsvvawzI&%=Ag6m3~051 z84IZnj88>oD;WJx^p@K*+#COe&4Q1{OfW&a8LcLi+}TwbML0+HjYJ$m_shu~kH3Nu z$NmNDeld4A}}Se_;_r8FZsGRAA?Y z{y3h%|FlqUO4b}jp`c*{I+V(iUzqT8lul_wiPSTj;JpPM03vN{Oz}I~d!|50c}856 zC^d8$M0vv(#{ocUEkfEfKTY7NUJiuEVFb1awf&Rsmycg9zWJI`c3k=wmA=QrNk2D> zXSt$Yqw-Sc1)utQTfXFeWxv7&9J0La6bDQPj6W2k`@E&fz2iS)UTHR_`)xe>_*AZR zu|1$Pm6{qQGL)xiUuXG+BlaZUj@&ylp*{RoE)gwPuak8M+v&OCrP zw)<+wzSHRr&S&c)z!58%wIVN+4UjToaPI2xrH)PP zsmo%{I&i1#nBC+0gbT{vZdo>`ue@N#4;R|*`r?(v3Ug|&RV0l15|&PO=Gw^MtnTcZ zGd(upSlgnM;&uZXS(t;9rVpkmha+fCyK!%Jx8_2HNz(EVN;kqiL_t8>+RUHll!+F* zLhC>$p24RX{Tb=%R9@u?YAc={QYrH9SH&gUUcwm6zbmQK+CNE$MIAmqYG)Kyw%arR zWytA?I{-}M!wt_k(MbZB)3mnkjqwv>@vD*q{-jRn>I6@&X)SG_`zdi+%}j}Jf^DcUxyd-nbEH8pFuzrC~J+`ew}IG;PmKu`_gy{xLU@F~~crH=%3;eIMc?gHpDNq;iJJvn*2`ccdD z({X02RiY}47g}32O!K)=P~(K9i-YwueYSYwp9fd+{VgEQO_zjbkDdE32`r7S-&XhM zhw{gsKhruQ_DIdV*sLQDWV#W--7!KOdKYwBjK1?N2hZ)VKael!ElyRi@=b7zzpSYM z4p-6N@26>Uf5_kWHi9p;7S4c@Q}%ZqkAFIKbQ@F`WI=G(&z8p)ioDpKciqR$Hzl!R z`ny^Ka1Tq}4(j~nlu{;vHJjY``J$`5z|q6`LypA4@nNvkY@a(!xeWl58YrPXQeCQ( zoyZx&o#7tYRM0Xi%$on!BeerW4#3+$LouL%-6r3!*gUlfmt+0oEqbzxI*3DRF{W!A zt?ts8}4Np%DqzGyWJ|nKzUROAnjdF7K@3T~p^|LuPGr zq!MqeBVT`R>=6`976Zc~X3Zf+@gdH&c}9Ejz z5gx2hI3uoj=etIZ%<$-cG$wkkvp=@);!>tw6Nj48+k8~%ynWR>F3%N&|3ayzkY+Ak zHHUap$w2Om>94N0@9A=G6E5na_R4R}`0k%(P=*wySw&scu(!%c+q3lr&yU@n=W`H! zj+UbiO7Uy$4wDXQF2umt>1lwUR3Xg@L=ZfD8I%JgOXy&6I*@U_i3>UN%?WXWz&(HL z&WHMd$NBtqcZzAzP^Fw?EL0(#F?e>5D=$2X-hkIpSA>O%a)s;PyBc;Ur4`dA_hQ1X z3VPc%M|7aT7Z_Yseo+Iz<--j^2ImK%GaFbP3btVBw@u6BxG#`Otz5RgtDT$$p$R{n z?tI%j$gXQ|$69v7Bm^bERAzl&6mmEu6f?2a+$}3db{mwlxX|u6;$(Nf&Uttl;xGO~ z`8FMmxzfyzpI*0q)JMrDNc#u>g~WB5#+JtL-%H(aYE}XyMu3o}vj~2j7AySB>ZjiO z4P+>yY)?9J+vWW_XVDX9BFaAm)i5EL^zmL(S^`D!oT99?BETs&Y7@Tn`%+1x(G7v9 z;I`=N`O*6Y`zDIJ7sQ8hi|zFv*IOu^Ox>H#?dSBx8wFB_*Qn;p9QG92K;>uKPp16~1O-|K}dZHv23Mhxw9V%LT%U^r$MfgYNm)usUBC)Z}H}MM{t- zr-LTkX&Pl{qe01>|6}{Nu{EQ4K?s?$R4V&AOgg{q=>ZrHBDu76-OgZT#dhd1q$;Vs zqOfn+WyCCU#@yHc93H1))065CHf^@U2Fh`#qtW&kS`OVHR?{6`1f?EMElBR~X4B$N zi{FwQbVXu057vCb$?kZnzq)D?n1F-%la;-ga=+y6&BtL z0P7}`j3W{%2;G>EHT++F9<=$%W^Eh^FEVfaSo(Jp@9;hn5!je-T{$mZOuDN{HVqi1 zoA-u6_I9-E?D_d+1UB9V161v7a560YnK*=Nlv51^@Xs>5sJj{(}ABkBh{tAHuPx?BR$x2N}Fmg#y^ybgul2JbJPTZH= z;7>kl2~m~!Dy3vdvpiYhS;1ZGrC1GGibWYpe2)6aO`R=dL6?1{Fd#2#h~>0t2AGUU z`gC#1kRW)w^x@gM>fr{xNZQ=N^UQb!S2JYdxe4*6?zEiaWyv)n9+rAApw}J0CdORI zx`x_X_cML|(>wXxm{bICH+l|UyDb#nd1PGdP_Os1#Bep4xdMv|aT5#6cYfh7_*D?| z%&Yde)-li}Jo5SrJXq(wl=}OJ5FvgZOgdK4aoPJ!JshiLy#MOe%bpdP?kGv}&r)t` zlTK8fDEg}ad)H0#p0OLT5Qq1s+ShZ_376-)PG#xD*ZYr@<1pBCm=>2Dl)nF8xhLrb z2Vll)?64ryl5O1hvLl)w4&3)U$EV{4Zb=K2Oy)uBJrcEi${&&6wJ?R@C-VBG6XndPD@UgwI$g3FYj6zrZ$ytofa7qYH8v?=3RX?9B_ zV)*@?FyEqz5np^Rrdf>BcFn#Gk@75nOc)aRhb^MU7 z>)`nA`G^2kVbj0A=y`JFX`cv$(p~b`A$7Tsd|%0rS?b_A;95(70>Dw0nzNo*I3T2N zQr2|*YZ)=4dtT4iHP+i%Jd6%PRG;I+&N>CC)LyTd8WIZL3CB|=?Io1;{-#%suFp=( zT6526yX4KE6*)LZlr_3((W{U@$m5B&e9Ij1lWL~I9syW;<-znl^*!N!$2;%0P9OMj zJ|pnKWIxdnrhCpKF{JVpRXtTX`8d_3lLKPKoYWG&{uHm*hGFOEF~mzth5C!m!0ol& z1i`vy_$tB~PivV?w8-9i^2=)aVuY{m8sEM!c=BRwkfDI#P!I4D1mTje$OS|Jgn=JI ztQM-dBW_3kZX~2mv^gvq%8q|-~GY&XYL}`bg^{&PGH~c%)ECiu!SZ}^Avw%Kv}Q#1uI#x z8x`?|vT#iJoG!NWnZkTDH)tnQ;;7JTV2c}~dwi)vE)GE-7`{oW;kN)(%@n@g%)G)` zSsKGvwgM5N=tRy@t+ZpOaGZEO!3G_4#N-w-x|avG2farelwJ5GeTl@a0&0K4B*YPh zp0GDrI2x-55n4zZ%E#Z@W7!8^pSSw!dN;tok9w zwX^M6cgZuzeR5wDBgRm^mYr~;`W16?-!pLwwcDM$@1DB|60f3xS<*4d-sb7 zeLJD}5w&}?Hqz?|yQK?iv*(;{0|cXJHpQP)%Bwj*wUP0IOnUV+81ADt8|h(c#wDGa zR&p=GFt=IozdF5W&D#nxv-94PqAP}day0Xwl*v-uC+C3VURKBkK!|Rk+7Z1n(z;9Q zQn0Q>_nG8@gF@Nfcz<-He-$I}d^A_hXn-aIFa0YGz!qdjqz z&FNET%-~B!n}idL@Wr`fyd&zoq+RK_l41RgL|FK;-y_r;80%`co4rKbk$U8#M^N z<2*$O)yq@D?;5!o6)1-npocs3AvE2{!;G>yRV-*4pk_yb0uGSBo1R1kxSpxh`kV%k z#iFfG>Qc)*K@%@Ha?>JXiEp=1yb%z#^yGGWU3@Mpd1ud<`)W}p^4LL1f-o|0*Fq}o zyv*)L|9jsFk1dJGxyZ@nA?9>};y8=(cn^7(lBk7<-bt1FHdgpHBw9Ldv|K++VXxfv zptI9yO4SErf^=bA>UJJ1I~1!od?C1>*c$?TG=SY-)xR5%-d!617*EQ0$1(r zTt)PYzc|eaexou9*m~XdZ2gd@dFG!FOg!`f9&9+n3kLp5iX)xBvK1D?F~z8{SmtVT zs-V6S80~4%d&}YKOFC~Z<{OCHmUx|nw2J%lWzU?L>w4n^6K=3%G z77$#~00aV#kNG|;Lhlh#Zoh1W^w?Db1!CnSeaOn*s&aybUM$W#{i{e_GV5Thm z$o}M>T^3F4871s8xbS{2O{p>BPB=&v!M`UoBf)s+8O&p>{Yjg%<2{~Vx zX2e#hxLby(@jMNERXlcZ$;+Nr>={VSTjaL$9NF))2-^CqHXQJN zTAL&}sD5Nl<$dD8NdGf&>~G~?2AY|KnICBel2S33gIE&9^pKJtIJp=}I}u|m$GN|n-mv)OJfn-qZ#?-m#%Z63sL8qa)pf!|@GS*W$*#r);wi=C?X zI+%+&F9202%#YbPR}{idmY-9)?x%a3STAkc0_f<>J?bUw`et zU5+Ru-^|-E#`v(KFrVV8znE5{fK9y3L19$=9V9Hwo6(?NWErT!mE+fn$ruuk&b!Jm z7UR|CLLuYT9%W90spi0F^cESmJ0t?xXhMx!G%eM-mr8S+0KT}qOgN`z{>W23F?aEr zON?{p!XqRKKISt)(V;T%m}Oh|fo@fRJe`*Ty^35SpLzbO#8ea~*?5^DU62GR`EEtR3`b`x zGV>&E)6f0v3N>%aMqjn*ZyCHRTS3i?D-KP?>2k2YpW@TT>eIixMD$(fg&%fPD9lY# z886C{`5`vpn_({R{KmsR=p!Y!)r5)+j~(kJ`L&CdJf1eadofgX%8>kDPdRO7H`q8+ zgD5bNue#*?5Mq$d*Yu+5Ymer_i8l)a`iZ2Hh=kFB>|d(YJ-GXbYcyLg%Kp*wfe9hV z1++iJMhws)sw5Q@%ydX@v(`N#4gL?4Q6`sxW&9BPDh8UDsxS8Lh!MEUeLyA!tQIG4 z>ArP2=)&Jv5>a{zBm#dCy}T43?ojyx)@WOLn}68Mz)d5FHus=RYS$hot?) zSan=MDHcxTUafWN77|37@?=v+N%>6M-28F&zMWQU;FF7JlGzJb&GR{H1gT_Fg2@VE ztOZxYTmOzZxggLBroAq|JRK$i--z`DTZyK;6%Ecr#f8wZKfgf<-_eF>K7AK!vW;e? z(U`UaR2?HU_{13XIY*UhZjWD{4GjooFFaenuy)9s3eYg=-n5wkF}u{4sJ?uO4#D-= zN8|unbd@tv59aQ%{HyUlt;P)wK|y_w@(`Y}v)!@P&$a%R+916g46T zxe-m}P?c1w1mT2N1=r%{Vd8N4mt*9zhsH>hq+cU)!CMg}BHc-kJ*-9_KM6qeDL!Eq zJ%7mkSPG|nBzUp+vJ$Ft)`4!%?0=cT=`@7c+6EWVAir>Nl2_hVzk0E?QWhblFyG(z2OzFN@>_qI zNx^LXVkn@sd{sCQ@5tjhx9$2lNi-fM1$ilunww;dc}G7yr`_ zzZ_OoE&mSJCC&N7n;-P1QZZ`PGnT6o>CTBE1>3%gT=6^Zv|RLhPa4y=?3Xr&N@5Ld z>Y#~g^BR@7{v9;Bl>VHZ&Uej8r;$e)0UqI6jg!mU{=2v~V!3Kw`TP<%Mb3>(OklfA z0rQ)M)h7;NBpZq-ftYKp$ekB}fT0m}R@SISOT+F#>=jf^5vV&ha=n0{1eWOEdE( z8t?w@nG$;UK^7lF+mu&)z=N~l9f$ckV5rg~7Qo6NEskvcx_lMookR_kb?H5|Tz7lQ z5T)kFQH-etCJ5dEfyO#tD!lnMBtrHxT@#v$0aNM%zAJJcMslqr$L#7YK;_5^@e=;v zyTVwo@~r;-jGbOQVi-=yDcS5f-2+2T%L(8^jff7~$k6d?awS~HY$)%-J6tJzbNo+#|3(~+iZ^+I+$nWz< z_EJI#?%GeCENTL&86Z**y%LuHR|~-5?jpv|dal`%(5Yzu_4moIL0Z97oZQHsyS|K)tVZ6(nquP4 zeL4rDXPrkJZa}Q!#+4ft$L+FIh{uR(QBHRL}3;5e`;mwBo5t8HL%V}7ko zz#1T$5VjS_VknzOVT&{M%K>GF?3)wH)mB3Q%N=2lsavEVtGY&Hs2Vsg^`{13COK5p zs}5`0>BsK1sNKRtYxd{dgSc!Tt;k4Vo6Vmeo?_Hc%VSSCaO#c`LjIlsaz*aO>xD)L zT|nspCO3sz<$OT4)^o-J!EUn|^_mn0`p2gxpi#RiF1FY;0jI;O?5Z)MIA_;jU!(7N zby8BtF>mbq)RU65VO1{u<2#~u*6+^`7(XZ|*o*u7x9;x8eEUtA4jvi9WPo_>i$dnP zgY(_8iHqB=D~@i&fxyV+6I*Hwwh#HEgdLm9KUk*BAYq8+v*Z1=Ufq$d}eb=UV} zozkC_RHGu&($YGGi&a9th?xopRFV7BFeC8~ySsBCrp>5gx}d6%uok8WwPXzK9RGa`g&%ri|SV6+zZ$fk}88mxH4YYf3(4-?5d}tia$P7Pcq{H}T zap`s0j2b(`R2N0(?U+^Jb9krHdCiyDlPR@d6Pojm#PvpXM+*WoIZYGyTIHsh2^od> z%(XPa(gJ)TqesraVU9cDoNJm`uQKxpF`_wv4~rh~1FqVetVkixJz1Gx+N58p%g;7D z4D+S>8Qj9W7&bhE9|T1f@U~*n#DwG-couT+hP%_{v%tln2CnS+`bKa(OY(f&ZDC7t zJ1>Ia`D)clSr_OUbb=Qd6ljSKm_diSPk7trjR1qIdqyCQ)GF1us@&0WU??`zQRMc?APiQhpSBuE2{5X+9YWJ>p6@u~7-4HCFby=zX@*z1~oV?UmD zG|;U@0;1!HaB*=9N=wmqcXv0>Em!Ms!cvlE2w{8F;#`>YbfY2l^8`a28VQgH5MDl~ z9eH8pdd-hm2wqZhD&gLS&6RX#Eiidpzw(r@HWq>|tHsXHulL_%^cSg$E(=n4=)_6P+Wr6It|_ zmyP)0`LJh+zXo8Hr!-VRjO`@a+OYzt;AAPmE)P=;lK1}wlX;${kU&V6z{9(Ad_=~V zb=+~Jb*KiL25ATfN1d;4FUc8OjC7|K#+2n*GszK%fSK+#soKi2qR+kCckl>*m_31d zcnq}g&QQaVw8PRIKp6)%gtN(z=hyIDgzl!E5+Q_mm|B$Gcu<=pq!Wz^(sizoM`BFw zSOcug>rIgk($xu{aDUCS>yfXHU^CUj>>0z_AYh2%88pN``Wz~1kPf`usfpymz|^di ztyDBp$P3S%BS+H6JHXyS-ctjxX3|@d3r^Jc9fy72P+?L_6IA#gpT^vqA$To4-z$}A zp6mUA!kEzS{hFb?G1mh5)ZuN1%?Li-ssva$Yy<2+V&={%_r=pC*S67f$H`Eg=h98t z7>>Focr-%>+H!@S=O3=!8P;q8dxJ-Ejw2+R>wE*sI}tJGQu(-7q0`e=If{Yp9spse zk!W~>EjJTnL-ci(IODzMudF{~Mi812gxoXAAo*VXj&S7^2pPtpD zI}(47e567i!<(+RyB`DH-(i=oN+xJiH{FcX@yMV){C*9fOaWs&D(^U8zj)hht<>w@ zu#aHPFv%H_AH%nN44wD%RnYI?ywG?@KY0sO#wnhTozOe>Ve+Fyji2fR52Y`I5Y~vC zx#%ae@mr)gT-1sMnT^DsuT2>r0v(I7x&C!*n=M^+c1 zf#d-V1`4k%g(NIT9){fM|EW%=kN)>pPW(bb@bw6q*QdnAmOD<+g)& z=usdT^d2L5F44)$vKCh_OGcs}IW<+FL`6W{QUVL{o1`b}SCF74`4B8mLNa~(bymE7 zSw9B+!(&{*vN3;5bA3}j72i*xz1;6YhcBYEPQ5XUJFkb6<-A5>qB)o&4XI>y@qQy(AvJAv^x3ZD&!Rx&Hi&8o1^EI= zOmM)LT;0$sh$;n4Oia9sF@-q!LX`uK+W)h$Hzwoz^*q`-l#?Ty^Tz-MV#Dp`V}R~q zMRp~AV==M)8eUf+)@|8+x;Bdc4P$p(`{svShC{XfS~Mqx`64;suVE5JG@Gj~d9-2! zK$`P|^oM!VfK0nec+1rQEyDz4AWY9Oi%*djvgp2zo``>!`9o7BE!RK~7PHKl%Cq}L zgK+ON;xGO)#Xwk6T%%Y~=$Cr+Iz?9*>?>>ZuCf+luL0|m3AKWX55VPW%!5H3MdxHD zw1sAf$$V4>(u~bH*u;|gBWbt{kHf^xIFMCkPiv`z11?|@=q!}bU zabB%1(Q)vlIbPx^?YjaXQhXDago5|j4TG? zb(YfTW~C~2XQ*1WMPpA6JjBVWy6PwN_~V*rdFNhQp;+x4WXfI4c-Z?R*9NvkUWYH& zVkD2J{r^%TyjY@Wz{_Xrve!GWy1WyD_oX1~&+2r-OU54HLRL5&edF^QPuSS1Xhed7 zY^}fw`a0C?1cACjiCm^uV4cRgD)0JHcV0$?e?eo`o;Z0}XAUKdvaf*kE2daM05_eg z+tKkYRAe~VeJJ-EpUJnQe9NVnoa4ZUgrBB>6Z`ye!~g?cI*1bwyc_OLVV<89an?T<^DUV!aH66YkixREbc28fw+^el|OQ06~X zlTna$WgFo%P>*zL6B%@8fy;DRvx2r{TVW#u73MJ^!;XKChiD|bgJPNBOqxs<&1KXy zZ>aDvFTzSA*cOf(tk{{c@s46j@7OZ$Kf7zfXWnjPyoUU>?8GvE4riPkyA=z)PE>$1N%2}l?;@QPYA#0 z7$Ns|_F^{af9<**H|A=|jlD?F3d;X1&9@MPr=sJ1^9z}B_$)j#hKwocF#g^FP5@gl z`z8Q+jm*etQCk>;WrVP3O|K>x8ph9v74n|y1@IG=)8Y$tv|5)^m~T%=0*%+>xq?_w zjICPTX4xZq+kiR-_Uvz_QH0HN0>5u!Xcx>i%@-#?x{oTn?D5?EQycV8xL zcmr6Kd1IS?8)}4y}8G&ddCq_-Q{@N zlGTRrX)&KRRy*YM*GrpIjUeXs)2$ICDC3(hN@ znk%{+WiBKZEtZ%}W~|aKmJ~V5#PPtp7k@rnCvI_=O=5hf-Z|@qp-s#2fe3(PD0Phz>MQ*6Y(4;Cp#>G~mw)3_8UA|4 zp3OP+7E#?!pv34o4FtQEYKv>3uJyixAY*Qb!#>Q#Xs* zUBRRzMYQ6di1x%0Vsz~$tvT)Vuw5u!bUfA>-~$D^CXJ?DriztpB48Q1I>1n9O?~@o z4kmURyL3MZRd1;z6Qu~{%#*Z_1yn)L*C{9S9pqz^&Om(N33y#K+}tz7cscVCfNhcI5lwktF;$Fm|#4dG+*wB{C;{sm8|>y83)h zp4>;YL8>YLX7!EeP#rgEyjMSljy()ERq1AlFv@j-wbgyQAnSKftbP{%^TLynsg?d~ zv!lN1((_YDxKxIwIf>kQ3n>&cs$>@@MB?V;2>Z)qFz7(~cAWXoG*56~9OXbqGwLGI zejPo>3jxY(1VE;fWmOxCID9wLm1BjNanEoz(Mz&u&gu0{b;bs%b__)V({Z!a@SiIc zA)-NiPa76_IpBb+QTeQoqrFmr99`V@<IXi1a5bd-~D%tO(R- zeuIwy#zhF_bu415l%2R#vn~ARGquPXjTWh9an8JrqfS!T46+;Hp-pu&uQ|NlZo`+eNFIw{W9R=cp=&ZOx7LJC zkVv(j&jhJioq79r#e*X8EaYX`1h&U|9A1T6K8})#9_@Jc!5huOdQX71nY8!bx&bp= z#pyj(q0&%3Uf}Pa^{m*}IB@6EmpP9|8blMev+0DTr#Z%wfzQQcZBWPZ`>?c?u8y*^ zlkW4=lZJ2V@gB~Ue_5Fz=fLD22%VzM&QyurFV^ecPt;@X)@+bqpa8RCu}Q_yK^K&0 zMNQaZ84nyqLnbD9kpOk}p8{;Y52tmkrgJM1sS6w&#!@UQ6;4q76;img5Bui;C8dH= z>wd(RU9gufmLN>52`%U*jRN-*Y1~i63O8lTGYPCm$!att}9}A z&)2)mA@p$+gq064 z^(|aMz5iIc0WPmGi)yZ*LP%iq(%oZ(l#F$p*5}KN+kVc^h^^l7&STAA~_x**_1QeBv5Cf4(ICpnZeQ0I^g|YmjEQ z@es~$HE_=NsLcuU017MwzLw7mA97v~YUK%SGhcdl4%A_e1K;9at_{&1zPyynf;!o)V``KC@7ygN)hw)f&?{qTaxzc zLDMXd(^z&;F;C5)>Z;~aI?w&RVjjtBafQ~tf38k?mO;Pw&-EIQ|F#(?u_Ss(`5zEb zE=La*F|Yr11get$BEoEHHI-+8j3`MoplG^ag7f64evS-XGPI>)Ox@oJK={Kn@#VUC zuPmSI|8b`0dssKo;XAIt^NK~Xgfm%M^?7SkpX)V?gE3sWuS?^#HV6+EBl#_$98I^G zR@{vpibIVg)jxwH&Vf{;l1%|$b=*-yNMmSc9Y?Myn=TlG)qsTe?B!0ktTgHEg4c> zg8TV}oXH!&8U0eRVxEVQ5y~_)_i2;j_0Pk8b4hA65gukHwSt>&Zh9;k{K}V|#|SOK zL05LOz!R-Rr1T2wg7KRNfEwg37w%i&2Bl@s0&|#zvoY3k0;d?{@>-V|7r1z$Cocaq zG~34EUcIvusa02PDlkX6#HfOP>066ICuF9L#YUl8_WnDv2s?@GF;}gGPQa#^1OE~} z$U2b)UbU$!6(nxQm;1JQen)0(PrsRGko3MUHnzpmMAUicqgP%>vnhw`5|Q=usl-R( zYucX+Zr5&O5XqYe0usNONLqFf-AT1*BLGk)ji06w5O}vu#*@OsB^L$V7>>dZ8W3z= z@othmMm|0vS zZ3D-p5CeqE6IE-_owTTLJj-B~Wr>|!QO%4#XATr?5yk9pWy&vqd`>Z?=10pqLBp9u zNOo|f*rE|1-2I9YnB6rW!(p3|XUnbQX00)Gnl;hgqYZ6C?*TD~JD1J7M&8d7LJ97_ zH$wV&yDh&U2u^_PciZ&S5-@38_aw~hhD{`+QjP59eEk|eA%?9f@j29W`Kvb|TE{^^ zn_1E{O2|cx-Y*jhMpC)(^x0S|ahb{1jv%mHcAE+y}fl>Dq{BE zC0gcu=x1YAOe)7X62@=1}6tsjTBy~DAQE4INrunvCL&3MO-<^7l4?JPD11FaQy?zsFo@4 zdi(FXdz3@UFgi6sk=ZT5pW2Zy0W+U?7usKom?CNJO_sgqhg3Yc-mKdWia?Q>An%{- z)vdW#=s6tJQtY`yQ=*kQi+YMi0z39%SRsex387K%O&qejk|{pR%dORNbWL%Sy>|Cn zDxQ0m<=vc|&71?vMsDSV>zQ;cCNyaEPzxI7qZwXz(mF<6f;AnuqFp=-e7?-@#pZnj zJ95P;94tK;-fwkj@mC>Wm%~CC^VC$HlrIPj4?QUr0ah3u)TE!%nY1s3zM+>$5YG;O zb*7x{i&>vi?|qt0{Z66@U6Y9r#Oeah_Is7HL`mzNtRWOvpjiRog%uvV9-MSu$+8UM zx<}BBk7Kje2<8<95WsbE!AUINu{J)_{KXOpAbFSFY)phJNJmFx_clCWYL1%Hy6zt4 zWLWAaeM(F4n^f;;oDh~l?Z5SQ7@*P|KW|3b=i4i4Fxuxn95Z0MN^5V7##qF4=!Aziu0!`?Sudt)i1QT`(koIe>-jnVkr0ez|qis*Kf8-N`13cFhv*YBxor zc#g8pHkr4fA~Ai+qGtP*LTJ-bV9L#0f46m?reXB?gB)U7lDc`5Q+bF>Jer+E)fPyu z9V+W^pa1qz9|-3}WMfF?F=~!$d|VG(P0knM#TlcFhaOwJRJqGa{6ZE?WK`%NN*1+O z5|HN$=2VZs>b7Fuyx#`O?ao#@@W}OO_01Y;Cyp99^X#aWgVKTQo2~J2usNoVMUHt$m@M_XgOYxjgS~> z+3L1_xS>2bNIS3POI47z1K1bTpmIIjo2tDonRp8S!@ukiq99a@-bv!&itIVY?7xB8 z=SrkcLDxL7D`PsrDD7&ZfN&^VTDe=h z9a^p7pU6TGj65TFd|@hrPM#=7Tn2QtQ$Znh5c8>!0JgDV$uA(Vj)=`{{*8x|rUH{a zNJ4MFr1IQ`AVfJr%gAWv>(FyG(|<^EVLP?)EZdcG?J)v4Vr2Y3H9j$V=U{)@-Gbw) z5iS3^s{XPF1j{cG)QR`C*w4{9P(BUGb$dHCLEU$p6Y+uxqEptJ0;PNRpBnbr>IteQ z1W+b|F$zzra__j8mLm!_6qfb`)w)BH_=xB*55ziuO}gs}DZYXj38qw3;~pL!3cId- zk|kvJt5>&_*tkYMr>k9Z_aT{W(Ze@b1eD|Yut$b6f3F-5B0V$yr+nD;eQFuWb9FT> zbVTj}OkR#F>RovRn_1!G0B3nHAcn|;~+5Z8A@Q#_6$nolV zq3x}oX;e$GJinc#q#C<0j-B`X!%_PVa?;cDUoa2?f%w&7R(1}zU!{;4uX!p>1?C<6 zOo?W7YjI1=*=>ATpX=K}uIvbGb~Wrl@1JY2-*O@J{^(yQ>NT=}P?)9x`Na`9?Nv3V zc$hvr66HfL@_+Fg)TYEM&!osLkGCA(*=;8Jf~vUwVZ|c$EMyo{`lwnrp_iYxobsEQ zvz=S075fqwog|RsrSn3aD2B6tBxIg(X#9P0k+HFQ-TIi0%&Y%_+Ay!5AbG6OC;KKX_F(LEY023Is3WD~X4|0eBRy)4G zoty#uljfp;B|x#T>A|ig`Q+on?46uUP0PDAH)_OK>j?%u*g4=KDbhi(ZmT_- zzu_tkSGMu4lW=e$XMsmF*6T`S5HX{aXyO!u_dZyk9lWsrMS-Z6nJA&WiiQhgJ^|bV zQMoS>fhc=xi7s%SFHaC=u1B`OJYzOz<>dbbefs4sMhIa)@QJn~OHasE)fRp>J-<9% z59$LtdLySWAtH8YQTpsWuOFhFfR&`k*6OAfgG$5m;pAy%QV7Jm{=2nEE;tGS8#*Oc zSG2;J<)U&qLO(GOGP_aX-$@O(AS$WIdEfaeTF4T@90kLUsS(<@`y{%4g{{wh(?tTG z*)0Hn7BxKEz*z);OOy%&Ns$r4j!AR>7Y>Ijx%ME=WL(+C+hXSOFic$Pn3NW8#Twn1 z$A3aXLaYMI)$OOT$9Z3XAUl+`W>?-<2A?d7SE?7W+kMq#7Zqr+tPaop0NBR20PJ}& z4V}z&5k)_c@p=VtJlzBZ`A}aUs)42T8dt>K0zRMko6*czYE_eGzSp5h*7JhPxV;R# z$ToH8ul6JFzJl62J1baOG2l{*E7736dU!I!)Z>W*!M>DJi+iyXwwrCg{aq~S9(leE zo;Q^*x-EHj8|)iIcXtfRO7*9%HtY@2TicfK2|089D!<*4ajBZ5G`>sT4iZ6r z15{HRT~o0`kEc;aUkq~Opb0v!NdpnmDO&#MK;;`@{WM<|mU**<6Z^@iO5R}>=zGU> zy4qp3gRf-EPeFu$z?J`lz@x#YEKUP9`kA#1Qpmh`vm&h=`nq*Qb(12f59o@W$jGt` z+BchT2m{Y&uZ=$&WDjSz!M*R*aQtB*nPd#pCCb7ry~WeDIZ~b+46di|*>Ji;*V?I0 zPqMCaOzkrDlfjp`8f#}&A9aLqsy!rc&jq=WPZI-$4aj2f!>%(F*5SiAu=3-9Se2HN z!_9sX667Q2(YY*8^rJDHvfCB04@sa9dOyA+E=jhJ=*)Pzdjo825@lf2gDT>_sww*& ztHJCRC;7DwWEkiQIEZ@TFo{djPbb6(7#*z`Xhw8DPYAA#Vdw;{0bKzzG|2I4c{ApA zCzNggVPs0A_)kQLrKFtSUGu;HJIiT1F{a8pM`?!sdqWsm5b+=x$HGl3{)OTvL^}p% z|5mG+f78eR_dpcU1P7IDHS~YI9E2iN`$yz273+vD5xqdIWf7qx>yT77M2zUaZjC`} zfFZr!M)ChzTmx3}Bbun<-+1sr4C!At79d2#hFzwI@V`O6P_&5qH!KPkpflS4UU`uP zcH{a-)4vYt;}JbNw1qYX{P(^E3LWCtXsnJoy8pGdmWNoWTY0DhBmXym{eP{`Se2cL z|3@|SG7RzheucP?^Z(6>EJG(yM_wMayrRPG;l@o^q-sUu92e)6P|p7-OvOPokcwke z{q=tj9Oc2KlW!dzu?q_eBcr3gUw-5q```Q_$XEPFe#BR)f7ADG$d1yV5}B*?ut-Ts zjh*4&|3@=oYC->|7WDO2_J3smzZd?|c=_qyAoGcY)Tlim6{T)_c)E>6I9+(TF*1=c zgq6m0`7*z5-)A{_cF$yk=2CZ1(_cAL@Gl?s|LtQq(ZC&G2tzul-9Q>rW{e)wg6}*8E)C%2g2V`vLUS4_x2Y7>rbz?x|@v-ZB zRT^22NSJ2~C*IXH27?>K2$TS$^{K*GxGb*s`PK}X-n5Dl!q<2rEwEDYp&N?6;mSNo zn)78$3+}A^az#=KxOzb5zvasPP)RF037-_cU*Tw#pn&EEGU4XyEiv4B2PXbExs^VE zx!rvIsGG(%6lP@_^IK2NZ(6+v@Jo&u>9@O7jc67S0`!der zwpXvxy1Er-(}5pR#glVl@N0l;u}%lps9+uFN%S_;>aOgE_B zovXvB%}>()9#$_3pOEG{Sn#!S)Y5Ua;VKsi(qX$fMCi!x!(3 z?p@mo@RI1(y}ef#=(S=PA)+am5&~2=rnQ)OlBtm#PpUpO(Tlmowsq6eIvj^L5o7(| z;7Z6J<-EZqL5(D`0ZC+8ZVIlSu_dWT4U{t-M?x;oMAc$hc(_ZTEkDtNA5E(4d#YxS z$-YcjACWbPMW|LHF|N3%Dw zTtgHc|F?d&>A+e9iY46D?%@ebDD4;dHomrGrCj`QwF0GLIACT+WzquE017Ria$Hj!>SZtVLJ#jY9_hnCpHaHf`rz1)n*Lm80ZH#=8k3MHPdDd=mzdfqBwdPMA3@^Jh#cB|Hk`LP5E zRm0hM<3`FUpeDPu9S;c;qc1?I6_X;WUC=UVlfYJ2;yzkDD9z=Qnh=V9DP-hYuU#>_ zP5(jB#P?OZ4()8Nv1}fHA&U2H2Pt?w}(FBo~mrwHFd zR|XjfKAL~eCoIfNm)19B3iPs;bE!z;^YmwSF&85Vf3Yu|@g(^~qiDg1Zvnb#Zf+i5 zUXFWs@NdVPQu);0Yhzp5?{@kIOAZobf)`<(*xOcVCg!6AnzMvoe17i+Rete^@nAUM?$SvEh+92DRjhb<%2_}sJ*CL zLn{qVk7y(M9o>pkhQFN(f0#?74cTn;f@`6}Rrb*?v?vxRUT3ILhhO5h{{~00RRY?K z#6e#efWNsL+^ZhtEjXs?Qd(Y5B_$;hNnU@NO&Q5WjUgLba}hc4aK$7wL-<&q-8fMl z-aSd4gi_czT^1bk8|!vTl4>wTdsJ;e<`6Gw3N~e%|8a9`LisVy@&3o0y7C~6LqGaf zA@ebWPPqGXfklUzFu+7bWy`A4CH6;SvTzL&?i$G{k?&F4metQm~^-&N1nhhvQP zR>&J6wQN14)P+`!W;1bP zFzQ;JL}K>`cDpx!z?T>3*_rjBwG9r$YowRtAxb!U)0yTvVK=qoaNI*9dDu5zIqiH@ z%{-SIes5{lfZ3MhY~C0$#=q{Z!V^2I%EYa{b+oN${gn6Z_e<4G*SAXH>@>vXMhbuU zi=Z(-vr2x3)0`Ix1QmU4)PaT>z|g2W zAM(+LrYOR9d{{5+C|=scZhU>NaCeS;H#Q7o3b5i=hQ`Q=NjX%|zhWA9S5E%!2#XG&eNU;Nia`JqF5X35vh7Q(f)?)dCX!i2joQ(C#}O_%WIZ3~$CRcU-HRx?}X z$wrv+t79DbtO~w)p^%q<#dwIwg5h|f3}%)Ka}QS$Rb5UUh6zH5yFq7r@Wdt`6UjD1 zGs>lZs1JU-w%~72Y}!91+cj-`{PP>O!(f7C*326{*KNBw*=ycpwydoz*G-l;MV9u*&Msx2(;XRk%F8H4*oXjLYf(;)bbuk-3Wq+O zlRkGr*~lN;FLuq1riyqWa%~-R89V}j4y}zNG(vRD4c(i5eKBiia!KR06 z1sW}tk;x_WW8GgX=F@hYY8J#qw`fW31t+sh0kko2FXHkaMum~<=ug9zp}yaRc*LQT z$7vfQob-!!(7Ch?oD_R(n%3or&4Id;6ca9NFTDJtk77@^O90H@LrWnuapygf|IU%o zP&ScNfDEXSFD-=vs>I2{4x?5+Hq&J18;?X@-(vGtV$K-rE!cei(*{k zYu^0ArUIyH-^^jvxnQ20p38ks<7-14#Aup{);wZPY>=Q%kk<}mEIp~cv_$cKJ``lG zOFDU=mU_f8;473PmdAehg~Q~3++xVQsr~f7Wyp=JtD{rI1Q|%6`3tbWr8D0k)PZsA z_b%GpaG+9TCqpJNuylu{zS!yJTcqfjA&+o7A6N>rkG^%K0GdjV$O8JU0X zdy>%cO0)uI+X|X6<7AqLOp24L*SwBuG(9=5=l!YM3-u$Q;a&QI1{|Sg47{df{#GWfTNi8O7I#6GwP-d3bY#+qIo8 z)(E}j=R;i;wy=%(aY6U}$%OdnuMbuG^`j&Gd(OtwQGo|P%}?zdtI|$Q==EDRHj8J7 zkGswH)8*@Z$UZ36s--)TxZ9DkbDyb&2fUx2aEKS?ppA~2h))2!mb8UcX{;)p2#r-r#gkOwGiw)CKdRUFims>rSQ?jz2SV)(_T7D>-C1Z{{~4y(2Wt1Z3^K14Uweuqj5YT!Zk(Ftv;s) zvg1L0eRv6i?hOFJ?~SXBb0Iwtww}p^zCzlJVD-=P+c;nA0YhWTF@blMK8Ls$jNOds~) z@z6?3sTh|#GqULDxT|K>F(g%Cl4f}`zF;gv>$tpA>#jVP)ZV*Bxdu8>@Y5=?}ohex?M={k8|t4L+BNR80|Gvde^!S}MSsyjjyzM45p z--KkIR{6WJOQ<^JA%fHBpy=j(9Pf(Mf=v zF$4)KXcM;BHMfgE?@ruFU(*+yj@$?TE%Ez;zAF{}bSj6wiT?d0PQ9e8)F{J!&U*{@ zX#i0dLF$ys;bxNKQVIyBUvAYVoGLtFSkAvsf6t?(Dkx_3&|O~Lf26K~LRr)0C!ap9;4Bh;qzqBIH0Jr}@P25BF4{nNs{Iy&;Ea1{y?RzxF%kv2>n}3gQaP zhYGKId_(-0s<-EVCB?et=ZTefF)KoJBZt43BdjPI1PXMJu2xlt+%0 z)BC(0!1Nj-m$QKGcI7UVVY8H|UTAobEy>Frz7b8=XtSINX7O7%?Fp)kuvEmn>K{LV z8X{W{*05O;K7ts%!WJK9IT$(P!62W#X0QA6pLl@0pS3ta*D9ofRIAZ{`C=;qaY$;P ztC%32uhg&a6SPr2mxirBaY(|XGzq>VH*7O6nDYZ&%r2k=UoT z?Z7NjX}wat{I+UDz_$(StudShGmo5`U+NW$EL6!Tv!~>QLoM%9)F|h}eVH`iT`2r% zWCbR&_^IG6c>v_q%fhA3nap%TSdx4jKZg{_>WX#r!>}Z;px#folq99x3jEfax9@^S ztMv8R8)Ycjip~bt6E7AY4JQMX^#r_YO~JyUPtU?dxf>k!Dtm301CifE*%iw65|Oqz zw7FPu8$$@2mJ5=VT&x97rCr|_q|D&A`FUbvv}m88`Wo^fPtJ;bB6JZb;N$5ULgcl) zy{^A1EcbbFobyuQNOsrz)gmcohC7{np2s9y*s~lYFPk&h!bQj(?z?@z&d46evFS((~V5y6>Qjy!A~$ zHBisNHcCm-7QP%XzUdYFQ!W7Esvka$Q?&Xl@1SL_v6cQvsg=$?*nsp{bCT8^7_jb{D9Joc`7X5>D{DiheF4+M%tFVXR!&KI1p4R2Z8j>!GmH!njZ zc?u*Nami~VkqYbpT^>En<*q};wnDz*0(&19L-3Cjq@^@|u35(LeWcdt%m=`Agk$Ds zG!qU=Jo}!{XsCce%%nj^78F}N9sA`e02LuVXwo~Y5cU`7lgkh@QGhP@ywbjZ4~uVA zJs`S1am16zB5GmK0+Z}CAfwq%e2TwZ@76~oP>*Fm^VxxSLBqtX0R)4KwLv^nO1AW2 zwP6JY)asxFdWu5?iz9pYp0@z@m%|nzh8F2y^>~dx-9s8v8h-h%eq;ow=P(>@LrnVG zuPpvYA^a|PaKRr#MBbZVqVIFPZ$-Cjpm%3T=0BF~2VVXi`0UP&YEFkNAfNyWtQJ`7 z9l^lVdAkfGT7>T&e#E03J}nNb9fj1_uh*Cz%5-<>h)Zh)BS(SD{8~=Om=@NP)v}R{ zC|@F6ACDix7d_XRu1?_ad%J~INqR`gkLumuVehl{-TNA{-EQ85^Hq-zUl*d;h+o*U zUWLBwI3eHm%Du}2{agw@VM-XFO+N$`Pg@3;EVt?&2M=74mqwADY(0Mf=>5wk(Q5&a z1U>;!XGFY;$%TBO{6=d*+>>~3-yiRv=DX>v97$J%7sNT?$hY=3Gf)4(WXw%nH>dDF zm3n@KO5Q#S>zMyEJLZ)~v3`?z3=C0vXjcmf<*4=k|CoBqusW8eYdAqSuE8a^ySux) zdvJGxg^jzr2lwFa4uRk| zDIhp_Sb+tVNM5Dc1+6oUcCVO%tFRRf?a<%;+Yu_as2dOtt zFe`unT4JM6h1%UwXtR9L5@yBqoD+UWNZzWelrC#|DhPeGKx1fMZ%p5KB+iBF5 zG!=n+J1%A(C~)b3nmn#~m&tz#*hzJL$zH8@&Eg~nKIm=pd0J&N5W}zsrp!nTuN!tE4Y$q~=4I{(@ z92<{Ero@z_Vpq37X7RaO>5WEodwVkK;twie&5xkcHyyeB`LpWB?TgifKdrSB*fksa z{kmYaQjbN$*g_6P2|GgVvi`y0f!bQ+7z(ewWLps}roO)m4Np=fyqRW8l&M~gc)hPp z>*o8$(duK;KD!s2^g|!kJOdC z`Wo|QvI8H_1OL};KkE9A=<&<}IW9QA@hA?Juky<{ax-9Yz2$A5R?7NZH(2L2Y~le9?#O&}hF1IN^vDFCy>h(}GpvLH%jmNQEdlM#QV&Lo9a+>ZN^tab$YkohM4G+HbSU}2rl{RET19P48> z5_TCD*RH(E9D3Oaz+3rljO0elmt2@sR&~^$A_>3Gkc3+TQX%)^Qp)U3Lzmv3T48tH z?h~!@9gsPLGO`IHnz(`d(`Bb1q^= z#1*$#F%bZg?o<|W=qhxzDsP5G(kK;8KQjN?=w*n<8&dgUcJJ##-c95R zd&$dhpXX?9l+Jzl0N*YnE~4(BUqv*)Z88S#6G{KV2BFHB$g;%D{qivRB0BZPE!3N^ zc+dP;9%qM#n0M~?i7v~r1|sUW--&;r7@5nftZE5k@8tWrd?t0Ip!snCvL!WyU%Z?V zvpJ@HS^0P3YBr+L3HWT#=@hmlQ?tkFVWICjz7N+QkWsr`Tp=H=(d&!P?#{2=1H*M( zHwhb7j`M~;F10jNo`2i{aj9gfi-dJr3~LBQ?e2&hjVYqSwM?p}#}YN!!hR!AZr$CZ z(Kms7XJ|8P3O=;+N&$h}eJhin{689o=Qj|+i*(TSVc6JwUOn+v;oA+`z>Z5>C8vNU0gA5Fi?NBtXn{UN@-1)J{RB{XDR16S zo9bPCLFod#$C1_A{G}_{OzS-vM`|x|2d*~D;CNJKe9OXsIP%NQl}}i-D4AL24tHSq zgM*o$r^{h9`=}>IGI)`C7hw3~nT(nf3ilUT>&#(nKSAVYsX2(1tmqIHOWXWz*_nHo zVRampldYZYh-`Kt@n`&dfGHV<0mDGqar$6wWZ)^Z7g=n|Sp`;e)$w1VftruE^ji?H+GZ^`3I zWDFhIRt^uyM!HwJurl;Z)%6tj4t~YgGH@NSuaxC`WUW{suCvIl1IV!YM12Lc9Pwt%TR6N8@(g=EA57MilZQI(PmR`R4FG~??uY51o zp*U+ql7$Yj{yp+60doUTQp*cU`AV7c^zs(^X7TpB0F2_>%uHY5^ZaEJe30th{A;>% z6kiGxBm-s=i<|oGMIQ!&(Mcz9@LJ|FsJhGP`VU<19{Cr_ZZu9yX8>>I0H1quz?o|4 zz#M>;Pl`3s;ETT~d1@dymz;>>>*kt>TG@E1Ri-|?1Viz$>dU{de`N&td1Zv)H_rdi zYrtQg%VM=&*^eJ1;KPk~w)apFFTwxS#tl&!{WrhiqK_z;L+m^+!o{~xAr|95+EhQ2j*_zzhDpWx#sdtF^MwV)Ep)z(B&QXg;c zlXq5h4u1YBDkT~k8UPYfvC}M=cMju;o$L1xf1&o|@6BBG)Y_4W0SnbfWUk39d0wu<^ML4$hz#e@J@ zOxD}Is3b2R;Lcmkv)qoh$Z~gg*F-JI&JM*HGrk%WgIpWS_{Y}2_Kx0e&)6l=!@rbp zwwfnB#%>i$?}pT!S)eMYx`c4IT0nd2qXk(Ox`jWp--P7-lrH|tJPQ*OQ&-Nx^Kx4P zl(rt@DN(9riJFZrUPF}0==d5IK5i&$MsztgVO6x0q-53N;ocs*W#RlYS*liHOw~Fz zZ@OTrmIc|3j4cXh%Efw{>$AIR7&76knT7ukmJiSaKk@XIUnjV5-X8jG-Q4C++K1g( z4JIy%E=~8X^naUI$5h3#;1^$-^5TFO{wBeGyDyJyIaT}_>Ksnc5!$-BVfF z*w8RB$ytH!y_s2AGt0|X95iNxI#|>JF^tlL(MS3{{su~3MYF{)V*xVX*!dk_{9PmW&JH9 zD?6Lk($?*h117Q*R#ziE{QlNs7}iElC&ei{WLK9u$O?f^Ow1I44N^xzM9eQJ=m!hj z4jvg<(!rr-j~e&J%);#3w;l~I7Qd>bU%s&mC^td-8PJ=?yw!JRC1jM8FxJ-AiNx4A zCSS<>PYWZPf~h`#7B(uOzc_#;Z37i~+;$i2E>oC67HNVX`N zVAA3k@0BX-K;nK5SPLWbkR_fP85-v9g`?rKl-JY@Z*Ao-_>a6SOQTNOn|QGl3|!VX z*RT*qC)=+!$|MTc@w4FLIxG?){x~|adKJ3y(Kav(PViH%+cypl^ZSs17h|#)eAYK4 z=~X3wLu0W&CJ0C;uF}T=n);jm?0ezn;n7JHX8C5uSwEv>i*nFYS6BDUYv+%0!*&0w ze&4UxjoHunwl1)%=dlm`t=rLqMZ2oKKk54OAAP>a4iQ~dI}^FOs>}a!IY1iNT@rIR z{6F4Vs4&<7jHEKbpY-oq!h&i%*SQ={jbF#@|H4hB9IIltF8i-G{Qg%Zi+$pnqW?!b zX|Mg&j?F*A^hW+^hZ_Q{=hqSbQ{l#wf0<*MH1H09|8$u)xFu?Y-pil=>FC<)zvZvf zZ>U`UA*aO#*#BL}@D24d|F;tT<%^}F>DT=4#%W;hJIaR-@9#SBn)UzlXm#3U8UJM| zh4Q}mA!Wbo$2|;^9K`1jf#jnsC;TF>q3#r)S8vkC^Y2N zoQ?Q=Y?XC`lM+b`;~Oxuo`J-nx{@x$+{9p{HjX3*zo-A zS;O<2=P=iH^g4hS69WEYNPws?i83^xXwG`Q8?2k==Dc=exQv-`D)Kce;QxD`kGd?< zn-7>r#yQCXXU|7f24piqL<;9Hy`3EYm&b`4e1kAHp_BVRr;^UcuWAP^1h^cN-4MnYA8$yDoJ6qG7Pa&2lan0 z;el+T;2UfZx&o5_6+xB)-xy#~)%u$q+?C!ZQgBC~c7Ej6{8tAw003=MlbE#pu(&gU{zhRfekI-OIQ6{$KvDP>EyY5Wo+stE-rl|0jSlUMNgp1#dzb zJk7ri1=y*S-3O?i{VNV?s0uXjU@BB-D-{2)%)es*UkYo0JEg7>DWM_zU$_5H^!cb| zl7DNKEHC5zU(NrC=kJI#BES;Spuy6h`A>-dS7(4|J{}sl>v+WlCq@5t{r}gpIt5tR z8pYb`#s4%VY(^SC_Jx^?D{O2`rt|rvk`}|rj1%&1@t-336@P207%HUwSMYcUA6KLw zcH@K=0rQ|AJv9Jzvk0TE>VNuG1_y;qp?u{V;(26ast!36;u7f4Y)+zuWgZjej>QuC=7wZ>g@9*KD0=4z^#W}NRY*#938>EC+ zWu&BFxjO9`@MjY0_U_Nt(sOf%@f|x=nq3fPuAVsS+S~iTDm3+p>f79OeB9VDuySw+ zow1?^(T#@wQk!Fwrob>~(E8*d2x#4KxV^pYHLXkTfa`@6%@6GROeB~oI?#_lPbf0SF`M)fzYsosNMomLuiONfy%5T@=v7GIi6`F zg%`@UezmTGl?2Nc#~*Hqd>c)-l&V%zf}h9V>%^Lm?OSc>8S!-4|*?5n*mxG44T`go)YjxqR*zS$ONb4 z(G@k3;FKZvrXrhE`7p%yOh5~*Y&B`+>%2Bv*^RJ)Km#gxKEux_|9%hyYnaz~l|xT5 zux4@KpEtq-Pp$G$Cw1_=<)u}P@yj7qj$wGW@$vyH01@~FBUo^1B)Om>22RD0H8c?< z@)a3TOV=V244DWL7<{>j8Fb>u?E0szm?YV<9>;c-$82r(i%6B5NXu`kOTqn#>hb0U zH#Vjx@?gxxxVHOfC-}jr$SwDN@t3B)6{m^cMx2b%**VxD(frt&jM>IYE!6k~(j9?Q zCgLCR1o?p$BC*f87Bz3fe0V9sUsv^<3#WzzYCSl0CdB(&g$_ru->urL^>}qJ`(q5* z9T~UcgjQ%*ys9|qa{ab>yAv};-d_&z*fMmT?j%v3ce5UO;52B}_>MO|0nyR$(}y=A z?=|u5C>mxh5@bqiI|(GLWew^x<`-ln@@W|q$+%n_3l?lc-19io!>MYUiKMD#HOgnN z@e_nI+WNkt%+dcoqFzQ##ZQvr@_iio@;I8<{yd@KJAmK+dsC-x!ou2x-OCyE$E_YS zPg}63g{jrWt!dQ;#Cs+&%Hocc|KeApGC(rpM~v0AvrBCS=2QZ;S%BS8-6zFutJMTU zhb~|6u?E)f)f+Ido@l89XYK_H$^EjQBfMmjmk?jxxcegzdvZ>hof@PwrZX9I>>P$r zYe*;;%b+T3?Qni~orsTO_oJ_g!fPUW=p;mjI3M=GSa9xyA!AaJD8mFn_T1|&UAZ|S zzrRc__~P^Hbnt;XFoEcUNVU2QR#&=>)o4Ql%X@VLW3TgAFEk3|8S?Og&3SXwKVSq4 z8^!|d=z-PJ@C3Ow2W6PRcGp8>N=nMhXV4EZj}WE@68z)EVL@dWhiB`MCHqi2G~2q& z?fn-sS&CZpWX^O6+A+@76k+ST2dhzBtCwSQzBpL3<;ddi3TaXuck4fFz>b+*d7O6- z0NtB8{W&8a@thEA)6ZI2t@Sh-Stn*SRvqa>xfz2JMRZ# zV7slurtLn5QYd%yfsSkk!YN{>u*vYOS6@M6Z>-w%M^>ID(-}h(`X6i~R(Wc64f!o=QHx&yo>)p^86I&0lBF10K7^xC{plNJ42AL(0Cmo+p_3C@0iT~< zI}ucP*}`WIbRKDhuV;$dg}3=XQm39B-8!!J0tkWo*;VxEi(ze|Hmg1lfR|3{mr|DZ6seQ2 z)B-@VV!pI}XZ7O&TaFd{`YZq7f@TUn=4j@y>Wc8iE631$i5EdNCM+g>WQtn9w^|$Uq;K z6z1KB{K*NINtvk3lolYgcGwg!}Jkh2hkx#vvNQ4_E|`ruP-5;g9QOqGLjd4&14-A-`76AT?} zp!WEO29h9Ya!HS0wY~g6n}WAfs$=+JHF6^r=D>mz6p8#uxa2UX6GHSdJ0&JVJP%WQ z4>+N$(GUu^Teqztx-;e)#x3kh%FfF@R7M?9FKJJWM99Dmhe8hSpeaG!-Zcc3lm3n+ z;Rw~&TRNp(y^^mlOi!rYzq%DWor*u*#*rnC_a4=e^0f>PVv;;oPJP;Dsx%)We zlG(=T<8*MCZR!ieDdfs2zE9p@uWz}X;GYP@yC{me)m0eSn1CyeW)Zw#)!R_dd+%xc zeP0O*O1YE~hiDTEp4jNg&|jKV&zY0b@tv?o{_xJe*E4tq5@NI6lOkwk5D*JXao?_8 zFg7WG-j;NF?C*eZt{z{EA8o#mg==(H9lmJ4PoXu-e};Fm;j+PaR|6RBw{pU634&E6 zpk$*1nPR-R@{Hz1AIbY>i)WDatr})O;EJgtApPupu)-yNtg!qPL#kZdG3^f}JE|td zCbn1(qMXwSZOAe{;N^oG)7xMDgdldyYaQ>5UrtPgM4-amQf#VyS!_~x)z*^Y%?_8G zCuaa56H7y`j96O+6hos{kS+!!Yg>E!WKL(x80Q9$O^x-7n4q{X#}`RBIMW5CDst&E z=<_w9_v=o4C>?;R8j-t>62hq&2!vHKi<;<7Z3SJsc(9Xu2|Q|Hjh zYBMrE55MVu8rJa+fI2BB(eK6DeDj4SW*FSIvFS%JIv-k?zw(HW+l$2RB9@$Aoy)Mn2vtSlStu&UcPKjM30Vu z$qz*JF}N|3?4DlEbrey~v5x-BSA!f(1+JA|gFK7_R*|us7}!y+XP7Buf6K4zm|k&j zzCRLef&qo})XqJ9MetY+NPO)eJ;1R~ecFkcz7{?v5i0=|i^1d_K{70hw5zBq20L;2 zR<8yWBYgH9BC$=OOr%0vE%b=+gN0eR`8cXw9K7>>1Zy`7CWP6RgK))ZWKIdeULe>z~(52Mi3e*Vzmb`OzM*j3~^Z+3-DiB=GY_ zA3~QJXT7rv7VLqH);>{Dsr+O+Xu9U2GP=R#w|nk-O)wRWb`?3oGUyS#-tl{k5z!04 z@0@I`eIGWz?F}IE`Tmyvy-idmpz|2rxQ?t((0gIXx)mnm6+NP_r;#4w_yd-9Z8qrJ zbqpiD|Lq5%+{nOZ*9D?T;ZIQ|<;Mp5$wOYDaL1=@djvUtT(vl0_xj+l3YyWVYa}_Q$7G@Q$HORzCT$nQ* z?%zeCPaHJDv)$%IWQUhzBUfaBTG4b@OVfqaXus271I{K&yHQ+ib0pXg3l;tsgXsNm1S-Hm) zd^E=M^j$E6TBlQy$iF8|{L?`WG_`tCjzg%npfofaHI!d;JWOlWo|Bnia#d(aGU>S$ zHZN4M3r=rSN^RR4_+>7yYMUSKxB>R;zJAMNGR6EW3zX(jkHjLGRELz+2UU+aX>+$c zeQJ6@)=p0r4g33Z1blpmWeRM?7p5w22=|R3#HAd&cy>ABxLG}?JRc+ay4|17E)X2y z-@JyR^WOJJ1Y1d_3OWHK~65J&TP!u{Y3?ERj}xYXeBzbU-KjTYA!R{NtF`` z>lcEuaSxznU^Fx$)wt^tCaZ#WAlLqT8}lQjeid2? zFgOe>rS+Hg52H3z${{4a#fvPt!NM759?^z`{ST52k2BxCERyMdMY$Djdf3kEUX3kZ zL%F)q*#|~uwPIC;#wJ3^@+&Ji@C#Ut%y4>duQCQ%PaIyqIBX|;<6>u5N25Q95C(4RFhn16#hc}8ft z>{?`a0p(4ZB#5u9Z3Z$4@kD2>XuN|fXK9?yhbQTv=J84NOMXluhyA~cQYV{Sf*>n)a59u3u;Q4L7JTNFl zc#qhU3@{5x;GGXOX-FW?I0`A)v^7zML$K`laEAl8a+4??<7_=RP7uSL$QLjsQFFUi z%Xv1SU*vK7MW$|d)WIYeU&GVQ?G(m#$_PeL6SiBY>udhevZP!kLRZ21^ajq3ya)#t zqXj~Q^9{2Rrj_G?MW-G4$2W`o>$yR8@&j>#8(Wp&bP>6FLL{ewO-wcS8Wwz+HmpC}<>}6{H#{uR*cj7? zq}y@p&8oeH1)1?-0J-i2>L8`Be8bX~Gf z-YgzAHJrGoy$7h1c+q7&;c2-Yl^+A=n%kymo|GXmVi_2oRK>;CQRQj|`HgGn6hgxV z{1c^%3jW(W8ml)~QmXs}<1l}AnBJSLRV$b2Qv=j3EuC5ULe|I1Y{yiLMje(!GsW{~ zl3rq~^wZ3F)sQgYXEa?bOX&wS`1#)NfMiN?26Z6(B|&v({i5+9bAExYzpOA1swvuYJ z(X}0fX<0n+MXHw!Kfqo+@gi4DheLh_wPx##82v^W#R;ynHS?Nn1@^REEU5x#w-wMA z!hY7HB&Q}(genOd7JuTd8LB(fU4MG71gO^`PGDikBqVKuyb{bcs$LBQh@85|h;geJ zLZlPRv#+D0B{mS9jmug+f}2IPO*EBUtj?S`cxJ}t57$*bs!%p0H1_Lz=-f$x&0c3~ zEi3{8F{)+ryp0?+ zsqhaVDKy#Z`GUNdMx7L-pd6K;wvIu4Wh8*SVmL^7zO((u6y(P%qJf%&YiGSPfwNZ0 zss593N}{SElAFB+Mp)9@)^Ghyo$Msvn>M1d(pIMn&w|p1DH}xmZ;xRXQJSYNjE>=7 z3c%l|viW&q)F%d-zwEgD|4o1I(;$2N2MHGjbFUUpc^I^Vx z?X?klbd8ONiv||f-0KCNKIN4BDv`qWTp#buVS$nq%6xz_M=1%g0ke>FVR?xLVqy9E zM`#N;YK;a`>yj=Z7f#4re#S{vO9L5fI;9P>7f7iB zs0+w6Bwm2WMln;pQvV59p)-^7bqL&^>!|HD5Nz@-T0W_m1*a+8boYPTLtN#h1DjxZ zF|58CN}-iqZ!H6gsUa2ss)Db4v=Hvzh#GLEe=V|e+e_4*bPx;FiGpW7;0L-;plg4y zDOt7Z(^ndB^ANThpDFfm}^fn6}f;QL7M)!>jGP!-oWOFuEd zV!)QsycYnc^xYM=17I}d#3_3I6WGFB@reKlh)1prQwa1a!Z8`Oh?mAbUvX>H($pf1 z1wRinE2NE{6QJTB*`ASCL^))3vA}+~s@mZe1ku@zgIz z{Lg5~lqD0%R@9@2`Cu&*)kDGFMjp-*CvE?%=G2N0JeqQJyBa`u%NWR4MT=A_VOcxW zXIc2s^0Z`3u8+p**$jKyAL#+p`0_`G!4}EoQ;X$RSL2#7bF{dzlH!!4y1rh6_9uB) z%8<`oO4WCTv~ZYwRVm|EHNQ^)t^_jYb}$ur)u~EsAlpRv!;#E}vP$3-o7~zVWoini zBnK~$)meXuOKNdVKQ&3W-nhydWIYtl5OKACnHxiU$2WdcK9-ZRl50uxPX0%dLW<1Z z;SkciaAKaPZa|VmnKB8EGYc+ty(kp%uGES>MEz@~QiLjEt@e|=!&{DY37ueSa+$D> zk_HtJeS@3J5WBl-lvBc>E|J%I`zH3r?}uRCdTEC+#_7a^DE!^vI&OU zfXMd-ADj6kYpCaO;khqusrSc%WPUWew>BZNKA~HGYUvO}VPAUx`j-!M>g0(UoNMXw zScphIGa^Xhb6=xnCX}G-(96FVAdz2dBBHSO;ll0ghG4DW2EU|Auc{xqz)i6H! z#MhX*Xvg}-#^CZ01#*UJDn^Y0%63>@rx{yeRV@!M#L5~uR8q4+Z&2bA?)%p0y+b)CNye>lW|iCtt?0Z z2F>)_r=Rg6+?WHW{78(SX0#Mz8-XgOlaq?Kp1j+Xb-(Is5|}}}*fsGE#Y+p}=Y~wr zr`8kIlC^jh*((8#&{7@YZaGQe3m(vhg=|p7 zBR0rx)uQ;r`cZuma}U9wOYkQ_43uOzKS;w{Uh3c>=0)n@s)5)UPBzm%?$p<@NNra{ z7>rOUy_pQe?Vz?YFsRhnqW1o!cDK@~C)iS-MsrZU_XdujiMopq50C|SvVad$4Js`^7V4vaI^woJKs}GY3 z|64)*;=S2eu%EwM6_PQ(#-{Fi9gZmaqnZYKN^ENqD=&GJYVbHRV@4+{<2E zlwG12H)nJnpCo)PJ+?Fod#g1&WGC@`On7GT>`aC z{-6fnxQnn=qboGCg_jtOrd92#ll3U19Ch&V9gZl)u#fff%R8qArauj) zYX|>ZY73Pu_9sn2SCaj;e72L!cJIrv@~BWlAO3x49*l z_zdr8VgWE^v{{dmS6fn7l{}g)tVi4S$*6k+aDSae=^lE3OXF9KbeSA1Q4C)t>QWsn z7lF_B(^jFgnb}UZpRw%ya1BGuMwJirIT$DXDO(@IxQ#%VjlRb%<}NdD(y|Ga`j~6d zpt^O&q<8)i28(*?^%6}-86ApxDGZthNhx>MALD6%n{FY`%jcZ;70+MRD)FuJ?7Hdj z2>XmE>e|wzk;e&SiedT_^sDd2$vV zCbF)4<}QyD@}@w>vxWaQ_v80P13D4)t4@S?;O3XgH%lF%pT|I2a^)iB%(^NnjJ}+w z@Pm+5x%}JavMGjZQ`np}>ju)zocmTJzzC~S5(2i5-Lmd-?-%2a6g#5=fgt-pv6=fi ztzT{Tln>{(#BJIaV$U&a?kRBAN*!}GCLu8{hCL$V)JIafYwL$Cfpb!Cx))I6#?D(i zAw<4sfuA0Pyn|b?9<+$eyJy5?i;Ja4YXxsdeaUXrLK9~WxN5kRET3`$Wm(vz2Q&Cw zOw3tRBWLtiql1$_#Zpja2yuLD;NL8pikRiRRi>knTeX!v=+y5!e0Bs+!;X;%5^v|K zI%*4qQ8k)?A||vkeWN6VSne8-d4xRtVS4{tHt6Pw?g>Ys=%wK@^UMXOYk?vb#S*Jh z?jwD~kX7Dpz96G(!i0iOxz?M%HF29qvybnbyOm+Lz~a$vi6HW^d+LohKGrDwZv_XY z?4LJr8;6A_aF_<~UzRr%8ugz7(-DfI0Ldxzoj-mCm5Afy9aNWDL`67sYTjCiwkjya z5|ARo72?>BBR#`FnoV9fnp7KaEsKl=CL~b0Wh8oaV)jX<6P4uNs zE)gS|*%T1u^spV4$+Xu2W-GJ7=cBZ5*Jml6LsNqu>#-M|i_q^>aa*9Sz(ZBnH41n&{XWAN;A19-`n->I#8SoIpyxRonvGIH@aRn&=oSyh(cn92?JGv8rODABE;g%6BWx$#rENeG*lJsri*aW42Ki)NjuEpW-?f;`S7N-9 zQxZMZ$xg(gldH%;G{H{Szv-wz4BelYKkh-+?5DV=`M{}1MW6jbJXq{sOI2r(EgS>n zF$IPQ|EfQ{pB3HM7tIn_B5L6zOJ5ug>r%!!{@AiR8;)>Lje0(fUPXugoWgoAM$jmr z6nL{2#85RSQBt|<^Cxa#;*fGTT_0eQ;XZCKg6ieXr8hxSRTYZbQWrakH5im|hALQ^ z1`>W*59{0 zZu<-r<;64;nWd2JvzayG7aO+fW$Lt@k_J1IwB9S5NCX=PheCWP`dCDG2lhW+Oyzz2 zREo$$si07`ReC{hmQW~X>w{qE<$V!mDve8|6 zD)~*Z%haPXm_jHnZnUvu1KN`}G<+jQP%1S+U&OZ_C+KKEfS@Dn3u9u??lbn2vq7G% zxFMmRevk}PU5FYSWHb#^Xs6mkO6j=vyqOHCO=CZ(zTe(lrw)hGTnFJ#r(vw7;ISvZ zm`4~NPJIVaNtl44>E^C}#>MWdE-^Mb@yGzIzg<1EAHj*@W1XFSKY)c9?1yBOm&JJ3 zeeQdpG&RNZ9suO5t=oy?VO}Sl(|dhX|SF>%I8gyZ`G<06q_YH-dVFASy*B#vS`1Q`&RaLLb^zN!R{-0zoMI7 zbB;w(v*aM&;kuGL<(aSn(Pg6=is91QPp#@%q8%y2C1{tu$Kf*uVFV=Y>?K+`>EP1R zMD1J1=#mC(kJzc|>d||@px&0WIhPLwWE?ZlkLbYB{!*kBQu4sR96I#3 z+o$>=3Q@dtgRnR^#0{%X!Kfk&vDT&ZEqG~Cd$P5#+zsw=%gD69AD1#l!& zG9{&5uFR#&Z?9+cn%ux;n6S%Nuyt<|TLf{lJ=C$4^Qx4%#+W9(e_t={Dh7z?@Qpie ziW_ibUti{!Hxp6uS^1O;s}!SUcpWfNW9kdqno+{+tQOcZ+sIg=$rt0 zhM07S%7=OxkP8uwiSO8$>T^|79xLO-@km;~W`|;0k_Lt$8jK|hN9-(F{xmjQh=avv ze{Rib6+9L9HAl#+#)8%L;yvO49q7u{_@SG-$Baq1nQII#uTs47$5;=${juV{s?S4d z$a8dY(cLRLiTAEYW~9w%pd+CVnPr|PoBQdSqi$?jzU<(1%FY}uO4%%;1rtXV7(Nb_ zN~N4vLq4$GfzGkm8|4|62*br^wEu???lTr3_Z?pG80^B7W_ws#l$biDiO6r z7;D0ODc^sdQIeyx@PDS68EAJaHc!6U>v-a5&3VnH%298UyP;7aLp^Ng~*%%=BlP)7|_z~z*n+pkjC!aZKb-g?zL$=_CquXI;PW^|FHXt#e zFwEYyccS@;J2(j@d_f2Zk-bUD?`MniBSzQiMP~rz%^$gewRAsBJci%zX|?9*@K`H% z*s4-F#ZwQHw$u*Zm$tj&<(h0JJ zCr6C83$FFBv$ajErhEk(N31-zB3Q7Sxq*{vk59F;5NK-5i2EJAURTI18QTFe^b<+a z2>|yy?rmv`+EzS?04}@C6#NYx<_LKqu-uEj7Be;z zjGcQb&cu!5S08PqM`hT(i9B$^`gZ;cW|`efo0)k!L@U?D?0mqvvn?Gsx7(kVi#xEe z4Dq&5O2S{NWbEkJySW-9^ymS0L-2(2jU!faR{ci1;CZV^u zW-I4XvTy{8uc>BN)~4iu4m)0MW)qMo1D1%57mCqy9b|(=wRw(pc~LI3ubpwStPBAN zwgg%{X1;XerJ!Ub!`Yj{j z(olM2TdLpjGudMcl2s#pFV%Vva^QS*C!S~IbpHv9i(=LVn+5SCYw{dcRFvf&0 zmDt(75QkXFi5&unt{n}Yk&@n5Yg3-R3h%X!U_1Uz5blIam${rL*W0$7!sFfu%H=s_ z3XG|({c+#7n;Z|{>w!OBVW2CA&P#ItYO(;K_c8i0`a^Q?F$@1)uCQ&L+ySOz3T+eZ z#pOGe&ee=QSd>)MOQ&BTHd~@Hltp>3w=qF|56R2zQubSW>8+G|>ezB*{q|)r`49hc zhL5ckyGSKn{JUc6o_QPiYvWOMRi9S;ryPk#mWdfEi{t@eCizT}I139zmMn(Q8PNjG6Rf{a8dKQ-O! z*VtjWmP79F$Yh|inA`nMTQ;Z>=c;6C-!|+-b3r;^cM{+_{i!*U=V&-U9*f$ztk<@LEU|g<9S2Qecd+tPx&rm&Q+l^_biJ-e4 zjn0TOf;3@)StKR zf5s#elxacu5YJC0K*&{o$-&~fwCQbE1ywE$W+=<%4jsBUuVZ=Ab>FBGGd7o8ZZcUq za~%vWRl;MlD-Z^xZdQ+mVZU{J5lYEX4+!h3#-(=X1I*9mFTtDiwP5+g0?>6N=z~-mNBP==|~@*h^R@ zkJ)_VbxKXv?TmDl^Yb$quw)Y*(`%s^y9GnddztS59PnMoUo? z65H5g<|S-h2NiJDw;DOhJVL=9ei(qFD4%2=YaUc_B=(hzPQA|%fRgQ}+5?A{O$3q0 z>Luq@l4S#qc{0(TSXagtUY~iWT2}ahc(<(jfkXlQ%qXS7c+IOHb&*Dv)T{~~?DBsG z_M%sNem~^|+DtJAvzQK7GqPE56OBLD^$&EcE)zXJLNuvh`Axq@D zjQ0{=<)a#AnlZD_20BQh$|usxh3ntsvLA$nTryBZqEH!A`LoT^_q?)*-T>s2I54NeJ|2JNU@EG6E zWlM`aF{5uNZ%NpC)>a$6zu#U-P0fNHON|^PLN(*h+9Yc@D7az&A8l_LlvmJo3*r(8 z1Pd;~g1gHD!QFzpYjAgW3-0djL4v!xySuw{Pu_37si~=Z@6^=P{CS$s3f^}h{@qxo@8jnD6I-8t9A72K6S~T+=W(it8nLH-GogyfgT6iL0c66ql=;Jh zRW=)hv~+bGr*&xXI7ffM5N_0kgB7(K*$DYQW3nYTs}igXk?YVkJ_{WH<*T^zGuk^3WM@)+#1Kg4w3 z>}H3gBl=sqKy-J@Al0g0Tnht^5Cz<5pXlS{uJwLK*mL$=#*#-wx;9+$G7`jISOc1n zHZa&RL|8|*>^p^W#ybFHMP^AN{JA%TC3!fa|3c2%KEPrzJQa!2Ksqs16RAJ z@;+Yse6EXbZff-j{FGc$lALA^G^eG>tCz>I+bNTHLV^1>y@L|ry*ia4{MX- zduoxv#}6HK&z14IH1kFgzS@26k0J2*%kKMeaex3fU8W|L&GWeA-4v|D2*f5}=@An7 zy5&FvF=$&_E%80jmb7CojwL*(RNh!~8wCnxbrG z?Y{WhZA(-^!cFOqvj)UKl;3%cjVaY%7CXUfWEZ)Xby`;F7{q*OZ-qT>f|5w`SDUUz zo^m?9F<`Umf({bsGuw-EbSrpnP6J|Q;NoL~vaF1)W1nT{7+0(Ne6@pIB4)mj;fX)+ zW1tqB8PjXhn4TznN9*y+G+FE=9>{@~$qdvyD&7HD1)LBCCR=ElV@R<{@;H-NxlH0c z>A~W10m+9i{J@2?&6|6vL9VDCyxd9g6^#Qu{jgV$A$t!n6=Pfch-Zo%#^iS5s`+?t z6!CTEl+-Nz$zr{9_Lf@lQ0A1zLf(Hd%y2OFQ>0aRa)HavRn$KxXXIf1>HI`<5sT5M zQ#H%Tha1X&G?{!@aeknlZ_RhqMM9p~WO6a!Z95Xh?*06Q@cbJU<@pw=U~0Lq+gQ7w z_tSZ)@zlbI-R<2LA@50d9x~>o+H|C~mNP&q#2{p5bv)?H!H2;3vt!ZNGKu@$_c=eA zf30OcxT?P3a{i^x<;!wRVWwEF?%^DvXJOXdw(mBa?>PbcbKg(NGNBw>DKN^2ey$LH z-YK(wngJ`zB{A?=x2&&_DOkrUhra3|VyM3}(;)HpSer~e^*NsU7Ky}Ehx9Gxh`0PorE3b|Y}K$t5howpiWF(STq}C@=EFDp z%JAP@XJm4^ulsSBJRuAL*11FhvIG=#^COD2h?)b8J;H8VnyWHHEqD)xf~XXJhPjx> zf9daf&NMnTnAJ4@PKDnO;&|OXQ58xUmdBE!0!vQBi9XdB8;^G$bm$UU02j>UUrv9% z7oJ{HNN%WOoz}BF_JA$4j-}uw9nXl4%w_m3w3L*#jK>L`6Hx~bJU*PF?sm}{-bzhs zTTe$ovKybukJe#N$C_F9dMfB^rQG5KGKpNQt9|*#SOBUN#z39)~38#cnD+Kd#&I&;pAg`yf_ z_!=Il=0IhmNEaFqv4ym1xM-|DC#or)%@r-0O&U-Yy~R^;t4znZG_*`Gu@$qKovXj| z>JoQj5Mc44i6}p}FJ4JPbIKQJlt3&89N)Evo+I{1l|0&}fU{x8`Ubu2 zwZD&BqfyQ!U%KAl;=4=-5OlDA1bf3<{Bc6Gk>1S^wQ%XZGQ6Bd@_qK{9{~0_ePr%f zgdQzE?(O)ohP$-^BS~&o!`1Lvo{v};G#9VRs=+s}+PqL= zNoPA0_D}bHFJ2{X5Jo;pX||skBB;n}W~dp1mThd+ePM@3ZCYg1Jzkn^=h11E)6_^7 zC>nG_t`;bb+hb`wVsk7`1*o~E^;Y#pU1ct6w!4M7*|6i9hra$?G>%A@qic+zv=(Y$ zMZHezbwG9w3ycgOQPsvB*)XgPat*>M#EP04mU6MGj8rXpQLJ^3Czn&4ZVqY8%Y*ly zC!I(9N}6<}HB7B992tZblc*Nq-s{no(11#9om~(e5ijhvS2`R&v!hBrCVkj~Td;Jfy*yvJL)yMB6`}CFO=D%&!e05aV>0}x$P|Ro z_G-q^bNfVK7tK`J2wKPkj^cfEa~s_vQpT1`JIr?!)AZ&HJoM)kw7X!+Vf3m#~twx zat$5~n7(2B31>;4Bxp4-5zZ+LN;*xfm?c+3?scT{;C;UmU2!&~Sr#(fG z5B*||EV!9kkzMJ>dZmup`j>*S_FgwxJcNLWB>xaiAMrHyR72W~#|=y5#uS08c~ev1 zvwe&Tlk75wtORP&Di6STuc5&t;SIu`hAfl6F@9n*SjN#S5%}hdYMqwU>m`RUc982Z zow+v2R) z>Ug1OBwy$Qy`I`*Ud4a+A+*7t&0X`?dD*83>K=LY#-45z&#Ua34A^)AHmuJVMGReo zLErDM_(Q>)9;O-E=Z0(pmPS0{M(~jT)E`FVKtSBRd!Qzzh#eJ#Bhf_CZ(~X+qM978 zOB}Bp&$(8%%SWVSTi;F_8oVu=siAxtmttHgz zfc>Ki_h4c~qmKp3Kqu)r-HFCB>whxgLym`QD#?S!#D2%yuG>CYB}qh}znOYmAt)A( zrGkVvBt%ma+vgQ;B6T0RpQ1L(o}%rI@PmXM-HTuW?G}qb^!-MQP8ou^*%B9_1Ffuv zO;e33b}KRjB%`BJ{DEh=XlCP3jGpr2@vj3 zB`M)+{7TD~0rbvX($pjPraK|R%w5BCwojReBpDh#!8#$LRFU_PaPj3v*aZ6m>n5pR zG`0IWKK6)zW-)7w(?Rqt+DgnFU2mpUX>}&6-G^*b+9O`P@zy~om@zRxzpJz}MU-jo z5KG6<;>GEV?s!&4tL=oyi@ipF-@De-0>;YvV0V0l@)A~jn8`P`eg}v+dnueBMjg%E zCP(y$KVsdb$mq{%(|G(*LUw;~^+}7AtVK9FcnQ1|S9=y% zk8wg^XEc(qMwKa7KIht?8=N)Al zltY9kOhjJ|j$}Vub@iX*lOFtF@qoxtNyV&1daFN#D2|X1C6ve(j_D{6}s4vpynlR zjG#!=9sj}BIG9#1)Qt2|7g%P6NM=OpK{h%&f^RYFys}L4VqIK~02(mF#n*EXhRqWu z%{P|U7)VF!wSwrA9(l6Tj%@~!>%=0ys#SiAVtkt7IjKpBVVny3A>zSewnHblLwS-Q zJieg0tG!qiO|tLyUCyDWXT%aK(>P@HXZ<;X42)Xq#Y%7Vy3W2APlQc&?dmAYgpRin zR!_P$3n4n1;ab}pmh}X41_-y$i-4kQ`Pg#6S?5p>W;`Hq`gJC-+W7anaJFgv9|i~D zG6Omu_Y#Z>VnN8eujjn?=fP#kBa<$j<<|6|Ie)9TQN3I~Tdl_oY>(DdW@7@;%DwhK zsc`YFX;_>zq{aw#Z#LUH&rj$37}G8$^==;pkm@?iXZzc; z<*;o<9u9k5pSeeGt(iPU>>JKR!9@Hn*tG^*f`AJ>f(dt>+?C@9SgZs|=a6LDq>DCO z2X7jcYPN;Xh%^(OM68qH7yWW&zcWEL3I`5XUTnK_lRqg~4+hz+$@-v&yk)p}7`T@t zLFL}B1o4){(J6yt0)ez$@8u6FZwhDwC`YYQB7ZYS$zE0?{)xRqMAUsA z{=LK9p*#vwW`&btGCc4vjGG2u$enpTJ9#On8lU|_Kk*k?Kj&GRL!Wx%Y z&zXDFf$5sSt58qHqfoC9DjrR<8+kW1NOb6Iyz}O@UCU}Wtl?-o_FTJ z@r}JryVk7k@WkEGF;aGS-<;UTIaj4hL0g72p^}uaE$BjCUm$y^ah758n$G=1c&=y_4H~^CQ#{jxZR9}uH=s1n3rK_UaGJjY z!OOL`(eLMgJPm$Xf4c%oaev|m$QlS%26YzC2*UwE`%s}=@(@6|5kGqw6evtIZ2=t{tjlE=Kq;c(TakHj0kPa1QQ&cvKakSrxmD#5%iYm!UAJZd;x%10 z?~(xf>)pu1k6jV!7%H3fkQOkYcr*G55VpWaV{mj``X{z>`g`8!U-)x@D)prTU@6$_ zGCg3~a?+Msn=i4PNuYxz9}xb$oT$S)tBq3Z_FI2%1E9YS8)y>B0@*>ks{4&VI_fiT zYYV)l#%AQv9H4QbNGZ*R0*W@rLe;FR(m=uKgR+m^M&IR_LvUJGm#I3qm*LBl+8T%4 zhrDYY(_dAxf*IrZ>sWznqO9WIpyR~P@pw5S9|qWKP|IZzKd*k8PPy$u)95aJp<;ru zOq#7VQ2PuG;)C)yO3_$7Th*RF9_$Z0Il)a%*Z9%BOKY(-r-=0cxhtl>UEIC4a8k!@ zYNIjz?bew!r?Dsv7uQa7jtLJ~I8Ewe&S4bxpDq14AdQPi2gAv&<<)#YX2 zif9Z^LO6$o^zA%u?zlg?(DjWOIgc-_G*(V}3N2xF|B=c6yw_K)UVUtXdpVkni75)Z zWy3M7T|rO46F_gCo2Vq15Y`eHViyHty8eBjr5mcc{61J=G!2b-4GBFd}1xN%P|Pb;vY zR&|&X$8=)ups6l}k!WRUVFjsv!Qb)jy4U|u_jtgC}wRZ-obUT7!{2=h;Qm%73T^Rco7@OHj_HK4H1%=Q7C%=S{U_EO1!b%Sh_Y zWd*HRb=sJ?e*R{J=7jwz)^+U2!BoPwdFam}UzaZ2kYWoWYsEP6bUSvh_j3ni3h6JM zH^}6cDn%1vSvBgK9@V29hvsyQlm+4#itSL2yR7H*1%-N|a_H$r#G_<336qEo`<*(w30C; zmX7Ban~g^ij0I(-GaeKdmWzQ}`XHw&49u4{hP2}u3j0i~GLwsFey+H={rZ%IFY20X zt9TYmANqHaf+W9HJtOWq-VX+2`5Qc6ko7J))+b$xljtM)iBtOV?hI2F+*Z=Dj%<_K zt9{3*AcXY*=gCj|j$Ty?H%r-RQLTaDYtG=SvUCCn^B6&tY##$oudll#w-or)MT01u z9TEx(;au))Kwd{Sj)k6|0HFewQu!U=nNansqEP4qJP_L+Ig_w| z9uN!7v5*CDwF&*g8N9gvv~+OOPqrulXXcMi{ecw5k6};_ht3E%(M~< zUnqm}pT1auE$6VBIArUeKmDJR7HrR!8}e3jE0_F%NA6(q-sj=KA1?xVUKIR5Q$R3W z>tOg2e*vsvM|3R20tydflsA$1S7$TLC_7~ySwQ--tG8FEk8PS)g4g^B2Us-J+)Ol_ z0b9OasCxo(Lw&J7|97^0lWVlz=)b*XS$Em_9Pe&Fn>U*?Uj@{Ap3KGR4p22Zt*+er z{;#8W|Cb$=lm`e-98*x>djRSMuseBPYyZe7_%ySPZ~tj)-2YEG#Vb&YrD#HSmuVEb z?(~OBnTt##Im2}HiBRJ*@xc|m2^Fc{>c{Y6$3vtGZ%_b5~2d01VKJB z+0*iTJhE@(G?tLTYq?&0;1D8dX!GOp$vl?dn_gb6{}HBP!uV0*)XC&(mL{t2<~xMb zvtYvUHEHB%^c)L4;0&1u3sD(Z9dq|^KQJ_tbf|QeO7mO($-%{i{{(&viZ)8%;-dnd zc@TYf`w{0qj=cr+EpcG#Fc?yi{tCZ&NkP>PaYR&-*L&?CZ?@bYGhS3ijbQjvB?8NM zZ@x0T;$v6ZWyhUps-mSoyLc|gV@aMqoZ${iZ&JT_u7c^y*ay=6J1&NMB309$e*~f3 z>z}~S;*m2IL;*<-2w9K_f4Orx>y0^o=i4GoWzXRyo>TbqTQXelK?lG7QH@A8&xF@Q zva`y-9x$3legM-!;RI@U-Wh{d=Y^j0k`+TzHG>itqNI}w;^G5ZeHq)vpQ_L{Ymje&etR1$Pxe| zFbi%p0Iw@f^54(@rBQ*Ak0f}w+abw^J|VrC!6$M$zR`Wx?G1A^N+Y&N}1PK$A2=bag7=4L+0WLI1aYGP)XQGs=An~=i@z~HJ%y|`UE%^4Z z0eLKVUC6acV9*3s{NF|nz_9w}P`iOPg!rc${@9$+@ZyycFWNicuwmoJ{jqiSn1!H4 z+-J7B663^5YGAe_q5Be(Hwa`i)f<<;7^tp>5X+PWk^KQLmo?3CUy70xGmNm|9>qFz z=-H{KkX5vG=bQUiKD3VDS~*a3-~Y7y*9|fOQ$5-U)?#op*kwurf z^U*ZnZIdTI&^|A_$B8}mh>unVm?BQ-7LP=Jjjm`-DCRc<2ETtP&_XB>4b=oeGgk9r z!6SNM%poE1$x zhf3A);NVw*!>!~)smFW3E?BteH(OBw7MIGAAaP*+g(C~IP_)Rev_3_l?EJ3+*@@VU zv(g4G-+ATdyhxjW2@$8yzX2x^B5td5+IwLOvM3Y+G?7~Gl7+R)e(mN_SVwxn@t3?u z@xXW5tnjZ!(}*Im7}h*5y!4JlCn$#N z%io7;COr^W%_Uy#`1NKPYrs?dm@L4(3RVK=YS>tjd40s~UY+Ci-g@^X1c__40xq6d z?pJf{luW$HRpQ`tj(Mc0(O*DlEYM}J7gZVfj`l#re~oSoD2H;9jy;PIRc>+2?oBiB zR<*?6Gy{7$P}aI%^!14WR&hbULPg@w^&(1Y(iA4M65K6P5`;h_RHa~n&GIk585c1_ zw%#KMX{~TmIjxI#9N^#zQA>!Y2xTMwWL8#Fwfsc^G)Ch4s`2z(wA|y`wh4r=FUUqR zd9#Re(S5_>W}ljos4@o?W7PSSsAo%!WbOE7%VGw zhD#)dufo|j4ay|^EM^@z?I-?uwSRVo*k0#dIa*2qTQ>*Q%)2#U1Qz?$fRHus>$D01 zW^D#5Op#}1y?5wrZ2f8OcgaJ&JU}q21{wew>sA0JaJ}L=nFbs+FR)9^AP`jQ9{SHx zv3TYTe1L!X_Veukm`ZIC|KNz+f8!yJv40-OfBk8r3~u(w2$*w6jEZFGc!0;1iCXgl z)|UoCra5n57dSHlFj@5x0YCz5axvH=X42)Mj#&;fKH7lNw1M?A14(d6k_-@&*|W>2 z%!X;x00^`QK*nnWH)XPa?Ad%^!TaBpJj56u>2R_3H~8wx*5l)4L*?bar}^@?MgY~p z@hiR75z7@}Mggz}3jmr@Kvk@;ia7J&X3ZwKKivOS4-sep&LDwotBv+ZKyUmX*%2`9 zzr4l&>(>A|@wne)fLoSGhaXDd6rZYjPGbL$7RE3r{%?esz8?XY_2c680>DAHO#jwr zz&uC0(_3x~-{}~N4WRw^dalbQ6@bSfz)BGT?Aree!rG<+o;L%g?WO~efSeimhbVye z{+|FQ*CPu6smLRBbmG8c5(SVZW|3jPo|5n+pX4K+>yD#eNb3m9pKAU)Sod0%{cK!^;>kN! zoh+?No|$8#Sti~^W};S?YqHj~=xb8tnAbd{eY^7GyMnJ0)cOZPZy}%Xiu3!IKba%2 zT3)9c>(8c04+K@;aAeIMGBLIDdd@D{IBh<*n6|HWYc_Tq*wYs@vMT3SoDa%2=C?cf zb#T8XvDci36U7Z}x2}(xvu=&ByI&!$c+lcCNM*A@GQRdj6B1*I^Rq#M=u>bbVOU&G zu?T)G^l$EAd|-#ax30I2R;gX$kjJ5@&^djJ5!;&DO})?d%Nlvz%)|VCbGFEj;I&gQ zmA9d2W5iYOJID88!qDiD^R%}STws~Kxe(_aDHPXqqYHiE{ijK5&~i4$9de^Uf6EQmcmlupfZI)vn!_KCsog>*Nxb{O++Jid8Ot5h#g6N)(+?S9@Oq!vRx+5kAC*M@^28>4*7i452eH8Y4izW0p_fH#xdIFqNe+v!Z}GUQi9 zroAb~tC!@VX$3oaik8FQlz)2fy`HIa|Ei|i4C%$?f;Wg+`|`f#z1Km9Y1E;2r#`&^nSKd&zIffoe4599lBHdGO;FEcyv9 z{GmUeOfH^`Cb9xCcs7gBZjC5iWkcQHX*`^!9<&zDp9TLaa{u&r-qgQ+z67PkxqZ6x zccGDYm{>;>bs3GhjIl$evY^HqNMmV#v;OE|e^A~M^HvGtr?sto8_9~YM-tEL7;(S+ zo9NPoT2%kQsUW*(Ul%dp^f%Ixf#_?fe1I!Hee`7J2!hSZ%}6F60^R6>)bWri}#bxZUjkc+m-eCJS~Om7JxnZM$?p5Zai*joF7YhJi;k> zF|O6OA(2q`P%1bewqD(cw}sS5=e*T$5Ukgj^6=Hw*gK2b7d8AvG>d*GP^0b8%6U)6 z4Yu^mdPT=B>DNc|oA7`|R;7}SR@cH=cXtg7TaWl6$5wq4P4%Qi4n8y{rpFv%Vn_aF zl3&$dy5SE!j_d-w+q6~fM#`75Ynd7k18eN!z=zns(w|;&gkl-j#cFq4YAc z>Af}h+)k@!O)5*VWNK|H3Z#9x-Rmdb#t(X!s;3t56mhdF6Tu#;x(uD;5C|TO{y!)d z_#um}*FKQGjt%A^`)ks_V6SG$yIHVNN=m&P4x)UbMCb~;%xtBc2JtxftmsK<-T=C*Kz;5RC3Rk%yO8d$@ujE+-{bSd zN>Fq$EB)`+18erpoR206p}<>iIk3{!!lB9js4?jrM$3G~?>C$gA9T_ALd~lb@}qOO zThy8GTrF-#X;R^8p8U!Z5m!hBpWwgRq4$a76=VzSwq4C3bEK>&F3f+QYI`9Qn$QR? zHdCRXd2Qg#TLd!-XF@L=jvVW3qX}H}Fy{_upE6LDPd7IeWjp;2bADQ#8YI(G<^2(W2cc|*&mN^A zZ1q0FWBTh%K-!bLErcRMDw1rb4vwUw%EP!d{+OWtc(cP^Jf#B9yiAA3%GOrf(6gdnsaEVHaFBT_!t>J$dvsDC-HY-}^1*mpG-F0)e1QSn(-O6pL#$ z1@Drd2vY~exFjPC4(2@-;nTQe`EE?<T%Dvy*T8FI;Agbt@&z2nO za}j>>q4gnOEz3^5+(+L$A7s1duQ_5z8D!R3y%>p zCf{~9ZvA}Mpx#iOTj3)X>sF9R&Y>ZUl_G>xOThAMvs9vN?p?#O6&mMWqUMuS^t404 z-;&^$t8c7!{+V7E2d!A`4t3VSzuq`kuGCR7? zod7F(>=B{*U`mf!;Opzu%p7pWe=B1+)#Rpz#n0%2vjZ)+PM$wJ{JR{(2>KM$Kv)g@#Yk0tou9ix zXqGKT++R=Gz^R5V_43A$FIH+?AC3n;O=7$|?gM3rQI}aVE-)#EqTBr>1fyh@$g{x4 z;4Xt4tC*C^6BfMqD|mJyn$LBPuY#*;x^U;CW0AZVUPk!Ls8VQY3mXd>++O5}$CWIu z8N;)fB!Q?gjl4kk4>R$rseWAo%#%l-yPcgaZ4)ICnbaKc?9n!=`8ZW@!PYcnmo^)lo?cDKOR{gzN|?vS@KC+j>9L6e6ZNZk>R5oMOWN>b%ezlH!@W z=%nF+i~&j*xrBD`_+dfC*^DGH$9I^X9x%BVIDSh!F0imM3qVdk*dG>oI|$bb?wI>1 zer&+e8nRd%#)oOW_+35nSZzv~f0nD>Yjk7931`Cmct~pE6>3H{OAovgO>{oF+A+|> zXi7kji54r>QmoX6ouY4WDWbaL{g^(Ixy(|TURZh|>^|{=z}hn)e|PdJ#Zg~WOsRoZ z_XNG2BT;xHydtKTWk^pcMx^X2Pox*y9H}{D0>5H`S8` ziAD&4YXvCi6)q{TK6`W+Ion)5m!VNYO5{5E>2l&opAM(<#C<5aXLse1`I))vr|}GO z2M`y1La>+#n38KhyU+B=&UoTkJQU>mIHcZo?m{6ndo`Q+v_bYic7jX^Py1Q-eyv0QY8AR_k!=>@#6!V zbftQ)Ei)9PbPo4FZ#K1lZUj*stDdo_zWl`!Gny%dwkU96F7h1GYdmPAE~PA?_IO z_m$h*a!m(^`FGepcX$z8@e#4|$K28LfaIRR&0)T9iUO0$Ry$E8(z5K*^15`{TzyAu zJIOSz0A0m8+4sTP2G`J6b2Z}m_qmxhR|mPQRjytzbZ#9}GqWE*f1=sh*_{RxKzzgI zC#!=QzEa0)jB;pBnC#&SsnDP%g6bxh;N|$Sqt4vW%%7y^mzZICYfvT>T7<5s`gBtD zKAkL{eP3EcEv&(Q?%)==c0|J_!e3PLRE+^m?-#G!Se&AH{@w}jMbS5oC32(RbIK%MM97P81D?Zb1Z4AxUw2>rnx$@?x3{g)Aml= zU;P6J2(85`?j(**SLzueBjxrm}NK=MRGzIv#ZA$ z+>z?vol_?tXQ$R%)Sq`Musmu`U7`kd@JHk_VK3h(m{eq|?@0oc2_K$Id76;?&bx}b z!9KOZ4nxS1v>|;_m2jZUwO>_jRPG$j+qKVEgM>z@`TV`i-gRz#p^rX{FJuWSdpC%f zYG2p7=4v7IwSWuUFWpV8dJBvu<3}x_pg*qZUeivJln)CpbC9?Fr;NbLJ9%`B05J1Pc8z z-yg*S7VqCdk_XIu`pBjFSa==Wl*=Ws;mRtC{tfPXX=VnGCc4k0Jz+m-gKB@oU)+y; z)!<>L7?vjf0MEGte=tFMmC^$fw(bU#tM6Kx=9f<=<{F6HQFcvgpWclkV{)jYicQC3 z`SKgp*o0X6b$Pi+)gJ8kr{8{l>87jtV}^hm*veEoILNn$l#{^$*vOxbSd4l1KDZ(; zo`H*(Vn-ik((fw*!*XR3GYF!2ra{6n+)@VxNks~WN9`wh`-&GqI6k$R)1N{PV$}bT zNH-@~<>M*WZ4P~vZCNaz+vtP*%$*=cjwTfymR0}jefe((i*bItNy)W(s&Y9-&h?k6 zoSW&VrW+uGwH!!w{fo`@uzPOp3|c)XJBjSr^1Y?#?}F$!HjG>?3k>KKCOf_{f7Qk_ zU%RA0ZB6kL1?MR2w#O_Cw`r~Fk3_Js>EXZPx*rF9(YBo8h468WJW2W$i0{v3K&b$* zY(r;Vqf&rxnz@ZuDR$fzE=YY=?og*l{Bf16DE?xoywSEkoX5FKGCga85Hz6+D;GC7 zcZ)aAKUKh!vD4qu03krWUxi@_?QsiDY$6R$AA6(UTorDVCS+WmXC~8q!`n_eugvCs zwyKk=+qqW_Q)-z8CRbV)t-D?$leeH)gu+_w?TEACp?cFx?mkz4A#R%UOU5aL)rCfI zJ&shzP0g5##Pc!&c$p6oky=l0GC9wHMtu0QTaSrI()O2l8YoX5Us zvD`T)!51O?5e>o$b#1G6u9yy%@k(~4HuQ{s8db33WKA6zQbq0dM;AhX#bu^Q;5RQm zfYzWeZCE|LUG(npTy7ps9sCOKAe)}Unx7sZ!uPbkq+hRxMvX~B&%AH(o6+$gOAJtpEgxiCyy$EV{z`(W2I@r zwMeyVPrxfWsrvGF<{z|@6BR|UmC>81FmeK@2L~!JazXG}6w2;KIS&TLWP97Vd$sj) zyKhrTU&97iv$R4lyw;T~#EG65tU zbqaO#@~gZ+)aCE%h2M-+MlP>VA@0D9iA@|KTi`OpBoG1(k~6;w+i(3O+y|sWJHIWByHqk%-Hi6|QF~sp6c@*F*)bK_O?K zWHrlKJoSYocw(xTHQd)d_p~$8`~7kv^ghi|x6FZuyjc+;u@f2Zg$~xB=|r4!jnFGv zt$3tJ0P|V6xfe&A=7)|th2TqkjIN6n%JTOH8hOZ<1zs)swT$uo9mLPTf}`TH^^-uw zd`_bEDFE?m-q1*j!qAZjMUc4OA9>ydO6=~R7qhPuTdd2Rx-@F zR+m(zwQO3w zU$3X&)K+fx{W$2mrXa{Lmm*4$CDKmUDUv_gk=db9Ya{#wCb0o&1ZupyRqpg)8>pCO z^gBc7zR67c8nyw+4S_AKjFBh^FJAt>+yYGGt@|ixu)9{h?j#0{Iezgz^&c6*T}u+| z=PchShx*5suD4v7F04&1+^rDGTPc#W5_C*Y?{U#0R&1MSSSAb7Jf*FU&8 zvz)3SDL|Xf<|S8Yvc}^5pF&(H1wN(XN#pEvut&C`*L*DG2?fI|Ea{hVCw5u!UKG&L*p59l*9)yAmx3uQf8Nn)K zdjv>|1Auk!4xVkLwX+Io)XsN8s}BAb1dNYKw~px#GNw3qVJvkDCJid*DS?`#CQWrL z2Wy?)Wfch9hot_%GPQwJ%b*aV3y z(`itQxEqnz`O#ZdoM!Yl@a%YAx#{G>uuc~mGKrQLyOijvd~wvP{<^QFQT1{>1NP^E z+kH?57jc3wyHy!4l4u2G7fY4d(Ajh?knnY{kQ529_J5w5l1TLDHthR~eDUnC+;i~u zf44qR#_hudE)9iTF{jO(=VG=QY4W;mK3I|$XmB+QqP z>R?!YdGTs3N>Sw zf`w_N06NMrIdpB`T#=GcFL+!=I9o$@dgeef>uzc3iCdPsze3yki^W zYJk>Ds+Xlh!}orh1ME<+j8-4RJ4zP>>>zIQZslkkuJZOUBxq&me&IKa_MpLBf9Xv- zFjALyzdFe*oFB>%v4MN#b^wc?%~e9dLM{=aWMAzqfP2WMq_9qX+R52bG^JP6;y#9h z3JKpEBQU->avxpadAwd2e=8W`5l*%^Y4rn_1A@4o4q3)yAsW5MQ9co}$yVihPA3=^ zbiYIP_AM7pkw~A#h1kCz@7-RcqLGXK@V=;%*lIS@!bOC4}Q~%b?nF)WnrL#dlz`(^-^_MfnS6PVx)6nIs!! zxaRlqi|hl&S^nVe>z0I`yJwMp1##7>e>dT@dzb4Lgyc6`kygX-zbXbM%4Q+$8bg8u zHMF$6E6FG!cSGRmo1~ck;+&;7sjJ^_$#Ze&$Ge63w*qXX+HeJG)A?ah?o0CL0(mUl z_^x`)gni9R2IQ4ho%xV{-X0uQf95M;|F*&4{ScUo+Z2etEJ5t)fVQ!7N1%AXhc0VW5bxP<*)cC^~GI1g{o6a z-y=-j@w>0cN$n~9Gflt!q^S3QpA6BaFh8!yLZU4Sk zl=^wVLNhzZllUSq=sxtTN%}%_X?R>!6EY-4Yyg;C5*ALep-CE}p-}@awQkrXFlRpn zuDTlxEPVrA6qY6`Q^1J{i^lv3sFyu$*JJ_n&KT55m52R{RX1&35y2rJmDG7RkkN0D z4$Ryw`XG26rnJkx6LJrkAS(I_zj=G^8_o+Q5b@m3oInGx-X~fTR9x>?-&2}SxC7p* zIIv?Q2P}L4lRa!OMY#sGE~uoceUqq;D-gS?AU8U9SoV)9j#`c<(>-YD_<@ zMzV%48!X56kA-zlB`oG%g$grg9(IEn{kwhS<-uk1PeJ=xc%u6qZ3`Wp`Bn!RX zE))>OnVAH?R{nezjV9=;Xk3@L5KIdFD0+WXFak5;jImMF0RVHn*JyNhzW79bA2)IF zlH+t^5^}Fqj(yHzsXm_N^;f`!T;C=cD~eMMm&bgant0EdE+8wAJS!8mQU^3^`m&z z&H9vsn{*g0`0yGpdT)G34Ma+J}l zLN1&$Gek081Zr($o@1&l>gm(=lN@Uu!SO7Pk04jb87Bs3)f$UGCS3~55f#Qq;hsN5 zpgz_2Kga|fJy#{SmE9>F9~FP}c5uPUfdWJ*_>1cH-*(fMcNI5O@sBLd75aV^AE*$9 z$_1?8TH!=LUPPX*#ys#)W{)KHEd9)oSz83nR{Ls8(EiLm3(8WLz;C*ZCI;vEA{$l? z;ZwGCQ^I;Ut?|y5=Vulqrf^@NL)DKw9xdRdTe*(bj3%GR5q$#hhoqNt9v~Y|b=Rw` zQ|tB$_74tjv=ZNL&so^$VPs%UCxiqggKdLWcl}s)e14dK4%+TePjmfBqlGG=gQ!eKMbnLvaAB6rOI}^>tKKHK7oQ(#Lhw&}qM_z3ZUYgyxw*d+6D9D40Fln=I3+h|eyvgM$5mE2 zKUrsIb{w2EQ)plIp3>G`yR~k=V2#xAa5n4M;UrjFC!#HDi1YD@h&!FajJUmI5OD&` zA5-pWQByH6iX7iu6S?(RhnbEaBKkzTJCUfA9?LFEL&`fOL+)9N%Bw2ecNi1pch27> z7yy|!;lNYi6T*StLi1*qqtX)=Bf4Yi>cRE5bVUBAQ)buNy?0G2LT4NewyvOVFe+8? z3|uZq{<8`{=xowI`?%+Vk`~ll+)F!T78GNP+3Sssp~bYqRGlchyzND)ZVbeX-IE~T z*eHFDUPq#S=Ipl;DKEc=CJk_{^qU7gjX7oZ%_otsOwt+}-0CaKrkXe2rlpF-DDkev zX6KIj_SHXkfBQ&xK3=ZM(QoWE+lS>`(NI#NFfzUmG~~c!qaR7I4=48%%TJSHn_Z~~ z{GjPeb~3GL0h1H|)m`Me6=z{yd)p^UCs%~6 z3i>6lD2+qmG#Vp_z;xX#+cg`wQKT*S6zYc@430ho91Yz_e@Csgaer}}nw^& zOYz|D?(W>YzqRiFS(!64=j_??`R+Xwfo0Z!ur8F2G&F_M7z+cY3-s#rF5r+_8{Us-lZc^6sep3SkeM5>#S@{tY&= zxgaKq3%q*kJ+NLugJqkykVaBiNEh!Bzx37%7*WzeARYu9 zeS!x!pbC8b@m3`g}a`WxiumS zMPLht+_BX2D0Avym~&khz<`7}47-AKmGqymy63yw@Nh&uyTrb;07)=xHz*;4J+$SD z={m0VW54NY#*MYHTTBAI_ouieTO@L!IKl#% z2)bj<-CYjQ0cu7&6_bEcg?YJxF$+`xgCtQCED&0}Nx|v*+qmknFHk+2nhzPHaEAp0 zVrqfmt%VG>^@4Z~p+PF!F(!P#3OQHEotRiJ_?h&IqfrAt(EqSkvlG|WI%w2dQtz1G z$5ueKKUez8n_U0*pGfRHpQg$BrEqb=ie}I*6Pi${7@^qqzGJGcvOVeUr zO)LZ^&jxsq{s~+>96XSwHnUiGlx3hSa52M>CGVVlN^{sR*-ax}Qawl~u|4z?o2VK|gLp z$7@%ImfW$Mi8Ggtf-s~4IMUaLy6rP#Xwz%?>^hMTO%wL?Z2julP64zj9a!7$u9|B} zWp6gV=F|#3Oyh0ALB&!sAOU5syU_!Ze)KT%7@iGUOZ&8+@V{Nnky2C%VkZt<-#kFk z3mnF#Td?)$&rePX4B&K93mDzdaR6dCT%kSziBE zHLgwc4s6*#y0aIhNAqX47aJe+^fhd18nzq)1@!GlrXgynpOr^F-$_7IQEmv}mD&em z%$fAoRwH!C-e`{05}pP|bWvbO%Fe}O#Ay`F#X|DuaP{{&z69dJ9<$=u%3 z5UWughV7s6i#%jm<7W$ispAzH?+2ul4lt8wr#WS6^#Fhk2Fz z9bsW_z3*^UUy8@qbN0CSA9wC?d5j6BQ&wXRqNkJ-d{pb`zL1pAeVb%)otdjs_`--}c<2j-lr! zs*r#%eE|)QMtR3nr5fGTm@Rz@^%TTG2E&Z%A{kQ)@L~--2f{Q2 z@W@Sr(gDmK5w<;y_i!CP6{oot+1y5e-F1bc&+AT?VbQDDWO8Db&SOf@IoO1un^FBG~Cg`2^F120iA)u2*WSsQ);jA%Y5FV`s-U~zkT zY9ZWqJofIDh?&%ZVM4y2UE-hECdS8rrS z4WW^uBkl5R&4y*}Vee{{44J_cu9Rg*1njEaj#7T}U_S?YSR;mF^+iUZ>N*W#Tp<}} zqe^6@)12+UbMARUvtCT7+~z+n0uC zu!;et3fB0d*-}eerRSDc+ zVt*k3cG@px@E%WP6$~Q_tBkaRFiK#DW0HLn zy1q3T5zhlghS`wTG3sjyCf-eQdw^8-CuUycN9}li{k6zFh$KnC&8T~ys|%#Dg`ARx zLal!vq)!e29lp-8P}r^BIN!?)9ghF+gv9ixeU0b;M%1n-WBNoUOe)S8 z>F@&|8NN8AS=4unsygKeLjzLA4MYLDEeX;weXakdr(Aak3|8HdOFGJO!e!|g2S1AB ztblplHk|87zS71UCWZV1QbmkYhFzpmp29|EnA_i>Kz3rg`}FMYGsP{3SJrnl6S^8j1#LInZ*Sce31)~1TCrtQ?3td_f=jLD zw-IY$G}E#>M5bGj3UyO;*B_}CsWOBm;K3+Xzg<+2h!iIV>m%M&-0yi2j`zK@5MYkT z0ZRVGH7Z2->r_1iH>6nY)covBVneM&SXMql>Wd^WLsxK$%pIx6{j;cS>O_De*QVNX zwcuo_#g{KfHRNNDh~T{@COk|Yx?ZZrJ8Wl! zksx!^Q+TKxYdqp@uVh}3gN^y`a7jGK^fCdhQJ%NA`5jgGJPrCw5BTCTrqSuD!8Hbi z5r%L3;wOn&r;!evt#$ajS@VM3+(fCX+@xGf`iNui?&36odrFKF!iEtO0SQVE3o#!5 z=Jw;gaoae$bXX=jY^+R2UM3WIh=1_<)I0s12;l6J`Whbf@&4MSd-&IcpwdLRl%X1n za#%Avl_-k5-@80U8^^wr2MK7G6fkn8hwNYegE+N27lAN4KE|(;m0F+{m-`2?CL$-N z3GO%Dpm(o&f@S7qO0xJ5qaE(>)ocg7&(samY8DW{V`mwwPiU9AAp+LD3$6}`jE)33 z$_uNSbbPh|pC2AMW`7L-B11s9rQ5`?(Xvk2PXs?~{98^oR)VY{#QeOnpr(S{OtyDn znlvONmB`4*Q%H2l8=g8vZJBWNUD7V?E=HTk&?p%|MM0N)EB^ zA(q0<%EAjHa3B#J{#{Xr&S>%RZdMUG7}MXiN);z_CKh~JI2$V)E%8&8?!bjfQ;2nR zropwKjuBa5K6-HFfx-KC1aF@v5~IXVB4lu+tk@hmGFbOMo>C0wq&v@M@Df^5@jXs)Z+noDe&cER=Vty=??Xw6vNmUg zQlyNpcr}OePby${DwSA3qSD<4kLR7cx33(=n#V2w9JPgb6dZizi6}xRAZdx1UfW%u z?C|Vl)xz2!556?K8F4f{IqEp2FzCcUQfUY+aNwoSAn8mnmin~;&xLmQnOtJ2Lp-A7NPkhKER0+K-<`i=4 zphKY8AJe2Hxir4|@HjAON`efQPn@gSD8;lq3GByzZ)tl8O|?X)8&P}sXpq)#?CLA)@d z(nRm6!uDl%;`62BhpQWO$bres@?vC8G1OeB9XCeEK*qv~77h50D6NuxdKWIbJ&x_q z{AY}^y(ZRA3xSZ?Ke7;8Z#>PpQlAU=TFvXj2M>&o6tlj_V$UY1ciiRYv|Uo$UdQ4RIq z8ZpbS!$VJ>IBWIWQ}k7CQ3Ey_`VufAdi ztTy7GZZ}J36koQh9>YZ);V0|_W46U1(|Kr+R&tfR4r|7keN=wJ^e|$v%AOsEMebq` zVx*25m}D2#uoS?|Mne<@O!uGdA11+-$Pgu)#rw4M`|TC2y}5;mQ7DUA89S0;eZ0HF&`p`W8>{sp0OT{(B04Bb|4(Py;DW#htxB{{#XDN*Eiq!n*har*Zyw;E%{B&#VF8%ySUv8_=N< zeT(o+*wW)Bzv^G6wXI`~mbP^G^sqWPLw@r7@lMw7i{^m|Z)35hu=V3S)~!^;C`6 z-W)K~CCP$N|3mC}VI1VkeTpVbsM^F3Efs}t)idM9TqwN$KY}+lljqj)iUe9?E zSyeOv^!{p2tU8bFmDx1~ZH2cJLD>S)n{Z~tu`wekC+rm6g_y)2KRO!_FS8& zxm=b=r^4Lhr^kiYX0RGM@}HA~$qB0Wwp}@Lq|*4@8YdF5)ErsH(&}tIUbW_zC?kMN z_5y;`#%O0>q5_9!QuYDnp^wf4oq6mZ)O9bj{Q+S%R#KR&wzU_?Cj62bw4hZX>Vg~{CesyQ6Dn_K%{k{GP6 z`s>hrADcCCxNSCQfBQ*lu(Dcd38vkywVyJt%pnTEe)s)gmvm1Xc*N=2!?f}zWnig* z@#1*DJUq^`cF|DYmg?=aPGI5c*~UHk=lhwR{@9=!ufIGO-s1l`$r$*Zg)Ob9xubbC z6_{0R22#D5T@ub3aCkqf#aEg`!WF-N?DtWSour_C%)}$}zxqDBMB40xd97|%pI7Z0f(!{pl(M*^t55H^$PPh{ z-1Ru_Q2R|$V*ehM%9+R)x#!P=8o>Hq?to2S;LDX3~#ijN(>y(i|X%PeBn$?yRL85|YG zZn$L6vSxe$V8&Z~ByE0N;t2l)dfIj)ix#I3)d(i4N{{p#s_C8gH8B2663+SH);AjQ za2Vs@eo%t)yZg7(-S?|M!w)w%w!)8kq@s>+DnH*yKDRo5)`&Um-;3FGe+6e=!KM7e zF(L#h5lqe1qqbsvoP=M?B+{*$?+R*3RMjv>SKmm_4HVxAFovWQsC{|rL zPG|A>UrFYDUtwBt_=Y9?9J{%0=%id^F-prQbIq0+3yiKB)ObA~@pBQ)6J8xKu zWP^%zbcF;_O=&(4P))=0x1<4ldta)FHbWiw zofQNgj;Y#2)sgw^VTXW#Vkz#tU9W_dpLv39H5e|54xs7Ja!WTj{NnhDcOuY}%?YQ4n;15hs-|gd3bY zqxg`8Ft!L^DoIAs={irs?N?77XKM*c{u#N^Jz9is4-Nj{ePJYEuvqgiQAk}woT%C$ zIgG;;nO@ZVWu+b4@{xH-EO|B1P{f|Z>p+5d^ap$?ys24nf>n=n{fP&Hl8}M83WAai z{RW+Tc6hG;RO)KbRH9jADFikTvXgZpufQ9~S^dOm>=YR^Li~BE>C6wM0u?k&6~zzC z4T7$$gpajJEF&bRBnProGYteDKpz%Oc1vm7Gc$PLo7Q=;kctK`CRFM=zjYK>XGGK} z+4cL0X$4A{Zp}+nc=5$kKAfa53pZ|Jj12Rxw7b{woUXzE6~zp`6h$31aAy^UicM+J z=E(alI!Iu-ikvuGI@{ENic#qRFrr7N-R4PAe3RW%W6{vr3Y9=-JZ!!lfH$T5uba=n z{x4(sKs1lj#aNlr!@MDdRM~t^7Tk>H-tAVc*+}iZa|v9zr^W8?WJUTR@AcMV)*Mhp z1?ocACcnXg4z?PK4SgGOD7pVu1fgF=Mn=Z3%*^Ab(I6gGKbCn;RWm(}OebC}^X!i;Qg0`phcVCmyc+iR7 z-NP`bk$5PC5~j8qaW<(ohurucq^vJ$DrNlj$v7M*0!j5Ve!pvnugs(lx}7-hu9I<2 zADHfeCO3`u@~jTp11-*0f!M{k;HQ^_55n(*pWM$SD|q6mxx6Su>jX)|41{7+U1zjo z%U2!&FuNbIZxW{dwV;H?c5gO(Jo}3-;|GAGWM1`|VmJVe+blDB`KOE#^vSWktqIk} zbh_14ibiASb|d?iu>M>p+s%|Hx^GrNh9>B)`~7S;vCt;s%jUz^W`{8*=M(-&v2*L| zFSwldC68Zpt>PNi|H~MC&{%K9x!=p_)AVyD+2y83{i)Fd%U+xY$ji}J;qq)3WBQ46 zSwLRkn5IzNshAL$6he1qXqiQbBb;g^dkPhBa8qTMm5gJ2lJhJe{w*xUo3W&SGiy>! zdh>odOZIOj@JKb&6(9gRyaI`o)xY(~a`v{r7U!JVr>CF#!!(Sq`_eo876F z(dUSMZEeHPj#jCxMf{w^?JvbG%|?=#ogVLBvv9BpHux|g@E?Y#{kKBBk1*PrPtK{B zur*frv72HndhDoJyOlNT(zWzF=>>j~tcG-T=_>=|ZMgM(U`L!;0QWkDU?bK+p9Z0n zwB^!#{V5tX%e)uT#llcSGPStfex#fEr|k|=kOk{wo_m?&uj+$v-Xc;#A($gWKR?lL z6EX&C(tT&S8XYwz#@1;pEUQ4R+R`WB|{F zMOSnME?DbZZDnu_$?^gEHzI1@08Bc3^w-d@&F5TFLsnM3UclU*9o>PC4TTiz^kWfN zxx&pSjZ)35)$oR1`FJJ6QpVKN7cG8l1Ht21l7;=BLU?Or)ROZHmM@po28Rq!W1taj`0Kf4;kCsiLfcEzli_6DfF+$nLo(V1F#p1?bn5N)i@9+tkB!mD)op`AeuwP|}*5c;Fc+FVb20uWGs z!-y~wIB}n?Zm)f8ki+tK9KXs!ZgZgbIOEu-m;;vz^j{8t;IW0(cHwP@PQrP;)~~S> z*^9QA&YmkWaU1+F)wdov9tIjL7T&Ke>)^qiPkGnr&VsNKRfn>PlYlNDS*dt?-awS7 z;F#qC|LN@Ti4hwQPwg^dLb-qCsNi9zz_w#L=wQLwds6}bmqRmRm-{w1bJ1&jgvs^g zZiNiwWi?V99YSkSqj4m4jFX*XhtAgro=jTaIwNyr^}_Voo7kf+2RfC-)zOC#%`Yrk$s+IP9s!i2%|x- zoAlk`_k9&@(~S`4&?Z`Sa>Bw>X`tm4A}yQQp%p%P@&Ef5A?$bZNj0go%(Q5k1&i56 z8;j>|Ugx>kkcx)a^pq(|l32P`Z#6T-%!!y!C9S-%~FI!aG z#UV2}$>~M0xg2Ek(6P%bJYI+z2Ao9mDoX5Uj{>baOSN9TG%pF2JWCx% ztq08{quM-#hB}im)P8o@jmT-lB%=q0uo{%y!vjn+V%#$nbnu@mt$0}F?O;SOBPXTd znsQCLcxZ;%n~+a`;Xy&UT)MpR8-Up4;uD)tOO)6VsY*7 zY|bepI$VtPx|_GPPTMwe;Dc6OfH6K^cbi^zX^E6(&(|dZg2XV`!f@y5fZNi~wd8AV zum^>RG#2ow4P^vBY8ZNDzrVzt)ailKDXsm05E|r`JJSkYN8T zrrcW;;o`nQ<2boJ%ZXmzjScbjuWm(?EHaIE4W}@>y*5VqAQDqD94zYp3TLJELDpro z8HrpT7teo7KtCC%X>c}q51~T{LY?uYa>UG7$-;m@ z<-d(?ciW6R#Qq!(k{Dy+d$EIl`na%oQ#mhttOFl3{D1DJ9I;C8yoU6qU6*jUTLtP= zo5l0SbX$8U||W`;uYx|nh5>z`gkRncD_SE`E< z!J##w5y0GV6?qXpW3kJ<%%W)5&?hhfN;JQmf`3<t2Yt#i*UF89(7m%LcJG#S9r$Jay*&KoEBmHG20QZmd4{hgWMDTw zsEdE!gysIs=i4b1hE9_UyjlYYYVr*mTXE1$$S>MZ6o#f^Gs*f8!S@Nsmf|tCJ%iUN z$$Y@S`dmVnsn7S@B7$NQ7SXxpePbmngKW(5r|+~_Qr@i-%5v+1++eA;Fh{S6 zYr+T4{*u{qLWC^E`i2){Q%ShZ;>vyK4BUHDF}x;bA#M=j4T+`_qo$9jyU4`+PaL7t z0X^!ng;3jk%>@U$!;efqB;;XdL{IUwf}U%Tvt9h>uSN_dK*LXY3@l%*NV7Wu-KKA! z1fLj@Gz~?NoIF`Bsr^24RqFKsMp7mOFgg5}d>-gD*kG(m0=X0O?g>C0-u8VIqw=h* z$IX2Gi&Tfep;N`nXi+~5F>&L)Gr?B>iKa367Cw8JcOGC2Ae7Rnvxj!MsMrGHk3efVu(k`j-a=?@G zmI0WfG%oD4crtitat82$QyzM^uJ;5U_*@AVDvR!wl(V@a;E&kLfw;o``u=PDl}^2PV6W|PQwfW+JK8=9!6tq|3!o#ppO z6JF0V#FzUeMB%%CHtyB(d$6c6xoY=eWV;-B1Qn7mW4f8hM?~9phWK`;%yXCU{O(j0 zkg#0+XnjN%we3u%jb`at3W%JDO6M`dIMbpC!!}%rVZ_eh3|?3)v2>%jJ-0^gsr>b+Nces2!5OmhZ>>-^ig*r0y8f1j0ckv~8922nS%P6| z$lvS5rz=I|HE?ArRw`-fjOj^2wk%qje@G!`xIq_H?2bc!24+oI>3Y3dSDu}$Q{<28a?RV*knHxf%ZVcI?6@W?ZapvTb7D zKX&b)UxNiNEP zzbW};TPEhOgl)^VnPJESsb+pGmVw`W!8U9+9^Aw?+v($~vdCY~-!eK39S3mwI`fJ; zcwli_TEbc)qM>B;*QEiDh^9f`1h~P>csj`?j_TQh#Fscdbqx zr+Hd)4j5WBrGW^$WFpNqt)2H}BJj&dk1h^}F$Qnw#(;3>ghEHfhp8~E?J4YW$josc zOTc(oTU$Wozdb^L^E3rQWt~^#|{4% zjA`YQ%MRlA1IV8QY;nPV;n`Hk;iM94;h`kYT?p!$>TY(PE18Ju7+CFKhYK4*&&_34D`&&NzA<;_}mhJJU%D zPq0aLH_AN3G^0DEX)*diC7lQjFERM9*Hw^C)_d(l)qMN2$7b78xv}DTWuM=B%gT?q zSVfyKLZCMyBsywlV^yhSvi%eZLH3q=UYiugc_;Avc|`y}Hk)}+82GtUuU!PP@uG}< zCW|>=ON5OIY@wWB2B2v**m9hOH{F9SwHf)=xCm4GXSPZvG&evoEnm{XNit-m&NJ4+ zM(G#3lT@Y4&n+nOyqivqy4U?>2r)u2w~_h*-`)Z0RJIxTA@fvX;cm*A--qy}7*O$L zwhe7%yN|n;e^jc&Ms{TD`|jhd;1-<);2mDoWFj-iJxz#I^uVyXPySnt-8L8Ia&kie zW`>~l(0KCAZ-+MSSLp??#&SfRYzPbc9x5@)YX( zUJXlVou97L>c7FNI!>})??n+Y4@W96MOG%i2U0*uGGfkKJH85~jZ7W7yYX}j%Mkkd z&4+d+z!B?Jk6GNA&%;PjX;h)(ye+)c@PeE8tkT)@2on zhsb%r=spsVkF7qNpj+x@NZdizAKq&pnWEzD6c(p=sJgm7Z}3iwRw-HiRq=I0^pe%xGV6qS*tz-&6`n!|u#$+BaRpS%anXId$i)7( zp3a^2;BSMh<*X_8@+>sqb%)`4igCmtX*_5cNESg}GbDZ<+xzes%Ag6}U?9f?X-jf5 zP3M_s&xXZBbU6?aoF2lWg*Du&Q4LTDhfqaX02(1|1sc<$`sr)oxgzcaLX?fG8hL9V z_$r8B%NEe-6I#_PS<)X!i}i+@5@vsYL!euekGMz5j7Lmy>Y%O`_iNa59W0T zJG9>S85A=%V*X+_uxYu8_Q%=va6AQsaqa4{w>!0AhKDy^uKA zUE8)uAAz=&d!6@ob8N5J;btyz#sea|C6}yU4l_Bwb{&%V%7(FAB`2l$H}H-25H8-j zZ*<+6WSUQA$x118Sz~qbbfB)kJ$_Asu@YMjP?7Dadz$PPhe|@s8*w}@h_FoTM&50S zL!Z~x1^4tubtZXS2e~59yVwDh>&^$059s}JN)1aCo&AH^lR}>iaj#sqe_!tN@E^v| zzwvLQFkS?-gj^47qEygcY*U|bO?=Lejpww1_x1h9BneF$K#`Q0D)zX`U!0dY%ckZJ zzsFE>b9C@NHvLQ|<`7r+bFqzY!tIz#?K99D3$R-whL&^2O*@;VzT`%0>PM`IsSc}m zqirA9&$?({MLwgx1di8k`eb#o!QP$QIO5Ag2Gh&I@}BgAXyJC|yL2plg85W+6wwKP zSE`K4tDNwK?0=1#wRJ`OdcG1IM1ymQ$EVEJH5k?me0l(N>aLZY&%IIhFG=4JvsBHM z`=hc78jhk8DC$`V)$I<+0Gd{xg>QUjoO zdIRI-bE;Le&pe0s+5B{Eb6Xmgh_5eSj;NxU-d=Pcv6z~FQpZkSiejBdL?8@U)o%LW zW;VaU^6r#I@kzU8K~s%m3lr$QBS{-W(OR0iYP;*+g5304=7E~9rzi2Z%->XY zPGL=CDO*YOBCO-Hjz{Dw_4t*=IMsMzuCtFO@6)T)s&mKI>nSf;d6Mk zVL}8+4YBB*DZi~M5s^~FV0@Fp?+EUIb`;CK{MrY`CGyw1D4~lBs_T`{IZk@w1`pMY zK=1XBK=0(Mpl8&uY}p4~EXH)e5kdL|Aqj)`6$t7F*cDf_rZYDGvo<$n;?Z=aog8ku zVt=ircpxBw;;(@R`q-vP_TAWgmnI`1(QztbY{#K8an$k2c$>q92-6bXkj--Zk2Y~SyE4fuCNADmOyV7o^xuSe zf|=K^tM;={S^}Aw&4wnG??N&1Q&YHfDmnqGmI{0~aHn~zk*9Pj8geRmiPd(7WKm7j z%W?C=Z~P1Y82#}uNMvt+m2h#MRxDiL$t$RQe<_*|^Zr%+oe$i#M^##zCN}m1TYU%+ z2~!C|V`-<~d{TsmevlUk&1P|Dvocy;6o@6|SB|;PGw1wgGa$L*rzZUN0)2geR3}nM zPr3uTDOp4aYA^_&8{~P>tu3=*3fzpZzzzynW88H6g3*@z-BR}d5m|#!n zxKPU3ai+~{Afg5+%&get7hQdT;oTUYw%H>XbaLB8s0)HI4%zpX@Mj+mKmA~0Bo)N0 zl^)G8wHEZ>X>XD^3O%@xO{EqCu`Zu_l zP>I#vtE?q2*yla!E1L=?0kwSCHHkC^diMlR%u|)VnL}vHu&?;)<2q9*xwTXGc-d6Q zB4(oFAC6KZ!Eb#(Us4!2y)S)Z`?UB51-$9te9%jArDI4UfGg=?jW$K@v7bLMcd)#$ zg)n_p1`wKm<~%BJRSC&GcNS552M~B@U5_MX^Iwwe7#8D(Gk(0NS7_Q_uZ{>Y**AN6U-w5JNKtCKa@|78 zBw9~w=oc~0ezh)J$vX*7niaMlb=HIj~)f?61Y1PM>Kk&A#T&Mo_)- z)vQF+896UfO~95L4!%N;;CWHYzyV^PE+^f-Y)t~+QTDAlq*gh_NY53y+Atm_Ex%>T zMsUe89rEG?8VX>|D}K~G3RQdtyOmP`#auqvX+U3QNk|SUN|V%Avr9f1QSKIGCfg)T_!5nnD5+OyyOYi6n6-j4Gx@yK2*T|)5lzm-2)4sdWu zkV0{r`vClf)+V%T3%|+wh(+2T;Fl*PFl@utqeLQyf4>7ophQCC)Zj6%zUB)|0wxts z%hShO?QQ;iC4HD{V#wRQrF?+$PN%rfKF7~!;2YC|oUpc!PLJ}$LmBn=eAKT#thm#s zTQts2#RHuA4GUP@zOru5Q-UHQmkQ5LmknEmuuX1rgw&_H@V8>TEM6Q$qbIS9P+ zPmW!#8Iu?|RC7OkC8MxJv#p0k6Ex7ccTGU4(A+c!YD6m^7k*#rM*OdPP{^J2WrRcX zQ;LArlqX{DYlZLk0HAG%GxE$nk<_NklI+_X2j@C^HLA`&h%nC0iPnh6vtq$%wj_Ns zzThMTsE(QREg6C^Rk+yp6pPf{y3O9gshK_aU}BsF*T95KKJ;}~2qn|VhV?ShVhFx; z32htTrQ%F+1l`{_*F89hz7(iuN;|%)FNC2zL2h5zH@VW?ab(uF)0m!e(5jI?FiiZ} zsh6?(gL|n3GT34Jgg-I{r0%i$v8TDL#Z+?cD4hFGT$9=-ysfR(V!eDgfagb@1|(_6S;QDl zcaa=Ksi%e5uTlcyLp&b*+mslNuL{TgH?OM@D9Fs5~Y0yJqHdCjzvd6-1(t%uIwXIHr!0$V^2iz z$3Gdh;UAi}#)I?mwbM_|zDuE!!DLRt{`vY`r0LC%SBmZpMpQPp#^>1L5B3TS>chD;=rjN#1RJk zvorKRre(S4FslH6%Kotxr|HUJfen=JPe(9Cdp2U#^A0v&bO99I!Cju{NZSQ_wc1f3 z`!mx3q|AUw*bwjJGoUEE=4u_u{B6>P;hRPbGK`qm+v0+p8Dxb|pC&&DRlV^c3+RNw zsk2Xuh;bA7wF;z@&3UPoWzv}Sa1H1sOx#t_hgH3%b!>v_v3Yk z946sR*u;jG&&R6hvB^mgD|Lu*f3V7Fl;Y`{nT_b#Au~1O7)*#FY&1%t8BV>D?Z58r z26RnOL{Q*?$p+X_)s`zRuZq?9WxeL%_XWC84wt6Io^gOre^{K5841l=FIJYrIBdKb z_Ef&X5p+pNAj|>*gq9*AOj$`mRu37;AN6<74C4S+u|FPrNvc7<&+<{H#L4eE=iQ;KN5?1=4RY-a?=kOQuT9wk< zy-~&lanKKE#J^b!((PRlcXE>g`rX~tn;yT;!0QMuVF;jzI~Y0_fC64A*0K_&6@XW2 zDE_ayj{5MPijJZGW8~76krYCO!369K~S8&iKEWGnf#e8XW<8qn>b> zzVRai#2HiE(Jb5q`A-@=51s`LV{3ke2Ai!576OQ3_exnyiCy~7e# zJLLXYNCpkobOTb28>F1uEZEIV_yIfh>MPF6h;(+#A%@myN}(`Sp*2mc7axG0EZ(Tc zEeDWPpo8FR1z*}?z_;h>u(fzf!m}f!e`?-&Fiz~RY9(^v){6;ZO=CL`;9Rdlg)o2N z-8_!F(LT-Lp~YjZM=4K^?nJ0byAt@1BRu9KzJDVdrviGlI*eJbI7N%~Y+brbS1#dj z%2fgMGcoyB6s6|;e=={ zVXqU+Ol42pbM8igNn>!Kb7mdsM6n zwo4w_H_Lu+B@X zLG$bYe5b*^SxKNp2l@C%=mQysH@(|Yu#3IpLIjs^(pzI>|4NyynYzGuvkrQKWGjar zE1+IU;NP+$s(|8SW=wdnV$e@JXchmr*0bjxKPg5u%tbF~UJp#hOR@`o_iq@`^P(qB z+P^wYPe1ckZ+I>jjaI6PxL}S9A7B)tVRc~kc*E8`9|&|gN+ke9VZ26(mB3Oyxak2Z zFwBzp&#~`F<6Zb`3hfo=UE|Q=bOR;zNRAMwykRpOxjuDwC_1luhwuX&t4Uis%waMD zJ9IaC#F9*}xWf#q&~0#rA*5k3Sd_Bw-=lK&6ig?g-Xmg%+s(mdtm|?izz|ZqI)OG# z6VdI|u{=veY&}>Z%4H)k=t#$aXZ9GClpdYTyFMOHm2XwOW zXz(oemk-y*RECHsYC`^4=aq0Q#9ToYFl-E7`E97DZp(4tl%8@jv6s zr&V~cP5NG)jMR?{DGU&&7ff?2$|rROP6Esf$x$$+YLK6oXe!>nB0*8GI&K_C&j5o! zkZ#H#!Bkx2I`VYO#czCQ12l8mYk~;otggC1onbPKivZ?m+iWJd*tQayp1g|$2-+@n z?q~kH3uSome#XP?idj~+?*-Zxg#k*g$B#qDmsVI1q5LbrU6?q53J>OndeAmTh!3zp zNOk`mcuX&+p3kt0cV3_C8jw{y>3H0N^LFf@-&KQAP&$Ps?QL(1s}?HjlYxOQZx%4n z(X1l_ueTfi6495e+3dPO4!vwup3D~`4) zMI%+|2NM4Le!=&fI}ED9wW);%vC=SA6%`v0&ej7r_%kC(!8f&^50${l43x>7&&j3z zL4!j>{*UKY>ur|{#*w8IZ{`Zl6Jb86oJi%M}T z`6=Rp0<|HPBvWEsY|WQTT;Ei(YM*RtZ7oi_LcOfk(+?JWqHJ!h8_nZ}?BOq-0h6(b zl$W3H*3^W@$V_%3|Fp+*z3-cuMiTe#fEOU{-nnFZ^s|L-Mkegf$E+->iZXmhz=m+p zUunxAgn0A?fOv^=US}TM`N>(|a@R*cE30?izB{w9fah9A7ni$+m|Y6~XjscVbZJsE z|Gy*Y!$@Qcd4}tAa>(ox2Zr?*+rfjMsaR-$^5irm&V_XJU@m568UX>sR4>2sXJcde z`XD%+5rMXb22{+XDSnL;)csyZJ)#KCw86O6Rr@cg;`n%*U1aep*o-iYKj1IXlaer3 zo3B{LHE?ezsRr_{4bd9QxSawTZeG%gO*%U~uP0y}H|`~b^|w_LA_tUW%M|4;*T2jS z!^wIzp`}p;IWqGu?7Od}(J>5GI{cI^@4I<;*vb)8eK=Gcrc7j(xGgj0O-iHLI^jP9 zTW(frYJCzQi6z!P=kNB14DztXH){kS!d+{&Mf=!IEYQx*u41S-X4%m|1__}>G#&eH zDb$9aQ=Q9DZS;JzGs}Nav5jG|$d4y|IB#q;pcP0U2*M&LhW)6k8~uT^jR73uB6U4N4owCB zaU~)}{TAmwl{9?u4jP}NN9yaCK~7HnqB;Z4uK4a*t|Tw-cro+7%tKhncfi~D;5xC- z9^~!$x2QT|4iAi=LL2clh}A@Pkl1NVSdl^9GdlA4vvYLdRdmnQORHIFjs1=k$b20<-_ zpt>lma}K%19#O2&FZUH4(Dqnz!4*j3Y8~LSl*sS_MuZH>4`oRklE+RP z&WO+OB_~*|p4bXG7cDZgvYN|pdbH!hJaJh{x>l{2Wl8s5FqABy_q@&XCZFS-yBo)N zVLg5f#C6k!%goRJaGAB#7%Qzdea~Dax9`9WRZ^{z41gr`&BSEM9~pzgA8fnptix7 z24ZNkANUQ`OM0<-#d&jI^ozfr(D&?n+jc=HNRnQ&;*!lBTgwN;G!sO&uYPn8N$B*- z1H?2X-uXXY>CpG0F6z(+1P05(9WmmxtlUR=^#2_oKwCgeA%Tk7-FQXklyr>bjpqnO z7$2AhWtc%$WaJ{tf#8hW3|B&#ot^-qd! z*|mk?1*nKD1M$`igiUJR8xHeG+@F|hWM$$1j5EtML=XnjiI3p11SV;+GuKemfT0qB zBbX4bQ>qzw_SzdzuGMb@L>8-I!|@eLyO^a5+xFG+bINw$8)b8EQBmrWj(EovAGKng zFFfv4DnRM19P*@d(Lzu$mKrpSi}h|Ga4hS_ORZuD25@S1J$-v8lq@MTr00ga@u=bKwL0fY*0km5s3d163HZ zuQrkGUu>M)zbr(F*38d;U)BLtHlZQHd$6lv$%kQY$jJqHEee#hP9SP(q7A-tq0hH` zA9Cb_A}j{P+en)|9z3<=AI^rVseTG1Ku1h%#xXA39f0Y=UGUo1 z&{!(cTe*PqPNy<}Y0;|7i7psAwWt~rKXx3snq`v_dYh1B#F)P?_{Q!2peiIBnKy5! z(;j7cE?)A~eTezI--z;fuxREO*tECain$kz3`TpUnzY{t1Ae6v)b6 zAppR~VR0Dn*#uwA4WJnqPU}AJds&!Hrg^>JuTmQWn`Pfq^lzB32D#eN?MFm~{MKzK zUC6$+cvtUX!|Li*15(}p)`$m=b5<|lM6wGaE%}{qiBR0|>(m@P%Kx z_BKRaOppgDc0k^5(bgzIb^I{uREzA3^?#<}3wsHt1F3s=-h@;An-1b459z~n7N7yf z8djbyv#jxdnbhf-lj;KLB*lZvS0Bayj7}F%Q{?IV!}|&0awk?V<)6uB zT}J;Fjvt>hmz}VIc+2!7XP~=ESxS1nS}Da>m5C&Vl;0OQ#zi%TBEau-JQAUWsnVzy z9v=5hi+%Mz#wik_lX*i>+~)SE&43HlBl9*&ARbvu(;b=(gL_LgFh@DXtDRe8o_F4# zEHD!v+z`9j@3_B1)qwh8np`O+)`q<>Im&LgR&Jfxz%>5ilE}GA)Ak1k-(GwPv{b&tLa~l2L1Q- z%86msK`5^8;28P!Exy(hr2>WnK0fFfDuOi(ZRsRrDOK00BxGy*`PhJehsR-V9q(o_ z$o9@IVs5|CM2<=H>MA68?=5(Fm6U5^=hB&5s}Xo6fSoSjpW#!)s?muUh===nIJWjg#Uk)P!xrgQYy!d}ko>QPAJ;Y%3yifRJd`byNG@e(uRLSV*(^cF$&Qz-NuD?`ZWL{T(@ z3z&5S@ssBW`N(tMtnM$PzVI`ahIjVrmfkisl{xfMQYlg{N(9?q3H5EwU|-Jx>F-AJ ziq~$l@xiAYYS2-rlY=f3_@@osmHN|pmXBS-TNJgKKa3uSHPsI{hjC`&E-x*c;ErP*3>OJlEY zgmP9>c?)kx2=Vc=DxgUjhW?ikf~wZr3m!*@f9vXUeY~ zw>l6ZSs8OQ5(WvG$Iwj-U%gE$F1e6gqp(FeKKN-RIk}&?Nu)t79^EmBbj0iZxw~o% zw{N0&^TBhQ=wYVg9^na`ng&;u<6qnyyoADyV+$JyPI7P%*+`PR{^3SMIjsf)BjYYx zb*6pE^ip^F(Fy-!ue{59Cp9i!D#I|!HCljQdud}g>BzJmNEh=&t?tBeS+<#hYC}(+ zma`ZCYg062A&s^*AfSJRAE8+{Mz@wcwMJk3yC_Y`9%rZ9Y9+XK!0~ z-s`|^2Clo`1~H!T4|sRJPsp)BJr<=B6Q32<+_ts)3q?`{Q8Prt#`dl?;=dY1{)fgWWO~NnUmPjL;h!6PjL>w!&*ls_IhuLUP}`wWcwcyDWOuDCISB4^2Xn9oQGtpX~v?E432HBK>o0DiMR6+ zI)T4uq@dEdi^16>e&~BCd07qZhW%a;^{}5Nee3PBcbi%*yoeXB*OLYGeb1ZNCLzeoLCf*OO&1#Ymp&! z0zb4SKr+F;TPC`$^Js6fD%rb&s2Dyx7W_I&FW)4Hfy*Nwnd#$8gBdb^<@a5wK7VE zfr$X&# z{Wi0C)wdmMdky{i$VTSm>auTbz<+fGC)~9sEl$})D!DTh$90Jfa#;4^S|^L^b}Q-O z@%-m(UNe%^4k?lunQ=i9GBZG@%I=0k^MM^fMKq&Q0$R$FzJ_6*S8(Cq95kPw_Yjmw zf3)%5Bd3hg(EAup-Ln%usOGTRAdFD^^9Dil;gb>wV^4F`k@Y!%`yooCG^`;WHVrdiLI|8oZ!*Zql9R zC;Pfjz1zV*W^>b$sGZRT@WFC{>Id~am^}}U--nhK?WN6@ID#&SKkEP05hOyMW1+U0 zm|ckcA>}ww{;jT0@Qvv?)HREqg&8)%$_9jLL=w2s@Mh1Z<8*8_5|46gOteg$HBBdfE@8uYy8((vSiWH6Nf_^42{ZCbV5C14)x-kH03bJa|fOqWct# zL}f~qjN*FTv6gN1Gs^=DdY({Tp$bgT!p-{DlvoSRy^a#iX=*A^o4E)fU268bxHCd& zbLA=0uL+wsO406^-se+;rV3<5M)9K$qAYf-VCr{EQf?3-<(lYYZgD(3b>kVI-t?z2 zY62eHdxckH`onD(F&?abCJUdSf4CMRb2I+_4z=<%OVSvlyFa3Nbn$Zx(b()Q7J6uF4!0sq_f){GoMPzEylJi zf3yqLF6Z=pq4cbVtY$S+!%wANB}H*wt4&FNoM42wGA;iAZ69nHEv(YS^2j$n`&yxV zpw^E?o)4ZvI2&cQbDQTvf4kFZQb?7-zPk$&zwR&`WJ08mv{kPa;cN4=nwUl$J>?jY zf*!YN4HpQGuVAa&^6e=X)4a#@)9a+q71Ti?x8rBmXfbBRbO_D}j(uQKmM1ZX{Q%o$ zA0wn8-WL9IE(g+o*tt4-?2WQmdTWqtnjAt%)@!uC_7eyAcdlRZ*-wKKgV&wXtVI&B zdcl6{O9kYG=?!VxyMhmwCD2)&ot{&#A+dfEdN`r{g$1=|%naHUJ`BuEm(Xw{Z4kdJ zxji3=lf#6(f8ReXfXlCa_K68Voz-FSlBeUW+I;JIr*`LOXNHTVdxAsiNQz@VQ<~WZ zV2rl1(uE=8BHmBZmWWNxqMuy{&&8X)fux;xc&Oji8LESHhXz)jwrj(@XopqU&@QKV zvZO^UCoK)!5pgF_cC-sFTd_)p#|oiWRCmuCJ)G7tftRNT$|m~fyx*_Fc5(pGlBJQ> z8!9&8XFBUis%3vN8Kki$<*I|I^qDXEh5nih`b=n1{xAu=Rh~$kPAcq4f@hhm9#lfE zp1b@BFQ`8mF8l>QHy|X}=01i4Oo-0{&#$m@{p?BxdG2u@DQmcNBmZ61K5q1IPwn*i z5yC58M2YY7>hFa}WkiA!B~R(gp53Sv0L4Q!1Ri@v=J`M} zZ2yJ}w2Q1Q<}6%CD2(^6FW1_y0;Cq&F_{o=KTg>gue9|~CBc!UTJGfNch*ayp$-HF zd?y7rAdJs0$NK)sEM1f!(2&T8R=ueq2_{)G5%xVJ+UD{Y;4{+?7qGB=TZA=)AF=}p z14{(}sDQX|uHC&ssq~UHHH;cmA%8xGg&Y zeZMz6@zf)w12QHIER51FHSDN(Ix@A7$AzjXjrc4LCTJJSh7^_}PVqcOG^t@UKN zV&jpyZIoxo#&6sjqIO6_tmRM1XN;atANt??ZK%Q>A{7?af$-FYL$E9S&(0mp+m92N z7`E*F#6k8OjQL{VIswLr3B>GvC7pnI{6^AX3t zQ*^%IQz+>=+qG*?mE8Kvbq?{FmCuZoZ{UPYtd8G6wr%nklnl*{sEA_1UE@aV<(+I9 zDpCRntm17IvP=U#4vw|_*b!c5=y&qmKU@RaYgv+;v%5I!hF*X{z!w#DP<`f%bhFh4 zYXka@K7LU=nq>;sy|F`EgGgSxry}UpPYwG=J&JgvD4qqZA;q>)6p=qd(S|x9U%wGS z)VCNSijbgIjLbTqej7hhNFhgSP#c^O@}d5BR!lLg==wKlM6%9^>)mMOhmMnXXolEm zEc!z&TwiHy+s!=AcH8OIrd2>+5V|gKR!R zwe{heFv$2GPOI&3HK)VZ4y*RRyUSLgoi# ziMtzo6V7SVbBs+0&hrY28vF}>iO>TA|CkLqc+(KgO%A-EzszmUhDVHu;x=-^@90z0 z#rNCslK?(^YLR*c6IK@+D&mT4xt%*psuNbvm5ld(D@u^Ro;!bN9V8^TrwyU2J~$cr zdf>=VlPu$-0%Ko!RUlrFDIIr_MOa*q1C{y^`+ucA5=z?c1flL}O?D*KczA5p?2wzv zvp~7rh5tAN*LUC_8aqLB7M}ujSbiBBKT$K;BMOavmy*`_9uX3d&V14PvIHeH`R~6oiYeY)rp6`}MI@1Zn z>GLTcpn{qT68Zy1xAoZR6=k3Z>w}?UjT7s)`j=JC1;yOeyW%mARfrS{*%nzDa$v3CS?eE z)0AAgHoeXH6YzVu9htY@L6T#;xa_=`#BEv`H0blL$>`qHlGJC(C-y({L$J+EuFKo+ zK#DE(-cL~Q%lO_597!cPBwy&89HkVshW4QHO1zP<&Q<)7fxAB5Pq8x@(G1htL7=t( z%Tm4I1U%~LoSz#TI$7Ued!(jC!GqtyQKRQyyv_y?qgby`($U}D)UY8vHIGW9C8S?g zKCB?Kd&er&+IXK>$+3n!n1AuVYSP3m5Rmf6L1k4rCj(#Gg33$7W4*b_@pSneat*AU zo)r{ncmLUgda*_2_dE?JX;1_GA3MH_&hh3N2l(1J5%Fm9V2JgT;eh~-+=|XlaUEUV{nLtKCL`jFixc01_dQ=xGQ94Gt{6C& zgTxvp4{uSLZ}{vK&Hn*|MQ$`Yo)$H$SacUX=Z$`?RCQm~7{Ebcv4C-RcyZ`__^pe< zY7R>oDGM?G4$C02|4U8}4?ecF0o};|?_t-CDU3HzNOCF_z$Qy(Woa@@opZ)MesF7ckB z>$Qicr>2R?#Vyp@KEtF(T%j^!!pm28PesSwh^j;ST^|P(7HT+!ZE!*F%lI#;i$x}4 zeq^pctL7?gKKV>`Z6X^{kM#$mb6g&1Kk?Tk(e|Pe0L_^Iga?SJIJ!7Ud0q;Z@3Q3n zA;4Y$ndw>DV*dM6^ktz2kQY9OhC~3eRDKs!KG5FT7yzcFF&a9=Ul;rfiD1XL5^4U;p!IGgQ=5Vo z75lgUx-e|npbj3*F*MW+j>LKiLV0%j8tX~7LEgrtf``DhgfKoF@Dch~qRsW~S?5zr zPiELXg->sSlgDRV>Y(x;ha3o1gjOaGOjQZcTf#&ox)@J_G(3sm1iF(_R`d>9u7Z|@ zB}9%9;@z_706(g&YwQP4`&F1Y2I_7i=wYCK#=G5s2K3_Q&A}F_G|Lx@SF!E_>BQnm zSg1oGZ(Ek?0|?sl{As6J{qTqaTcQB%o{UrZ~O+Y>c5TgX;8)FTi%U=Q~d z?Z=e#d(ybpG@f@B3h7y?^TXe!ps633Pyp02`)ZJ@GBLF@e|$BCx_G-DmMPuU>FJDv zY9aaMys}lYvEz$P)Zd4-O@&?q)Qr`-p?j{Z+>WEkoz3Wf-A83gZ~YL3owJxnP-%y| zj<@Awe4W7k=ZOrmc)-3>A3TzRtc*%f{CrIPS1WibkL1JzF%cHUV)wOE^0_%nhK#H3QDWMkGD0exP{+L1=4ER z)5{f`$7hVhXmXxL5x`{~R8C z9p=6<`Oi0A$-RRp;6UUO6v(huzBZ54JL`S&a?O3S&|tE&Zd!y8dVgno1M-E*%j|iQ*4Q(d zlDQU2YkNBl>twO>cBs}LjX!GBs-S2uBxANuKwvDJ>s+X8f0UthgJc?24U(LY52C0p8XL*V>AdjxXEBV;A>b{w~| zREy=4$tEnUYUG*&Z|o8N@@kX^&vIPYWnXvC=GA9@NuT)?UakDu)zw(&je9i)jnQPI zxw_h}Z;mwwqvwzdp8ZPg7?^6RI-Q;^uv)$YveUvXk|d4r!uZhI?}2p$AtB;TC(95G z)Qm=Ax)~{@F#2BHT@+ObIAubw@C^J{2@4W}IzI!L5 zriR(#vT^M7Bt2#C=70PjPGFSGRiH}jsA7Jo@_&D@;+O|Yn{)?}e*E~+@9$}a2rv%~ z(1!ItE_1a0aiAsK#`}K*g^xf29G{v}@b(sfItSqxdb0n=+9eruaoZBGZ?pX0qizIH zrxk@l;)Lh_#?kAaznqe0du1V}e_ya^Jp6h$XpPc7?_v2k-u7_$3^x}%7*0a%r|y@4 zTUhIOXmTE@The@NGk{PFhUoFJhC19xkF>&QJQp`cRiA@O59c06MqAVF~Hw`Nr$u%-HT0*TR}{NX_FFT53X{ItBQRZP7+gDng0*}(9V3Ty-^jWydE zySU2)l;fSIZu{IqV`8R`gyHV#xj&$05HVv5mX_|o6pq0u$|~|_jXX(Tig-(G)Rl8m zh-w1kcm1B-s^>!%nQ09?8W5B9N6_IZePc7t7D{8b!VAUK&N&lasxbPdS8;>Jt$?bEU-OSolWwcyBWuIe` zK^*lh5| z%>8SypUds*ZEW#b@cFl1Sia4h&+bqgybpo2%rKS9kAtBDo=Qe$M*3a*5ars^EP%d! zJwVe`3dT1|>R8jjPi<`BvKbHGD?*N?YYAv8M5@dFdEk$!-6@s$j_z@Y&N1wOO$atG z?=<}o!gy@5E#`QB^e*{+%A&nwnh2KHLO?D)*dZ!k%2^yC5y|U^*M2Y^``3WH7kBKT znI6(mY~&Hu6Ky9=-4aFW=IR738_4|moWV-+%m+;U7FM`-yerq+ie6i!C>bTS@PXg% z=p9W_cn7-noGv>^X8~(b@t=sn`-gyc;?i5`puF+CSz2sGk9y=zaKFG# zRqwYyEi&CKursv)x`6odYCAz-o{tfpIACWn{s)#o$w%BoWmBjh&q#g=1N^V$#LVcOPw=f^f zXb+izQN1+`0INQJujXB;H?6pmLxj#&K?EMy`;>VMuRr^`3dEn9&n6waUV=ZT5hNn+ zQPtytEqhoxbF2p+*JXN_2t90Q1d~iXtxKVWXnlT-ub8iv;d~15a5g9p>z^Q8-n?D> zv8QT4-Hx1iY=@}GTF*a6UBWAr=)LE8s&k;|FO;V$IjW2%`&~;MX<=s}CGAGt%Ma0< zuvW<9f?D3+fZWmKnP;bwxT2b+hqDfXiqYG0Bpd2@OdVX(2lL_<-6cz~nnfG4xshii zy|oHNKO$?oGq@qgp^8+9^YE+eNDVDRjrrs_dv%e}BuuJfaXZO?*guz2dS-fZ1gne* zTcsj8cS<`jUqFL^8A^_9Ao;;i()RVP_MVQs*?eTK~3b4ZGSc3xx3{ zPW)pa;B~j_XMt_VAMiW4E~A*@=20EvE*#n9)cMz7t)N7Zgh|Q5ZCQ;RwjMSY!yqyp z+Z^`aI#Ys7uab!c>JQ)HUHpHM%NsbbIjVZp%%Fy?e5NA&L8d9Zn^GJ3wRkSlu^$ru zK8_+=-Pn;ArrX20oL5gPSNlA1AzN&A(GHX;oJG&dgR$1ojlw^(412-3Js;aPKR;Vbva-g&K`2XbKcEL&D>w!)|3yKm2e)oJ zM85zx($C|?T-ayPcb7HuQHJ%mWWR8*PHqJPx=UlqukSVOxOeh*XXz7X9dt^RgX-wYc&aD9(i9) z?R9D;Z@s{~zp)ODk_lV&AdPVPfLvyke}9v9He~RyFP}(}=EDLYCoQuqd!3H95yr-% zmoyvjB0MGfYogexLBQF#-ap?^&05Cw49^|zU1Q}L?#6+v}+*)i63Y zVu&{J-|q$i^9%zf_KptXni7?*ks6mH|H{hAwYs;VdcXFqw)M8eSC@l`+O|Sg>-kYs z98<{S$=&u8+3t51=@QpF56!vczc*LCf92K+Ju_@Xht975gXxqv4AEn~J>#->-zs&o2;9m+7GwdiiB}@hV4dP1Y(Tf0ZH=lza<_XzP~?Ad5j6@O<$Q|09n_g#EK2$?NJdkZ~Ok?|KV4VsBk6?4bD2Dn)d@6Nxo) z{AIGv^MNwSkTcFrLB5_#+*-bc2$?pFY$jqcjKIf_j&2llJHuD;b{x6ua~f5$+UeoV z$xoFpZ3NV&OT8!OcK4cpAl#sqtW9co_y(6?gk#L~r06qsNI%^iAuq1gX^{Oa6LP6XWI*ZD8EF z4>d>VUF*K{ew7Qx#XUh468gSF$3e$OS05Z_qnM35cP-)jiXo#^x4eH*E}Ph9;n z2bROd?P=ZX9N$86-;+kfT5O|>Q%)DkEY>|wAgq@A4C3BjUK6EYrIZcpM+fq&a0{Qr zJ?8e=t}L(N8b?)~GGM8Lm|)3zY|e0KR=TkMc85Oua~R56U4M0fwU-Qb!b5PxS(#qk zH_xS#ITls#i$?1F+yFq$G{U~8un!mH#SmLopaF{Wx5u9RlG+NR6GEg~1@%|4V3Py} zy1xcdN`CVhC|i7GzyfTzgE3Yl${=UcI9|A8V!>q*f8mgF#0I0CYF6@VMOQpQJr+EFJ>F!q7+ zSN`L5o2?FM5D(WRJW%E}HW^F0Wt_6MN%7nbHW)ui5};}1Fn>DxAwmmNQpMQ_FZqav zYWCg%(ntMi*HRvDJBT&t5cj7~@yOM=EM(vt6HRK-mMpw)_NSISlZXEFOl9=1_gY^E z_x(uoe#c*LtI_K^*Vh26dW@4z{I^JMujP0#lLG=sG|j#t+H<>|53|s@)`Sj@rjrrh z7~0P+M%sIzQh{Ar#`i@mQg@_#+t70jgifL&*uDc=Y8n~>RLgMWnC?5s zB^_{A8$=1NVJ|JGS2`esrdLU7@Fiko+3?c}1|B=!?<)WGvi2g`kphE^i&;y@bit zl@U&e`-w$ZCw8lOyVcbRBTF+wLJ`F3>TSv0i#>M>ghqzmCYncf+|Dci#R)&4ueY(l z2|gLtLZ0YQ#sklwxq;1qBg@tGNw&;QU1Xga)Q#bz*3To_7RRaeXXFB429D`=L)OIYhB&#Vd+j-a zQc9slqo!$U0ljm`oB#*WC*=XF)5Xda%+l{**q*meVyEKwL+}kn$KoNcGN?B;tU(Eq ztywUbqKBaY_-{|`$gkI#{Oq~`(!w25v5kQr+&U+yH|$fLb-xfN$>Nr0S3{WUYfFNanU!6bBSs4ccAvwCe5K`o z&P!!NG~-M^>qa#4eTg}pg=B0gb~#`+oY*CO|K~GIfxzJn1r|NVJu_-_V0ImKao5MN z1yk0bpKU1eTCc_|p+Z?M zoD+x9(5CzIm;+57a!f8a%)%SjVSf1u!(!tj)wpZ>-tP8}WU_n&L++GhIS^EY!X}>3 zt|#DJpLfMh^_4#X6Kz+BmP_W-73m$Aren~y!570uuGt_ab|f=n>acPACamvs59`+3gE~3?`+WX!gE$`lGQKOTU4gS_to|BPJ! zG=-NjHUPOjcKZ_5s`WzqUDcW^@$AXiSWaokQBoKh`wNZlM@K*kY;Mgm0!kcF`MsuE zPySvh+g-Fq$v_Hya^V>dr-M)|T@&Q3gE=(^2;}*$V37(W0ddC7T!OU;eP{Z<8OK6& zZ@O%(_7F}^NsJV(RJoPSIQpNlI&Cq#nK5zB{Ju#zEJX6MJi^`R#baLva9o3ril|Z58g;&Q2UAfvIaCvQskFnv1Q18HA zDH)a`NO9G+sEx0!WAc!N*NM?s-eZNko)2zN{>TmYRmsX9|JARaDgw9RfwOt1`=!eV zmt|Rld?xDKXOvn3phq0WNZE0prXIoJ^8W8W4HOO zhoHPhpZ#kt%5sz~vS}eplCoViQeJ0--XOgaha9!2V57)_C#MXy6eAEhQy;m%l<2y9J3flCM`c5SS6Luh)hK3rehEo{>iZERc!4~qeVT(LqWMBt zmJhK|ljmVPng$dzx|gdGG*1;v9Yl*nD<9CFmw){?RIfit@-|_>dG*97mf`UHdXf$O z8YY$GnAA=}6~6FcE8hlujVT?F$OSfYl*CxPmI(Ziki*F1=lqeyOX0SrREB{owr?Pp z$TvK|gK{;n1@SKlq3L?*AdEK%d!fznYk&5#CY6Kj&HS3muXBw4o=y<2#$#hDJ1(%4 z6uh$>b#Uj(EPG_Z@g(_tu_6Q@OAm8(X5bZflrSAw;(b1jMS91daD&r^?sGU7)72mO zHKD9QWC<^_s7?2>gp}T(3QgnN$2^lEc0Rz}2@2!>wK)mg*l2scgU_uwYF&W*!PAUk zseprkA;nH0VX-~k_4tF_|rSoeTa7k_9tv1f8Ih`h6Z%I@R=m z_BE*YL!LHD5q6EI1=fm>DH#VmldMxZFGaQ!AU@B#uhb}%B%tx9d0@_lo8%o!*LM7ODhV&!6@r8*-SL6zi`tM@>9P?uT1`L8U=pni zqNfZ)ct!#EyGO=6+N8JvAzkFWo#q5lju@=0{VHaQF*>t3kgAg$U&vjDV=I28vGo+& z5@GNM^6d`GUShMU;d^BXtcBgNRN7GXq-=UIW`sByDw-<-Q6%@{1uY6k4+YgGiVsBd zc~frGWU<^*9_nu+sEY-huYrGWj`b_@KPB&{362fK3|aLzZRG6k*XkGwA)>%HQOW! zn5Xj_&_t-*3y8AL-eVH&K&qEF3zu{MHhv+XPIdT$NQ;^_(wKncAAQ_c<>Z$1L(cOi>J4 zt0tokx~qOSN;`x7Zy``H&%%QSDfq4k?#~1|0Zz#hiG8a+6AHLDaac*UeWEN2##`^K zKk8%|OCNl#T?k1?)m$VOWRu|& zigK~XO6g0Xj*};7hYW9I@-wDJGCPbLG2*T)Nx~7LT~T>pcj~01Hv#?(F_-S`tSL0& zFP%&&5B<>nJ77Iq*40iW^(u$isZIBpGtcbL;Jkol4)LM-CF-(}9iJ%217mGqb;aGs zYyOX1_z*K+hOda}u1y$){P5m^a0+|^^6k?m&b@6|W}Ogy{;4`|%blMBv$o~?)Vi}? z6qEs9bFmugzP_$ba9I%B2n9bb?%BC6rK`>Vn#<|r{gt(l=oJt~9x%%B z6Q)+Gn)4#k$e25gfS0}ed(zDxX=p(Nag!R_ALE=PCjqMZG#>NtllP*9xO`KH+!3#Q zX-`g?nz)XRj`hJ$K8@tp7~@nkRa4~H z-!K(}oKdnW5irMFW9z-AD)cEUyqgriN-bT(98Q*rQXOMbV)h3qM-DKGBIIiuyOn{7 zk#3GKsY?Y)lbEa*eg~qHyLV!&-q_=1%_d@|M?QM)2KF3A~emK7`%!MFfXK zoWhrp(!l{HNg#stzZMOfH4D}xy-CjjzdArer7_1Aft?o?`S!;gE-e2SenDGsAv zZF>&A4i-Fa8pSEDSFJH$k(GNSb=pKyi+E<9BkCrr2eUTU|RT1IeAwEA!qH4=#sKPBzWf57}^kPK1E z+Aq%X*H+R9B6-@l9)8P^$<9qA)@8$ahubwtCQm0QgXOD6tkN$2xsiQXT!nz;)`Z+Y z>;QoktM3r)&a9^$7(J*H^rq>dR(fa2Nz%J5Wi~*&g7Q3(tSlc`dEFtERmLodHB*Bs zV+_hMUjG0(jF!nD_j2%|+r zk4}gLQAU^OJz7L`(GorS=)FWj5Z~l}_uh5i_xtnizs_2FopsLHd!4qP-}7vk}|L$h%b`PrC2M$al zGuJTH3-sJ?x%Y4H$_nf+I6o0~^6tgNv-L%|W$}DC*Cu}}$hrqm#97Lo^flh&y?7I* z17H^J=^vrB2aFJuA>46gOh{=L`_|YZ2*#P_Z77ZH?6DT*BHo7Rbc^lV)wEkm52j

Plv<+sH?yT_3#ZSqCukMLmtaAXhc;rLuh{leDlFH0F0I2`Z^iIldt+@+pEdrxF%6 zVyEU51o)7i_gCN+9IS-`AoFc?Xv{%5omVj{_o&%%UwB@<9cD2v{DBdAQvtTLs6VDe z^+EF1B3xJ`*`?LyvMT*ORd5KU4>y%9iU^EkRG*axF=mh0v*%8jRRTbJCIyv`y5Ti2l6aB8xu=#TrvGYjbNh#(E4D;sy$#=p<+ zy0R0)Alw(zZTlh(A}*GL5s z$1!ydgi{Uf;yJe>9jH$*O4{qpl)tl zE-WaLf%v7DmvZs}r+`tE~#vVJ4eE5o~)Cff`H4y@s$@3s1W2DqXsOi6}sAIqF(@Z6PW0g31 z6lnKq`bUG^)~sQuley)w9Q9G5igCo(nU?y1G}gh|1Ht?Ez$Ly7O=W)$pTXFD5+@vT8e$ zT#K=YMtLAZiGAO)f$AB;*HW9EggB3XG8^XTzKk{mW7^UnSImE%iTs|p5}o-}>f>~V zjOb53k&gA2M`vrB$^5Ka+8&;s$8}z5EOi3xabih=-rg1t#SFI?AW{N>kQZLEW#pM} ztUngOS+vMsOe`#-5)vtGjU@a1Y*WDl7mppO>;wWgx-JD|b?_)OswQNs5#Yqra$u&#}22^^IK~T|LetK&_*Cl-= zxEk-thhz(ILQYpQO=}`qaS2Y{R$G1}*m_S;CNP_2XSDzLSf8PR1jZpB9=@mDp3ng< zwy_2$B%+o^3p*m%9^9O>fa?dbrc_9`qk1Lv$6>69#buXhRUilDdA(2br2rKI$|i(? z+8g~TalKa0pJTr`Hi)LluYuv<^CKIUuq{bX$46$@yQTr z@7wT!$(Xmml_(vxeTYWxcrR9C5SrV8%F2$&q+mq&bJP!v@ ztb|*tRB2)U=U|8_j2FYGFC#;1T)zj=oU*?Lhy-bhH(W&<%z~epWUhw3g;=h+P(b*EK`|_H0Tn3|LaZo4r=3AW@vx9U?kEbld{4L!Sg( z2?YMRmno)jVjUTq&1+xv;_Qym1b${GTz+RmmyW+w=tV9d0wTny6_HgQmohS}OZadI zOYUNjV~56P!g)f)a0DD|?3~dE6Bcwswj0dYmbelcrH?FPn{a@ECTChC3yFXniWN9n1DHIy%h;>4J4^yklc_((bgPq#WfyC~8Eis{H6g(g5aahTHJywz~9k$SSgR*FWbp=DxkX{aMj}%EJ{+3dFjVNnW zQ3Bm%e2)zee6=<;9!&)kY&$S^%?Vp^caUg;1Xs9wC%DS@moCk1sFs;VXjfln=Xtla zDe&!Tn;}xb4U8?448O3eHTKTq_MuGb(oWLoWqth0k+)V``aWs?0ByuHb)cH%PKt|x zSy`t~3|LN_4o(%?V@vz)_Nt>cI=}qLKy=d6V1<)j5i{H0YZ_>qVu@yEZBeZ1+w9n0 zyTtgBvKsC8od6yoguxG=!WTUHX=CKPX@&QdULLM#atXe#*io1c$|vvpePtepJ~1HU&|GnP7;BT-|}!t#dp-kS;{R?@WWR~v+naos1oeQ5cc!^{;G;}?I@I6$$NdU|Cf zEVEFiZRQh`F{s_rth&ZfZO(=ih4XF(sDCn#NN^bTmQ)YJLkw4ag`dd#kAEte^PJ)f z!W*h?oLPJZ+n3xtwOjd$=YI!Z_n3r z(bccgqA_|NAB&+{CX;HXU~}=|R$2WB*`?q z1t>_@6|%@$O@X@2rp@5zgl2)vg66v8kHGRjMKrdMk$wL-g_}YYSgdXu$@OaV(V`A^ zg$_}6I??!=sXIx3NF>J&)c_I?{;5JqX!Ok=<9^HJ`&q|- zqET`UQhAYHz4m&g|8}YW2Zl=8llmM7IFtk2{w_`bz|&Se63280Nr?~seF*;8*3ZU& wsAd&%@UJ)jiB11$G5=@y{~Y-Laf$O66owD^}s)$;;IB}X=xmZ|p`Z~G(A%_!_^mR42 zbg=dWSy;cZa~7vP{?bhgva=GW)e}(VR&|xNwzX66cemE^SJSricd!((qLq{YiTR4c z7&uvbnuC0u9GyKxeZ^`2@)dSn}|5 zgM>slc?7xn1$fv&yxcrOT-*X&+=3k3JfhsfqP#qye|>0S(%h|VL^Z*3|B?m!CQfVX z>FFxU#pUDU!|B7v>Eix|i$_F6go~S(i_j%i-)n_iqkhYY$6zJ6BIT z7iZ8Pj^-9FUY_E#u#x_wf|Kii*gAXsYnosa#^r17%EiOU{YRz0gjSaSp>y?ecl;~d z%96|4(b~z{+0z3?%kv*vS6dfP7Y|#P{~Ol-dHuf#fK9Ec>VIVXk7IFi`i}??&zIgX zHU2dr|0A`Bwx6ptm!`FcilaZf)-A;;!xD;`r}{()jm~L9()c z7DgDvtZHs)=ln+xmjCKy4L0|*7N`9~!NJYX!7Hc@TQ>oIQEmYaZXr=_?te&CU99YE z{QgH$*edh>FQhQLu`>5G|9>U6vJ|y(ad$F@X>I3Z{>GZi)%guA=s$BQD(m9t;tmrG z8y(+&w=2rZYPh@D*g3*pcxcMYfD~WK3i5~u3Ucsr^86jHs;a1>vxld-v!%5nSezC% zL!5SYR-(K@e8T1e7UmrM0>V5T{33i792We%mK>Jcf);|778b(7mNx(H4|cKi`eO(G z?r-(~v%k8#9n25S9sjra{PE5|1|+Ir=K)(BV+J80M{cq2}KWu$$tzk_6AMD~EG7lFUPaku4Yw0(z+4}!xd|WUMxc<2AKgw|Z zU-kU^?!Vmp-{i2^@#pbBK@0ZfKVi?>85Zl@VL?sLVuK3~q4-V_EUoREd(i2VOVO8i z{amwmG}!2;ClZQ88x7*kG%HqQ4FC2^c+K-FFYxqq%;)-ss^Itlqw58#qlcidd3Ze< zilqv_2p|H9xg=Nj%K~>J{tNBLr;7aLv?jb?0Q$m}+KeW?282qL$a58* zdf#7_thzk=`x?b>)2{fGU?Fhu%Nz?I@eB}hE&dkW@ZjEih@0{Lz2+5=X=y}12%oFgVb zx2&lln~Mp0uv*Z}K{r+LA{HSDzMX^-E;S&Eee*swWSWwi5$|0=074iDl%>)Y^vbpy zhr>na>T`g%3;7szc%FLv$cxKXc1z3J>zeta2SBwKyzPS4W_^b^T3E=pZ_=8T1h;R4 zqAnL>KG!oYm87m?@5{#)CtoifQ?Ec?EdN?1Sd1M>u6J7X{&Z-%+cH*Xi@(U}&_V6+ zNNyE?QMx_yW+1>$FMhMzlAntxc6#5-@bzmqXUNBNDvgIr9%t@$pZMJZ*lUA2_m%DznrVY;pR+R&+0VPrcFyy&`KeyAk&G zaon-RDB9*&Pkh3JI#IjZR#)m)r7AIGXJ`N0x*8Vi|A>jui~#|>f7e_uKn|Z0nvc8= ztaHl0EFyevd^{`<`Yfqu5k;KtBl3!1{a)e~!QtT(X^<+u)m@5??J zHfMu-;w|Sa+~`sY8Gvw90Ax`lJSoeD{jiGO*?NA))>_9|3>-_`>5zUmm4jkkiNcW5 zXrU#Ro{Q=}h36M9`!;`u)W8VqPF z3e1n5tRhIf&{%+CM7=GQEJobY? zA+Uk;25B5|4~3rv=$;x-4)+##2yhd~j+TO~W!PR~%H$$#yya&>8Vk7-F!ZGDO|!j1 zou$3tu|MfN`^iSLFLRA@fhCE=6xj+TxVemnCg210j6$AfM(WIP zx6Z$;dQCUXjo%D2moXE?zCCm>-8_CeIv)O+7g1`+@sE#L`@mMpS_pq~DU~V4X0z-l z!au9dgG^Ibj~R&Fjp<60tG?3SSQjP~NENpEXq1){plusCG} zu-XJshD^NB+j_96!x&d)?Oq~F1!ceu4tj7vF=Mv)*|O$eq1i7S7HR!t51{Rgu1f$G zDSGt}N23GkO|;<>)8p=t?4-jt(zh(y>wXcNh0RevC=-)pD?&ef%L(=L(C`K7_>yF+ z$&@nD?32Y?J>zp(88v)O%+E$`6>iUQUk!(r%hLQTav)ouhNHIh`V@*S^*KBU7mPtW z6OG=eaVYIeQ?Xa4{P9-*Q`iRYW_?z6^hx%(zi3Yuq~-zB*dWnSluR?K#OnpEQ52a! zUPsoC12kv_>BGpHjr0qs6dj|A)FEFeRMLgk|G~iOo<7$SM_T7?=^_%bNu)_j9JJdR ze3_ASOOdMF-#23);zJSt9`CoOzp#M{og%*eoW?)9kqZ{g3%p+#M%m_p8CI1uh117# zkeato4N*Puz(&8p@rbVw4#S)UPyNhs?R9MLxwlquoYQ;9od}e0t0^~IH{we4PkI8y zx;-(RY1K7?kWIa%N5eHjCktgjy?~B)k<|!KysnAwdVK+On+c@g`dtTL3qFZ5&A6vT zQ!eWMGs+%1?(Fz)92xBKmk=?HaL{$=;4066<}qLWdvrix5=$c&%Y+W~Hj)i^n^ldZ zh!RyKh}ON|Ds13L{+gh$ERy+z2CzD;Y(0-LZdhW$cB1cv_pkkMMPLVR)rwCtkpAlOBpI3uvxhEhW+XDj5qei#PE9~5nM`UynCdFMPAhQ;8sF6i zHXX~SMhrMt%IFw=VYCQ1nvJh)>t@;}vIG_u$dTMmq)vhJ5>s!`As{c3;zuL!SWD3b zdaE%6%wz%0fQ&qcYmm_}2vkNB53P#L29}tsp~bZdcZ(UE8j2Nr5SZ++xhU%BUH;+;g*3~g z)mgQX+f0bAU_C=(B?H$taEGN9y=`Fri*Ek=tpyL5_P<##K05y>2gTHF zBXWG#|GxeuAJ@mCemUT;eLneqiX3mqIhE3ps)fr!q^P)*=^Xf^Ywc-`j8xVdNa+cw zah91A%z4?4(%cNxhI36ZW~NuHjr8RIdd}4aL7<>4?#Z5KWS4P5j3|30`y1R;5Ur3H zdreLpa2-(e8JAM<{U{RM;u-=v9_m1GJsQswKKBzJ=x##1Mf!@ix0Fl98oB)hjvzSd ziVu<{B#F8z%*_I_3&XC3-kzbd3JB%@;pxv zyQPtm{F_sP5R3-2rMP<5pGXy=NXvx?3MwdEXw4(1zLARhDO5P-lG8#1_Y;^oSGm6; zb1IJf_nHwrk6 z3dOA&D_6~7CO}uo5sX)1Y>bk3n4jYBa=5>{^WDjMBfM8p0^Qqd(EWQteyAj<9;(>J z;+;hTBfc!0@6dfbb+S%(?A)k z#%odg?pI>@8_Zb3{auh@--oWlS&dx=`&|m&B$_^q} z$Xr39kP0JUWQj@GT+=p7-?Tu|l1*cI7dcax6k{wDwMYWL3GGOxFMu3 zOx4P^wJhO+VKdmRhcqSLM!U1ySBw^IA(|~Ts<6t&l=e*nL^I(YQNaxJP^VDv%I+0B zn6uPltzCmdb~zD$Ss2(qt2D>w7B}(h61B`Sd;bT$k`u`4ZTrj*_W^kMY+3T<*@g_> zz0aTV{f253K1`(!Ss!(rt6i-I2fu@TI{8yInahOlpe0$n)-jzKf0BX*W!UMjLj(XH ziX(0IgvB-2AE>?Wgk>tzSL`?)z+$nE%p5rz1JW3;m=QE2i1A%5>EL%mDn~JACy822 zB+5SR$5IvP82SN_8sJ&1oUs3B(O)Rf5P%C0p(*Jn3yjt$a1fZ}L@(mEO3jH;wknja zTt~~nmLK4Ej!m`kk+yobBPs_KsUdxWY8|$hV@Pr@3M?3|Q2j#du+{_6K#C#mZ7S8e zC5F`-!aLs#Wq}E;Gq3-S+XFW4gP>A=n@Ua6g%`v7MYP%uYkoVOv;CqdHd#P9smgI? z5+*?}7UbxNdTzPo`g{Q;9wZ5{zf}N>YR*?7dw>&x1}$z?#i9M3K*NP1&zYzuUC)Hu z*Vwf5+7VGMp2-Y%P({w67#C3pZvt{0;cJr2O;v_C9-dXJSyZnn^%0=~W~7?k&=`Ps z@dBCLu$9vI>;^YC$*U?mx(k^k&GGqd;4EQULr)?o`F)e1a?B$xp(#1nbUjvLdMBpC zO#MNOQkjgF7XEIY4^;}2`ik}I0BQr6Zq|CRGs*npG;1M6uK_U)mpHY&{Y45+vGXmm z_CvC_Nss>U!>gfE{+$|bsix0GC1eC_A>2Kjn1w_+-;9VUoRHR_hbeXydNe7KjKnDD z^{AB;ZWw9x+lfdU(~ZganiZ={;hfqQp(L?WhU~PI1CEmIT;CwbZWlcK8o0%6$m0Bf zG%}S1;%krKNE2_S3H4(ks;Wt8g=j>iQwb|EKk`GO{nj1r?H6Ja4@KSyFWA2;j}hGr zjy!te*q>EnAHV31^iUgZbPP&9UL99AR_6TjG2BCKvrpPU!Wk){L`- z(_%6wzIa1diYOyap##SDMpVGnx3E8Hu?Yq&sr^!5K|0!vaJoLUR&=kSh8K-OZA+Dy z+bG!{KoTD?KFKlj(~Mr)}45zE;xVj)@l5| zWQwy#ML%;i-gDsKYrNEDC3JhBC^F|c7 z_F}`x1Iyyh7yKI4e_69Q_!-A@JnlSFQeMp|N*kr~im>?j0e$yu+OXx%@%*8$!i%gxY`mVe>t zBDH)?Ug0;M9VxZ(Fke73a32x;%(7KUEfw^zd2(Rbd+{5}bj)Zt8+(7NzByc=?s>lq zmZuC=xd1M^zvyU3_dDwoenTaD@f8sg-RLH9YInhb17aEt>DomLzCc_`3_`em?*VXW zO@R(Z3ga6UF9t=MbdFkC*zJdmVs8?)+fia71LYuc6L)WkSP8eHiPv&ng(vWF=-O@8 zjP7wSoPwp)vak`AAwll=qdIzYT&-|-jlvwVNY78Qxyq8^wjL9RIj_{mWShz~F!E{J z@2M1;rRAC0S7a~33uwmLko+c)k<=yCt2H+&nW$`Bmw6G8Suv9w_vcuUwPSE2;TS1% zw|{--eYh(hX+7k`XKYom9Xgr8_vpCO%nE)?0|F<)&9V=Xcb$tKaD_z`?;Gc7M=VI%T&roF!YWONS|IXlMwV_+L}9pJ5Qh zkVyhzMEY{|jTi_pu}3OO%| z3Z5wKR}gwhcco~f_l(2wRb{C}Q8|>Lw_~zyZ2sRFFVd@_eO%IGAeBP|`C`)`0s$8q z3U{%M5EiIajB7=&`qQ;PoY=71jC0K8hzl5Vi1*QuJ-r1BYu}VNYwJ_v zD4B_%u&{!>JgS~)pg^->Jaf#C-ShAJf0L+r(m&}TR{}<7rv_TmZZMq5EhB+F5D8k1 z+#9D@ZY*lOB*Es@D?COY=Jxi)2n>YBF76~vuFAyB526(3hHw&&k4Yw&+_3uF!nyqj z0KUmZ8;oG#$b>lDtkW1~;~uhrX``=(t7|g2UIrk%$M&DG2celS-T10>U8K-N#7+@YzVz2REQlIEUAZu=r#ZYm4-Tkw z0NCToZYOm~7t93G^jRp>@O|TvxB4CU@oP)ai?8w$FG5q)?RL5(F<)U3=0|*GOt05p z@#gO$E=_I13~u=>reAySXk5mc8JPca!F4;>;OEpL0Ej zYH@tmQZI476B+f&*nGU7D{RBRyb*^!5gfemDqRXUl~>kkHR)_8**(*8d%kjs4hnp+ zr`Ii|c8{?&Py9973#NGSY}!PhyU_qJSop+I^x2#t{$mKf#^u_^{Tu zJFM{?s8AC7GSd}sv>G(ni!bpA*b|bJReAK-GJtWCxQmQ>wf|A$V?P6{6q3Y3EnS0w z6>D^jPI6R1#E&N2$20GXs@mfH4{IjgSjj20{%#EI+GJ`#Ss?90h!ybtA#{zd;D-Hm z`qEfSmj_>R1~>*{KO*0&BPO#}>aievRmWeI&h~WR!Z^8l=CjFHJex!Wr8?pQ0Mo%A~l%egL z$H41}r6m<05)9OPySkfcnP9#*U8zg(XQr()giW8$GP(iu*B4T-#QE*&2YvSUgH}JR zco$WK^8@T?u8p5p=>-kJ4jPNyUm-tR+BDWMrVxQ}~OB%h>KZ7v$Dp_-H^ zC=<#V(yMUoE#$b0KwSS3R{cv>`&<7^ZfuHi2i>BKPg2+3-(v{5HDu@ZpgL7%T0)++ zFXyC7#V$S)LIw6!exnZvFbcslQ=>BgSfMiTclTzG{ujjzP=RIc8VswYxdt8RipfQl za*>Ag^<@#8z*e80)U#+YDz&tyiab>?zt|;#|0b(vJwhct0qQuLiNNgC%+N&69SC!L zf9_lRC18vpWu(D-TT{1Y0fL86O`t@&UQW0s(=&D9SlQUdRH&)r>2hk&)Y>15;n3tQ zj8qo#<%r6xFFPqTUzC-_cJxKZg-o*Psuq8nXX+`m`G67@S4&g1SqV8iPGqoO9Mr9Q z$pBzEL&e;FQ&ZEL-%37tg>`M=sWG`6?)lD$$hskOKZWO{kqbn7QFc*SEL)>#`A7o+$!X_wsIZCT@zkj%ni% zQL8n`x06pZ%9VeS$pF`)G<|&(ug=OtgHu`=^@#Wxtpi~~Ym5%(1$X{5JyZ!V^?`I#(UREDwCssLXA;1{&3n4qWQQLq6KXeAo;+xEbzsI3fJJ7~2p6qsFHBeY_d@4I5%cv0 zfc;p?GgrU7WU6<}nolnJrVH1r2C=e<<)KD^KE=j+6E#UC>(U%fp~PE^cwD0@=Pool z;&u*ltIR0hYgQ5n4Nou6+s%3^`Ek+m*sYE3F2Yytx!`D8n{ct|=T`4;e&<84tz`41 z2X5V`R=&F(*>CGrog3Qvb*;S1A)lop$kE4s8-Py;y3@$s=G)d95A$RcQ-u zc)ZrfR37K@DVq!vM=0joDOCxsA2uom1I*m*B57fcvyPiTmYGmGBid432xy|jUExbM z`B*&KSM%a1TJw5edn-O5Rdjb3WSICz+c%5ar|s5( z9+9>LC#jGG4{(RoVS8C4C7Y7hU(5u)^DvopSY$;Ctv|Crl7JR$|xYP39dbK%jpA5hkonayCam>yXCIneqeDOu7_H&lV#lXFC-N(8)SHQqMH3I&n{TM5!Y9En zW3`JgZMJFf676YC^iOd6jwz!hDifuF6Bo@^ku|3&qqUOxRjK~QgTmD^MW-4;U{(KK zLjxl&a?(pBxCE8nQb4Q9dH<)97!~cw{!Zs^DE?~+Ef&l7Rq0=G;tiBV>jzaxC-zX` z=(Skrv+YM*a_f`NdG?mdCX>`6!SJa=a)`>P@6pV$tI8{9Nz}Mgl+ZLZK4u2;w*V*# z^~a&FEI8LmaoalgZ5i1V7>2Exb@&q;KE)d>#0bumn{ z_iBSai}$`FO(0DaG*UKLid=(OMg!;(cKGOkWLh}vD@NQ=YNuBl*ZzTis}W%?-X-g! z9O7UpD2MX5vgn$EG%Hq3+|4d_Ri`%ZN)H2 zsgymRAK!;T$XGp6Qz|er+kPfOl@V`EzC56MV|xK2D><$JA6h#>HmO)Ky_S0Y*>z)r z)Wp{x^7@GVy=%NKrI5%sgAYRI8aHT5G`NcdYOUfNldFbc|jSm!%G`~k0q5;pJTcq^4 zp8mhLXFxiSsR@sSQ0Yt$_6?UOoU=)cr>eWyty@`_n1aZd!Y&f0uui7T80fNkS59#>oVbsn8Kn`XohoGeiXoetsEj(aNtFN<_radcB5LlrK1f<#ed z73Z!)9sq5q#uAY(rD`5z?nj$a24JowsFXfpgV&VZ znqfdC@cVh(gq!Mb!PX1+CK7PqX#pDQPe3<<3ESD`90)rb?e%PN*K;@YGmG%C2$|uc zc@L8B9#!$GSeWp(MJ`S-uqeuGlK-Mny)Zur*RB8FRZRlB0{D0$=jnsB+jCx6LfWq$ zp~Hp$cxKZpas2J}R}}7{UGFqYMI=`t)eT~QB2NOoC%xl})P+w$xCf`K$y3mDa3E!~ zr^v?A5Ky+WB7iz_+8IOy`VvB}OZgL>1WM}O_ zzw@aaxRb7~pKXPQFWtLFKOrO$QFz-X7`{3k=kr?VXS!WOHOv&_`8F${)6=T9!85Qe z^1GKJuNu25J^l8!8WHkoAdTAAa@HzwW{7p^CRW;pBGddRm)|Mun%s?#MY;8_EK z>FOdd$4Zw{+@+-^DBXAh=HH>HR6jQQV%x5LuHP$_Wr}z(s*9Z>bsgis#Dzs$tB0G@ z0RM_VH%;?He~L!l{W9+%L*@=bxNv#7dg}t!)05T0ZzrRveIOV;MFn=Y!ik(q<*L7h zKxgpI;;xJ4xTJ~Mg!KY3JMHQ0x6vz*p?jcqU0EDL+^B-MfQfsJoH^Nj@KW~!`}*=2 zt(q7XO+d8nw1P zV%($wksE)aif=_dkml$|3JPAY>FYF0AzYe;ZwI7d2AlXQg|4#X{Epq&E8W4%kV{7 zfX_dP?dB!zoHAiF9j9zBB>J3=J=bT2Hn0fS&M3rLl#yvB@_S$p^SrSSJ?df|nVNjN zg=oCB47uD7d|*~P+K}qRd+)65dN=RnczEUK>?Ac4)nf*(##^5wv}I0{JsY8lqRQO7 z?&jdl^lUwoHKySIWTyp#!3c!K>X0x^tBy zSKqTPX@Vp*2SJysEMAcjT=^!~-Q}154@uW~tE0V`?8XM=hd-bKiJq{LP{G;ee+z^NeznW2c_GF4LEG8X` zQ$22duXw&C+Iy1x`Xmo}qXNFZEDQ?Z+be&5IfQA^{k!h!<@6?3iC$OS-ILD*7w1c= zV6oy(x&M5By3p@pm>!!~oIWEtI1r}KLLA^U&A(}ir$_nMG z%Di>+yFz2B^K~6PiNU|V8{=pz(66Tvvx+^wC6&Y;$ra=nWEt3QyPQLOxNh%NbA4z|QUA8ER8Rg=>b2##McjJX6)3; z=1+ZvSsxGqB^HDau}lohI0`AoY156^EGC;3souB|n?o8JXHMvT2o z`aL#>848CS%$y`gN#96|#|W}6H9Sa^Sb8seyh zA;YXBD+?DVs41{rq=|3jYQXe?>itIOz@5PY`PqshCm?b7SU{5dB2Qa*?ZQAOc>%UZ5K=4e?4-tseWZ*U+f z$|zi+t#wkYVOp04ZR_Q=E46Q0u7 z!4F$mA`F9edY>DPb|iMjxZD;3vfB=_-6+~>dNv{j1a*;r$Hfxcp)`T=JX8!~r5eqh z@;tblw;PlV{r2V&xHw{e9oJz-Q6*Ws=X_5i7Cc>)O!Zq!rp+*&l-sq65{Y_a@T?Rq z1D#CuNhVp&Ra3P0>f=G(&6?aenPU3Mm}9SlAJcCql%@JgDr2jdFWaD{=R<(Q54Zbr zk_ThzL^07`9lg(+aUQ}O5Pot~PM%C9-VcMaz0qbX5obITZ1X^u!~f${n_NP-QO_0{CmltYSN*Vg!65#;M-U!cXgcJv#Xx#Kp5Wh zqjbuuVcv6PDB!wJ;k4A17q%TdR`W9mz@XtP!6-eG%E_hljohgQ%!@hP1kfQ1RdCaAJBP$Q zb*}j+yuqaT4{9ooI-9C7HzolOv)Hx45AS^KUPWT%$O_g}O^JTnzS%sxsI6)=v->Kt z%Re=b(&zr8_mp#APw)27B~~RrYeSrgzurPRx!|!F$J9Qoc&tZn51I;E2ea#IFl3}$ z)Kr}vY>*{$n}1-%uF4e?_~z!}A$IGVoWGKkvbxxtM%?@!UG}IgfDK1n*Lviqs8foV znq*~k8pgYu-y?z3l<}q~S(4rFlmNVnedp(_7g%6hq*qPXx;M%nroMY^!{9$!82ra= zR;oQXJ`TL}&r44y5*u4=3~xU0iZK5%BD6ZZGm;~6F)j;VF=M~<_Iw0DlgVS*pP4TE zw_wL&PsYI*F8k_20fxdVmEn;KIhS@;$0v-Au3HSkt#&>6OFTz%CBg7Mtq<$UX10JB z2FtE2LBe*SZ%HnD*Du{}ArWubWm)+J0DBTm-XO!A@xa$bhC(m*2h>B1@C04LG-n9P z^om%Pn8?Z)QY+On?POFa5|8#nHGLzNwDo)D8sPIP~V(9dG3wYj=kOTc-pjHtTy* zX@`{X7y>0(Ru<@fJTRfKd8EiB(bZUyzz+Royy@K5A|>PJHq0wj0`!>nkmyZuPYw&M zS{ZaLgA&bfl~MBzq^NKCA)#UA)l)oa!n9iC^_tNnB-2*s@6k4m1Z#0BP!>{cwabeY zN{mW8k@7!O>ZsD(GEcX%e3SOzwZeaouV%kK9w`2_KD2MpCQ(=-JGr#AF-J%)^bVj` zn97)!tU|HdU?(djz#oVkKdmzzmwNtdk?*MG^XH9r&d$!xCC@2USkX@NS4gDmRJkev zIx?(uM~*RN{;vrzm+7~;Gem>KUiQ@O8uXYysX_eKOE%uGJAFnS+NH0ca9?mBx5X-trR+##CAKUewUjyAK1 zxJ~Onq^s4tf+an$dA#EIgdzdbKz|n_yOZR-(F7f^7_4O$)Sj-(v2{b0_i?QL`1|s^+;7>Ka5*750cmv-(_#oS(mKhqF$ee)S&T-} z1QZRea~a++bBgLt<5D#U)J<0JtqLZ2eTsrYoBK<)1(>Crry$k&QNOXDTCnFXbiRdA z4Z4@@ANgvD$#%1d4cQ~%r`x)nYK8xg=b+lCw0%TgMG`Vig4iI63|qX9!kkE6eRr1< zWON_Hze4@XV7t1v?wuRgz${JEgB#4x1RRLC&w$^&jIS15x}DPhREzXA@cpUaL9?Yp z_|hIH%&NB$c0`y$(tjSu^1-lATf=8~SUhf6lqOF20#Si64xr8Yc||1YLPeL5kcWbX z(E^thj>9z%P$|%*M4R$HVsmY-XWfcnu`rc13InOUDXi;!7u@|!*#2ShKuhW3qaLKI ztv~L&G6^neZ}GI7+f>3tcrv0n1aEvgSIR<3C~m$*m>WI|X0-5B)6H)5q zTG+0XM&iw-dVr#W>IkAbN!}uJC3B<*&LlE!)_0}d$oh*kf#z1o94SAO+ zngt>=E_D@mi*8wQ6xJB6^OsIxVuVT33LSIiX&a*jeJb)fK1}&hRUnk| zQzGxtW;`i_ya8ZUuF{p=h2smJf5}`tQS2YIq5c39RzKka5KmXn@6R+W9}DS$!z57g zLmhx0;QMA*l*n_~D%Ws3V$|xwZrlAmORNubvcpYnl^WfHGH%L#|1q*J^# z3$s-?oy4P_gP()vKtj{gx{mkNfsZRVsDGB=bkM!~v`n(zmjS|5oz-Abd9Va#Ei(Tm z4XoL)baL?d<&ZRsRQ5AyoaZH zGT$vXnjJBXaJsY!Em$VYX+r>%xe;H!mvd$CfZ(e|lyMac;bc$ZzOp6ANtF{;ik1RR zXjc)!MI?n#5tU8Cb0Ki;o)8DWNS?L-`uwOQ6qP^S^Fd;I^!X`x-}h~}x;Vdi6mHT_ zz(;E>Q?5u5fL|#@8yH|7S zpUFlIlKeW-O|`_>#hHO3iTC!TofDhn_$=>vCFF&~_l$1-s_!HnHeWhKhyJPQs8{Qr~g_k`ab?2uv70o(3#!Z}Jkeec$fsZ)V0?PJTUz;+Heto(NDL2#HHK7q{-}bv`_uqMM+5F30tG zjMS^F2n~La5J~urkN?R)d#AgrF)|Ei?rlXZ9kyDs>)Pom*4gtL%XW0RbE8)FKg%Q@r>7;#;%Fj_aWr4)j`K zg*Ec4j9(}nM4CbdCGLCi)su#{VfDZp+Zm?)Zn;iK=7Kra1%X#QiKGYNNPmL_(w`ua zbjV2Z%9gc8JqHqWfMc8dP2}G3VjMJKj6)-Nf!iCQHm#gk6nqb&&q>Y*23$97zH&$} zNoSXnyu|dMF@zQ4(5!l}-<>Yv24||5g0dWTIxx7*T{nl8o_~l%c)FD`#?a!+m&a+4 z2{DWWIlq64(yy-Q_TzwGM?Psx#OSg}FgtZ8y#RBZjd1D>qusHq$YCjkI9t_H;4?6g zP_<`%mfS0+gs6XV`+i(xelz#n&~}6o3UxgV2~7OScbz2G-TekG*i_xz;T-^_%&IYq(C^nKY&QE=aNTYllU(pSqw0^gl7(GgW_RkWz+ zdj^rsY4$2&otv3u*@z-4Zv%?YE0HlDsJQC`Uz+=oL+kGh>Oj&3li zyV}FkhN}3FbJkD3yKhC7H_sz}7)5*2!s}oZM!hsXB0ccgZ3UT9?D-7EpA9`j*jxqR z8+L6xtN7aBwEMX+d5ROd5rbja>QO&t-pIG)@fxR6(LloAi;0V?>a6FzXcT3d`RX8A ze$c0{>QNh%yhyPNW4v4{EUKFZk)3Jj_=|vPS$}gUv)A(dFs0Q z#jmgHE6Fl5N81H&qgPZ8a#!%Crl-Nm${1!1upL_*v8lPa$l~~&lhMIHFc$WoqCRSx zLR~q@M-u-&|7nT)&0z`P<%Kdtg=)RcHzNprW=8tviyvfA3#cm6dlSvwifnu&pX*IC zIzwEjSM$>70u9gj`c>zx8t=Rqv57xJjtNlg?1vaFQz)HGF*5?Z0M>7Xsm7wwUhItU zL^})3jG=669jnG6uM8hosI($$*AB)AmC$2TVxxp;@-eLCj{a}*xP zM}*@>gQGvXAlU#DeAy+gZ-8U)^b`rAHIdA~;jEk@F_H$~py&g5>^FJ2Zx*Hr&WX}* zX2c(JJ;78$Xy7{UmuZtvitP)NkdHP`9e9z&J<9z$5^*)wOTF}{2PrmvosaCM`kP5w zGK>c)G;eEq(yJx%C>6ti`TpJz!u`1JgIwA3TyM{GopWW!Jq*9wEIckTyN3FsU|T-? zFDfzPe5-Rm52Dd_IyEeqwVU|Arz5B=GmWHWc;j9mu?Gs22FvEXCeErDnne>y$j+u8 zM$>e{W>MFuRTgx13c)8OUYSbxF}2s@6Eyq%J(a3<0`!-VqPc^DZaYPw zdwyxjd~4fiRqRL18Vup{CPCdUqn+zu=BXuGg;Lcg`q=GiP?}1;**63t4nr7fW84Qz zoa1)?)XWq!Z=}C=UJs{!Sj(p>|Fa#gp!}F~hMjyUX!>JlrVEiadc$e9i}jo%J~P^) zM^gnMGzTHJ@6aU#;S^8HdoDhL*-RMPud%1QO>v4bu4Af_oFOL7=vhwEdAAZL6s(Ay z4`bcIkp)Xv+_;4$qS6$pOc5k%O`4=}zYMj9S0q*C@zOb~+!t=E4_>f*8+)?Ee|{Qq zp5)`r_40e+2fv?=eQNsLmCs~S!|mjqpG&}OIyFh}oy`np*?clMo@0M)R8q{ZsJSvw?G~#zWB$k@&*wz2gTD{F4c7|$>sjA-FM9Cgb5K$RHR$4SNCmZh_rfS z2DVu^yFaI#s|~yFJG~xk@*U30Tc4M|Gid(Cw2uBDJOpj%W9YiN#1cE#9D(e&x5+T& z&is_GvD-fSa?f(feD{UTR{b=xJNs+!TWjZH=0oD*$|6E?%1NH`PRsOOoN6Qj8xwm)?!f;CNoO4vRo6vvB&55MF6r)O=uQ!k?rx;J8|m&; zy1QWrDM7lsyYsugAJ23DV}QBLJ$s+E*ZQ5CrMBPmEocFL21IVSPuaOrA281j6ru|O*gR7xd{cT zC?1c=1iKokx1K{ikG;>IGkKqekrJsX@edF$t!tlC=%>1fC)~?9ZHQDG6cklyY3J<95-k)R zCLXo!*5?cDN&D_8g0U=$57(4;i&N>5usCu`!`L0Tf&=#he&u2GrsFm`4r9f=Kc0_Q z9H8))k5Cnp`(9>`@7&pMC6b&Lq1n&>NN&N{_RUDja{Kc6@7JFl?{e0>n;A?(4OfSKb%p*{^Dk)o=(30iRO9I9BhF_s3NII4neGQ6e130kiNL#L=(|t%bO`+}bvb}3 zk>gn_spK}?#wlsYy$dr)Hoo(!s^cn3@AlpimiyWT-E;1{2o7?)nVwGGIPd0&Nd(q3 z%&2yiCCYxs1W1qqn$?v@SQF{i+d2-k@dkX$k91^)5}PutCmG+W zEsr?Sw7w@QdlB*1G8LX%5!mHd?O!cU`lcxPJx+kw=~bo6RllH_XS?w5MJo3Z<&bjj3FOdU5C)J~P%Frg zPQ#HME))Ft-IC>Hi3ui5HMR;fF?J)`ZHxYt+Vdk`K`tQ&o&OJJmbWA(Ztk+UwPaoc zZA8uZrkn%J144XY(&w=KB@2Fk7WKv6mT(lQLx z>xXSKQ{KY|oTF7&oa(AgY9fL8S$w%tUBY=nXJ@^Q=qD_G6iUJ}Xosuk<%ij1B0yx_ zFoSs>ck%eHm8{baZtzKT`A&6lgzghGl zGK4jg8ro*<;QH!`kNsZh59?YX6Q8<0et5aGwUS~+ujKtk7MD6qi zY8rJ;XC>RcYGKZRtrEJR-Ec7!**d2YG$ldda7CF6HWc`;3G!+6{Fbr_zp5;@H?)X% z>&%Ws@!y^%KPTK#aNW$Ndx=MuC+eUGkoJ?o7N^xJA<%LJy-JG98p>*g7u8+~b(YDe z#d{z0pHddYzx9TzOOgjDTT{!+_(L+nz&ER`Pmv`jl~irzK3p#5OowLaewAF_KF%q_+9LZHdR6J-)*jM;zzZ;ZPUp9jZ z7Ch#-uqrG5G$jhhEF9^1%adiSD7wQYKL5_VIr)ZrUq8Q@^X}`?7J3ovW@*Hpmem2{)w}?Gq9{j-s%{VSm~gv=9+(rvozlKkyRAlyPys4N<8%^jH1g z5PmNUj}+%-M5{$SEXH|hwXDGP$Q!R$18O%re7Di&A05q26yH|mws=id=|YyZnqbs^paR4 z4h|`5duE!~P64+;4hLCC#vVhP}J$TTcMy;xSNLSzc}^G3P(rN zFk^8nQdR(Fm#XKd)`t@fA@s8Fz(kE!OZ9Ql&R>!`DV{oVUQw2jaUA%68Rjzg=j_^;F-p7=QQU@@TWIQYw(j|B|Bxn#ihF(!7Y+t0|#MRuq9i)Y~j} z9VT1uu;ijj_QQ49AIh_K!dor-K*P?6M?A!6=H?2el!gX(L=r5P8Q^KDBF)-?{p4a- z@xl!+4yOwgG)p{g#$H2McLqIWbDw6Faa$rLFk!Y)-shdgeQRm-=Inz%(pgmt%28U2 z#7t>SdJFvbP{LZB|I9{`F*8)Kt827ONT;Yk%tL{cF{tGgoCZD+)2Gg9wzBrQj>9KI zl4C0k93#M()S=MLCec$wz9_-}wX(Gxbk+6r@@hRS$!xh>vflPdf8(-U63d)~B5>7#R>Y+ld?$G-N{1jbjl3kD!Kv@jNSQV2o`h zxSg=oFYv40&stLvWL%o|)K-xJ)2GYjJd!o-y z(^g<1H%?+pMN9(rSeo$4L;`_H4ir%5I9IIk6UsJ^aPd~){c?&?G(U%3jV#oqyWpe^ zX6WU21QUiTmok;;EE1_$xZk1ArbS!xm$l;4!`4!E-}L&O6@)!!Tfb&(B2wvw%862L zLEaQjCeJw{%Yg-&bG(Rb=;8bZ8s~l8GjDzah##Oe#}Jo@SGiC;8MO1FNt+JI3PXy*;U$dhlo zpw=SV)bAF2)X9-0b-I3yKTEhm?e32~TY{lQItjoUXThhFwj0(6g*t9xBu~%H!g2iP zejG8ab#v4u4(*M`UAT~=yWGYJuS?If2id7bH67cQnvX!jkLUU~d+TQCr-ReeT_}b3r? zSCrHbn)-i|%hdcoP|QN11>AUot=sG4uQHtI!%ucJRMPd)@#T;8u?xwDf3KN&?}Re{RsTl~zKRDNz7S1rV|_ z$00S~{>xm=Yl^m{8t0y9Gn`Y~sN#=RS%!;Na>fZg(R4oyGUEyR3cNqWy$|0U&bV1v zCyxGGo&P1`9GLeS2MmmlT0Z+7*&^i+UQrt&&U_onBf9|n0;{X5I^P#fvwWWpjhh-l z|8F~C>EZ5GC8K)3{Q6q&a;U00Lb>ad&Vs~yHB14Z3`U8Gi?ba7FJh_+Q{i2`DLxdL zJX4De*BDS49y3lWL;n9mLa>9qXk$n&fK9XGab+``IsrKn$f}WGER}ix>A2c_G>LYu z7>N36u1Q!_qJavMwz{6rjNe`!fwa;_8`JpsxJkWM3WHW3P?1{B+Kz!~tVTyRcIdyc z75*pSFLWYy-}vzFey5w~jGX(ud#ydM-Cyk_Dydd#d_7%1uw#u4qXh_4^ezm zl>r1k=OeHq&+UqmEGlIvF?3x2e))Gn+}z$euKV0O0zH$%2vw@Xn#cb1^z>!PIBn#IaoAv$ldrp z{TS=L{uvJP&ml*Zbtx85#Lva86)Lr<&;r%zO#S4V`+dF6cRTh4&+}Ew^BVWEoF~X4 z$${@S&vE=%vtJ2gTr&7Ivge-HVFI1d1XWL8gVt7q9CUs!?+dXQ7BK zMYk}Cpb5kGzI}byIro_`ky>G^KKGTu5btUu2vwB^3og)KO_4VQpWW=_Zare!>!-#q zK(oV$fUY{Wn@Lq2T?40d!e+KU>Pk_VlwS&}S81rIh_j_PtSc-V!ffg(QYVrnj^s5` zXDd2C?xxz;``UNpzj}VK*#CX6+e-^R>vxV5?z@t>KEx*&xF!Tt<&6p(gW9h zHSAVeceOeHtyldQF3{kiH^USdj@%nHaN+M7Q2uS1%TO(c77@x_H#Yuc2wwP6qa9}R zDZ)GQQAx1p-mU}Y^A8bPiQ>KU09I`VdtAwHaQ7Q53|@@L#|D7+w;+mX3%Eem3TV*$ z;VfXsHFahTGH4a77+Qhke^@>dQWHY{i;~~N&A)~}y-#b~@AqDns-O8(vYy+#Ry{po zPKXt@uASYY*t&GA_E z4*42jdZ+QPf;-6GYt5FE}9;l-{3N#Fto~CYc$Y5ALXi0FUH5z`s z{QR~pWjxzy#1sMHJXs{@h?4~DEJK|jjt=*;g!xBI^YRylb|~mPYf_yVFw-*k&<=Qc z?{{tf_V%v<@LwKSgm95mNusZ#49mpGEhuFWqu6ld7Xrg(q6lRg<7aG^GcDR5Hbv-Q zxb)Vqm?R4E@$dkITlIgL>o+1!Nt{eLYoM;Q;Ig$fZA3A54Fe>Be?4y3`8E&Audmg6 zA-H;YIKf^-m;3V40mstNd(C72@H5p!ViqA=?U_Tj)f&H6yv{ozvfQ^KE5 z`|HI|YP}?6M^@d|2aV$dV~?8(T|bDz6;1O6pdn;^7b*NgM211iQ3e@K-6QdfKpK@y zK>3>pZG(-(Fr@`aU!@39k%$~FwuA+vg`FKp;)9qN72$_?(69gt1o;3Q_d;(1HAgVI z1?(vYMcIei;iVEEo1Zf!j0I3x9q1mLIB2zaGqet${liIDpa(WFmSEiK(Cas~dtfbt zE72?b|LnD>LnDaKLtBiC8A7bCLV?JyJQ`+|2_cKo8EyBbo?t~r7sh)&PH3$WS#YRI z7tnxc2j8C0C$-G8Isf#$*_{D|g?msin$1#2`m*1v^}j5P*?7ia0+k%xi@$c~5a3th zIc=D^yJ2xtU_dB7&X_dl&jim=HfVki00J?3B#+)Xi}mK$58H9q09h$3HWuZd?X?R!o%&T3i*n6Pu-a1F%d&LFQ+# z@XfDh5+&#D%s~;t{W1!nIo&}^vJTXcAC?iQ;0IE=R=!Mm^I@F_ZxN9$ZQT_vBd~Yf z;7>WR^4OAk)4aibJcni_)~*UHsUL4D=FfYV%p=NJLsh^HO7tJ4sJRsu{Vckp@U1f1 zm2EfwYgO32Zs7G{Tz+O^c(2{;eRquKfkf8(wW&o_e%B2u%NtEr_p|dX;(Z^gA98j! z8t0Hrw-m#N?yQ{D!mBgn%u|JOeSMd`ROM$A3kS-s(w`W!&p95;t zF4m}aTyX?D_Q8LK@bdlBG9wd;MN^DNa6%D{C5pv=qzQz^P6AbM`m(*7PEZ$tkFFRe zEmataFV8=;68+bzo!0%FZ6K4faS0~b&x1nU3a5z8>nwa#AQ*@>ULvmKjExpC)zr5c zTE9T}sSyN%DNzg?j}yI>n{py{$$|;d7v01z``VKUdkAH?!pU+2i|39<$1Dae6|oOt z6b=~>ntJ?zryYvd5(Lsu@Z52@*bJM=a!BKT$3IeJw+hd0!FZrbyPz`!7|zFmeWSP#0MAxBp2*%~tycqH{FVH7OnF&Rg>t zk>;-VVJzQ;8tZJJB^xFEwG9IV!yXs z)=mORGFQE9nr#rZn=Q?jPUx%4l-jIyUn-8?o%yd3pDz+&Q3a$YfVh_Ouea10Gyi-eHG62vr02fB$+naBW z-hFiAeAx@S>Pwu z^&!^vCAJ8yftZGXbrj3nBk6OD13Hcr|Gw|l{%@;7PU;M6PglrM1$lXm#R@gG*E0tzXs zx4*=}8H=e7eCXL>d0Eub3X;P@E|+9*A}%@p7D8BG)&d7i($!B z&2nR*au5xXSDB z8!~fz`HIQJMYWQsF8qvvED;8{$<@V|#=@qfN%J<%pC$5f_iZ-4gz4yny*@A>^DMw&A9~|L3XN@^l_IlEe5e4c$04KP(rZJnwo%-4 z_?5Cmba^m7BLe3`m7bVjuq@oU@QuR|m3LM5J?l?j95)&WKls^mw zq^b+jg=}ep1e>2`Tbz5jP^3s+pl~MQfDc#DokX3RG=nK94|m!(nHS}YXnSS6Jjh3o zL)U*8cEc*XkEg2~x@B)=$S}OmHBTqBr^W9mpmJywFu=8jJFg^f&;<~||FXo{@Al?1y zHN7WSWgcHmL{1mEcF_59X$sERF$fV*`#PvWaMv3Kvz-ZJyF6zP+y1tgzdITSXkQ(o zIjh>>BIzM;>$W8$7>%HGEt>FOAN1<8zbFRG!<_C1%I7t&$Pf8J=!;zk2l3vN@!DwK z39NpLGI7Qa4J806)!BZZmP}C*QK1Kv(evq1^>W2wGcLp zbkpDd-`sAM6c%vM&M>@xXEj>;Zut%*(C*JLl=?sl8=jO6_Yk z_&^`7Lp;zl3b)Sbkz52*VgoLK$Zq*~t0kz@m2@?$EayIFk zp2n*-3Uj^&2_e9u`y+;J8S*>)?q3m%KC+9uAcgtDesZIw_aFy|pMp~!bT+T>o)+jv zSHc1FXnnkS(4(9wVj^Fy;uV8(xmNf1N#Q+fQ15urIN!epcc;hQA2M%y-#GQzzeBGC zkEB@1DQPlLa0o07v6yInzsapRq2kEdTLU&NJJ%jeoj0n$+Qz$|<($TDj?$=YoB7>- zBn_|MfK}sN8%QNGR#rANHzz8Vq7jf6uRVxs!0Al({|ID>JQ-NHnvh`G3!7NGPWgz; z+G4o+Z5aoQK*nlAX@@XCj-1KsRmyIc+mCHciIRdHGu#i4wtl}{1` z7E0eZxk*1=`o~SOHleUASEzzRylB!fEn+D! zr}{+zB7x)Ek?Mh#;?0U!_}uq_XfeY}qk{F75P?U?EcUoSZF~&)V?%@5=pnP@MJf%n zv)zZT$yzY+m?M}-iY|Ez=ympI)s%LD^141F2KD{5^$(qqL0)ctJ{w&Qbw@sL1WS2W zAx%MRW1HjIe0pjS}hmgCk1&G(^zTK82HwCczB44>PZNpau3NhL)2-Ugc zP5`#m=-Bq>7yLehcx?zsN#jNI)Q2 z>8J1#jJ8yJnYp8+%-P?12J#@DgnswUe*GnbejDrW$CQ66f zpyu{qg!Rv{spD=TD}7Uuf@eEP)D?8x7F_CdWQfe^PGN%N2p9f&xmD@ty}ahNK;j2m z?+SxF-?FqI*z6QXQVPcaK9wpbDw z9l75O{jJG|#UMT^6=vCLDj;2wcX{7oNgcl&-SQcABYQNeJe=-6`Z zbgn6Xa{WoiTlSakp$oAp=&GO9H;p_R zje34wZQ629#}C(QNDybe^(yHa?ujR(vkit+0{OIB(hJlphLN&ay#F=q z(IPCux{dG+Y_mmE%2GtvmgK(HmB&jnUg6%7VQrzGQ8G^mU zvQ@_P6t;184`ku%2L#;;#!a` zGziE$cF}cc+N>5H$OKh+Ah>_!gsJU-9H__tp}#|yd(M1%E}q;lGplDwc`z{WDGb!d zlO&V}j4T=stZ1Svk`T>}|K5SX4KaQGMq~#2(1oLN(L(Wb%B$1y)c!^GTNirAT7^vP zTaj(Ad?W`X#u9Lz2G2w8Iq16lLhI267VXYt{!W&&p9GIy&%~@T6As|Z=0##qim?C& z&iU+Wg2)Qs@nQwEyC{nn13B8(?O1+yfY*>F;K2q=Tk=|4(a5o+YESqsw`GW zfW#KCJOS*K5fe6`tU|Q4w|hJtmhv9t1py}T*QUk2nETFaaXsU^AH$-WfmUKu@P*XS zUULmQoJj1b@{KrPjI^iD@7SKXkETp?up39m9%sjcn3-*vk?FhtP0<&_wu1 zw{-+!trc}E&4!*evZ$kWV+?i6-TsNJ=!LmE#NQVT0YM_-@p^w|db$_iJWKTJS6u7) zs@*lOb5jF@=hCQioj}qa$HdvF#LeYZ>}W*Ru6b7VWiP$u!NC# z>p*-6qtla!lx)?Zc~%l#VsxONm--jSp8!%8EpA=Zm4zc3qHSuexK$a!$qK2=U0)kl zEQ|!1#0808EvU9zS3f!Hb8T>rzFf0ogoewoqe&4*>a`=iUOB~A$*d(v52f>SKDe@L z%nvYSune3IK~pBk5ayTvePJ!lC%n&&*#qzJBTBgIC&+E}Ltt9iR%~g+}hG z4&$^TCvzY~vv}zVX9GuwA+WNh7#hr-Mh1U&SY6QiYOM|}3#TZ+2nGzcSWW647eB}| zpGglz(fS@NiNQoUrsG#^*SIkKuTQ?-hcNC{yr=nW$t*gSXPGSCr>t54-VboB-m98T z=8T^#)@uO>FwcX}>sCe@k6)^>lIjO>+(5>z7JSxCkg0H+#dp zg2hr!1-1{xQxb5`nt!eofw~8XCNa+x*^2d+Gt?TD+Jis@FdaZfm}fbD1PWK2&&&4g z&o4RdFOFts?aZpONvie_Yo0!)pYfQy^0FPnm2^U!2W)~JNPl9i-ayT&O^P)x(Imm? zLBbh-knSKf7IMy7;C6IJ^XCXugrk@U937UT*~FL2MN|HDW?_d28W<@hjeIS`)o0_E zFV54DF#qPbHzC0*c95DX%7$z>o;KQqZ*79LU@?=H)W64G-WxZVACHkgi&8M<2s1h_ z4c@F^U)HQ|7`R3}eh9FnC31eaeUkRhkFV96Lwm>|y~D#k3#X0=&HZ6TXm0X|hl}~) zA%GfAN>Pa|1bqVJ(6i}b)?}htTQLd*^=%|s)c*wY#`{Z{ zjFpVuM>Dxw!>v+RujhWb5>YtQYio)CgRttj&S4V-ut_a!ZC3@E3ah#8bTiLQ_Gd_X zd3U7)pU*(mXA+9J{!D3Xm_|ds;k>W~xLx6T?Kl{;7BZq6r2B;M5s*iV=J`h;A>=<2 zzxnWf+)pV9TN2~Zk%pszbAv4u3UhovevFJ)6f1^IG$%zBgbu{8nx?NYg_v#?o_J;s zJxfLlrNQn=z@B0yW^F~heVHjs#U)VtsvO4{HuFP@IKa~t-g6qm*h9XwM~3u{ANt31 znRyN<*dL9CF^$JqzfNX+beCQQk3M&4L`-KMv>&DMc|=Yldi!`Tmf}V#%D6=gA-X z8xU1#;lN{Ro#vX}UZ9v!=Xw-qu95tLP$v_R7=PlYoKT@E@amG>!}?LZQgRg2%65$& z=5$*Sg_lQWZd%|S6vOz9;tJn=tC!qRE~DCyQi;uwivih^TK+OkNbzDN5hjI!OQ_hk zGQnH2&ezz2sWW(wI(5!Wv!1J{cxLwjlMOl(GRLz@b}^>$S~J2BnAXL*;;&)@{dX~k z?@2W#T|S^xc5Wr;cMY==cC#KE99j%G~6tioAvhy?XRM~XNWxY)On5K#Liep zVe6umMB+K#FcVS}A;E~UWWIigMkYg?gwmo*6%dzlV!qS$u?rOt2-^e|nbT$)taIMHKukLaa^?TjVOv zf>-11lkJ$u{?d;Nc06|Da-QGDrXE+k-X}RV8Ap6w!Flq2tJgJ2#MqQo6fzAz_wJ6% zNw{olOaYB$#x8N0MC)T!Itvkz;CxFfHHhtZ@J1ky z6?4Q#0b91vNaQ;jUg^vz(q9Dem<@8KPf?HrN-CH(vv%>s4upDYGqi^c-FF?g{Tsu1 zzaHxY9)q(@%-jcP0Bc8{JE;bscP|HVTY;whfPSab7b zVc%dy_?fW6Gw|Yxgo61AZDKJs564zSehoGqzwdoXxL?IQ{$UnYncZHj!G#>$i1`AZ zpKhgX@%zrWW&$Gj1 zH_mOJw)j4Plg_#Lv`$LUEj&>w6fE?j+}C&?glDuigIZ6Gi6((gAc1!J(7B?iT5Zio zP1$<3#IWc&?Dtj^Cp))&^^4CE`FO=?9zrU2vDah2q0TpG(%0ODt^UjPDajqn?Gz4^ zP;-<7A|&5u%ERAqZ_n#oQ*5OnlYR|BnEDk?&#zRfS~ApBp{ok82$5TJ{$V6|c~nF{ z4u>5sA5XJ<%`lai4=Es*u49(s_HxEPZzOw2*x7x5xRI!oKahoRZ9;-Zl0-Qd<{s-; z(%{+YAyfmmu5^#?C!o4IUQmX;KiP2~;*Y=d?^7#l>g;!)(f+UvG_s7Y!vWeR#(qGa z!Xg`Rfb<7e9I`M%whksFvB*Jk;Gn9wsNUu!q4Fd)rH*W1n1>$R`$- zOv74Yx8gE3jqi99Q%OzT(%k%oYYrj$zMV2(EGh;8{y9_R)~)|{k+zb%uSG^=v@r&= zOBMZpCDkR(I!B}}vVP+kvzg%MtAruhq^OJ?i&-lOuTC6(YiJRID~!yYr(K4a$5muEGpj;@BT zVca0^qjO`?x~Udr`#l@q)APWnP5b*F8?7b2BJ`elR zY*sMGyr$R}&Z=LnVSjjg4OHqKOp|+!FjXuR)!*Cr?$`A<>T$WJIcswd)i983eqN0d zj2E-d3^(jW*DqU;q=G^+BBZE?1xytEUw_tjJZh#+>;4;FM<*o!9b&N0-D23kbUz^O zwm$A<{$nr(A~HeToeZdS{3T(igb#wCrTl|#oRacnj0S@IAe-LvjvfXH=<(9rn7Dcf z%0ENVXi3G(`9Nmz7WFIRnI`bEg|7apror-L**6Y(lE5g%cV`cMDV(YDCrz=#O4gw+ zA{qiVa(<)n5~M}QA5Q41kzBOo54hlw0$1!}y8b1lOemUgRnf^K&$_yEO6e`fNfp?sA->sdpCF=wQJJuzIK8{V)$e1z! zfr|4)7NkoblF4h})BzTx5wm*ZCLd#;GxD)AyxTst}fe27~L#i*#?FQ7rZDs^v%o)B2p>LHX#ddjY ztOT9^0JeXWASYK#GnhE2GwQXe3^*vS({Gs+K7Z?=&G29 zM3|$|LZ+Y$`P^@9$E2GN#!dpSR}ikIvfdS1Yy+!t8t~)?hvhQ@Oe0#Ud=>gEJ-Xer z%5FL@Ry`YedldDV(z6l*l%jo@v*heQN0o=?gh;S%Zo@j3V8MESM!J3KvU6V@5WAQ2 z9x~%7FS8zQB$XHO(8V)Y6oK16099_d4z5;hxdEw-074ApAsZ-Nj@I-U*cI>}!*84;p1xd>^ ze)@|b)Y`H^S?=ll2oyt^WN~&1%#Q>;Wb87lr#Y&k`2CtxoBWE;%{#aWTk3HZL5^ug z-FgwILG321m+^HgCv5b0TH_KdnGIS@44+AJNTObAq4TMqsuLP@o$kqgdYRKpx{ z{@n(98eS=8@n~$ZLh;Z30v3K_J)Wy9EH96!{MK9t*c`fEPwkx-48!spK#{As=C5rG z!Lk%=ylMA%R-0^DGfZOk4252ZdDaI3q6Hqm9I6CJbg$9Pa{?TW%D_28>0UVG#-l25 zU=^9W6pw&!t0iIHQWiehTAzfEyTPJWx1Rj%p^26~=!&`ZzFR zF8USY_5m~e+Kklc(Y*pAdn8`E4O*nE-TfUKm#utc|5^A2Uo=mKXCqEk7&4KElM1Fa zdIJ^p_Ik@|e7;KnUW(@J`Lo2{xV4$K6lA`fI4I$svbsxWHzJjuaPb#tb~pZL>DY=RPceS659Z+>@c{Ccrl zvhQyiu1ZQBymYWwqT=xI&}k+}cr5szK7Fzwoc9Rwvp%nKTX$XC3C3)49PqD4P9qhe z3wtXm7u@QLokY zB%R(HZ8j529+hE>;b<}T$noWy%PDX`kC_l2_fqusF1RJ+B7{W|F3#y+JC+0-+|zc< z#4rXx_b!y)Z()l#lp*2}nHvBTS{j6}wg{8*WeX@p9KV>u& z$kOHitUoifZu$)TGMnOaWZgZnYir~3UzKP3L8-zSVp5T@R#i%a_4J{}I1xB^8vPrz z3A-%~v|VkKkt2lkkBW2&+U8W+`fBsH3U*p-PZ{cCX*Z$KDThyAI5E?CSY_tle2Sb0 z#TZ>w(Ng1`IX^R1Z1v5kxgbGnYUN(tVWjFT4@~VD=4h*#ELHH>`x-OKeE6KJ6;g=x zyd=2gIC5i&Ue#I^;W=M8e%E4YNdIL-k624>=g$~HjV!{iiINtY-T$;uO2!@T_v|+Hj9S2tT7ddJo$ac>?37;x z3SYbc%69*^V|DaWCvGH@jXT!){!F-ztKb#FR4dXEYIm?OQ~&#@pMlTC>%#j5sxn;x z@e5;b2Ioex3Tkyv+ZNW`dk5<>;cMdztR9nzB=`c?gWQv4?U>?XvS+C=a?K-29aHwH|g(z*SREL~O zlL|UJ#hGwx-pUz(txj~auFm+4u<7GaT>HcC&z~EzAqh!QP&fBBMQMu?9J$olYeDg>W+d;9vELk!FWosGZ$5I_w}nNpGm&kb zZX9C2j|WoaQk(8CbnQ0(*1fT`Qf*xLj?vwc8+O*3UVgnccH)srYMRwT;qmk%PVH)x zLGb<4>|X^6n)^DhV zf+Kj6=;1S=Vo>-Mm72k^t5i>+kSm}bJCRiE;yTMhQva2j0?z_5-Nx}Y@W;pL^FL(} zvFW*a)MTyixIr)8TA^`o-6J~ghJv5w-D<4een{t``{0Cd#bNlPbUJ_?p`*XSfiF`5 z`=Y@z*S`~l8XFrc^g1(~CwRjSXG;I6xPdT;l2?Db)L#!nM)`KyWmmRDP@jJ3lb2PC zEnw&}eRBKloxYL#hH_+0nk#mHCn_L$p`VLtj11#>kMpABM}WY4b2Lt~%mu$y9|WEI zTFSztRp93ZyOtP-cR%d}FPIf#fz)XR^Co;Iu0ch1p&}OKkDMa8>Wu68w;#x#YiK{3pdRH-11kle-NWC4LyzPgCpJz!aJds}!=(nfdj`|N$DPm>&F_@av| z{PMIP^JNO?;Z&|rh+dLV;gq{3E7y-<40WzZ9*mi-a~fz<^W(oiPENWie>JB_qUJtP zYsj13y&`#E6SXc3Lfdn%qA8P+`EEDnJZ2j-`$ev;O?Q;;Ch|-E!q*mBT=c2V`r-Yz zZj_88n@Epb9TjwU0%rf*ml{;L4DqX23V0of#Sk#@@0z_4hJb2$ra=*Q4lGhi8*j6; zIB%M`Z*cNDZ7@NC#On{$OxgrQ4Dh=JO6UHDLuWkrgkbtWN5oA;!z?sni8A>j5FD}h zg(zS^mNYh|C^tc%rBW-A-)vg8qevaQyld{xo>Anlyz2kTNdBBGE&uLB28RG~)6Bg8 zwyqQLCnH=C_*#Oh)Uj@qkW0^4#OS*=xJ)wDivxzcKaAwknP_-JgW( z?ANKO6}1OaN`=L~*>k7ryM3;|TZyXB8crHYVo#fq{eWs;+#x!0vAAU6g{n{-e19_Kwp*)8@3Bt~Odk-pnhDi2!-Hc%FKocfM+x zjE+8>uo}D#iZN_hXx}<-9#&i7>D1_gA&av<>d*6d*-+PuDP5vMaIgsKUGIjo-DpxG zzDOyo@`Cn9`)sphu*;`&i$1Z&sY8a0g^mSc<=M+A}lTWWf<56K39Q zhtn%aAUvae9IWTNRLNK=LVEenhN_xHVe&MkR59cngc*54aAJbambsf`YF#7A7FE+T zuPY)xABw`f|A$$m(y=CCn|jc^Sto^OMyPzcJKvF-$KMq zH2Z`B;DV<(q#^{1%F5JQh)V-Tjkt$)#}_JPNd&=Sk>)M1c%<<@*Qz=69namxz*XXR1#m@9)D<<)IStX)S0( zJLNwWH&gFs)cD{ul0as_Aq=XC6u8pZuiDZE(bWFDO3Z>hyJ} z2?azen3p;8J}=*4LTBihfz!Ma#mUjX3$~}&X3j%me3N~trT-v#k0GG6*;d$Zq6RWp zRwm?%R+dwsq>gxqT(&zdu3X;DV*mNrH2rDJHZu^6HMrawq{wCNdNAsGyRBvi=2H^_*YX>tHC){X z1$~&h>uC{2v4+%Lu%`2r4bBCji)9cib%x~VpMR@uhgs31KogV3tkmwa_a&(tR79kh zVoZ-k>K9p8QBVyStoSAHb>u^J;at}t2*0;E#yMp7 z1AAu66CQ*J*zZ+Fm=C=6-nQTau&DQq7C(Is+QtJ<2Ree>u|U@2z^MUgEQWo#f~b1B zpfY{NFX^dp+Vp5#s?^ian%{}KmZiv=aV@{9ed8w?^F)(N3D-ntphr-|zTAOUEr%C( z`2<>kqYvaH_aK0c+)IPV#3OZBWiVw%6?yJ@rfoxI%{nufqkW%Xz0@v>CN1uB{HY>} zzV253D_h~qt;_Iz{wu>_*R4SNEo#>HrI?LfceBUOBYUuD-`PRC(|mA)P6$AvneEH? zz!P8S6W<6dH1xaV6h0P>m34W$b zBlEC&+to8XdQ`swtJu!^_5S3(wf-|flWp7(TGy=efIeX<+Q*9W9+rs0SJ|@*aaG*Xn59Jo64h_L~+nE(jaiOV3+wDN*GlPp5_~i5jWkWeA>!+ z%{LE2@`tQ~B51>KUEUtFElsR>`t6k5%wgAtw$R~48e(6A1pyLxySLUL*#Y=pe0yB0 zb&?Vwxq?qZMwZZeK7KcjU;mh;9TR)>s2&Z+_1(uDAMy;b#ulP7XP+$a=&?m-cQo6t zPpox%NeNk3E;ief@P9wSb7b}@W|6G%g04n9F1k~pi_@Tj^n+6_TK1c)^07{Ly;{F& zy0_b4oPSLzO5W?qdA3Y*qO$KeVWMs%mfJ{;c9k>uo)-}LEs-n}f{E0z-fOY$4o6lr zn9BS;zIgxTe>9y_fMi=2q>Ej)ZChQoZQHhOciFaW+h&*5W!s#*|I9q*bMAA_UMnKL zK!}$2<%iE#L4@uFli&`cw>R2c(cj~4>NxE5?)bcVX*yj-2%@id-<+d-lceQ=$JYT5 zSbk%C5`iiXzaj1`j}g|Q8c}cxPl%pH!ZKubIp&KA<`{=wIA8$6 zKk|575YGSrBUu13S;vp{E_a5D)jD%PlB=JFg3qy-rrS-_G#0i-N+M&}J(}lhehf4H z2i>YN>lRwqgb9HSpNPjHcu2CNyRer)E z1Sv$TPp~-jM>?}Dz|9t{YmFttK(g)5|JCy$Q~%v_L$TSFU3>k-bCw49f|3?fFaB*H zr{x!0pGn|z;O;2sA;ekm@;L0&0w*DMgLt+(h}Hl6a|Iz=A6_?lZAS3#yJelREf8&L zv0SPD&UxR&Ti5TWjFsB-Vfla)aNkNMsJ}m>)pk#Xs>W}{Lm_cM!%;I|Yupr%)zksv zhy>GXf8ev+Q2BJqHGg>|v?8t*vRs z2>f}ZDiSyaC(|tFUPiPaX+oOgf%ONc*CQ&yOqNcs@hN}B|G}ookKaR!8I)i(s}7)c z(O2L@l@8N*uQjBsNN(Url{)UWm}bOAQ>#~Cgr!7cd78(3P%p5UjpHnpvCL@PO1ulj zjgAs8MpRG*jScyCSx#UAeiyACAeB7yPN2uj*k&mXW~XT^4$kJ9 zs6)-c#E?Ti}=Gf-JcEhRny^4>yA?Q8;>OigGC%g`2GQ}yHgh=U|}L7S!K|Hj!jY5EL= z90<886;vA>hnNYERQU%T2`ng&K~~F*B=4WFt~oLpj9~P+H$ti;5N@`H zyGypsraZ!s(&FO&e3`fJ-fg3IN`*r2069dS_X)Ku#|`_x|J`8UiRNKss?qQjV-)dR zgk*oR4Y^~_Mua&G|9a@>x(z@$5zveqh2B7lfNr8e(+zeR zEQk^pi^SYWMv2A&QKQZZq=cLfI2z8kflT4}CsKsj>8!4?E&Nwe+)j{doW@RIRszZA z=i{_i(D)8E$f2Gl?p;Z&uplVPd|VeX#P2QjO?DXGm@=+^BSZw(Kaptq<0VVDNxuJk zSX=?YH+qi(f+&kc&{xR_7*dqpUdeGSl~mz9BGr&;fX*_LoO8=T7*rN%Ca!mNCJ=T_ z>OhQk=WB-?eYWZC8>35e^$5k<&Ew}Ii{t4P3<}~mFWYci@2dRj?Zclt!1tU(uL+YP zM4XdcK6jcVj%N^%O|r1C$S*4k2k;ynw;INJH&j9O{Lu%ac%>_lmB1WP-4H?Ac`>ad_jsRHX|;AdbtxWeu@M;6Un|4`Jx&H z((f!k{QmTs{`4%=18qMU1raK8qXF$bdVbl4HtMNn{7iY?wridn0rO&WnNx$k7pC(C ziKl%_gX!f)oQ4}UWr2_c5j6nP=ot4f2s=pRbjL3Aq@8}bl~^u49P++gHj4;`wN+q` zm|RAXbvgg}DlFD+o^LoQ;sBkf5F}@+C>mVEoQeu-Cdx!L!H1K>&4*uW;ae!17YiCYNpJ<_WfDSUq11zoZ>Vg zh~<0WN5HSwG5$e*VWryb@7`rVKrG3kt0-G)Io{%G4r#=1^qPCGj3%V1;EqIKRO zdnX?S`Tg)UsY;{Pt&%^LjU(oTk?LR!Od_r3BGWjd~VO|z&_l0eQ$J1deUezcVh5qlVL7+YH zbcQ(&^!pw#$Vkh)eS_aupzZx3XU=b3KQBKX&kK3?Pul*$tt6-YB$zDomL*Ui>5L0T zQ|E?3JkwdU5uwIr(n%wMaGG`($~q2uQ64e<==oezJ}26~CeBgE8GJduuFEYNq{i_C zb9fxFj@`BY?cSACmI)8;IM{c6ShU;hN)#v^0C<{u0K^YDa(F@Tm;M1u5aRFr+bup3 z38Q8;2`ur7!u1)^0#|{NShMk6!}+L5YDq}$=5Z`0EGlD4wo0cmD8$bFl_FrAsaPZr zK+qr|nW-86wwq53M^gz}hBrhefF3UcHmrb_D?mpsgSn)jN>4M1K1%_6EKFy1IC8j1 z?8}zp(I;vxEZi)d4IBzYS5b)~N%7FR=pFhlJzoWY?J}dZU6E#f{H8u+>*YR9uMxgs z#A+=eH^ONwM;j(4Og1xstS-;L%-n^6lCq?o`t-J#kJkwx{G(i5+yjY&MK&!&nT6Bh zWFkL-c2UKh)12z&a24KFZxl-F;Wo4PYBmP zlWI{G1prUn>O$`^cYB<@8}H*?8mjk`%tayiD-f{bo5=qSedu|D?DOJ(YyX9n;QvLt z!fn_8v$YE8_d_|I3BtXS@8`)*jRyB}qjKssX)(x`#dso=?hU+|J_-`keJNFqQo6tU zW-BsOp+V3Ntac?PZWK{cR@D0{85HPsiLe#WVnP(y1@}>thV1hN0~QRQ;QxwQj_h>; zpWFt*Y5vP=iUbUS=a1b@aH?m#R6+PARPPtc;oqC#-bcDqbM}E}`lt@r%{IGz0dIyt z5VD{X5A0;A07Teph9-OI48Sbtxr7U{3hAE`?u);B;JDF&WFjJPdX$N^sNsra*WDW{ zNT#!-_7RL3#@#!Tn1R-cWOz`z=W(r!&H3RoF(yndVI? zaN`&t@np*Hr6DaE)qB$g3q#bCNM=i}8KLaPJy%a7-xA5Be`{ zUcN@u-j>8+BmN9|Iu|I8FZ%pa)XZ8@J6GstCP+7$;|n#U8L^BOWDa;rs98pE`9)|G z_%Ro+-X6y40RAvB(g5ml_9?y>mX|fcYSUf^(gzVnZnX1KDPmoLzA$w+POB*z3B9^G z;jo!?J|vw9N9k{baT?)ySpbE>iVPyuS`S={7el8t-1~WSe&uYt8mg{>X2kIP8|=FQ zcXHI}?BCNZ?Rh-VQ(Fib;hE}RR|P9{;x}tyJFm1}vz{JwH5!{;r)O((>U=Mn&A&Dq z=L5MKJF9;eG7U20*ryymU?<%m_BV!1z$>jYHW6ha7b^t`N&XwAi_IZ0U9!tdWQZ4v zW2haw+Yl_Ni=8VFAO4?Ga`tm2RZmPcT(ew@woZxY(X3x?Ub zVvq#dQpkUu)448;s_*4CxL5vpV;zu330&Yts_+J;m0hL@j$p~TE3}=Gu&Riz_gt+W zN`q^a^+blk>DXx<_?xvBkfLtELZ6qH{HFF zIbG7MZCqOoWx;3B*6r6Ze*v$h4UHvW^}d#rn!X!TbM07X2CKcor6ivpYul~9#$n5o zWv8z!>$~j$5!XL5WzxlLv#RQ>d-;GwI<{N}|8$(+qP#t@oTk#uu3vd5ci;AG+&81l z*Cl42k3G!HU*t>DC9~nzJo~44{$hzzQjl9k5ft>*-lCMs?5VI8+wA)KFoa!|xYf;x z=@H4}x!8TnbQY4qCHdp>yo|$Ach)7}e31cV4yB}LaEk17qsd{)){-+zn)@;SV$Oeu z*gJljaNe6dT1tro_^0`Gn263`BZ~`diJb3Ntg%IS#_W(|$OCC;43nlRm}HeZMDy@Q z8?caS{X6gvJ!q-Msxn__FOWs_l{DASN@0Wa$2_S$y0w|0x^ITi!9E=j~TFItj_+u6pMeeRLW^}#HzF2XC8G=kc-qfYL1sKe7qET zEdt=fMXQ&By>GULJECyQ>AT$Uo%V<=rU>^@S%?rD3JBl$PyJHL;M|sL>ub*`gUKX? zhH`_9kp>!Ux*7f|x8_TKBqUG4QA)EA3;Hkqr6%1vPY1bpXW09<;Lwq>`@3P^boM5o z&7rQZ);Qo&b{rh6{5SIU|94UqGv-%ow8yU6c4q+`0S@yW9=FT20YDY4C=dP#0O8^% zD)}$rx4K>z=R$HM99VPeni{fxX}lYnkOw5q=%0=o4fuQui;QsyzS|cY zpHF%}*E#BJi{yUyxcIg0*VuO{%qvhC;(zDA!m*r_Y);1$Bc#Ke1!R;qaRtE>M^`x9 z77reqtSVNb=Dy^)g#(Lq6tev#LAeNSr}ErM%E&!lv~f7=r;cXB!z?qgM(6|{ia9Dw zVykv^$qVYd0#CG7we(^=X%mDe>%s*277 zPxG*ibQ>G-G*##6)6F?w;%0$shiQMSM@cc#_Z`FGgL`a}4dTuRPxg6;H=6W2EJH){tA;I5y zf6|cN4RRRVJCGPI4uzb^qVF0HgF0QJ7fV?!=<-&iStXv!1RoN`U6I`gun#BX^ZW3?~;5V@S^v)^7N{`O5nw?Kpl@>=*qR9ykrw)C6snL)MKl-UjZ7=Fgawxp|g^*m2l#Nzu71 z-`#~c2nd-fLR2oMXCE$txMCQl9&FTKz(&Jb{@J zXxsq@q>4v=@7^zrFNbkS_~-ewJ82hw##kwN7d22BSU>XQQe3lMUwNHtfL6c zAN|7Bw3j2UFlz~v!MxVMh>a3Fxx{Ab5k(0Wz)iId!c(h(yrO=eP58eSqfB(_xiJ`} z2S#nlw8+Oets6@FR*n4?8!QwPO{fgsl7^Pq#VeGfQsm1xKYVApKWgYc?_Yv#t`QVK zq(o)M+|stWc~Z0WhN>$R<+zDPAE~3guL(%e+AM0CEGrt;R@KbhvkI9g8_SjsmObGS zc%ihc_L&0dVUlakZrm!W60@5*M14~LeOJ?gc;JA0(rib4;DFxDq;3Irg>h?h*|e-e zY)3K-@W-aE4q7||btgjV`l|7U!9yo4=#^-g6YxZNK5vmg2I*9T2MC@=vhGdFnF9lo z-qg(&hn|+o`yfgj|G>R?>eAo8BY-6D96*p?>-FWXy#PS4Q1{4oBs>~8Aw%y(Vg1}_ zHoPHLT5d$EfS9&|zi;Z0eXga~^1dlo`h1ZR2uAx3+#a7nPoKX|pXrt5>@ZvTVYbOz zK<0P?xvnt}Q|!gFy|4#rc18JJxCff8s&RHe*|iv#Vcb7qd(0WE<8mTgkN)PRP0 z?FJ1H1%2R;cHVd$!-2Bqf6sGS%A%OVzLX@MH zsJbL@#L<2wUhV(Plo&(dd`U$hD1v=z-4(7H=NDB$@kvw0;LG0>+m#rjO(1BE@==h2 z&=`9;|2xbp7gw1kk__*i`{l00{|7_rjkT5a441lV04)cbD!*>5sLVV0at%q)b1wY9A6?F_WnR~*Cm>4{NNBqE+? z-8CCq2{57$2r*gACVe;=E{}r2wzmBxCj*qSj8Q5#sk#Og9RiB5%|D!phV}lCnaLHY zt?&plkzB!Kqs@}6dbkO*^%jk+uDd!u*2fV##SZ@vmv?4RzFF4EIT_A3FG9#lLm>N5 zVh>LUL_ut6(@@cxe<-jyfXwZV`@Tg-wV>fqt7y?uEMgtQ1zo)zPFlJe?uS3dFK#y$(~1n=k_iW(6(e84~ewW%{MoedE1Yy~;*&Z_?x7O$#{?^K;iB7Rh_u`ogHfARYz~-x&PiaxYmbydQ1*{vS9Io?`-h!Pf-8 ze3s+vMeFo{W7rs319n;*HXKO{5FbqG>Lq}W1 zD*-9S6P1X3p2{Ck2kuN{k)jFe7eB+DoC-pwL>rxskh&~@7^Jub@A$`>OR$o2a{Q^x zrSgP|C?S|KpBx&=KwIjYtCe!_m6slp1moc*_y_A@U*r>r&L@!#s&r0fAW0Ozn_?*V z#iadB7^VHVlYGUFAwd?R+19zjGM3rAb0`%!?RWyJP|En=fE3pZKaG$fpW1TEDW_O; z3M_m~-2=9()GjpJ(XoXD1Wlk5kNS{G{}w1!%JRMWE1mQ1&RT_6XJ_GA!nA&)!kj*Do#vB+J-QbXShE~yq)H0a`8*y! z71^}h|Fjw^*OD33^FL;xlB_P`to*5{W0lekXUw_%w88FSiB_{>eU*bc2&&;wMePFR=|xg`S!@Nv3yypAK#bvby3{~@3e*!oNkxD zu=g%-tSqa-y_eu{ghhQ0n37bs2aEFYPDnXdP6bM=;mko^(KOhs$Iu7I(H}c(ioCeA zU19e*xl+LK?(9@UW*(^qzX{!rV`Qy|6Qm?0>~AH0?G?XR&hWYYx-nitalfnLuNjOS zh3aM=Fzi5WhF4u4DVGa6kif0c>|vTKY-MK8O)WNN6lFHMi_z{}Yi=8sy~!K?qX|{( zp-i{%EBZ1(TscS7+&jZZaDj(m0PV(#+)*am#yp|t%9OsZF_YVWVaWb^%3*{%i{mC4 z^`i}y!`Cp%-@_iXl0J&Iy?Vncgpl6HnJzju`tIQ8tdx|k75u2Nv|*qy`)S+^4Ne(F z$5R$|_iwS4t(0b*%?8Cve1B@auXrTyRW205Agv3oIHK#}I9D?l$i^z_u++S+I`k(ltHCnfZ{U$gp8GBgP3uN3JtjHNUsy3Bc)M^HlkuoIM2FDJuo zfy!@Es$8HpFuQUUY=i?KRRbMnX;Bp8beT{PTH@&z#Hjk@C^L3SY?jnMqlMyR2V4pA z88}swtUPCZ!^+4A<67;ECl#Q#pbj}&cuDiePoaVMwsPCrl9mp+hLHE`RfAp8@#tCL ze?@7#g15KOlmPc^UVIeJ?yM6PX^!LV;fX0Q6Ft3HQxH)0Ag z7!uAT8E+!r_yZh;dtp#Ni)Bc$?IJXIujgKBfRbci>(cX|gCE9Gx)6pCz(%jxXu8-1 zfJXaol{{&eQSNN95vk6bd+J(G&o)Md5u-BBfcQ;3iia?UvCfAmzJ)4bswBG|9s+Yz0c0<0qS? z{lXd{@qrLM#bal|fDG3+cJ9S4E@{9~Md6GDzzEs@4o$AR}Yw8jX8o8tXyv-yS>1bSm)8a!Go(C?~! z!-*!TK?5gGWz0H?h~g^QclJN%IIauw0VYO|z_nVxQK-TPM(TH1x!lquq5&PpQ!5)x zf4=2?z!0hk7);o>g)EMa{X4_pa@95p6aw;eGQdW)aS0L;cj^Uu*HRaFD3kSGeWt=9=w$l7s!GrP zzj3srT&Dfa2Y;#&FeMKgJ2tNX>iG&<%=U*PNz?|_qcMAT(95*a5Z64`Yk2O;a2&G1 zv^-71HzP_)nVg?Raak^O!o2egZ<_oE=}G`wiM)l%K|UeQsd`=F1h7=R5}iv51ttYv zo`-qwwL}}@TPIZLFG!jZmN*}<8kt2;%k|eI7Y!{eh0&4ahj^j+)z)zTpEUUcG$#$E zy^bS{RvXJ(Ae@<^sW2oVL|}Lus#^l@C=C!0{eyS0dHVwv@YY&7qxD4oPq*=5s!rgH zKg5W)Ek9@E=a5q1qP6*wzsP#uXOMI2906;Ws%eJj4iC|o4aMUG3Kkt7S(H_V%Hwp+ zA)9s8yt%Z)_ik5t@Tdl`Q; z!4M~=J#+qR;i`qt#qV@ZRmk{_Y4XO-SXX(T;R76*Erop60mTNPdE;+3J1Bs4bPNEb z_MFn*aT;$(qbc5FxXxPqjoxUpV#1QPh&c2!b1o;vqR?^F=T`(MOrcNpuf@+)G(+li z{6315X(94)8!k@0)n%C#H5NOX^miSuDP~npy|IL*X04Z^UW#QJrl#!bB-Z)rYekgW zbTFFZT|QcFkd-Nf*ZnL3`l+iIg0{S-!8B%UA*Iw;ew^`@eCz9rO9K_cY};0%gfcHVMU_4L{-dmL>}E?D4so_l{5XJc0)2O?*(2Kztv6!H$7SE~83mcGQghWTPtj z|1YrQgNm|TBS6OxiDY;v;^l5%p6zDqUG7V_IqB6fhaR=cy}o8Lv~V)?HY64Vp(0!G zI*c8u9h#@x)hZ^fsQ~#M&+4!eG!}IT^gJ?=F_<5E%?BcJD55DM`ESOobqL~6(^ceG z%cwWp2oFqo4zrh!dJn`Bwi2UAr3%(Y$|VLw7H0H7kfV&(JRla0;8F!vlzKI@8Z*h; zxde1mBf?<15E>>3nXR#B zwZ`9K*1o0m0ZK?;A{xhVp;&x~B1kQ)dSWE!7?RrFA?E!%Mnp~%86`}mN)?S42bU(= zhYlx#Ohxn(5EcbXUTUqPWuj?O37Dxwu-+f@lV|A2a#r_zF^sj8eVUM3C0prOK4Kyn zS6c1*$7xg+3a;iWs@q`}(MhZ1CU&_$4(A}@PdHI7FVrmh2Iw!$HpFP@7jYrxVZKC= z(;l>Bd%~OnQ#TZHb#-e(M73^t4E zVy*(7#q-WIC_rn5p6jQ1yd_raF0%}_l1f4%V0BZ5%+IU`aAqq2e!6ho%_yFB9{$et zeDMp+7@_s0;RAFwNlCx)vP;Wi@bVuxP5d^*Uc^zTe~M9rkN~RE|060bS18}{#0h}^ z_cJy&R=q2#jsOyds1Q<^L}3!*DiBdZ6Ldoubo~*(wfc<#8Z?e2`HUS*4r6F*M6tLY z>6P*b1f)iakXRx^;6le@ga#C;I7R3JIWP~DR0&Wr8T^Z`N`d;Pdml&(vqYw3IUPKB zraUNEo&y}zP>2eo`57Vd>uzhoRU)6Z`FD|PJ{s}u0;J8}BAIzV;lr?|)gTs87goue8oul-(a>X<@4*gZo$>EBbpM-#ZPo@As0t`B9Ya&JH zT7vX91t}8*6`^Qy?NL!(bt|n%`wOLdUd3?KLpnf|q=^LuHtF-6Q7eKTwK0mp<-^In z*!0E5x?=jFQ*j4u!O-hTN{JGr8ofT8|9K1nIT2dD?)3j`3pSos`t|J%yP*_TyFxl2 zZkJ2)f*R-^;6Zsmm@QT$ujq`a>7h{yskkkfn!iQpD81)7keIxodAi_p?gszbnwFf! zFo#K3Y=Z*-g&HtWQ(is2J(fN{y?H*p zc8wH+1#B3{C)fO#8vDrqh|VXP^;TH6a2~BeZnC4FVfTl4K;MS$g(z2LU@A7-(k&c8 zBP)&{KS9d3k(k}&JN2Oj8EcZ0{#7Q#gVc#A1NgIg$-`byU(asB#n0JY)q+@J;}&~M zMK;(g@S=~Ho=joSs+w&j9Bd7L%Un6g7Zy62XcoCDp$UDP>#-9FG1Cbxq9PY`Za}K* z?n?Ph0d2N*6!Sj#P_IlAGBzoN=C2!KtP*kJY+_KG)GMt*Q;R6P6^Zcfhvbg)$z)-a zY=q5dPtH+Q1x@;eLyPr=GwBl4CnYM!#w>Q#Noe;uhN2-yfzObsuQ)%E{k`1OE$vvK z06(NY3NantSD+u<5{0VubLLILwq@=y1rY50)a;)e3PI|s$83EWi2nCPU0(xQi8gm{ z=YJ_I7L)NO%11gv{v8${?D=YkeFff4jl-Q?QgU=?&6V6Bw-f{()Wqq^a7i$Co# zc%2u2w1CC(*#_1UR;xuAD^3RD1p=`&w{N>9g-AI}PLwJpr&Won0)AU!5%#}Kg?GfR zfeox#O9~XW^mCM2%_ElxhpONyP!TU^- zbe$acHp7c;)H;1l@>-zH?u|Yo;v-yyhOVG%eTdLTMQO4WQ+*I{WD(z^2J4c@+@l3N5eXheH%}?fTf+4RoGsoo-3TPXyl22M6a@ z&+FF-Nr5)2i`8g?vzQs?x$}A5SS_>Q7_5o1vgS95VPVq=xkp7L?1PEO;&J@;%E!1b zVQec9kjVkQgY2xs`4yg!8iR-)se;B!bu~iU|A99#vy!AU*LrH;@%1JYl*0lfL{DK6Q%fQX>@&s zxy@a~1Nc4!_a^aLTm`3s7Pi3wUs0}mzF<#6Bcs#m2!lbe@N&4XZThny@?2yNCB#Ur z<<*VDCj9LlKJ0QS$i>=HSF7yk+1mXyZy6rJ#>v9o72>RCjjn|_>rQr=URc=&qTC45!a-%qNEJ9=?O zk_1L~*q(0xdc#kGl9FYzQ3o3GtCmD1lvfF@m@ErLL9+h&VaQt%3(YH-E2lI=`iPpR zg`Zd=M>_PPFc$12voRhf$k7y&rL&F@;iI8O1E0+g9>2{qFBG&+5^vuuCPCF71cfEf z9HlKMC1(EnN5sRPU$;v!Pd?gQxLTZygkD+OKscW)1x;fGwmms=+xef=U5H9Ua5=WQ zU!=2ZA;dPS;bO(6HgQm^|5T(qmkc-6R2NriJ0o z1i?sw$j7z*!rvY=x_u2b)EX!9qY%~56?&}?2_y(qp$){+o(S^uh7zph7HCTJu)8l} zC2Csfea~}G9fd&ygnh(3;7*{D*4uQ@hBE{487BT1&!aKs?)dIWYKPJQm17-%4>54u zB!V<%q{84@OE9K`K@(;{((IWMFMx0hIF&6v9sZj!`I%*rJ?G3|Ojb7q z$Q(I0r++EnDmV|W&Ro!k>s0CWBkJ!{iVKCWZJ+#s2O47Lm+q=5pfLnsS>M|u?CI%A zo(hky?*7DFAC3o!;!Ljx^4wW3uZctUIav|je;S4|H|lv26A^~aITQRk|SBZB?{kdfZU=2frFcPKba7O-}ER-Vft|{B;OVk)OXH=FRDI z{`W0+x+l;1a?^q}zTkEPu2tO7_n!E|)diH_H$=JZsMk+;fj>bfL!6EeadF}}6kRzS z4OH)gunT!y_ny&V%W4pb;g4HT-Z!kdJqDSj^R?>D5pNpq9G(7`JieC`s2r={9=aIv zjI?F7ohgD@p2`fxu0BEMvt_Q{%ABtMr1Sb;xNOE%qTDD(-^3Z=zUz}z?nPRzrm*PU z^x;<0ByGHvy2;xbg2$wZj6oP)zLI_{O?q>{PEFgo<1q;P-R(r2Mzdv9}+G<}7b_{^(|@VC*LuVHeEx6PO3{Z2+- zE!?yBt@|0dTn+Wo^c+0E@yZThOxB7+9zk-0UTYB%8kA3^t3 zrk9yqWPD|!%k}Ji$Itap)JFGD&kQXeXBZ@F+z$Kr%k{X!ejzn|S1~pfc+CvFuQ$xr z^S0h^*L2RO?5fPyH8d!`?}^{J+gHeO!UZ1X9~PuWV8#ckNIMU`W;^v9V#DY>K0kzQ zJ8Uvu^Tvza)OOz@iN~doS$X*TS^T)9ziDPE?5*+(Muj$lY^#=hK0bs=aY(waqPUbC zqcfU}mdRN8-vu#Vc$D_{rLo&zKS?7)L=~Rjj^w*M3`)j=l9IYlw&7S+)=fU7K3`k) zR<7aN&#z>&{ngkyFIlYBlJVwXAHKN5(!KTYFmh4J^daL@Nw;tA0aY&T*SxaJ9iqLC zQ-}?gihOVEvNoPR5jnvQLw{YTvySI=aQ+QWP5S(J^Iqa4`utO-o6f@{W1)QA`^fY- zZxD35xl1snt?M~{H2Eytohq{okAF&>5e zz9aZS0uVXJ4(2#t{!#>oyp`)k$4i{$t3n%6&G&LNq!8IEM0^4%g<<-RiqLL)8$ zBME|=;Y`w*jU^ivH*6^ZPi2hnv+PV99-CeFofxBT5eMpvKt?w2mm6RjHy~5y@D`IN zXpofUe!!gkB?CBhag51J76lI5KBo^1P@__%krEtBA_dpKM5apeolgOQhj%EE z^BBfE@_LepOP2C$?Ez^PA!yNMFen3(^Id2-jKJH4U<9EX+lX=4;bi|%4U!E4A$K1n zr>y*AE0K$*ux>Yhn8hg~FJ_}b2qHcxMUA-gPVg-dR$t78*IyxDN zrk`nQ7C9z-gm{zPE^bvFT8nuc0!OJyDsmi0b`o@tanA% zBFqf8)*lmfQE&X|Y!D`e3w7*74rlC3ULX{6WB+}7qyf2ZdtV68ftIzKAFv&Ne>_fi zA~k93m%hG`TxY6h?%hbgW2)sav~p#1W6c_Xq8DRFAY{KC%=3eNnYAN%+r&`N)S_|I zj$g}AxB@=zJSVpMWc;bW8~nviFz9y^Nx%!?#(~h?g5Q? zS3CdjOUrOx-8T4*Z~IpRsnY^7U?Kuu;DGa7L0)E069nAYJIw$6%%$BqKds$(vAhq0 zma|=H5PTE9Bk&Whv4wnHBN+Ohnk}36!HTBk*7DkHpfaZa#?h5}3;)AsJcPE1ko@)* z_iEmuVp!IwM46kb-A zy$#{&&0S1h8E||nZX_>QgjVKQnrXQlNB2XN)pZyD(Df{`Mf({j9c{+V?L*#E!V|0C z#PY-5HFMvqC4ncyo~*sy{yt5n$KwPD&I-nwlT%busWiU7Nqi23u2(o3m3q@>AgnVV zSKtVYGS7V$>?UaY-o`IJ7h{sX_L?lX51#L1VY=><8b0?r#B6UnJonv&A#=Z#IdOib z40*r$$eg_Me2SV3juFEJCU|)UoIQhI^#(t=AZ^>nPP3tK*}hUye-WM=I+Y#oT;X)Q z)DnL_^W4JN}+HMC|J`gSIGx1(Nq z`XZ-lD-D;}A%G;@Q#HEe5*X5D{#t|0@!Y6v$8x7&Y-T_d*TAKiCIpO8^9xr zWrbtruH2tk9QD}j{e^X?9U*JbVC1R}Z0#-g7sei{uaT$qHDr5E9+LFo z^Fc>S*~rM}q@5lhGS4*mht>O70$NF6U%+HC(GExm>_PF=ZOtpc3jm_878E7FJnraXp#H!SANyQU`A6 ztv>3RNjOpL{rdYz!QVG7XV>arq9bwN>BnK#wpP)m_#TWyy}r5YE6?J(%F^Jnt|^3h z&+Q-Ius2=3xdeVqssDPB`P*Caf``OPSkpeFPmb;|{~wD((Q%}@q5|uU#|@cJONZ^r z`gvqg0!dhLF!Jvbvmx+ExhU(p5LH)9W~p)n_xx@Tmim}wZa1Vf+HJC|@Kl2c2~wl5 z_vy8UbOY=7Y)l)Y_fD2$p{iK|x~<`Uh%uG?oY$QAJxm?hW z_WTN~$k5U0ARpvC3IBRaG+%8n0z;Yi}&V|Tw54hn|(X$^g)4!pJcba@gut>1?J@fo? zA(183)BPJnSB!uzg?o6B?IR0oE@I|@ofk=AIqjX;>vy)~mqKoJ!F^hj2ewlu zh-7xbRrF?SB8u&h+Aho-1|nDl`Bzt}y5fB4CjGC&; zcNMyDp7oqy$Dpnx74IK!ad|a2`7J;bx zksvK_g&wR6%)}OPBG;phr8Lv{n!j0Z*4YbZ3hi~*fQA;^6=SCtf$ zj~hGxt6AI5$mG=RDVO~=CbHh>6wq}ug!iy*R zyLzs{UON)bx)Il3Gs3G7B zUIX)FnT!qh6w}~uB~OV*$eVK^E{De9HJYc@iw7-lTV{!LzkrI zR4&_t%~sogH2Ll3sMs@F^E>?Fl!lb^Cu*0m{X(tt*S!p%8I=7a(R<^NR^iduz?B%k{Na-cy|_BP(6vYhDupFsh}jgjU<9EQ zT~j;k+_;G$5nJqoOkg_ek&VoSjPN%u#4%Qg_D=}6{9N4NGAWmRkPBZ5qOId2B`wUE zJDXv2H==DiAalG??{Nr!BP_U3ZG6LdoyzrtFahhbpc#(Mua6otQ*K2nO!~{wf99cW9{(fvz*x)}3?Uv#P&WoIYA2mQv$dbjs<{YBNm+s>%t;_RpNsnc07*f% zz9|&F5wDnHSs{=lqk=+FdA`o>vL8|+O%oh7T5yvIscH<7Xkf8u4v?nHzm2}*Mn@^SmOM} zQEY7-h1`Nqe}5Q*m=gF!O|d`VOP_9I=^Jaf?ut4ty0Dt>f3FKyX@at1Uz^W?E}w^g z)5C3@9=qCHkP%`r3oADoCJ~7Wjyo~M;`vdE1%+h``npRzz1~AgL1|c#_aG)UD$pa- zWo^nLVvCVRPzXFvBWf*b5(29zk(MB08`bm1CX1OfW7q<;>+#3mYFds>a_yznY+l~a zSAUh|+K*4*L+_tJTU#4XZ}Uhd1o`}5vIZTu5WWz`3E@$WRnM%VzP_H>vu5+uQ%~{j zZ-1L(k3E)~Zn}v{lP0~Qr0|GWcn!Z-N|g}8X1IR?Pd)Tu0E85HZjMGhmqjODMt#%i zl!kno>KoY9_9$DottSwIrsm^ln$W_8)&=43BG{Hg5DJ_KD?-GnM%r)gv2o%|DMSR8s z;h6C)w;58$!K9BNuo0Gx(v>*DT13N@;AnL3LnamwIAnn%;>IOY&O|g`3~o1MpN9Au zP|ia2#mM?=&|TjI3gG9FbyuUMHlHa%elMcsM#R+f(8G^HZY$cWfz~%8T5m!)(*cQA z15n%tP1hsqE<_Lf1`1oznN5iLQ$cG)a-oUitJKvw716L1GLNCN8$dLp8{dI!T#PPm zfx>3vo8$Y4iGPPs!>GM~1G*k`9#U5!YaFytp^Gd)1X2HHgyW#gZ6*w>?sUZDkAt=m z!VcA9VI)TKD8V=x97hFXlg{tny_HU9oxAwdibp^PPy4+QMG>`iGh)g#^zab2=iv*RV^2MYGme|c6OS!t``!*L z%SH#j(ZCia+XgPQHbpq=394$*~Nmbb<4J-c1E|?{hivw0h3l8IaS^xxY-1h;Zh@D)v6u#lx#}%sjiEWWs{L2$7TnMNNH- zDU)OL7hHyOifB~O(Be>EZBrkE`SWagw|hKsUxp>`tLN-f;;d>@95*LQ$F?jR_i1jf zw}^!MA5N7d?wAj!UsOwD5*~Ou4S*#C#WJMoK$OO$U{FT2^u&|n1bLr3?&>C97vWu( z)YI_mG`sh?ES;NR$%ziKHOazbB7E(xJhCatB~A87>W6sD!jG6PUvT00v#OZWEO}sA zmcAkNoK%~>GS;yDyGv}@>vHCzI?mhT(N~7dfJYlEXfME~g`lO{Mv0N3fN_n{mlorM@F>Tsm8)2?WC_fIyYIf6>)v`D`COj+ z@4ug$Z@&3e&qMgyUz!@lPhSg+cAAZ}su&)8fR3*BFn#{@w5m8g`~JY*U3-~z!bh1i z?`$$dJ-DSTXdeggRY0J8bWlJmv-tA8JbpQY)&a%B07}?I6ScT*0U?v5`!FepDyHlBD@(~Nytq>X=5+)nUYtg+9qGk!$RcJ4b@UzCNtM+23 zo`>%GFDQ3_NEq^08AwHfitDIocr!#CbjQyD7m6#;ZL2}$V8SP$?gDgfF9LY;nk9bM?&E_9a>rV@o5?Arr_#v-VnS%o@&7WP|iM4h;k z;P#)Q?!O0r##F2;--&or5m71-=pwr9AgXPGk&{G0S35e9Li;|DL9N+=D9ANmmL z!Fvey9{@ZU>K~KjO@bW~z;X$FU@y8qbRoB6kk6qXdjNgSwUF5ZYc>E0h`KOT!aD0R zsBb~F??OHP2)e_?zxN@m^WTCv<06FXp;jy-()J*}7EC|x6yAK{@$B2V*$_h8AyEE^ zanf^5phj1x%Wv-;p^+JrYzEQ+=f1I)M0J+?9?kRSOX^s7e1d_YfRj(F zAzCH5{mwK$|IGj&cxMxDeMd9ef-R2@@%>+Axb@flT)rU1XFe6dPQs?G1&T^QpjdwI z5U0#;;mWtRvT$#n@BE;jnyFDPc~dPlmPRElF1fJ@@6JK~^y_|_CPg^^vL+V$Fx+0` zj#~$CXH;?EK$&#TJfER1m)-lo^EGp)+B~}{&jU|;Cg)wKao`ri1Vv$Ns5Ii3%$T3x zyi=>_AMkKuf4> zBGTg%0EL`STZhX)UzxifNOR4(Rebp46LDh}E7#>I&N8Z-J-+W>+eHq234SCwTjBEIs6~jEcFwW8onwU1H$nSnL zz`jm}REnO?GR2}t5NLE@ru;%qQOJ#MzB<6OD~9>gbcZufs^;_ml%%0S@~!Xp@ziFI zm;?S1ys5|WzsEQsJj!8N7Ov~EVZ#Ozi3FEkaw!`(Zsh*^??);1ylz6T6kf9)qalpo zLYNy5FgXbw+)|pIyC37i3;vm^xa3cFTtLZAaq1gBg&umCXLmkM>-2N6!wk8}WHX6) zH7YfgM5+lL6cCm}yk;J$ssWlB=h3})8^hTg%?*=j+w*&}B~3CKp}TD*M&w4Lm4()l zi0x4TxL#b;OWQjr>&T#fqN7S!oyA!_63 z_JioYVc7RH-hZT#3r|Gv-hke?1C&MZwJ#Zq9H4h>#QUdDLq2QB+1_;o|JjLt!)fSj zKe|5)Dv$csf1*!af|x!P-F^VQWf!PD_|HB9nIXU@_{H~4mh2(pX`$}=33}Id#Dp5u z)*YstV-fNv5aZiIoMq2Nkw$Q56^L+LGt)doxTrCc?@ma+HAT8k_$162H20km?4>wlxLX z^H5c%c=E9!9xW>JB~49@MP|Umbu}AT53_5-FxkAKy4J=k1Oyt|Hs$%!zn3}VtOTiu zX6Ke7MIV0s{T>c3O)@zpLP zpwEgY3*>=yD>H0cn_)0*uKoRQ_Yjd97nsm!(^@Tg=9w%#eG2Iq>)_!_q>^V;Vh?UD z@a4~UaOTnkwF$w_XAAUZeZKqE4lGYm1omvs^VR(&+`LcDFOumkGpk9md1HZ{otl`? zpy2!8=_POjd>?|)g|f4)%+G(;$NXbr2w(B|iadP-0Z|7Y`28ST*X225X`I}k$GWve zGG((}y6o;W?FY)to)%&ImI8ymaZ`>)!u*zF(oSrBbeJ#faXI_U7#lYf*s{&1I%W1y zOG7T-{CXE>o{>ZqJr0CQtSTMwiy!oY(iFns$qiFZShfk}4SeH*>wB8t+}_WQXYv)*m`&Sc9e2c|r{}-NDV6goO zhW0;98IxUBYag(PIs(tvOq)HA(@vbhp3P6t(OV=Ii;f|L7G~emLo~b%sum+u9zF0A z&^Dyr1X`oxCn6`GgwC%*_wE82MI=u|W0cW|OhUwt17c8pE~4fv^uXQd0A$OD!HR<4 zkM6k}N;@Ds9Z`3QNf1Bq3v~7&G)ZLhg@|LmjrIo7{dWL1qUHUNnuqXuP=gOasT=xvNk3+NxUD^Qyze7Y$LO3(bqO9>+L@OPp|>~uy)!{c%VQ=AR0mU??!JO7;{a}WH;Zo1+{bANH%jVB?9Q( zyN%wxAca6$7V2=RN=y}{1j>qM9?P;uga%Cw+S0`162Ay*ca&JayM#~x0t<=b!0z@E z16veQ7}v>sI^da=!I=5nt7J1_>*n&I$CY`mu_zRCJ`X=IJaWsn1boHnN3*Pzqbi$T z*nE}+o$W5a`;CiMhB%b_16KDJ4_QknWy)7d^UM=j)<{D}qESIH8&JrGT|q)_I3OE7 z(#|epNwq9S;`N%QM7aFYT2hW+)|>>L`--gCW5(Iu&VZiooVm6RlfG*cdzjA#JaF%D zn7thw8}h>e*-%hPN=OflJ{vC|aR2Z6SiiPFNkc?&h}h2P&4Cw|=NAGVeK zjPaVHl4nqpPLI}iY`m&E%;IO+MyzJzngW~Gn)=vw7}NSnW`p`af^kB4l%it&Te@^9 zQc9FkEMB}AfO+%gF?;sxSGk6-Uuac80Hs_H5C7q9*rG^!s2#M=Gmm_f&gp042%o`$ zJroLkNGrwm_20xRXFxhcA`U}+8|mqMmj2F*v1P#U;9d&(4)XafRy^=NCQm;fNr}Op zjbtmL1FAB@De|FS!ZS}k%$`jN_8lBVDMdCrHVfKC9)S21bbd2<`+*2#*FbR_D!&ebepA=MpF(LXL{jElzYkNh#$MND&=^r&UHB6W=fx*E+=Fgu` zDwX1EU;7#W*Is+=$hj|NXu%6w2oL!#{CC+kt89VU`nLoW@}Q)N!>gQHDwv?6c*4A! z<>?j*WUf>g?^cnjg?QpAB| z+^obc3FV?8w18zriA8OSr2;BA5~DCs$}GAQF=5D91j;#0;A@_EB7+^S;G7qmCGfz4LsHTQ&-svA8g4Dzwok zE0i@6N05pe;^9QY$6C~=kf6ol0!tY8P1iM#Di#$)!i9bin56WjGB}PPk<=(<#7T-J zjb%YRCMXm%frf}9h}xP$(Iii|&=gCIq|Yei6vH`9>lB+!YqC7?aGJ8GvBTKEs3Y(L zZ7hkdrtFz66%X&NLOx1mjpG;*lw#4`OEe}BT2pdipx@)}d%f@-F!%rb4-Z@gv6wLA zRfYHMYMiJr>3}_Lx^K*g2>IIFcc6@ri~!1I)2^|&AaM1F#Y}5MnB#GQK%=#Je#L?w zG1{k6Vx&v^Wlb?mF>Kl9I%sgq8rMIvCs>65rjp_i!dEVt#P>k}@q~HSL7>g+75*j` zGYt4}71qNM_~9!W5n;TvpjRwvD7ELjQnd>P$Ss+6HItEDj4;mCCaroAfXhTGX#JU98fFp8+!9rOF= zLu5=ngYf*ywJPr!1^O}Sj=zWeT@wY8NcOO}j~!IyHL7+YRP zM+ez#mTA+b5s$}5>g4-A7ryCDJhFT_$+|j9rIH!HRPbk3%ONT$9*$rk`)eVkF;E7+ z;gpsHCld0_zf?o2VwORKsVgdDkUs4DLt$IsSjL60vPc(}u^d%Wc6i?NkAOlLj$OG2 zFnm`Bj4qf(I29aPBZTBdiznL=b6XWs;Co>?!dQqZWsMvUzl%mft*>CTzLCgixk2#f zAFXALDt0P0+HIs9-Ct13-0z>;?}*sudcqE89B=ggDx}sM^DO=x9LM~o($-QM?ISQs zqn`KNS>0OszO2V3dtRr*~UEkaTru`b{C69e(-}IaP!SKk9?<; zqP@Kx*L9gTZ5olW9daDQ;}*iB5GtHJ#=3-7)I`S~I~ptquVfX3ki-*l0?(!VvTqS7 zlyZ?)4T69m$btr8r4X2%HA`Bkpor3Cgp4C)6wqi@M5!`DrjW$U;z>H_U>K##NV^)T zJu}g3g|3K~90t!1uxy8DMBuvRBalHDopK~5J%eS4lvajRF?Qzn!#@EeL3knQ5+Gvc z|GGldD(4v@i?A_*HwqK(9SwgM7~&}+828F>7SkRhzBbsVUX;UnImV@xa2qpB|6#5Z z5+Vo!g9lNQDaDR>eQojnhQQ`1o z0SNQCLUdl7h*Ze7MCd>12aKo~3(UO=p5uOMh>;)?(I!@Eq+%w#u|n`7wjm7Okt{SJ zi3rB9R{%42eN9)n@jrH+RZ`wcGRu)Jp2t1Qs!HJl9xqe6n0k3Rs)sC1)Y)6dM zON?w-n`_z;Q*qbTNIN8l`uPdCWf_87E}46Yh0{h5gk;kLH!$5P8ZidmBR#f?B4ve4 z#=|lQ3AIv!a#>?V1d*7=ExibG83_&4m9!k8A=)dOws9inoEKWAL?XueRVs$Y>TnOU z;=XBFjJUFDWsYkrR7%yx;2i{`ugPm&&tV*|KE?^*QH09G?Rg$|-+eb)Yc9Y1avaAo z$huq$gC>Ssz{&; zj1VXUD#!s=7rWRv}WTjrkG2d0{EAekJstmSj&+;|)U7s@`wQ%0A5IA`ABXw0}}f?*3|gmYqv1db)haK}22XtNk|JxEkbCRJN>b$KJi%MT7MQiT5rLb7Pd&@$+UJ|Yez5=P!f2tztb zZs-~s6DAfb5_;|yj9cJy5bh7UWlepPMRiQj(dpxbvn(Hk(+kIS56N?KxS*Ib;UzEDsyU8vyb#6-;ZcOj#2t-BnK)?@ zk3aSpU-`;cm^*haXP<;9?A9e`K)Y5D))sfa))2<`OZDk@fX_$uR>os z3}YAXN5h8CIF3G42wyIjSiAZL#JmaUJ-Z+qx~NB^X0@Epjrt%)A_&i{ zn%#1VAQYYvzW90uwiLQkfEr^nQy9P=?PJOd*>j#+dTpW^A{$$;*wfs zwnkX@^bmLbZkWNGHUcAo;m>x&#JV-MMtJwT8|m4S<)?qlF=bAIYu{4MfsGk{_fV0X zuSfFkRRlnMAIfN?2rXt6chbXLNQE>G8NwEv`=%PsKf8*?YRURl8E*eohD=^FVQQ2s zuc>3F}rMc&igWP>z4i`9XNs4RUQpc=To3$&4`SCA? zNaq!?n6W_S3mRz|YhbYqvlb+{?(#aOO|sd)tH^!#4zgjVPdsUH?b{nT`?M52dyD+` zu3pyf35do_OkSyIWWFj^W!n)*sVSEPZ+mAWwKCvmKN%zsOr0O+rW=}=HNoPM`v$n< z_rsJ!MbWWpn2uu!1SvZYxy0=IF5u@U#4;#&wl2*IarY$%s#& z1lCcYv^tJ)yi^$bKEK-U_Bf7iq*5v7&!10cXD9#hAOFGax8F`%TiXZ;lv0{`;$^t@ z3-!&>?*zJ3hItE+=bs1C1=qp)(8safbqz=le2the88PoTM9MN|J3q_^`{wJg-hUHv zLJK0Ef~q*UCGdU3thtD(lMK5PCIC=tO{%7mhNi}fU&C_{cLWlcIy1qgS2S|^X-Vv) z#f4YabIs)qOlk?!2vtkw&5P0y6}V+X#I$b&LMKggm_0p$2;<{kEZ>%)K&o&A7hP4y zM?ciczX-bK@2IOuF+!N{3xyUHsvySq1$HQ8!|X?a)epO*d*hO=9gk0+S*>Yd02oCuSp!#GRzu2y*~cfj?yb!%JT^*4TZ!JGfa6c8X8sI^o~|;PVt^G! zNQ`eEj^nSzxP|a2L}m9i7K?G}si$(%Nhi_X-p=;z+gY}384o`AAQxP40VkYr0`SVm zh`iEJp|?g*8lbUxGFM)38rk6t4?Mn>h!aKl9{#IgDICW*UQWDzU+HoD6{w8$mSwSM z(ISpN{&@E8-OJ|9oB8Qae@a6`1E-#PD*r!w?;U1IaozoYs=E8e$+I~xyJU9BVaY)x ziHrmaRshRNwxrjV?VtTR$g(5{S+->5WJw?)f&c*mL=L+PEE|B$InV6O?&Oh7xgp7TB5bJ$^r(cIi@nQm|39C1L_NO2hb%zdbb zH$wO~I9FYddFEM6sR`#(ACFK<5xwvc^pi`GmtKQ&@jH+mE_~!;Fx-#&#Vwdz8RtD8 zK%6`ugh4HRisbzdAWKkkCve&OKgOvuT|WP%|73Wiisys`4ReFi)`eNEXhw1x*O6or zf;Ja=_6GFzD_X`U__I%pXHthG-yiVsZw6VqNpa14I+@TeXl`+t+~Klj`3N`NF+w3y zzWi+hDFV;|w6sZ@9mA4m@*H(&l8*5LHo>vSHZd^^_y4Modlpye^;|x9UMmkhSzyy{ zO)6mpR%5&!goggUkfx+dHY>=wkRS2cH=xO66MW>uI{dg~RR`q?{7;?k=;`vH5vI0FGe#%p~QJDla@ZOviBo=dvv6v;zdS z$b^W>ON7A5$2D`*G>6ar%OFcuRr%)k4&mg}TUgPRXIzWm=@*LJabJlOF6m(EG?zru zGKd#k+{Sw@ZsMNX_VV!JDrpH1-a5ejXoiM0EfZ4A>P*t!;d1t=O+5ef5a0b_KPR0V z@VQS-;NsI$+;{0mxnaAAp&q9K!jk`F1*P$|Hq!!lfTNh`aT5Ak2$>|?lUMR}$k zl44|7(JmcQX+a7>F(0sRFyMjvb1ZwI!i+f?a;tKD?;HJ;o1^DJk7c}%+3UBl@XA}% z8l!)n=P`TsY%aa@Qf|2622MEP1V%=UV|l*Nsc`7NZ#|F_wdn=ew4!xKb*yj7xTj( z{*cwHR|CAEWhd&7ZRE+*k*0nkV}aq__hAxkh?#RSgTv^p8_^4&ftG1FS6&6KKyTiO z=^w-l^G8hn zIvD3_bVhQ>{1m%4Rru!j``Om7NhJiXD?l0U`0+k^D=z==mDzmqgB?6_doNozR!Agm z2?j%ya~QQD-R{!URpr=|n|aSQtptIhsoABc%jbJ{4|C~zCh*N~&R}A-%GZ84Ouk|x zo1w2M=E9nYOf@i+{g6Ul!$gm99g_a8GAe{}Q8Q(dBnx;6Njf8$IMJ~h)yCeda#`cL zP|O>uI9zaP8zVc*EL~BgQidwvP4?*BRb}ezESJ5j70=Zu&%yER10h`j4(LD-0Ef)< z7}qLz=HVQ}MZsBTG;#Q04yIi)+!ZjKGn{x<6O+eDdUyMj<9d$1v85qW_IWqqt3PvN zHfFzzjYSCGqE;&{0np&xZEtVqyz|bpzrBfNCt`b}Xl=28OR<<|C|{(lb3&9Xu24!N z9hY<}iC-xbYCWd7HD+&1+n+M}haCAIvx8%es?-xFPGsW5i7Z&KfHiB@0KcCx`n46N zkA4?eG~+~E$FN|rT2nI&_dr)3F=GlCjc9H~ObIa?SE9G|A~H$zWA|hB3;|XTWu!1n*KJNO-*SJf8<0KG55vT)SdqTo+E<_8-F^8onmP2wwio=h{ zaNN8k_kX{eyB3ytwomXkA86;)cVwuRH5=CDx%W4DX6`ebc4C%8j!WQf@-Ze7Pc=}f z*lRv;?l=)x#nL}r2qQhOl?!t$otNUwOUE(os4CMYCn%Ky!obw_Z4~Trq@Y*~sFXsE zIXpwQSjbf9(cQFIaTNwe6gJ zM1n8=OCP6P)XCH~Nsy4ptZh$Avq$?xk7QDee)gjKreo@;W8HoI1BQvSQe1W21X>7r z>e&L_y;b})96l$7lNIdk4{>DuT@u1lh+{#Xu_?QvNvcj@+(y&kQ>Rda{Uh8{r(T~Z-4h`JRK5*8X*kDVv#`Uu|@Ql z{bAVHV?1WB!K9Q(DMztNQmIspP71uCs?_z!cEjwXH53Q!=b5J>{9%kq;QYlGaNcYvW59C|ElpAKUUVFhK%^7kS224BVA}@5?|d8m%yV{O+#o1yOVqr4c8pu* zB_yR{h%Y2FXQZg+L-G|(ChOoihH?bL@_CH`nwun{uL;mr#ZyM*1%;?B$SdVYdD5kp zGj_oKi3OG;kPz#OB~aY-gT4Ixjsad;Ridviq&OVlmz7l%#YQ;eLp!dZT2&0>HM0)O zkaY}$BLT({T>HLpy!V|Q?AjSHurIWEW(Yh-;FlEx0|AZ;G0 zkKHgHzq`a2zOt8G0NNNt(jniS=U>0Fhc$abT9T5m91H0fOcbFF0z)Dt`Sj-|A^NNQ z$)E1z>p$t^)T<})M`vfz0c2B=aErFL91MC$F?E{9FYoN*U;kq-ekdtd4O8bd@z>Y3 zaNAFN`1r@Rv8q?_`M;UOQN9^H7{Ts8_Xa^XZ#;j&zfbcD3@nr7%K2JaWH0#!_tAWAqe)qfl zAITi^N?`}XaN28K8H!G5FGtgh$TB=>BVnNuh5!jfmW`@ttLj*H_!rn!x| zhaJx3@oi{5x?ba$joI7M#^$Usdlif4i^0J`y1Ke*bHxiUyuiYR3n`b&zvT$OCld`H z;sSKp7R0zIh||x+``c^L&pnOV(~ooQ)v#>^`k^PmHx>lO#n?26apMq&%tnmw1k;b+ zy&L0)n3c;>k3EK7xDaR4F08IbmIdct&Ihl*ij?PKkjVX!Su`!AQWD2NAOtg~C#Y6K zvP}+sy*@j;6&GC4!V$AQuDh^>tb}E2DzvnDWYZA^(2-;^4oOd-v=y5<|D7#-@VXWz zwnVi69S&$QV0K+WI^&RVBh7#&L36WY#j+xMb8zHbk5wy*Z0$8<(gI8rOpC6;OGr`< zlq#C(bJ93yDiuRhTY|GrZblbF9(Z_!oxLIL9WI_@cTS}xskA+3aG-J%Sd~u|f}3^u zKcAb-8Ao_L_GFIGbvbON%l6GhdImz~o!HF$c^OWgpJmUk3NNg&=vEtnmvBg@qD~Nk zR7&6^96AMbjQ5a6;*OJ1@XWSHD{!JP+OEC|I^lBc{0!4(W|`XI(7U66<4BSzLFYKv zJ}Xs7XC?8JKkxW7H~di>$INx9RITdi`#w66Kfb<`ZL4y04+{=CBuUzX=Cq`Do6n-> z%XE%U;T5Ya-RPr%iV|FXO&gb;o3T;Jp^yjf?B|wW4YPiuPvF}=8rbcV+g(OyJ&rxT ziPV%db7rO4v$05}q!EsF6o6HxO(tRWiXt1f`JD6a3Cy3DW+<;PMvzKN5(27K#kAQe z(ypOeg-rC^2_ZOYZ&`mH#%#=9uZ>Yg--0$WGQzUu%Q^e(vjJGTbSdlCujj@a zZ)D1pDco|)E!=k7ZG7f4pQ$YZ-n^*T8*|=tI!(1)B9qQAd+G%4z2#n(yttN$tr<$8 z=Io2F=7U#Xz|a2eFL}!1v*|c6Gzj?$^3o3?-sxi2EJOYH zW=y|CJ^UEX86P4s^Bw49618I&m@Mc#`pE~8^FN9E|9u|4aW(2czJ~tAkC2o80{1_@ ziU@1^Ui8OaoFb51%YBr3Q{8Xdy$a6qA; zY>m5DkRfnALA7kiOiXdyk!k#5z~%4m;FB{_>|Q^@KYnR1Kl*7u|M&k)So?C~A$TU_Fb>nCv8`zIol=G))vp}Wua<6$SX@X`0S z5#|EcYzY}ZGs&4}HIwoTGv~MP<#%*a9j@@-|FwtiQj&l8$H`2ecSFNNJpAy(oPPT0%$qlluYBbzB$G-0@-P3AWHQP3zV|&A zKeL$2F1zfYI}Q!z6-AF~=P?G6X@X@72|xdL=#ExYP=QSwF(bCfy!!7iV@^08M2PO{ zf=U$z?bvOWK1uk``;fDySaF$>4}~GZZ+snj#G#0^hZ!EEvT2JA{8jt8_oi>MBrC}m z%0TckKvpb)D`D|tBP@?<-94EQ6ibTc6;(zC0)~dG{L8<0bI9~0!~1+zuPPzZf**W+ z4`E*60DHHV`Hz3?p;WRVwzg?WT9UAAZHZnWnGjSf2c8=%Rf7a}Y%1~9f8WDkw{Od2 z7{k(M3iRy?@CyN}*OthYZ5akXi1h@(FWckp*;VGpKMBa^LY`h+q?!+LvtR< z9aTD;C40InQVwk2SYXTU5SbJds)j^C z@%68E6XpX(f_g!EPYXN`9(!;IPZ$CZ2;kRu4X|@tg^8^Wn^xu7vL}iTHe8$05c-hG z2zG5Q@gM)z#Sw?45usvFSCzd3icD5eDI1=6vVdO-kx2(f7^G`eU%&m09&|-f(pC{R z7+dO$*+H@~K=>B2c(TrBvz&YGx!iQqO;jrtT3T9o{PD-}eV^{`Zq}?>!;LrI2)qRr zjc)+0>HURiC!0^SS843t0G@2l({^kK-iMw!$kJx_55o-c8TZTksJ=Qi(YlV>V`Q zSNj9Rg0V=}AC!qVM-O&rXb6Do-+MjjRGMP3$gEkjnKf$`0Oy=@4!d{n{{5W1LEL12 z8`T>&c@496B|6&8uBtt|e|`}CsLkxmNr4JuN%FutG1~U676`1 zu*~LFE7(k|IIUk+s5?%%>f0N>>@ge|_HkUBJGW(Bna%4g!^HDI_=atptF@+;a+)o} zRf}{4G&d=pe5ju#Pv-y|(R-yzNO2+f!iZvI$VPr-Bo?x5Q<-g>?0KavuSnG&{mR6- zhn13M`}TOAi%vEYBCw!$#nOCqKcaI+_3Cy+`@CAI46SV&{r-Se{lUwAcU(v&VAHx1 z8`qYs@Ja&ws;QNU+Ox~AU5AP43^w+wl(w%c74x!t5h{C*YC*B&nUUJ}u4DgI3yMWg z*S~k9y%pNPp6ylkY_HmWaG+GstXunXwvZKM30e5$u>D(rn}9H|Zf-v?EL~El-5<0q zhv7H|rJ$$ViU|o}S`n7w&61_Nf(620;MAp**;QfB)xyBsV-rAp}=f2&6=KiihsI6Ycv5DKSAXHb{=y+uvSg z(fxL_+E^w2@Tjnc(L!Kv)b&l7JcZ_#X8!G8|Bd60JC5UzJDx(Zz~aS=$!4=W@ZbYn zb>&rWc)LbL4`U_l_I5p+&1G8Oqpjm{Jz8xX}_tDF~w?d9E8tD+q#|C|WqhRU|faUq!$ks7S29shvWrtEn<53CEtg3vI^=@fu;ZC`6` z`#tVk*TaI-H^1uGnEip-K?Q^+)j>riwkg1v`XT-3e-V{GFttUvMN@HZTNp;CjgAq6J|XPoIj*sV)%S}G#$B-gykzuf zx?c^5D1+WlB=ta#QVdSPp8r6Gj?Wg!Q z2<-AtMAz4lzKPM`WdunN%0*ir@V8kQfD$H(-U(9DP^sF!ccigESB-9Wt^XUo3xd)2 ztKKM3;pqDun~3^O5cT7J$5hHvgI(9QNrg7YFYa@*-?17ke*SzPq%@=39UtGfPJ?7Z z5Qg=mh0)`mN(*#oBbl%Ce7qKGyzgE@AdGpLBckycex>Jm%-;U?`T$|{Kp0~%+F+uZ za9SIT*>9v1yy_@jbB2qCKN>yc=2fS*YpTVGw&G8b_@&UE7vi~xY^NZW#Iu5RsWYY=8 zwKXxWt(n&5EJ8X5Ucnz^GsZA}{CGb8@sHc97J|->PQLiXFH$TPnK*GGj^q4Z(h6Sf zcnAE=aUmOpv804*)gp~dCX&>T!JUS3*{;rGlyRU?)_y>+{`ISm|M9XQk!Xk#MZ35j zIMgYc21|=H#(w8GkWNL5co$Iid(X4`s`ONC{8DA6w!|Wql}K@ z0Od;b`Z)G_!YVi(sKDMv&$E%la>;^8*>foaEzN>*c{GSIuW(!;Y`+Mg?A!An2*3+rA5GcNujTUSsGO8g^-ZnM<43qL zZ8eViCR0%qH?-wR8lUJ_k~@g|r&2Yw^J!flS}NsuO=O?T+B0BmD()*O$Tl`EnE=nR z_gCqt@I9k_Fc3#S?X%)WkxTzoqPuThI{=^ig9v?Yg~^SL+oT{&M%we#lNBEa-D2NjE`LDoay3 zOER4%l}?dJCGe6-JjXrg^ryyt{pB6MWW&Y{Tz>iG9Cg%Dbar-*Zs#AsV)1u1$8k_f z5d;CppL8m7rnU3<<4-b_4{NlQF&neDx7DBFH$6Z2AXv3rX33guEM32gU3-TZ%vTsJ zRjGy=jUd#TP#cs|(c($gfST4iqU}-p+jShAC_+|?K1QFB0vXQ{#-NO?NhYL-z@+_E zMXM^M6vo&RHBNM1ZFEfrUrOs3^urJ#MD4s*u*#5d91>E}n(-LloML=?Ge^#xz?t)A zbI6RzcJ=%Q+3wxD85$ZQl}eGxWSBg8avco*9=w;YtuTFqReh_Dl1N0Mmk=;^l}Qx! za~zAb!Y~TgG=$?~t{_B({vy475&age)LqZR5#YZ<+JJB@I1^Zr9nXs>o7hqbjs(v$ zmLlrd#l7PQq%@Yop%Lcd!dkk~n@`xb7jZuX# z2**Y&4ImAc11h9t%VHg|iBO}I1s74uB^rBu2`_3>t@{j)qcI^=d_i-wL&gEWs*tWB zB}7CyHMr7VcftcH1woWk=ejnVEvP~&DN)K0hK7U}1$tdcYa0|xnu;%J?{ugX6{TqZ zY@5sJr>3Y3DAup9(qGWAzrA)#!CprUW*iq14pe-YJSjm!7`l4{3Kcv)l+jUrEi5}(MfC}#V`_PZChqI#cT3~7eHc@V!$4z{!A)4C7KAW$asom_cVB=b z1qshOrG*rPzKxuwvksnPBfp8H9g6@ZLE64b6@%lBE=>{ybr60S%en=^qGSMUOLwfrZp%SE0vIZhUr3sXMzNLs93=+`sy|T}deeDFvgrO8d`#6u3 zHtg*SalGi+Gq&cXiK6BP`wn>Cfg{szZ95PK8MD}aCqQU`8Wkoq?A*D7g&UT#ylXvs zM)opT9HA0aQP_!9D}~Xv(r9C?6l3beLk(b*Mo5W>t9Hh7L8OdUyLqw8%tT&X8FB5S zA4LTCOoK;J2&cwhFwyTZ4b+68eYm6Z8m$q=ARQN1I;6c6t(jIPHjU@F@w1sf?QkYf zoI<9xiEMM0R5E3g*AMcdEeHa3ckL#Z%dvX(Y8EY8#G!{C%E>36%*>fH-(rizH>NE@ z*g>`83l>~qYE(#@<6{V;aoiSO2N01@FUt850;3IDs~V$2O2_6A zM=L8SB}!{l7?SWjj1c&~k0WCmtFUYq6Gi@_`OQS&(Y7rS9ZN)1FCBqGjX~o3n)SVT zp5Hmd!!K>;H_vb6+Ov-4s8ZVS%4F6M=W=yh9=SN{u%pCd zODd$B1jQnp{mvGSY=b-R9bw&mQO6_qJ2rSLLqz z3xpwbPEBydr7fggfkgAjuZP*xt(Y_`%^zRi%u^2x^2{2;AAM>(7oXC^wheiHeA56s zdlb#>f@4o^=e$$0Ja_jV{_7_>bjsf1_&!MixFD4MoJiQu#=u8DF_CPg%D?@0KbL=G z9OoRHB`FPy9~tD);HiyNDvLrqL=2#oMP^)WDuWNC$&J2R_nu5Yj;hHU~in6JbYD1F_bxUO3xwk8p@W?Wp-l!A~=dq?=E+ZMB{ zZ-mcYdlpVAdr(1PTz10ueeSyZE_Q6+!6!fYN!G1f#}iLH!8KQ3!-h>8_{mRx!Y4ld z38qb-hSvJ`#%6iN-)fP-PQr^i`mbudGhx&QtV0J0qkF210HkzH0fw5=_{g%@<-gp!Ge zH<9hnbNBrPN~MrOK47RnBr`t6CFi!VW|38!yzax}`OsCJ6uL_+xpRoFK|?wz@B>qe zJb4L$sTf?x<+Rh<*ta3ieUBDNCIy}{RD8+NCpI%@dXh(<%+b^$D2@bFLi=o{vXZIo zE=nu*bSbnk6pJCbe89lIfb4`cmtD}x6Sog?@`4uLcU1>3EXt8j3XYuO;CX_!HjfJ~ z=p?&Sv4|+NF^fo?rqr*S__W&RK z=mh4pD!#ofL3t#G`Z%4qxj}CFh8O=>c8(fgHb zcIa$(QB_TEPeA;Vmdk=EQ$5PA7LXr#4@4(f9>4!H_*yV8VqeYyQp*&h7 zb0S40zToOvr6J+BtiIl@6}L#RT8 zuoS>}Qc+6RqHQ7qpGxV7Kdy0H7uR#6L}fdnA)W1 zxK3@Jh$k;oTYy-vb3G_&2#lu7&+%N}T2>A1;Ddu*y!W_^Q8T9@#tX99>_Lwd_Vn~H zWy%!h&6~#=XPm);1q)ceem##r{y4YYb{oF$bNcD0*V_K3fx1HqiW(*LH*&l$7iV(h@1HFl8a^ser{QK>T*t|E-$uq{GG~}zHrDK{%sXw|- zOV<>rFiu>OXam|9>%faBqcI!YaV*D5MUFueB^VhDNCz!JD=Y8kI8N<2Qdq$$0SL#j zKrxc~iz9`xS+HjaltLm9k-oc%sI5{6yIvInr46Ch1R4w$lpZm@nXZvCUwiNc60YFS z-g7=edIzn4W2Zq^R~Lf=gZ%Yh|1~WwEsPsCj;&j_lFp?0;2(XE?|tukJiqjLrcIxA z(C3NQ93iYlSbfy$rKq3$D3XH&Qfc(_&tn!`h?qYgwdg+d&mRHfz|m*ne(ZgSaqUnZ zLEU{T`oX85X*|yL??)~;2DCv5NIr2V^43Qv%86X_(a&(^ESLZ9@4rm75|VHgesn%R zu#^ZZl80NiGmk9>L}TYf&kEjvpX3=iEm#N+qdyv4KLGmg`a zblJ4G!ig8O(vdXW{mTJ%4Jz8&1-T)^VaKIVp)HkR8LEOxS@XyPc~1P(b`F`F;>GP1 zW*wHrt@=E-ILDfTJcKJvkF968%V`bcJ*rlIHC5TRHBOG|dkd7%3aX@hLw2o;L3O(H@=}hD1_;vUze> zo!88`X2E~`YKWGp9yea!!Hj81MtUlgg~Qz03I6As-T0v)*I(hW`}gvzMM2Eu#Yqa@ zd1WV8U)oA(ph`=#!|HV*<%HzpADh5}ISKX+1SHdvb<2kMpI_v8X=#DX_#{V9cX)Qu zFk5!owaV#dweY_8wA0Zd>D^i3uG?-g%76_r9^0fnmkSP{8m=NM<0QQV1=Z z4uN_j7lE(WqIc$%a!mi9v;EcyuL%&=CX%w@%Xfc?FFf=GrgR+3+_t#{#-|iiQRtdX zah&uo9fv>#Xk~C6iFB+Wh|(IT7OkuKdl6dH3yMcB;2>1CUX4s(e7|7=r|$I(tb}z< z@(aOeZKi}MVKRQ%g z&!q^*<{V}+nS(ajI*!A{i4)0Yv$gM}lpKBZ(Hwc?k!;(xtwyhcHk*-XU7JwLUb5TBC}}NTnIzJPqzBJFM!0J)^0N2iedf>bSFVDS z-i34iDX1U(1aay`$V-pK+*h>s+7k$)h*i$_w=jULgg`6uBZ~HRxcG_=t~$4ghaMQ9 zT+-x+LJDQTb2#DfG`+iuJipm4viI&P@x?FiVQ?g*t-XXQ2NZm8JV8EZXzuWM*Ey{$ zeLlx?>jOG6f;)aRz=C&ma{1XAgs$hyL0xb)EZJu=C2XEqXc_>a0Lq%60<#a#a{YBS zy0dFbndL8)n0riyV^7F3V^R|DlqN1n2sUqha%!967(8_Kp-Zhn%_~&4%Se3=eCzKRm=s zCuaH6znH-NxAb!FGXYcQc&MtTx!qo*<3OfKGHFf{o)7RGK_)3EG%U!QlY;H*ODub$ z%8Zjc_{aw*vT-?f*AyWz$^YNoii#Ev0Dvx18*?clTpP3S#EzW>u< z!i2+VCuEp)ViOZ5ra9^K4yw&%cI~Xt-K+7k4#yptWvHjji(5htJHL%HPidyNJK%`< zZ4`19LMgfOq89F2qp2X7b7T`|p-2eB;>CH6Ii-ag-`~lmX9jqpNAQVvH<3z90$;OX zWr41BhADHKc;CBPSo`DBpcMPow6|Bg4{4W$Bl~agid*{cs{d5Uml?!IjZz8xjen z;~<4ZOFOA+G>+q1@s@}h6oWw-QGFc8tt}J~)ba?FQaCZy2r!ZIjEK%_y}UL@L~EPx zD1|^si4%P%47Hg%REnzd5eN?V#<7hd?(JI4wB~V~mr0RGCh$CuL?ZFJZc@B&CX?Zc zE3P1&PS@^1{JWHrxpU|Kug`I??TuKl*3{F4%^T6i;1KZ?gku*0V>V`g5O$Dq2;X2F zDI$8{vNcLY8axv{xhmk|A?u-O#?J}YU2?3jbC7=ONirSbgrL46* zb}~vSDTaob9T`^ljBxA1HOxPBI-L_H92DAU>{U3+RMLJ{HzB|MRPP?F$nG;=p{gYvoGBmXa3OUW1sKEK2 zu6hz+M+*$~!~7GPIedcP$M@I}qjaERAe$8=J&7@bAcSH7C!N{MF>_K#3B}=%=N=ki zZ(zkp5^?n01z7MnS%0-?8qkC2qNQh)-SHiD^pEHX(^;pje2@ zfyD2=y(SmfvbIcXn`CmQN5U9{D{vf-8I#jAnUEjfH^QoI0T-OpOjG2H=@{>E&GoI! z=u9%wQ$j0^%t|i0xRoPkrSMV?C!W>LjJY1)`(c%CV8PkV96H0}fgklk0OOL9fqgy; z7Y{M_#CG-KU%9Uas;t0UoSSDNU$+%TP?6GGyidGP0DEo?=%`T8D0)l;X04RCAyyFu+a?pK%Ed|d zCZdeS3l=M2qj7`)N07&7RHsZ5?%Mpi9rp1Ar@vw8m+iheT zvoSl6z5ODDanx&IILERLyQzelaoGe_Wyf!ULF%}~LmfwvNMyZW>#?{l>Cf zqIOu}o4WU38%>}zoy}>s^$zpm#$CK)LMK+l|6ujIVeZ_y{QckmJzKYKW%A_7j2kzu z_WSY2A79(gBN`n&^jDU1X5cme^3QTBFj$pXo;AI`o zdq)#pt4b_?yaWQ08IbvUaq-wf1BV@*;({|;@Ek#ZPnoSx=jbil;_Kz8=3G8+Y;DA} zM0)Vj^TT}ira=m2gJ0D+!f@x0_OjyGEH~URf$qiq-1=aFL0^+F;I_J4@Q!A7tj@9W z#S*RyjxsEMG{=k26*=ti41f2xlep-D7VdqviUvyk1_ksD=%}8a;{L~SeD?ZwE}f7j z-&1D8PV0=FcWN{9XD4{>xjaW7-^}U97I}81&#!*mM`@qWk<%sp2!`7P15v*kBdm(2 zALaf6mt5A#RhPA}Z+Dq|XsA{+ff9I9Qp)=jqhgJ@f+8beJg{qLg}?vvT?{8&KKGYX z_^Z!M)qXjl>RGf0TM`=Wn3+xz>FDjD8E~HJ1%cnm+iAl=m zi+2q%7{Y{hL1n;@D;abMCZYp(PEGK>502;PX)c?#lrf>kH-_XmfvYtAeHK8Mt0B3f z!bv%}#xOi$zxM;hP)?zxpeZfL4Fr7sd%bk^_=FWrrp@CVY3L0!RRQ^eMj8-OaP;XN zOdBs5KD&)mTa%0*m*C2GwX)*t{gj8HwbP?o@bQf;wUNz$afzt&)@gw@zrC!*Thbb$ zP;Uc^$5N#fJ-hn|f`IXpJ7{Xk{$ADw^3{H<(Ps=iv~Cek_io_Gj>E`>c^u(H5kOm) zPec=@4=OzIPiV zBO{bcR4Ntjyz@@J`OR;e@!1%gvu<+` z>vL3`>d;t@LQr?e8Dp&YO>|xR&n5LX+wmw+hPH%5zUZ@l*IufnQmtJF(=wS1^XAQ~ zfx*3d_p)o(u7ffk{cr5$zIOp$0+C8Vp@?W7hiGlK#r2>rCmB0bGtD@cT?TtLqyGCF z=uJI{iR}o-fm|Mhi%553Ry|92=Pz+94vr2`6^B#Lc^B`0_Z1`@fiX6!+-OEx$^9MO ziuQ2{JfpeiS0i*zO)<4o(9`ELnV)9abHj|3G}$IWE{f9mRhwrQ28K}C$WJKY z@ROQ2VyegT^+onzbImGc`y4o~u;mMcz0|A&zxw$AfBw0heER?F;2-~WFY5*sPD zf^p3b6PpCnjz}=2LqOHwNN8$u@r#B`2F7~UC0l5nQ@%3JEj>iq}?_@#-!0_Co!+ia|B3_$EX`ssD4fa_~ zc!E??l5KOzr0uhD##t>)X%&3qNBum!zDi4rOD3rq$W=(Sr#Pa+7CD?cB}p;?*@+JG z<|U{W6e2K8>2&Q%RzZF!WcjKhFTRv#{iY&4T>%5bhNDhv=B(o~Jpc3%1NkVB;6NfN zNu(T7DM=12&)>7X$fD=+gi_GiW`j2}2q6vW7Kb$}hWW;=!<>D|c&@#)g<@3iQDSU` zm(aYtq{rLF8WRcL+E&8?r7HK|{50SAKezG2zq^N<{^K5AShkWNtk$+WSoWH72usB> zn|7@vp}T4Fj-|gch%4r$DTu#8PZi6VlIjV#7svyn~;*4t(40O=Z#j29ht-4O{02)m7r&L^de78W2h z1cYRyOOGkAbEt=0ZiGs;g3=22e^=TO80}g8^{;=;^Upueym|Au@4ox!@9$^+{P~=H z_Sr04xR9o76Bl26@tZCx^F{^UwF2updEJimmK-hTyGTy-_y`|-~yRs&qesmauj z*_gdu?QL6jLTmbma}1WMxDl;eib(j&*cyP~V2s9b>hw+#(fPHoN~1CDQZ!I8!?+G$ zLuAi_JW)GN?1ZGjNoLP8n&Me=1Y&=Rr&6O$RCKF8cgTn_f~h+-tteSNVi^P5cy5c^ z9;=^vQV}M#YxZ#Ey=;`U<```aQ`Fx(sFTb2C zue_2(B7uo&qa7@J)p5V^C+Pq=7#v2-J09mtUq&{!Vz$0Sc=OFLjExKq4niTSSY9fk z7cRy*;t1To{#(SPshD*eF=ZcS&qQXDP);IFJ{wM1K;l<-BcEPEkZR}nb1&rlSuPJh z{xrps!gT`thWfN|A^NT%pWc3-p?Jh-q-pdl6AOH94! zxG{hu2ucQ53g#b?W}vIgvgKA?)QKV}2B?%ZBe{@Dq%0~7l#7~jvF=E407q*E1{Cw= zH}MZ&Op3BkUdC2qQ@pDlY0uCKV|2mJ^EnI?e@ z4T+TGq+>Gd*;?eKRRsWa#W3rLCa$}viQ@GNnQ*8KR9L^<|EoB6x09l?rgi8BI)Wg$I5sTBUhr@Z{18AO7qV7Iande8sLFpN^w4eDJCcWT0`=E=_^Y|NNkzzFb7@-CW^YYb#`% zB(1H6krBh8(^5G3D!*P>L8pPLy$2)1igG!mkP9i43@R5gVxU}7~S?Jz(|95=&PUIr5ZtJ~6F{_9WzTivD5EZ9g913;%aK|MV}@$@_-ho+|lV zz;Avz#1VfvfzN$@2K@!it{qi!WlgRK3c>sTXd)M1sS%Zsg^Tm--tAK^8LCE;%Y~FH zn*4CciYEqna7=gz-S81A>m@Sh}W+#nf;71i^g#oDOD*HD~vw~@~^Rw zO{G%dzWeUO_kHHipU?Nd|9yPl=R+U*5ZP>&+its!Ns}gV)>&sAe24gJIi4|5;#3)R z?`^2H)6lMqaUAIDhC<}w-nyRfN8iJAZL-Jp%c$>u4KBYLQU>+xLfG4bNsPn2=5qAT z)u{U(!?aGr{p6ouF4&I$^b)9!uzb-Y46YJXd>^oaMvYc3T77_Wug}dt>7hET@T(y| z|8Wl!TtmJLJGYeh;r|rq8?et;j8peFX$++R9LKO~=`gFF)vVoRqujo4i=-Q1-HSPf zb{E*aN1+ttingeCI&GtdDuhzephCsH_v~Z!j0DMqz;gtBT~!hSmOeX(E|o|`IesJk z0lAWu1RWeUkwcr)@9{UR+UN<))D47R66~ zyoYHMJX6tGZHp$ zDe&Fzjj(qh#4&=<7`Co0arZ!l-oB7+yFx0%3O7|Hn=o__YHk~>u&>((4ZFKEo&$Tg zSNP%g_j1meO@w)$yYK5~pkE<;_{C56kWNZmSKtWPu`5Iw*xOU#sV5X+Xh@~Na||jU za`R7mIrq$FTwk&AH~o|OsyG!&9YkGE7>FW+^eY9g|k)Pfa zu&pPA!0_aQ{WQCVVnK1sk9yg4W`>e)-yuJU%ejr&@7rR4=lcO`U)X}vEEzYmm7t<% zIyS?;or64f*RxEWIfXeh<{mWX@hbwt#%ZfRKSXyiN5Y$cAJkRLV(?a16eB7?FECnL zDP?0Y!XS_lYsjjP3Jh9ll&%ZKP@Bm0sL4B)`i`T4u?Zo;XiVf)j@v}Tw%TaW8X@Ym zBpSe;l{Js3rqmZHcA{^Ha7O=BRLVk1hm7Min zrL5v!4Jg*tMeC}aCd&IhfWQnOWRxyY6RD^xj~Y`4O))^Te~&IVRL>iXa^P!h3nGyk zo1dt4U5#}AT*KHJ9hC7LXaCk1qo`Cvs=jYu0&#Hi2zz>ZC=?2O`qQ7Lsi}$EZ@-?ttz1L<0JIFbliwcaCHC zDV0#S-ekXXT|1zRn+2&BM7Dw`mJrP;gd5`T=tTq46j}b{gDf}TcnPGa(}C;lwrdno z*1Wi^f|Rxn;O3PTHVZq3?c7#jtFot!(xnb)@suNgl`mEzM|j;SrZjji^mGMu?}GTT zQrZ?T5B5`Nbb(dN%dA>a9_3i`9O&9!W#`t>1>d9qClY8)r3E@PwSxCX8&)hWBSbW= zNB3j_Z(J8tpn2kn zVk9i6x#@rUYqu_)5%?9usudMht*F%A`*^N#Jb3ES5uS{E_l|%NftL^r?DT8La-4b* z`(N)Fs&2z`B<#kWD5*hc^9WxHn`)uRTV0_sfgv_3g33 zJe~(Z073M8^lY#2vn_TV>_&5*0Umj%@UmlgF1+wui52mK61Q1G|1O_fe?Cy_C#CGQ zWYh5Cq8u+Qvd^lF`YN4<^(%_3S!VB(6Fp1Dz%x%3Uey`f9lc&XyJPAuAOyL+ibcI; zl1YKnp`6OkI@YhYRd#2frxS-~GkOG`7AVxDrX5c=k2lSmXyc?%E6Zy|d9( zjp8jzg;5GXBRGqMy;Q8u84t|{t;2fFSjUMRKGdkEG3YW8k1zhtDo;BRD>l$*qLpjfJm zx-X3uJ0r4LfeH=fiXoL1xIm$3@H{~_VJKH#84NaBs4QskTtT@!+C>_KcHy2*KsB%n z_*XoRwo$``XCD(O!LQm{eTjsiDIGmN#xBl_<@!KcDc8>`qVswQOIfZ|Ozk=nDM2D( zsFdr!7YbHLCfg)xPCbBX#ZZmM^pq{)UMLt_Zoq+TQc$hhTuR4<=B&N`Fq$V)X?whU z6t#=-e=;dB8hqd2``|c&bkb0*+M0o$1I4@{@CDf>ffE=41DUi1mVtqE!sci?2|+q( z1$g3iYh_C(#AdVw{Rua^r_pwf1D+@F1B2^=4na5qM_6E;N(q9hA&3QK4Fnpp8G##G zu$hT+MXMn+H3`rVgq9i{RHMh)fppT|*TA>;N@+-D1fDkd%07#sZ%c|G1kEjWJI50w zTqqW7+p`(l=fbt;F60e?hD=uA%4nq1P^m`ajE+_uGI~xE_L{8Yz}UV|*n6Rry*C0w zxn%GX(BukACHs8*K`?+CoDpx`OR2Bv*F3+Oed|UTH@^wAi2`m0FPR`1mh9TxP43hY zTASPdx2GC4AHAl8w;%{8_+`?Lhjb(o>k_dOyNL2b;>i?5qbD~8SSBtuuWA#qlmcyR z?no{7!{{2lG>+y;z>UgQm@q`RE>b!T$^TJ-d!a{pa19Z~2-!e6k~IKp0HYMzDC!Fa zQO`e&J={d)DPr%ns9&ox$||PDZlc#=ad{5}%$+-zfBL6?BA3fCZQ3+k*Jbjg$?V;` zmjw$J(AnAfiWA-&X>SG;4FjK{!GU_%_H}fFF$y=)N-EW27ahVS2+H`?B0{F4s6rUI zSS3O>BaDyMC4|gGeug5_X^RHTfLNMd$V?6R)d8N1l(w9R5E;AZF$U>00RhGcq?5$x z9L7i-*@PXAb+jN&BZNe$9Eb!`X3)A!B0Y|Tmx$DQ9jc`vLRCTtY4a;zC4#CAG&KuS zo}Dy=5tNFWREr?2LaAg(rUl6)6!HdT;IP9}v@}Zw_xkMI6Ow3>%$n+`l zTxf5qg@Mq4sVzRn?3HY^GwdK7=8Z88M(LVkOp5x8DTK82O{r_%PaDm%`Gpu;2-~WI zT7cIm5JsXk}9YA}1qQs%tDr7K6|lE2KeG z#&unkR!ADe${N66ENl~oAxhhV_gZU=6p_Qxwl9u)z8-5VJMqqUzLT$fT1o8LrhO>1i_XPkaUtsfgzP+zaT=4UgWqrw16MT>}pu&ePn{H8-F7Dn$= zDcf*PQyK~*HVo#vm^CX1yLTYQbwFVR)3eWpQ5*-tfJzt~xE%**R-sUzI4Z^Z=OAbR z0k7NvHp~)+ptOx3?e9@@T<}~JP}YDG{8oxYxojwxU;cdzo?g}r2a;YLej8(``dIMd zL$KfESgjbU6&vxXl%UkGhA0+Zc_Q^I;8z+PA1VSbk*UxEKd9f{O4(4_Z`$#Fs8-|m z3y}7>KDJH8hGPg}C>A27iiVMq`uXw^hzooRZeP)&T>{?_?AL!v*}9JaetcV$A-?sc z(gFIzK(T0u#EBVh=#xUeK@_VIaA>HMjIACb>Q2#8Dat7YMuuZAl@%Zl8k&gV!Om6?ba0(QID10AGAB{^%O5I|2{?-R5(0pFRkp~ zQfAS*P@~LhH8}e4!o%niN;f2+h_nsut9-rbG65z)g#)8^mzju?Ir{v@6r$hL*eJRE z{jlTyFEb|}Nmw1hOSZCn(Ld7Lw*e^=RQ(EeK`lm8s2o88@Ri~8vs*a%$Q1o~jZ-l^ zbMG*x-q1;IdzssQm1D--440hU#KR8^G3)p&@4394acvHpU(9p+uZKA5%nmL+J%g$! zo_eCdowxK;O-TOeL*o!tjnnK=*;(eNzZ|A4t%$;_dCSM_?P;p!NOSDx8uh>KkZa5b zG)6{>)CSjaF-DBaBd?dHFi7EG(6w>B5i~Z^N~14pZHl33?5q^E=%jT7T0f*71)8)r zIMk`E7=vN|yupT?!{~f6TH%FZR0hMu3fR=H<6u~PzC#Z^l&^pN>r|^%IyyR-F=GZ( zr%olG&vWw0CtE?8gA4|Ln;mdYa$NgQ`QUoMZ+ZEnl27;nB$Cl*AG{RghA~3}5#KQb zs%lsFZo4N{VecMNlwaNc?6kxV8>ZU1K38<|6RaLrgyrK=><6PYseJSu}7B(f9H<=to<;JD*C zWc~+fZ<|52xPx6gpC{ck1ILWev*#ry%(#@K3>fI!OxyTlNhVuqYMFruhuExCf}Z7TDg>n70Q8Gdx{2(#xjA>i}yvJw1dvstp)Z0)_CKYxC0yGDBM!L(OY~RbnT!4MB~* zHrKTYZ-HMQ03FxzO2YuO!Erqj372Z6^0FMr*o259Hu(sFh$rJ{8)6Twh=5>&7a54^NY(QJ!ODk=DEBa)V1$SSW8yKm z0oZA!M&*RW+d4HNf@ne&qNadq>8uUyj}|z_SX!tB5E7%5_4bOWjZO?+U;hKvILSWu z+_T(z>+KwU^wG?mIg4kWSa@QF#XTETKB-V$Qz!tH>aarc~@Ek;szjIE!hWNq&9XJ8(Kq z>-pA(IL|J26vZ@3i0ZjE zC`3maTd^*s5kli&a}8ntsMhH6I*k#zMiDYyW0#EHZj=B_^nb0q#C~%{T({71+&U%H zixRtxjmk7KRqQ5p3aO0Mx0PkK2sG-qMZ|tbtGCs#WXTeqdg>|q`ugxZkCv7e=Fgwc z`RAWcHk*CJ9Sc@7AZll+2-6NhUUEJ>bq{PAghNk7oJe zawX1@hk$S}DnLJe7iQ&73+#dl4BDEGIFTBbAJ|A;6wO5l3$UaFH(@ELzF?F}h>DW` z{AvWoB4p%6=&4w=*O7?8W+GwFQ3>JbqjCTELzqWyLEZn1js69Gq@raYl!&t~##t~Q zqm>=!wyeYa<{_(B<~k7|v|}Jaz1>=cR4d`Ad)#PJSZwSoIBY>PSDo2p*I7bP$%Q=r z;2`UEE8IlH-ZJ)5LsiG;zHe!o2rGON135=RP&I_q*}a|@rFZ(4;+TlK&-F&rYvZVy zeN_y_64APkKaBjdG5Z6s_#u3YPOc4jW_Tda<`rF}rh0bHkv4GVc^<|$xM{-?M<2?x zY18bkraqtkZ|zk?Wf%<#qedcZ0bpYcp$ZX3;J9@vXRTpaN{~{vz`j6c`%2O9>+nzt7l{WF*-&C1l&j=bUqxGGz)k-+VIBtclAZN?vQ)VvGXzWTd7{p6SNL`Z7< zyO`fR1*6v3_rOcwI3ChXkZqn!ZqLto?4i$5s3?N!Fxi$Vh+rQtJb43KcB~-PbR=h7 zax)X#I$8DNJxrMSPUg=0Fz)u3a9zW?CI3#>K%OhFzk@@Lcpu5O<4HOLJp8MVkQ>=e zwGuG%h>&^L{tc}ir{lICO(vn(v-4THde_jqH4E5BUqwYrH?CRE_r5j6md%!u8tljA zsf2bt_2SY3FDqV1hgU@fjo8%G7>V=Ju?)YVJvG3}Ty9a;NML;y`ln<}7Go&MRF2N>tM z$LR^N6SF3iCTvci6rv{5w0{H=V`~^{tU{?a+G?sDBx~%ud+xc1Cmw&2tFF3|ox66j zYSk(ZKm2euZQ8`vty}rBlgvMJ&^zb3_MqEg(#$Y!uU^ zkY~RG=bWQa%a=p43FnlPP|a!7&wpjxCLM4^bPW#3$Vsl^_rX$^Uj_)JRlD?s;FJX| zTy$;|Yt|R2gn}TUNhj-g*mEH5L7^&0ByG-E7+N70AuOO1u2rzCRP1slE*0YlgLDLb z)!;-CMWrB62G5NGxWcMa#>*g~4JrT}f#VQ8_i8s^jG|(~+l>0GykzhZE(WGw2meF9bkvb$J@E1oU<8w$MkWpkrM$t|kQC(}| zGNvwqQ|s6mgi>G7#8jX-pTr1r&=+m-q9nHN?ryrfy9vXPj*brI&6~%vWy=okN&mO@ zHd?SA$P5alO7)3eG=UK`x6VPRJVSjiVpP>8y{iBt41P6-(IH__MxhW+5)}-yd-GEa zjWpx}>VToX_3YaEyjAIP(=@eCCkP4%N7LW4n0%Es9-S6Z0v;Gp{bh2m5o%9WD1(Jk8nR;%H!1Eji`+8X1y9bbV zA$$OF8ErsCf(TMrW)%orR}kdv_HIg$Zjv-fc;q+3JpOo&_kVC4S6(-c3CoM*3yNHq zU7Ssxnjql``ubF)wPf(CwzmO1&qGBEW!JIU`QaFU6c`=JdfU)N8_a?;i7-~V(~j-& zm>yC08^ECu)C691gVWE_;p)!8Mkih)?KGbKVquuZ`3LIGzt}lwjEc%zm{Hq+sfn98 z(fkmGVU30w&qto;5h`V!p+caPL5RAr+5R-v80;R*dl~mbcXv12wr%56fBH#|Jn~2e z1_sFI^URw!k9WWO0Bk{%zTJH7YhPp8vSnO!(M6;B?_k)g9;ZI}LZ%sZEk{584C1s? zkRM7TXEvelx(TzX2U`Q)^uni5-~2A>q;v89h{y1_<7KRIm zQXWbb`wU76nY6uziVvv-Bwh5@HK_moFHBM6{_~d*N1uqi%7YFE{p)k2%odw6p%vee|xrhtsb(hEp#%mga2B>$f-HU3RLt@t2#aE;f21|X40aQNYeAGGtmE_>VaK6iuyjXzx6l@#BslnY2PNUb2NuB7PP!061QngqJ2I(m)HP+%852w&J=8 z_H28S6-&Ow>KA@MsahqIoq+455z-~oGyzrJLq6X_>-aO6G2u8m#+|^VDaTS8Ud^hN zcQW;mOPMpF zE;*-(u5Be=+!^4y;5wpK&nlU434?&yhaJuJ*T0A351We8nuO=QQ8)Z8ZH>`@w_AR$ z!JsX76y4y|s*^41Yzu2*6p(6kxG80oN{umAxigv%8s`KlWldGIk)&aT$y9?_m}Rrr zoIpE*+x_cvij?*kjd_5!?WP7yM=?dBXr@hPkdfoF9?6V>tn0eg;bP+G=)to@B0&%Y zY~8vQfE6oN(ACvNB9Q=K=FFK44Gq=Wb1?1IjyLMJ=%c#jHuUZS?)6t=mOqL5)#K38 z3c3u%iluZGay2#&VHhRCft)ZN;TqVy9o~5j&b!`$*}5JxRK)$rjmT@RK+c|nIAR{+ zwQ(zE_a-n7 z^4c45j+=p6u?$+K;J*94h?WlI^&iEVHy!=L3qTgpISvz+ZJUb)n`@XGv4GGRC|8l= zrXnxB4CkXCLpT-mGmnASigWqph?$cCfjseirg5XBzBnzXW`d|- zJmia-2~#s%aZM+Ga$^VAUfzrp&^Kf_>wN-45wbu!Sz?SV=5tQ*H_usAJQ?|bIwEz&#V%1+*UX&XB?6nK7lk)fP*G#+Hu^q7s=AC5I(iG}wq z=Z7D^m+i~;kZg9N`ApXwt4b-tAdIjM?0T`EJHPe>Pdv1Uif;o4HR9s$Xs=0B24iYe z0%L3qKd%M^qiCG1NNT}joF5eZu11w_&^77Qm`Z9yT?EExjc^>CM$&mLf*9p@L4i2}g zk^Xtkx#w`moI`l_*=ITW=%YFP^wTYO*cgsG?zorHbKf+3>p5C}cQYY6Qtu3X9|2VM zJ-`dke~Y8$y_?H#yo^eI6$^j!c~&m{7N;!u6VAQ#2N+Xi-`+Kp$|LmeeSzWpaCAWX zQs#y>AuBGvDT6TRAjgWQKSSajU*`0SzJm($^lp8KeIq;A*SmsBd4w=f^!Kf&F!&rh zH~gA((^om|ik}k({cKzHBYO9&q;K~F4Celtrf@rZ2YLYqqw;7S4F)oSbQ5S5GI_=< z&U?p2^saiG^}7dg9S8paihMe%SA>8{0D-T#{qBBd{_%Le_|@5zi;BB%?V~>_x$z?t zm^t170WUn0;~h00F=Z;|sb8U$$wT5yMhIQDqNRTm>qI2<1THTvdTF=zH8=O2o29dI1v zC6^&4c7T_}ys!|xY$H?@v~?nmI0Df*8R1r7-!61d7xDwwAjeHaO>+@P&pzAdgqh!%#UZmY$R$;L1pBt-`RR}L(lcz&b?Pz9-%0ieG12o$|#K0 z92&DRdzr;TT)TGlaNpM!k(rsKZB7$GIkXN(fJhY6M7j$mR7h9QIx|hNzrvHZzR0AR z<2d!CQ=^PIQ%@RxjrNLwaQ`IyP}``T8&A@)r#H^)(*_;6fD8s#xOG}5G37L(VLJ7k zj>dD@QW2xG(zG!M3=&Is(?)@GFi`~0(o!|jbrI4kf;Jw(o?p~z2RcHa_M`R~1AY+T zI1XOILxsxrjG`&D z`}_ynG)5#b%4hZS|4h&BrR=XvUZKVj;Ovyr08VDBpO`9XGX%~C1tLmA0qzq*E? zw1-kT$Kr=S#-u4H;g|~j`&NO-Fk$?0Bpt<;mu_WvWG})QhtawE6{rBMEq!yt>J@zb zYkS$fp)V5O`z@f$*xZwp2R$o`eCexIPMeoyUsstISNVvH;I^ObV?w7#wX9gTwnYE1 zVd$qlESa7}2a45eeJWLB#RwWsmr5t8hCYy{t-X~UTQ;(M^8mt0Q7V@X=1qLt+9=BC z+v(jB0%KHEZozxmu+SJCjIU7$Tb=>5jTA-z%!z2k2NH;>lw=Lp(5w!(-} zed&5J`y)~jr6JWIc2-8C&ZKam5wPojbSI?$b{{eUymL!JI2z^ReP6*V&ij%$)BKrO%I2W7)vjz~9P){!dU*n{z_~ioK<-BE2xo%CADYiOg zRMOt$u>Qqi{^hH^^bA2dX^Xo9tX@;5eL|9vy?M6pvT~tP2nr)%r1CBp%4?ER&>{tu zie}f2GWk4oPLSmDhKZdnjxkh)!?+14wk;jvnO>h_)o|x8`WWsHx%!GuF1WOVJAbj4 zU;MhnV`uX0)ASLIUpo?%VQXqjL=it|HEosMHLxUN?N zhDeDc92;V7m;_@r(n!mqhE8p13_FRNC=arxQW`}W9oMPl5}Jm^iBj6$9LM2csf@mw zy_v!>uWoNITH9+fQ$>gr0R3H$(ccw)FA{*Dch^Jo?zc;BcnHhDmc&Km%f)V@RA7V& z>>}1_rd;S^%i5bp?O&||!a*Pz8Q6dYl?h72o7pyO7eH>ZlT$DJDaRgrEye!FShezI z4B%2mnFiz)y_-@BhW7O^u(yYJF%S!3yz1o}t6-P#U~pH+1G`3mNDaPZSovZZtX?QW zf^?y8kD_mn1$D_ta=cm{ecZq=VM2}5l;z1s??o3ztSE@14rXbtx3!IC+x>2X`I~As zd5?taAfueVSXib}K&&yB&7fy|Tl3Z)SQ~>5LSpbLsJ~~mGDxul@*v&L z#)#j3jpqDyU1E*}AU4P50zE=k7albd@yOG!$N~ko=g9+5ck}vnijxYXvJF zSkHv%ow&k78NViU7SBf!RRyq)P>p6NKY;NinQWTfONaU8w;ti6f8Wf+_Nl+~`r);S z%0!DvBBUyesO3^18r9wE6IHFm1OnkSNR2lvN@YCJD;oujX6*=g$y#S&*m{H6;Sn!1#qJN=*KC&O4}SiDQ)_W z*5GSfe=3`?!%9AHs4B>2g^m9CwpNu1t(Jn6qNb)^iAr}#2`$Y66+odBT8L99uwnIT zz?PIzs=ipxWCRHp%4Jil``p}Q&tE8*S{h0sDafXwR4`NMk%`Po0l{oY zPBsl;75)4|)T#?{KKU0oSM)-22YSf^s2}~pQdGT&j^!61nT9PZ2!DAe-bbz>@$F-5 zw0rA1f`9o6>gJy!|LRkCKRg7ZQkZHP!iXufb<^l;a6L@Ef;?{l?%#bLGOY-wN_f+4 zm_cB0D`x3#5%V$12 z8I?(ps8o63`C*!yJgWvBy|<-`#&cogsuAvgF3q(cn#6*4w3BX0uKf$lQA_mkuJ$XQvQTTx_uGpt>iqY@gV%UC_aF&neU8prLO+q${$ zhYM+H%aR$NWY?apG$-0G(Y%&8^LBUbK&2-|{#g z`1m!Xy{6yEA^4igPDm-pCcLP;LzK{L>WYPpKx`B}CC<@kP>+jkv;?-DRAZGlDJ2qN z>7cc3Z3J=Deg;eL#45-sWeWydkQn8LG|*BTC(T;N))efl$bgUnfsGsr17R3Oi;MaV z)EKld1S&+ySWEf$vv_;xp@#^=kV`MU6vuH0f`CUKeUxM}$psf&P`jSDE?|5+n6|Vc zqiRtL5Exy?P(k1jLlI*tKnO^*F4m8r>Ywd`I3NuAqivz~LK%fNISV|azl9KlelOr* zHPNG)-}q=Xgb*HJ&|!sL8{^2L0O5ft)wkczY{c8(`$28dD}>)0bT~QZv|>x7fKa_b|D=tG?FQSs@nQmHD3=Fpw{U0Zxb;1 zb~Fo&G{!g>p)va9prtVfaR0yS+eBpmw2tZ%#?PeP&UM||en8~R6Qh79SchI?*@(C; zqkv#!_Suhe+l@g)ZI{xqx${tSOx7Y+5qQLrFTXa3N*NhkDH{seAAB3#ccarK8ksh4 zxETE~xz!u(1CNQfW zC;XS)$jjda#l`4f-49h@;|l!iufuHK2C|#r&o{&H08~q;FZ~1N+;b48od_>2ML)S1 z0#LW#j1bZI?E9c2U4&o%f?(Sw>||W9hjgLNi!#+ z!PBwz3@byZTYrGr@EnY5gGvEbynx=erQSKk5%iV~=&n8xDXO^w1OZE*zL#(8UBR05 zI{=&4ZW@MorJ)k(B|LstAC+AN+FR^9lOGHSFub&QkcV$q>`>q>8R3&RR_N;2oHx&9 z*Ty3EJ&J9Lag-UcmFe-pC90ZzY{< z=7op0G5e^cTyXxmqnJ0p&0bRuVKnz)u%av0i)w6?%|rq#P@60pDMGpdS;pWCW6&zJ z(L-tTMTjVx7DO6CRQ)){fN7|sWNZ;uqcl=R^`j7kktbFfIV#7*i9E-($|MMFJ8RFB`Mx?F_}LQ6T-!Uzlh&h z>sALL5_ri@gpjCU1f{AtP7_)WqqUEa85}ojBjM6gm!*&>T>=s`HBTT63j~z_qYDIK zM7?y|alIytDiiqqAUwuTJ)KN4%Siu=43F$Vh%^vlbYQ_McEO5CSSOM8NH#r~eQX)^?YeUB4S{$Cg{ie6`^Q$d9Q;TT)K3kxvg zbQjM96Iwx;8e2{n5^hvjIiX2;hJ3-c)pcxC(B|{n?NbS;R?R3Of^@NYtxt=BohK{6n+?DOti3uNRd<4l$%G1i|tns9-^AE(HJLc zM~MM_9njfR*8gq*7K@36%XC9&CCiF&YI9qo z$cydt;f4gKbJF?zrO)ve_(GTyX^el}d#>?zn>^k35o-Pd@qJ=MgqI zj9=B#Y1rF?+1q11L_&eCV4is@;+sqG%TYKvT4E8$Y_S$pk3TEAq-Pd)YoI^kK06g}PEuN>1J=T_ukuxl!`3GTC$vwoZd=|BK zDHvr-62nK+eFzRb2I{rH0pOCDOqp@+|A#?;xb zKSJ2pV68Q!AfVH;Nq0xt zC5339jOvC+VH6LkQAS-mv1nVPbZeUFWpqBeFIu|ki z9c)fwEG%Q9Yx#YJ9xlA_!UlCbD>Z(}C6^qKF7)Qu+ZC9`w6u`c38!%QQP-j?-AJ#M z;eD&wy!k;44t}-QMhJ}$7{ag;?dxH5nb0rQj%Q5*iV3qn!12ewkDkpxX4UGu0T=1C z0wGEj&?+BM%Th?kW9lJSa@5gRGQ9g<7C-rqn&$GvLqiNZ4)46Og*~ea zJh#qg!P(6meMo}Ej}5b-OOb7rTy{k}#~hYMD8rH`23faPbI#eVO#A=Yd+#_ot}6Ze zdv8^B?#VM6X_T{UNzOSZz{bXyU|5^529^xFu&`zqc9$P4FTo@OOIpIhF41daV+_VQ z2idY@NtUdvkw(&J@=WKhs(ar*ZdG;9NH%grf;oJIXKK1{-Kws>=bm$(^E~Yq!+lk5 zzhjh*J3Oku!lg-GaaNXx?ik^Tja9JV>{m2$!D$Up^7!R-gRI?DB_0FMRg49DsJLUQ zkn@gDam9r#BpukWdW`@3-55t4pXQ?To5)&l&uzop{z#F=PKT>5Yi7xeINP5t@Y7!p zlh12f=f`>Lr7d)}+U(p^;HN(yV&;)4PCPO}|CmQZ+~T1-N9Z2W*mf;=J(TS5E%X~G zrP7*8wL-$Nqu*tK6baYc(89!)B~8y?_gwm3MPf*cj-3>6vMzYBGn~-qLFjfaD;V&WQzSf$SmKIW} zRCG)TL0elJ$z*ceu@}t_cBt_4ZfJmF(PVop2jbGOfT{_vgFqDCpd!Y7NtH6m9w%l3 zG7&%+D&;^gCuSlLfOyW$S11Slm;1WWC`T7K! z=b7X2xVa1&^cQ-*IWB~$SjJ-J`{Q}$vaLYG-geAKHQ6IRX_L0U4fc=l(5-85tQdWM zH|3^%y#30*;j&9!&&vDP^WcxyVW%XP10gcSwk;gXp;XS(F|V2FUDE*QoHCUQ-h2u_ zS$`|}%@ulf?Plw?ZOrVN0~}neaBvkuVOU11RhM|ou4O-^`POT#K!vXlbpV5Gu#m`z zeUx#IIb?SWkToV)vqFuh5PlT)gD@_`OkF?(ss?Wjac{yvKZO{djYfx>9xBR8ieNm$ zMryLaM$^!bv()z9x_|jqi_0nazA#wfu^=al!uQblX(D5nL<9O5XNWFIrUibBdZx3*@^FIwygaD^B28=w$5Wn zrdk;*?LX5c3BgneO2yW=W*^UT6tox%fnPT>C7fBIwix<&N3VK6?x6& z?VNFBlJ1>F?39BgBu6Ywa@r{k?Au;s&f+Y8zc|HrzuU{2EiOkcZ{W(eOhJxSS-q*s z@#i-2h6`I5+EXSyCC)#5cq*U&(jK<#bZKg~ux&x5;*%TGELfi9>i2h07^t#$&?ja| zrX7{$^{;KC$@3{%f-B$B!LI5)x|TKY>Jzg(`E-G!PHyCHh2Xl|a{R;lrqV1lJ$)|e zw2k&*;gU2LUD(9N?h0Lv7MmU(qkGIJ78B#Er<3*q%{Z%=Z3VUGkQa5N zGG36l3nhZWOf7iz8|4UqMmsv46&Iu5*0c~T)vc%zGYclaKQ!9?OC0`LlZN4W z>#^y+8|)XJ1;gz>Lj<9e3Hriu!!flofnoT2wJuO|t3jrWa1#=o;~6v%`~XW|U-1J2 z1@$Jp_t}s-%7;pTt=BFDv8wvTf1$4XAyi5xsI`J}oEZ?`_fYEK@a@Wn$^oj+VGlTf zTQZP)0o-=W5V!x{1dbL^s_UtKrrY6pK~+%ffBV9(pX=({I9?D(i&{VWq)po4YV|D+ zFNFySzEb4#V=O!A2wrjis{lbf6~jpcB%I?~94wP~RV8LmX{EWPH5#ihSj8LDRO}p% zQy`g0Jg2!lbA^x^!<`U~eqpVDNA@MVOwhlt&os-#}$_C-HKL zk&&mdokos1?aOp_%mXXVSl?aj+S|?C#g{X@^XELV@_$%x%+)NMcPiCto=oFx@I8dI z@G5)h-nE8mwM^H7zoC8h<#@%7-2cZ9P?2*u^MbF@kZzz_>1EqfKV)rC2rr<@8zYT>XiwdFO+1mntyY3cNloi1pYz$a zqsWfk6-utpu&bCd<}p$dv~{I$){o&9729))_8BqKammI_6|!w{98sdNF;1-NbK7qQ zS+(5^`noGpjPjG{k9ausHpMEW^E3{_P8U zm~%vm|Mzb*IelS@Ejvd!=fY;rJ}%71%A5;c~Wg%s)r>?$&t^z+4!bd00#jBH|2!F5l zKhZb=iHvRAL4Tniu~REyqQ+1TBVyEk3GG0Af`7K&!2{XE2m4Pw=+E}|`XKFK$Jff> zET79c4iq6hm*^%6R_o3qr3nNpm};X|2gFi7mo@2tFRgpz>H$nq66^r+=AXPB2YCH6 zy=O8AoV33Lt8YbkDfZpXZCPe7p30_s_ma-E5c3^ezZ(5rRZL8xMR;CQ0P|cIPgH4W z%o2~Apl@V!jQf7^BqO^DlxFPX$VCfSIDc_8)(h$(tnU#JK-_jn##7kZLP-OmiTX6c zevi=kVjwr+>5WjZieNfn$Gz{nSa#6EMV*WT!G|CPGRPXMV6z<#5cX<-MoEqKb*)es zW_W|jo)7{*z*LC38><7It7!4nK{f!eY(rFFHV`4K)If%$6$GCCerxKBYV{9beGg%H z>`<^nX*2y?%@2rRM*COs$Xy>nc_pNiq%iy#cC3{pN4*(;bPem)-9X=-yBQiAW6`ni zXU@XcvVQ%Y%$#!u>2wz9q>%(LA~l2+YocrV3B+PCas!Xh-Lr+GPIxCvkN*Uo)kQ~3 z11lf?8trpm$B`#|l+k^6vS(Bfk0%f!&?^J>b>GIrgHPc3F1BTpAKeB(er%9O9=MNf z+k1ojgjcswB}#_u*iz)be_Ewb)+A!Ex1cySE_rHwktx$+T=L2WhKF26E1D&XQlwF= zd%DW3SqbK)6*vB>kCQ$>oiBWAJ`db8$Tz+*KrXL{Cj>_yALE`UeV*J0Cs_OhKdglX0@nLVd5 zw8ry&v@%sWKY;s%NjD)x6i9^uSr`b05N^u~nGS372&;oY6fA}nM-v2^WSt?737xnA zUGqn^R)8>J7*+&{*s`O9V;wP#=le!$u&zQG2CJ46W^Z-m>q5jz=o<~{(L<>a)$!tf zp!I=mXcLKLUJ76FtmD@09VTspDP^#hwjB`JynK<9CSZ~lCe}TCJ@=$d+ViyXlw_IXKO^O{R&X>NT^b3Q292^~l+Xh2vZ5Z^V@4N{9*Z(sny zH19E)T_26m#_0+nq8>x7iAY=wytGCPptZnrJwxguh0!V0#zBV_#`>{Dz@@K!g-@-Q zL_@T3P=OSMC4=U0-$zJ^Z99SXpo+*dWSxkxffjjaAq=Z(P!$v!lnP06Ui_tX;s-eK z!#q?1!$0@=UzllxjNz91*|&QawX~^?ko$P}o=Jt)|rTINLVe%yGxO zkt2@%d$P$Sd%JJPYFLV>^y1zCY1+Qj84j=Epzy4gijA z;d|~l(h9AO~ z4%mom8ENT&u4pU?YaY+D_VGL#Xm7$m?P7xBs3M+7@}75R>E7j1D7cJN0LQf9NGWg} zL4Gi(nRQ z8|~PDk<<_Ioq^_vs2f8B%o)npkw37c#CDwMSlXj?E z=v$tBkqU!AU-^9LOJAaIUmu_P)Td}|ZGBPJ)OslYlH=yEBrr;IC8UlgkSU7$P-vwc7o?gA32Y$Mioa)D(KFS;3^j3~qc8s~==itMi z8B?Oi|Kj^Tp65kXG!qmOkg^bwvxM(8&>6^BakBB`{>*R?v6D(6u`JV}th6#T-(hu9 z6IAvj329@AK=vWjo1*sNNXt-!*G&QeQO4J{>?ms+2906nSz0pMxP;z2BnJ?d$v#J- z_5rbsk==M{gTX?fz|$L^=808LuwlanN~O}c`}pU!i2~1un`u=At+1UIEV}{QHvbh? zitSJRhPD31NjoVnyv=VU(^JDU`{VeC&X^Gely9 zNye}@Tm=wLgkhD|U?hr^!nP!?>$7*HK-u-NZ7b*_-(QZw0+UD-!OVm(XcDaum`bOb zP`xoS7PXCl3K1y5b@+8Xic$!qkVwm_^+QI1W(c<%pMC2Dp*5bNs=Qh+BH_M42hP_B0t*b}$C3gmjqaK0{WC0~3XKf1yb1y*9%vVa z!uHC@Ys72^X;}vTqeF4xum@?pGk>8EO85a@d+oLS=*K@|Y-Eg5sYE)HX5PGceCku5 z;>DjK@pNOLyB{SSPZlAO(XueyeFFa8CY z#u@bQ{3APd_j1HhAECXajhJlV*we0I!cseN8Ed7mF28LE$^*NP4@g-1Ep7fB&Xt7SB&2JfHvk`4C(8 zy2RRI96dY16<4-1cfNyHQDmAEJbB+R-6c5Ys22YIGt?43rdEt@!rO_Au+%7XImK@#*P&_)D|s?RQC{*jF<5qf%5Bm=ni!%XG|`$tOSk1$rO(F`xO$R%|DR zQeLEs_~$cmz#spVy%;FHO&d3I-F4T|-QCTG4I6mPYhJ^wS+mUe2a^%4OTH@QM-cz8 za+Z*0z4o=ylB`xeJkP_nBq_%+gh&E}C8>A@brQ3L>Fd@S$FZq+M!rHKNXKJnt#Dl* z$AXgUlTF2$-_=6zNP$whO3ap&szxHfvTB5AZU8$qFjj?aTf`mkwMJStj;*M;rWZcp zSfC9uMoLLlnKjoIUqZ`wZXs<~IPCGGz+0XU}Hy=FM#1zMbywZmz!iYTogVcSJpy^_AZjVmk1F6NA+7 z^PjXyo3u$g)U2MFI?^hyW3ZlR`Fx%^bLP<2*2W!o+`+GZ{cFDd^{;cq6;}|C#|g>F z;JNo~*RSbE9JP>h-gyka{pN#gyS2a;wFW2S1Z=~mNLHVqR9cbDCK%pP<(>`e(6*v5 zbtlK4v6RCn^{WPsB^;(Do3U*R zTS%1hP*S0^Pg=&&7{}aTCn-{)>U&r~)=8k0pzN2)+6j89Ia(7L-gx9W^bYm1Yjhv2 zPMSisjHiv z3r{Pw6vTy3$#<~`KXi>07PhjH!U~x3#%H0Q%Lh>(M275ppZ)A-`OIfN13*Vd2hGjR zY~8w*ZQHi7b?a8Hx#k*P_qx{|F!($W5zT>)A84-i8$We`O<)by`n=wn+h|DCmo)8{JZ!#WYR4G{0>4H3j%00KyGZ1 z2OqqL&71ccI9s*)?4N@MSDW6#d+r=2YiVM@P5;|Z@6&l2lbXIhkDft~m;-m*HpI56 z4ylYqBAsE{6o)kr4e`tW8>W)BNyim)yBxNxFY=q;=jrHj`0@95vwA}jB&>X76hBvC z*SZpqt|{==x3_V|iD`PDF5m|hmTlXMB(%rAeP)r{w5q`W`|K{Rd{Zk8QuE87^|N+e zkv#(*Z+UAgjTZdZF9+Dzt=PD0khrBd|BMW`{Hl-N-I1f{!q>mNo69e6Wqzl{|9-EB z6|0RTNV#OF(WPZ!C*oAyGHtE%nA)7+ck6m605K`i-k&=dgmGbjHWm1=Z>_$Mcw*uy zBw(4imefBN2ZDiyk~Ugv;_)~aUU(s;Qi%_L_`}?O`|VtF%{44qv?vU6v3>K^O6)K>7 z8dC|TH>ONb1?($S7%ol*eC$7Wa{`R-|#y7vgtXZ?T>Z+@F?Q364b8|B* zSFYr{-~BGP-F6$F_{1leF=GZ7UU=cS=i-GX5hEC{5X53JVzF2qw0ANhoU}=sv_sQu z+a{SzMr{2D3gp7IthKe3L?XeBH{M7hkzj0WjBBsGmX#}4^3Hd@lVgrK<^X!S2XFOj z@+;nQGOKUh#J0!#n0b7gK_Pl7P}Qqx5Qd3=%aX)WHVU7;m95M_ZVGR>?2WXvv^@WN zb1*Ne1A|7r8Y-y9Swga5tecWMh-)>`V8@x8>>zDtd1TKWeCVvdV|n{ATz%6&Q%O$Y z$cAb7KJ3nSv%4~gr4_Bon}_Nf!@j}3tErn17}{&&8zO> z-iMxGD;AA*mRYeZ6=lS#P32A_m6@X>Z3fCi>?-fWLL&VUWPA#ZL8bG3e3X^!{q zaOvIQA|yQgaGsbg$mN4>*|Nv4e=&^X80jqAhQYlqx9oJ00%A7ghkWk8uYd%^aGB5k zYY%5%kmp@*Yh(Vx6pyVg^2mcZ9(%~hgoQ*0o7a^1!q(lyC5+`X@syyix5~G!?Zpy; zLQ&zw1mlZ($-PNnKH;%m0;>SuVgK-t%HwPbkxnMV?LY#v;*o$kI7S~5w73KeFyWq92w zi%BM8?A|-Te?7E`UeBj3lVYsmQL1{p`h@x93uT_(JxIbf{ijkGC~DR9O@BO)D_1#V zQ5Q$fol2=(VfE(S>>kKb^nI3ewQ>BC8MvNe#rke`_K(rokYw4cc7&A7p4x(AOCDL* z&2YX;LO^@_mL#P*@>>ra)_f)_&06Xd#6`ri~`MS#ru$-uQ+$uweee z=sFK-9uuHN2VEfy10NxXg8w9oNeQ&9UHiD-QDaM+r_1eU(4Ih zdMnMD7Cvizn)^4c=82y5jJQSSbj;^dCw!E~Oal+Bf0UnXcz|{%NxoX*sLn-Pa?JZ^ zNH^27XAfVz{WG|gVQ}K)%Q>=@QQmvrhuJmS#~m9Uq9vBalHi~bmZYi-8BM>NN5)co z<=m@DrP2(H?gQ;`*ZN1ff6pq;nsE%59`iv`@if0(eHV9bUCFdW6PGMFg;YGwoQ@f^ zW-?s=#C_b~vyR27cFKO$z@AW~YzNo#S+)L2+>tUz9d|U14UKHsvW13*2IBEJN-12| zje7qwnG8xPa=9GIWRiS7Z>p8)Gz|?6^!E00-F4RiaMe{;@!8LQHu?;fELp;lM;^&X zKl)Ktu3X7CzxmBbf6DVcwr$%6+5~IKWHJ&e-nVZbrBaF3*46;BYek#N{{DU{l?rWb zZH$eLk;!DpX0zNhO7OjWpFa*U}^sP^}88u0TjdB4$YRVo8B5 zH22&-!p?0)yrKdOG~2Oj8qrEybD&jGyR!smHj|rsIB;uNK z1**O(;F!9*@)B-cBx;nlfeDTF}bac?t(sE$9 zx`xn6gw@KpE!jGd=g1jteE8Cn87q|OA1g7XIm7Dh`|y3AX)S3Ii5N)9akJVfjON*} zdyqv_o4M-36L2hv=P6Ej{dB%}%Ol*mb||~B^kFlZcZov{Ik1xvOmwy-+VSsBF?s5`&cr!i>b|7zIxN6#BCWN zNh(#3WIRc}P~rza`5)G;xDPv?;Ow){rnk43R4RpS+dTEuQ%ETp8X6*(%hA@}#@sn` zdF-*rux)!BEJ+AKM@I*nH*aR)!iD2B2t$_ClTJE`tFF3=#~**3;o)I&xg3c^BKo}c z?%m6$KmBR0zy5lTIp!FW$t10REEdCY95!#>jAdCQlSv+W=po|qcoaOo>Q%48_kDi(%U|-~gAcNN z`Et%V=N#Vku6I4J^{+l`JLa^d3=9o%{TJ>dkrvo#3*`lx=@@cMfkEgYpi-)mYEN+f z1?O_~@?)NR8`*@H9URMOutBw?g|uvxSD`tU<%z*{oZ58^|9sJV$d&Ru)w70}P`E-c z=2uACNrV=7$|W67lC=};$@ej>rGu|r_6Z7=F?t5}an-q35_eL3-!JXh9 zT!K3UcXxO<-~X!EqKaa7tM1J7oIc%sPUX`=P`9D{E{A~qh8C@Qh5P7UQq8;9{o8Y% zyZJ8s`&oUQ{dhJN-{qfv#=NF%i;21A%kDe_J(Fmy^d~V8XjeGp4>O_h1_s^FML?qbPah z=J(*Xd)}R#$UeoF^rd4P>8EyE;>?WV=pI{ySRg49%La=wIjUQDwQFk$~snHOa>niEIwf-4=0|=)BlCYMXgKU*#*Crn=%gizXf( zW_Zd-QB>M&*gZt++j) zKUe|vK#jK+2CwO5uD4}rZz%0u6O41@|Gk(04{ky2C3|gvhJDBQR|4Gg?)VzbrpRxv zH-b(>M`aDpM@qn=F4Y=9zP-IM0+VF(mFf*Z?#}${l&#rrQ=SpK2oPKVY^B)%O<`845;h$III zZM_^}hd*V+oV0ttKZlJBAu)Y;438UGeho#@e&G$hW(G?1c7JD+QtdxN*Rva)neiv) z1%JUxGPElp6TyXUtH~oUm zm`U7Ap<&#qljHY(a*Jc_{v1?-Wihv zv&Cv1DLOh#_-x{z0rZ^4;&x%K#<&N zNCuFeg2f3u(}suy+~40H+5x|{>^f6=dxifQarry2R9H5RuDfkcbUthl-0i2yP!%Tw zOUY z+3*<03N;wXODOZE01Ln$Dv`j~*tYFqH`}g{GUz?Y{0q&s@jl8%?4!ym^s1-M=v67p z2+*Z7Xj2hP*1=ig?&uWj4}GX!uqC4A&sQ9y57XqNX2SX&+)5%WfU)<(N5hty$ z04=#^B)HWytSdBFdHwCf>vPsuNJgN1S(qcSEX_#vcxbiJf4-6PI(L_6G;t|lT9So# z@7VFu>c-}GY+aE%wvv<8>hNYm*=V@jQSy2kC%9c#rgr_z&b(K^RJq)6MYi#=@Tu1N zJYmiLW8!b6_=fXPNr&N+IA5ayk>=y+=_;_r-f-=BUoPBNx$R6nn?tZVPcl-?VfG+G zRpnpcb?&8-^rt5I8TFd8-8xTntk+r-9NWhGLJ*egj9`J&;q2;qz0lH?0!!jeYOa`y5bjg5nL@in1(^B)q))whl+9$K8>%G_K#cqJHVDq}S=Coewnatsx z(NwNdD{>Hczlx(kZES4bdJ%wxgp7`jb>zx=nr$yvK;&4O17(0ElZ6SBiVGTsY=BnOrFezO6QIwOe>?^Vl-M{kG({~4C=CfSG`b3NX|Q1@e=vXw6zK&G46&hB za#EAsbHBbBDXe;jfJeb%25$BnG3!fNOjmPP+eBMt!nw=lnLmoxK&P96J6_$r7ygz> zp(d=GUKxV=3bRw8>i!O&dq93AO+#4GHRLk3J88;jN`K*N^6FxNQW7N=&=8)nrKx)P zBYl?~x!rP~*Y?{n6p8txZ+I%7YA=&|U{U?KFIM1U$U$Q7mEmP(TDwT=$0LBH&j42P zR~gN-04E2B{&#EungF=IFd3NhekEJBUSOeL08?Zc5fXP@A-|J<+;_M-Sp6sh#;{tp|kjOFEl z8D)YabD0LyRbtLl{Qbu7asZ#Uq?GTIr$Ro2Hplz8D{A%h)=penY$Pi^Tx%VroHnk% z9gQ4`mA0w2U_U&>pWW`x!#cd*MblE0OiBf%6&l%CY$$7GXFOIdFmz2td~^l$m6sS< zvir^&GOBO=ID0v)R2xyJ$Be?7jh#@Kj}Z|63X-Y*_H}l=TPyFFH1(wh&+w z3hWo)a%Rgg2H+O}mKB)O06j_Sq={PND|FMTTsbo{8h~2^BF7vM@BmFHy_c26)~Eff z|FTm>NunmbPvgLb2MZrGq)hs~b)z)n1n}estbXs_pAz0f6GuYWJH~seI1p{n_f#*_qE|F?zF39FDKXWBRm*RwUb zuJkgpn?6*0SU9|Sw6=hn7@-#_muTp!VaJb+Gw;8C0z+Dp9f4T_?hN0obtew&K8Sx^ zd!a>SjA*cTIVxgh3BX7X;A<>!=bgV3d&0mJfOuW2_8Rdd6DCX37iNDy6Ip3=-vBOV zya6H};ppgk8UsXO)eG{TFmCm}4-}NnsWN<`;=dSk+46RAh$NS*631fL=qYpOM<-BT zQ^%(K*lYNA*}D8TYo6|u{emgStxwnxi&?`;jS&Rf4tR2xnp1ydAoER`ooo=PG(}y! z03GwiSk}cs#2K{?x}+LBZmjHahkth#b^6*4vcKBdefnpr3gAE5lBF&m-V_<=%?Iw? zadxhw;-tfii(v;sAQwnAVddZ$0LX}?W*Y*Mw?oPAb%xMD+O=C=6uWYoGL~xx^!_+3=y?32>>tRue&Pd=U!gYh4M1-cHkkr;u0Ud!>%IdQEAVU% zC@gdBB`X8M8bw^Y(d_QPn-0&7X3=+@Lt5@E}JAl9ai&vuoxy z)_U(hFJAvm>gK>=-p+3dL**QG{saAN<_cw!%m(hx;lfC2Yk|tzc){}L12dPIU|-2* zD>~Fd=36Taf_?9K@Tmu>HtsL14p!NwN<>%Kfy{yq3Mo^Kcz#HwVbOPF+MgvbDTqTj zoRr@JmpGj8RRc%y6*wtl!7`xuf)|6BYrt!uj+{t+DF0pr?C``R#q*)h(iGBH(nW6| z)I;LSL-0b6!gixnXyw<#is1u_y(h44)7ois(92FjaeYfVTd=}*&x}shYi9~8P!Skp ztdO;6$vx|_%mUDA7#tma9W;KQR36eRWpkmHF$x}O|Ehzj)|Lt1Ym>qnwcznFK%7dL zyHkxoMZa^VXBq83plgEOG}@i%7PXy_fN&^D>=A4N=tj(lEoplMPO>L|8b1@l@SW6;Bw z?M|^KZkr%KjbBNVjiThHMK0NaHPYa!i$;wK#=o;IoK2N6=>-r>o7p)u^?m$ey$AQg zzt0_7%Cc*^T1XG#Ir%t`!%XcWbazBGq)zT@`FSCKJXXS*-(gu`e)v4#k2Vine~vw2 z{fuFzUo13U_r19`YSV5_v7fbh&jM_g&$+b)dRyiqF63C=uNtbam``N^CbXX*6?nz-Lv zck67j-1#N})n2J4&62vhgxp->f2ul6Eo*&lT{lEPNiDM+2kl??z#c$7p@IGDCn%yf zd|U>QTi10;O}u;=fH2*=B#lHV>NI|q_G0yX>wm}wNXo~qxLvM)2;ZGAc9*NMrG=f7 z6T7#B`URHeKUBz3#Sw+`$#lCgWIUTSNrMsliDl6R@=fDLbF~hSh{$9fqY{z5>BR86 zT5|l@!OcHG5bs@r&HSdjHn^UPFE#e7RHSo>V#(q?5lX8EC+&YbMYb98TF*$6`=_^X zOAL?p;6QR>mT1#%5}o7#tCah8Q4%9%&xjXYOgNe<8h{34w?sU^{+ozJ3_?^hmY6vr0}pvU@8Em0J_^3?Cim6{F|BgNQMm_p4n@j6*u<)lE)~re@8zEHR zFV(eV@#gv_Z@hvT?>eL0ITqHqJI~Rddp;XrbGTfI`F@GHf{OXg!D<1k^4CG>ic$nB zjYvv%X_ov#-P|6%<7ytqY3Qnq)oz=wK7$e9_Xr&Z&=gJI0qvCDdPcxfSLQcx$slI4 z*mrD~0vdHJTwEhQ59`A~0cm8h``yL&b(bX0t4Hmp1{(J>aHwWxX25$0HXkMab-e(h z8gh1?$|_XlE&n{5Na^G9JoYmb1-AkE5%0}=l&;Kv#iEQX*kBW3nEU0lA!Z}ZMwvMc zNG>J~*4W8we`0p!mHF(8ckIk>7O{1}^YVxAYuWBsuL>Zqupi-bXsV*lN+}H_oeg9| z4X(+9jkf9Bo_S=8e-#L#wbAc?Cb*=Z&$l$e#c8U5LY;$`5-zPnsOgAvk*gy7mG%rk6Q?GC5N0csZy*o{7-y>PS8%O)8cyId0^KSJk&AQ@>XTF!_6 z$fUT9$Cq;W#x6jr$q?0jLL4U-ekdtDG81|LErUIOkLyyR$0A^Kj^z@pu>*Z)f|`5B zc!pmOY*9kii{_Az{1*8AFUB}Q&19@toewYZ0+2IzzD3S?xnUbGOk&>P&e{;|;r5ww ztj=RzXh$~%Z%wAi%T(n#A0(8q!sCyq8gOEBKMp(f#11&gN;{^q5lCkuHeUGcO)1(1 zU}F6pzqE4@tZnCeKF-1f8*DcNoFp*RoeZqPbpeWxdG_4*T76-aUcryo8wz@B|At8( zhKkquRjyRU&BL~p=8364Q`4FR5n0ZeKpP&wdI0*FjDnWjdXKL-To)ZT?*q;!1x(a@ z7kG5_?v@zpdX5k$_j^)hO1CI6tSYog5n9nH71pclBUEP02i-uf%ISKs*G=M`xvFks z_Vjw>{pM3ssNiB@HGbLM!Y}--dOQ+|*Zo4A=6d}>wJ}x7TuWH%LuKO3^N`0SNz0AN+Qk&oQ>}=$Vx=kr}4k?-M;N>rU*CeF9c5G|KoM<8P#JVei9de> zim#>Ly)Sp-X0`ChQ>1D=7O9)>&kI;T$H-Xl{_^5vyLcRX+JN;Pf37-t9L?F>1z=%r z3y~Y#$8)UTflr!G`rh3BHOUvhECapkq+#3rtQ&!en2Q%kEzcHo^~8sdDKEOelJ=*# zS`Rh{saT6nbMuQ=K`kHt3?DBP&NweK^ur1UU$8mVOp(u0W6qG~HkRbom3arX6Fx3> zP!vbHW8yZwnLb=D{2Z>ciyoJNr1|^TZ>0?LLkAa6WN|inQB2mCU%^`{hOp7e7=uj; zARd4IfzY$E9wy6?Pm(UHJ9cjA3oCvG}YeL-;*M;5*#6E6`hCQbYBnHE=%8 zJ7jweBtogMB6`A=%80)rH^g;-WoPhI=xY1aomcBH49aj0^d|GShKJJ>J~bD!n|UiJftx6@ zTk_%^ukd6OttzeX;T^r=Tc(w@2U77$kK4@COF;*AI{ch&oOv6f;aL77Zu4qa+IUAOnT- zVh=`2E-QC9KFPYG>_6Vykr+yD;<9HE9Fj0x{*ufqrOVNm@S+f3EMu~5@HG?M?6?x% za9>Giq%rcoN^`r~dM1`Xvox5W&tg^BWO<55E72O_|L>&32{V zZ{rdyExRLp+dJYPMMz=9z3;~9@WyX-L^Ro8ZAroFb$>PN4PM0&ksd^HcnmYql8=NI zuUAEy!vzb?j}3vGPlQ|DS>ry)0JM<^^nUYuR`$KC)N`1V`%=(Us>E7*0?fE)O!=HU zF@Eo$^wfKEx)q@eIH#Ce; zBnaPzKB#2z(VJUDlzkeE>?tnRLt6G3Yj5T+CGHRGrJ3%eq60=VO2Ix@zdI7XMlXi3 zEHk#`@#`?8ll07Y?%_#I`3HRzp!<|1ZI|ieg|1rQMy5Tp{c-w3r{9L)+{kt;fv?Su z!S6*-{bpOaI=`tdXI^U&^=nI_@@14)O_^qOt%Ebl#oLovoB2>3qfPEaX&rIuXGVR~ ze#1HYqts=cQ;Lj?!DMHQ#hR|TZ#oY(-nZi|m!Hx;2o7qx!lrCmGafcCsRW#__ZTyp z!--y8x74*YXOY%AcH)xP>0@lzzjwPa2zH*R{~e{`Vb5u;Fg$m=6sFxQ)236V$NHgG zsfaRkg9eVAb83>NGc>QRH__5{$K-q4PvY2rw z?_R&v8x2b0;x5VA8e`Zt<%EoFejAN&da)sqlvy2#r$yPb!q-Zx`+L}3B6)5&C4}-d z))#?-m&q_jvi|hZZKmOgCzEGtYb~m4N~il*B9@zvf9k%6y9^{Z{F4BfrY3&I%)B@c zR#fe7f(5ixd9~0%Dk;GfE6ez{mK;mE2J*7_VZv&UOy;ox(9zFzIAA@H%%Fej>TJOa zQa)orX+dz`I%g>#`RlO7A@qT?b(i7C7G&#N6_BNtCw8!c7V#BT$4>l2@pgJ*>r6Pj z?eP99*>dpt3zmv2ID7~Hv?u(^IVUzOB2dBf3S><% zDkqOeBi=VvR5>#dOBl~v@XKq`#C)22rLGZdZ=@6@v_I_FQ85UJx|ejvocC?ov4EX? z9-xXd@nv(oZkTxN^P+Zt+d(eD1PvzX%I4ENEI}!c>33{=VJjZ#y3_0V&8i+Oh-B*O z0&a}5<0p=ioxf440&Z_X`qKC|(nft`wpu^eH-;;6AXT(cDvw!9sJ^n9?pnGZ{?J+b zRRC)O$7T+6ve{Q+`Fc)iYR)=fyBfE?MaT^hhTU63;5Fb?T6%Aaf`~}TNzod9r&Ycl zzn4AUMaF0dX^Lo32b4jh*c@&*BmJsH9cVIC(}GN`c{+=nSOOG6}4 z67-w>siMx#oPV{~lCNnCL%cm2Q=3EGZuNfl|Mib}AZV8+lg}y%PV?YCw^?&WDMkLP z6i|Ily-dn`4F+w~AV>;lX&b&N&x z10|So}0+;=YY-FDE)2( zr>V(-;n#@=wU5|XjZg}nxb1hQIETg5FpX)JAdie6h^rvdAsM@z_l- ztKB-IisA%3wM};hy-86dhFOdad9uaBn_SWQ3bI#+hCXlNKYX!U|H5TCBMr2rl6PhH3$x)iCmSi&lC4u;(ojRBBBG!?R(Dt@&$X+d9u)aR&Y4!dOq1jY z;Uf&boEjpV<%w9iupzs7{;TK)VH?%S+P3ouXYI}_Y;A;8q{rMA;tA0o9mMEti6$a* z+anV%H+>I7TO*t-nZJivgh56G8B~QV>WwC=2mk9`koE#v1h;r7xi-l^&YTa2OxxKb z%LA#jTcNal+Q*OMMit$ri8K?t@T(Of2Udi9PP8=-PBxe2IOjzP;#E?7jARkQ1MD&u z!mA?28l98i-JwqSt;pZ#Z-t%c`9diH!eTq-;Y{FK_=lA&^KvupXyh}&$D1m@(tanQ z&TWJ<^MQplncIpxcS5rsXa=Xi=m^EVfoFdqGks@hrIMx8hF-ljIl87T+*1;>ZVyO2 zP7}5jPbc0p)6&wFjT$uMd)x{FSU-X1nYintZ+@B9oL)Wjd%oDHHK8W~$!zH6>bS7k zjZBSYQe2#JaI3X<^!>-Fky`Gwqg_8}=}jgVbLCjHui|B9H!^#h8LzR@(t{^UF-1%0 zO{OTY;>r2y9MSqo0{WZc$6}*kp(y zZ$F(0QWsR-*qqqTl9K~|xcf6PHe%*uYSQ8F;61~03%Ks8dkj0&?2DRd5AJUey}qsM znJ$`tLSQ?SqGXByT+|=l=(441i`k!#XKZQOFEyQ*A)9alNNzaI9?XUMYQnScJOn3`Us{ z#@1AQipTU*SK_i--};Rgw~$V_Z!Ssh&G}6@DC@qh2?-XK0@_ z%WkrmOMX!VMvfH6*w-apm}kEMi5juZ4I)s2ux1??_}2D|2UKERg2Ai4leJd8?XJl_ z96bIf|69VPX8{#!dc#qz-VBroZV*j`{4nZoylH1}cpf;`8>3PYwGB}y znYeg84=F;Vj9mrMO-^I_LO6T0n6mt_lNqD9Kz@{&C$-xVm-2v3@=`x^);*>}9lemc z&3p+z@QE~Xo)2uD4a5+a@NvUN=KL^Qr0OF0!WpQ_m3}FQQ{g*bBtrx;CmwQkXq_Wb zV{G9k+uN>9vUUMDwZ8JHRibHkdLB2NIf-q{CNu=gm(OCRnzj7w+ggUkmm` z;;AlS6ui3OBig3jBaX&?B2%EFOW1wJ8Ww{cIDk_9Vd?K$Z}Alp%(C`P5n+SA(epDlH`pPIj-rzLcsWCG||yL~CK<>vrwLkLigYc=QDu z_O0^~w@3DuOtiDS2s$!SNh(m zvY6*?QtPVgv6rF^yk5xObt7Fq^BtU0l#;_hsSZ=6x<>y|tCQi$+HOrstKHsTM?{W^ zw~V9+4pE<1VNjhbxq>KlnFcqIa{FLuM4JmrOt7%8hf$*R=IenUQL5*xXH*bDtz(Gr{A0v)nOt@jfom{64UT{UXSLdJ;F~SMiwJd zu{EVM&g?~)F%g|X^SrL3F{y9Q_Up~8xg#|~du)bU}z!EdP zTro zAYG$06SSkYy`~!kKPWg)}$z0 zUsNeGQvdrCwfU{LGwBPu8q}4Q4Tg->9DX<)ZWDHEE=kpDfLnBa-i+oOc}?238J3Pw z&V_qj0>vHY%+!(D69H~ts1mCrF#oV|yN|Hkawl!u^(Oo?-6pZ)e0$ZC<=+7ciwM!8 zuKM_^#D|t}L!-#{snEr_d6tD=ZgL_3TWa+X@mV#mEy|ST?U3%Yvw>s}?_*aTv&0du z_agw-I=ej2=h#MpD$+S)0zTpz zNxTJf*1QF-+_UYa(Xg_ai#YH~8xN^i<2< z*}zDx5HQixC*oY>0oo8T^MIN+sR=m*In@k(1@o9%O3m;QNO|XoPYeC%bzt(S1l1^* zD9|rX>a==@bF>tQ-!99K`0{^WbVj&*%N1T3W##C=fDiiVeR;#E>&$${q;qTC8PIh; zEZv+d?j#EPtL2?IM((8XX6a?AyY4C_k&U-Uixbfy7SqfuD&aH;^+MOQVxSXaaT_Mml)d5uC}d) zG!da-Tcg}MxR-aFAGZ@PyM>$}Ry2-3lK9!jeoFgx>w@f~F(VBN*6kCI9>+C?D|=xh zI+OB9>P@e7eyDBmOp||%6j6jZ7rf50KXC_OmU*ugt`i_dVntsFDG05DM4$0#gI%Mc z{bCN`$(Db(MPl;&iMkm=#+t0>fe!>%e!NgeTTnW|Q|%(8g2h!E@50>E2AdEUX(e%E!7(G9yuE&Jy=ak=&7{y-z?gk;r0L8&42agVT07Q^r3%5SUOgXz`z z1ixQ|LAbJiGfej15U+v00ZIYaqiNZ6S;rr*bIBL~vv1y!5CY{zLx|5^Q?SXujWUZ8q4fdlT|b9!}5onyMG7fC>JI6dClUvF+aTJb&-(agpoEoWeOV zJvQ)sqxAgyh2@@Bvvmu$Hw)zayFzP5)Jpaa6{%>k==uSY`BAjAy&TJP%kOvyJ3n+L zXcNx2#Xr%*?@GXVrji%Ay&l}v56`A49ZXTZ_ZN=phB?TlV?Ce2A2Q|h;k#<@3zfvQ zu0OsQ%A4D|!*r3G@VRe)VkFW)&nD7KR|vj2)O^^Ch4ZvgH!{R;Qic2W8Lw{h^B^f) z_p-@=TE!P%C`;5=1E-qHX^NJ@;dA&&EZ9VIJDOYFsOHrPpLr})2VF-IJYC((!vUy2 zPI_j6P%s94wfk#)Q+y0+@#S*{B?`e-?o9fKC7#}!artRV@WGtFxl35!Fv-R}KUuL@ z5 zfG>fRI3P{`3Eew&(ZG#qBRFFI)-?Yn4g0$!&@3U{i4DQj?fSCw%hl>CNslyV0X>BZ zHCfR=5aSx22{KGgn^XG1HHYI;d)1Y5Xj&vmds13^xU_7XWKkg=C*}n4y&eybc+jO1 zjo|U7?f?_DB3}lC%4RKrB|3J?ZcfBC++$!R>#&i#|~6d{XG(>lH!H^>oaa44s^xl zYZ@+y#M$o>AAAY-2h{58d0hHpq&rJ!7@Ag^&{Fo#A53W5ug3Oka2p30(3b7`P{)eG zVEY01@TBwGZ5^cMQS+UGeCjMyU?AIP(2FoM)EAK;<}5I5oLBH0O#|58T&(e_vIP*{ zcu-w?9H+j5cqZw0^}v@eEZf>8E1h@u^E!(Nb{oE?yj+g4LHPR~9d{w7!bq0=Y%Hlf zc!4Z!IM2bCJWUWx6YY9a8jRB*vSFgA^RV(PBNknLM{-2?{)FUfG!dAq3|t)RV}0~? z=55;Gfo7uQ3(1UaS};T(p{+8ICzJ_ha%Qd+orymeYjx#$-#fXr;7GZ9X?KWlBh2F9 zgSK`H;u4ob*zwmq^^E_9m)Wryzw%s*hUJEw9Q+K)IW$n1lPzm)WV9YWjVpC-Y`83B z&h4;57@gnJLcEPpqR0AO+^{?3ai7FGNyFdpkjD~x6oM*cQ2@~zqa>^-xP=54IH9T43UYJhsk|b0NrV0@7wpZAEm=K(bf)GIK z-8c|;fP4|=l^+>+}%vB zKvDQ$v+g!i7VO^)oZT*@h}|Vp&yFhkdb-k11f{XE*Tb;+zjEkT{q5#0ZXt;e?FF8a z3|V!yOD19|ar%_#V(M5f7vyMZ71iw}*3cKn=$MRw2jL5%Tohv!s|N1*X1K2D6|qEc zC=O#oj9DqdDE+yTWVRHJ64@@nazdG}5*z*TpJwCIXA^j~id*#PSt36u2OT^54j-_0~R8<{>S5lI6EPu8TXp;7y3?j1hj=8V?g-=>2<}X~Jpx9x;u! zq)oCc&k0Ul$CLAfq%DqUwb|f1KnOweJ?-@Q2*| z6bGtyg0#|-6V?>}b14Tqc!0x3s?CmC36^Gt{-0(h##J)wM@fP_%#m*yZNdC8!XGx}O(i`R-+h^NyO5?iX!$Z`X2jaTYyO#Uro9D7&4O#F$6ypL7zst6~;NzCYSmyqF;2cJZHQq$Vw+br_i^EuT=|Mza zJUdfOC_-Wmo)Ypb%_rlJ!*_vccAL?l$WE_^oyr3R+6?<6*v_I<1I{#-a&}L@*$NW_ zxwrxmnE>b0@|g_>LghPz$(kk!kI=_KAu*Q$P8`#)ewhMLMF@4$PsB`FnPd`{DT|m3 zFU1r^D{%UJjzyTlW3P?Y9#v2Ph?5-VnXYKmkSk1+!~i76#&Kw%o;G`D-y(Vt;7ND3 zSGbmA9*Y6V@%s^Rqr@YMsu6%ehgLZ2u^VEgLnEW;(~u^QGTWP&4QQG z;HYpxuc|SYKEwbOx>N=S#+oc5txP3&{4($}VL4i(tiN<6>VA!tz{rCS-)2q1qL@{y z^koS0X0vsJFRX`Pzdzo%s>~_rmBuRRVfh}JSVKA#<>%Y4@q~YbzjX#QJ@>+aAZGGE z8}`Y#fP5oAbwRh(`)%5)Rjq`UQT=cxL^Zb%{DL0zzx|D~j4bU3Kahxgl?+KwN_PYO z)c3B%RSwgGr^U&t+Xoum3g`*Y(Thjlv(ccIqV+#ae6;F(!sXBsc~c z{02C<%0OzR==yO3&M$$q&;%HpC@;itfs^(PSLAnZvMb;dH+<+!yB zqc;LOgd^-Cf%f;s{QE>Zg;LBg)GZiT8yJ9(c9<59zjjeGKNWWGsNJOmPm=(pW4KP? z#;&GBsZ7^nJ>KVAC@P-i01T`=t!`&(qYL}BNyFp+CJwo1SBx)C{!th*FI7oUG3l5v2h;9YXhk!MUG1w2ox<$Y6~C>?_df zDZzH$!RVCxAGYGvmX#6a+e?3x0X3G%I0Sj)-&u-f1?Ou@V*0@t6;Z$_7<><% zXYxmV8jaJhQj+SReMImCE72if;ARe2=v~P!Tp=5+_ny5^B8|GEz%VX zKz#P?9KreX@G=kUN#@)jFkMj~j+lY>M}gYFgoRJ-V~Qms^!IS4gzX564n@aI`E;1L zPY~HIZSMuOG#;7wap0fl_aT;Eb7-F!%_ANX+9Km3P&~UIovq@{DUdz zOCe$zOrquQB2AZ%fsrZ4$smseGAq_oi&UHK_O9Nl(0LB55!NNOKQ{&t%{-|JI#x?@ zBRWuu-*SO;3IjApQ!ZA;t>k|nC=gAm!NFJ}z=JD@$sb$HLb?Ld2ypM1?R81tPJqG> z4Wwnzo-3=E$qXZiuXU~rk+7KiR45L{&5uZ2o7Shx{26D;sg7v`C(`=jXjiU=Cu2^Y zJ61B!Jy9k;qgB^79Su36C?yng`a5WUK zT5s7RNP4(_cI$A9*a-VP4)RI&*DKq~JrOj99L=WX=XdcrFwjRHmf3#UY@JBIX8P{< z87;O`__QycPAExK9OXq-@S+Om^7BNEvI|UBY4xD7TENuc^O2IwY1y}-k)9KjVGG3- zVdtev6w0?6*v~nFy%sjgtTID{!8GQwD~vF(z+dN3@ZZpIZ{@c-PB;n47&$2!rf~`F zG`11F&`TQok6=>zS5jW*m&cr!uf))&!WI^=<#{Z@-PW9m^q%)o%FSc`2+Zv>?Z~Nj zWE33$V>5ltG+D~jXZDTH0`2|gax*SBNN{?fh@t2>5ZU@&yH9DohUC4AKa}B{LuKq< zLzg2?;_^}|5fv=W{Y3~*>nO^|6r=QbM25c7iKbN`>SGriwascplf+?puK6U|JG0o| z-QyswPo(nf7Y~r?_i1SO0tBnK0lBLn*OLJ$YK)~+kmqN;pLlS=DPo#{Uo>eIhsaVo z(`14B6toECgf2N-1ZrKo)d=Zdgn+prp#j{M2@FnDl-OZm%0M%vbfdmLC{BzGHz6mX zfr%6GY+79OX1p}9vx{8;$W=ld3?FBAz786;bY=2%EB8-g_BOxUcMTw@5zqU$gBKM9 z)rVgNnDv_jA7BDj!7r4{6NqZEl)2OmhLAqcYJOGQXKy`ITkRy>(=dwt=HN6#+avug z9wW=%*!*Lnk=a7X113a?PUVM6uAh**y)~i1z1ku*1*@m;EL(z=hJ~^WMUd>zKro34 z@`)b*R2%J^ZjdL0C`4d9Dk-HG>or#CF|IAPh~xztUgx(A3Z ze%lb!);RF#yOIR?L+LY~aRyUVJoltJG3ya297E#%onOj5n~gmoFJ_wjOtM_Vua>k# z1f~qA{&{q>>?av!zdH-bOV>#{ZGZ15?9~gG0b5Qm%6U4-n52cAz@p?9-y-Sr6`uP>JKSs7bRE=T9xObl-D`mPR}gSmA>$i4Sg2IH ztmtSxXG^ZSmM9X1(WX4UM{rr=-nmi50^s4#?J#gqI&jvs+Z&4Q|i7!Y@{ z7kGszS`qIMJpJfPT%|2!xExd3cXpsy0Z$&9OkJBeD_jZRl_xpErNr~7OI+3Kia#^j zuWr&vzx6}t%luRbPPm6WlOZeYV%5&el*$vL-OrerfU4;3<#q@a%eVpqU-&=Ku0ds%Ft-=xAjjk2lln&Efc5=Mfg~wG!%qXndb- z&6VVM{-j%sSDUoR)HkCPu?{cxDlFU|s_K5NvH1(TlLf4m?XpD2dZ~sAW+d#ij(`-e zl&8clBNnc!97h-Ok5(#~^73Ut=Xf$F+CRO%5JbZ4#+^Td#0;`+{xAf_(nn~bvP#pJ zK-dTkS-^)9pim$(B5}}y1VZ8y1PUCE_oJ$UMh)#F6hHEVX)mz?g*M3TJp#Itk@ZM& zUuzb0pQBoA!d{nfT?+vl#wS;$ZFQDF|N~i)~gPjP*rh&2^jqV(9D>{90W|haX6xiP7G@co^fToQx{!Az$ zkaAs6eZWi3hhR|R0w)>R^`Jm5s=x3w9VTT#noobpnrb4hpaAKiy6f!0^p&j|f}V<; zEAAr0iab%_`D?A2FXu@D-_-LxPH%ASILvPu_L384wg|2iOJbS@AzOQ*prF-wR|bg9 z+eZ4RS`niaRk1hyric*L1~64j9oqo{ef@qg5$Xit{PN_mc#C3e+VKP1;zqvU+5|Re zk?og6fHu*3RMElFQx#&!Th zorsQZ1vi!85%&8+_n=w=Ib&VzC}sg9N`G>ViFj@_daeA9d8ne^huqMH-ix3AEXuL4XPoAg57?LI5g2iz9Mgs*SiQ5of3CUd`isPWaikuTW8>oj*!-yiFl%6 z5(8BX6@*as1M+&B{B6JQkliiJ0RR8@4#yjB6VpHa~}B z@4dMDBAu^Ir<*=^AgdwUlFes;>9O(fs1fYxFYNH}misHnD9AAMgF93h$sg*#cl}-OK|Tfl3#-`uMUG|KkXm#gLd9{|2ULBDU` z#iUKzp+mpP{Dd76j|C1*U@jt*DGIG7-fpUUA_ycs-$PLA2{(Skk0gmyT>u6q zAP@qo)oLJ3WbcO}sWE*9!JcIqZNUJ_s)MRt#8NCot!2QrBP~MPvZBOeJ&ZK`IqY3@ zJr4qujIgbsdKt(t$;0IXeRiApY`$E*YI^j0)xF4|qQ9@1K1aQsVog)K?#bNFq?E zsLCe+g_KECJx;W6)VbHvP+rZ0_k9*u+aMk0Ed4OY9C|z6_PR~W}{!etJCm1uR#)+VRPFE1kZ$?bH6jTx2cr0S?H_)Ri(2cJ{cD)wLdq9^> z&|TUFm~lk*b;x-iL+$+!^q#FiBQOZ*bC9z?jUN3ay09MNOOVq)3APXJ7`n0pa(95; zftdDDL@Wbd4s-#XUjeEWro0oJ7((0V=5r8xzK9-u9MSxCnDPp6hoIqTgp)uI-T@7- zM@+pO{4u0F29ncJyT1v^;}9*Ufyx1KNX>@se?WWvh^Ze%#A4tV(8bj-dOtYR%$zI_ zEfUCvQ&2lU0hK{S=lc-ZMW8%%;|YkK&!Y<)%)QiqIjDid!w&rlVf}Zzu_Z&()HEY| zOK1_Svf~~X!Hl_6$jnIKR~5=q6mkWW@}nO9=VAvJ5DG~m44g0(JCiN7f<6%H`YS|4 z>|!pirb89=>{08pFtQQG0V}1ktS~q;HACh5k?>*&+f>4gD})GGMm0#2RgU0EQko34 zsAqQzapnRkYK~rxV?ouR0@3?mUWQ)WWQK$NjUkf>@{1yZG5i(U%W&D%s*8{oh2c$n z?aN=LP{^Ao(RcB+#u7e{Kl(`2)2Y14U~tk7PdixX-63ZI!apQf=;|h!~Fj`5N z-nwxXtfE3-g~D_ZVT*xYg%v=`h?!mtyrrt%r1Yt}RTMsoDyRzDE3sht-!oo8xCjuW8)hR_KU>!Rl+j|91xwz9#wF7*pSb0+YwHbk?|7JwS+8d9{0m4X z8tB{kdp4}Sj!fGL%$|P%mbA%cXHy(o&z23pVYDnc_LP5Q`H`=|&n@B@&mo`R&4zV9 zr%*AKLeF#28a$mhXe+mmIm=Grv=bJy>B&cV_=yczb`0%R4_sqvx)hO_iQan+dTgz! zun7l7Z$TCBH2CqVO=sNJ7}p&c;iU!nCP*!x4!F(4GXc1&<+%|f)E zi_YJU?)w8w`8cxWT=eKFushMkhtNB}1%44z9nXLo1m|Q#+XZN^4~-ox8ol5gjc9u< z2BsN&pPdG@ZJ~Gne=zz4*lF-J#M5BM(E~q0_uT|e3%H{o(&*kVgWHdmQxS8&4w*$T z+HJ07N9UnzDUVt81iD-HaLajz^{T#aGUC3!~K=faS?*Be|^m_2BkU0x6{mtm= zps7mADthOCpo`mygfvwN-TN(c^=Yt=gP9*fG@OLaN+ZK<3z)-(1dd`>dPR2Iz)_bDqx61*J=C(q%|QNGa|7O zwV+LFBPtp8Erv{?%2e}0IFJmSHX#{7aC3a$H$V{?km6{w$xyy|pJmw*l++5OEli)I z4B$!{EsY3d*z*!q3IB5Z{h?=C;gw6|5u`I&99u9pHipv1M@VU5OYoktw_?&J?a;T0 zP)#Hti3v2B4CGV< z@Jym$Fl4>fN=5pG;n-pIFO2EC4f^o0--BoVwcM7Y?t9ZXF}=L{jHVb7z+ zIBr`=EFu45T*Q8|6XKcw_EMTs6}0w1kI=L6S6IW1^bPhh)c+VgJ&z!)G)JBOHI6>& zQbq?>QSl@(#uzR&vi#(KrrdWkTQ>cU#u=~S%nLrq;GWyb`O`V|f-g}W>tpE_BYA z%em*Chsf{d;guVZwvF0=W%BDD}y0i1=1_G4l6kLXIb=}Ytn&1+icBg$(~ zV~-)4KZJ01peun4mp=-zX_&!t1|F$B^A8}g6l4s_{XiC~-H@CC@kI!#2x|&7o(1I| zbnYQjwX~-or@ax}Z7|Z0lnp2u1HX!ByAVVkom+36 zG`|{MTnBm&=mL~-kXV99F9m-OIv+q`?HIb;4SoTteUP1nh_|7KehpL4N3^{Gk(do5 z51`!<6ZBRJARCd{W6}9Xp|AxS7lU*ldkVtoLKoHo0|Csn*W4Ssg3vD7-3``ka|5ksz6lqctSR(!Xnz zLOD+++3=jt`pf}g-FhCg9g=p8lJC(J1X&RD*C~ybwE!&a{RpYWl{QsCD}d%iSz0Nh zenO)m7-V6?N?cI=3n8cD;6!lbZkjvh>(LXg4M<^W1-9N}OGP@yRJowOI->cy+eg*;U!hGRSUzHf+yv_ku} z&Do?)+Tm}9Pxv5&AQ^Xv+Y-_tuN-pr>qFSOCE4cih#m~dn~Jf|Kussr?gQW_ET$cJlw_ys(?8~( zKYWV3-wgg3Ctr9yo$Yg3|JbkDJEoYm=zNwQ{{gn`-icd8aDx;M{b=M87*n3k@4gVR+FQJ3Bm&fnK=YeH??maOXnoxVbgJ}PdIR}8(hc2uEyA_(3BAU-f@BJpYBk24ZkTFE_`H1#Q zQG2e1+)8j3Bib%Qq!)qeMVEJhS3&2VLbU%a+FpW49|2a}eCDMm5b90P@jg&v=slkW ze+)zi=pl%ogwD=`ecv^6atF|bP2hAPl1C#NPDAbc0hD%Pg1ZJp+Z)kp7dpQUR2jVU z5N&@0$*qWnMc`MWz*hRbDkg2x4qH2Xo@Xf}jhO@)M^bT(#7`vE5FkRV zpr^t2{U~^oQsOvH9pOu@*RQ_vCcVzUtv$8sM8sY&SyrKmW37k6H=lSSO}UkagvGHcoLJpP8O(b~k-~GUCV{9tJkJClx;%!FI#vi_;g%HrJ-?w?8Ud>b04Wmq z9_;IWim?hPuYl5xq*CoD<&n(JV@lf$c5L_!+qOM`CWi9H$PM>VDHU)lIh2Tl%%J>2 z@a)>S)gnq;Knb)!s~B3@C>2Lz6H261N_n7}5F~w3C63^jBgbX*0AnI;$%Nkq%ph{`r} zeiaah(o^W2|BUYb7u2rrfin})csho7$3e8e2jVI8?ys5tMzsaq_baqJ40a0Cn5n+1 zifO;nK81XNQl(n!VV<;?&<>Xhp=pbF=nqfw^zVAGVm8HMkyJJoK}JJMren0u$WR(B zP%h|(kc?Hk4Ol@4Mp&t@gl{+cv3|DV~9WqIe48?eneOh zTIl4%`9?j9I)K8~1*0Jh)wb+NlPc_8R6^67%+i?75R1hOglIA-c}Yx23rl$5q`2q} zZ|7BK9!DuZOtIoc#1fM>X_NNnF=0uX8`HF;9bBb@pi4$oeai{f>99h_{zCBeG7}Ml zv^L`LzULYrAWRE`L1P3#VQ>!Hws9P1d|(%>*UIxELK3kMf5> z7xBFcpzsUZ@icTyJA&pIXi+8>Pa(09R)Sb84YGx7dNzq*pCzS*bR?D?H;Lv@3sBfd z3#bGQLUB`+GF3g>v-_af8?G&yn{y{{5<(wnRKQBJ8q!ImXpA;90Up>Y@Ape z$CAWiS)}$5+6PMb{s>wZQ2r2FSIqOQd{UVvX3UsDQ)31r_dKx{Tc_vY<_x40KqLds zgM|6rUIyt!=;{`9c_&apmp7y1bI@ux6rV5^Mn4x+vJ#Lu0nv03SV5(*vJ12XN2BvA z!RkQxgXmI^=@+z`KsW)C%L3s+aVtV(5e>(J9f$ZFM6v;0*@Ez@i0m;CYlK(_#JfNw zz-|MX2KJgjE|hYxJ50c;y`WDKAZ=Rm+)YqehpuWwY9=^o@OGg0T#N4gnc1Vc!{A9o z({YA4r?d)6+Yqt&i1cj0Gc2Q-Ip+GR0|rJWZLnGmJeL8qP_@!Y+v}k9Nc5iXLTMjZ z4W@csdK|syYv|$o&{i{)wj#X&({>bdm^yn7b7#&(YajlCVC9qc!b}L5Inp;qh>)!U{DC4Q+Zz zOb~ubwzN=yr3D?SRvI%6#1nBd#$SxXKeWuUW5{X=I~Ak7a|%6M9^vMjZ>LI%cuY~L zl>hV~lQwCGxYY*?hg0w%ghfkZhPj4&Q(#}*6MW7WJ{9Okk_I2=5^DjW32&=|9CIwc|ju2`l*3Y??@RU&{ zQwHzTksfXBdZpG37ppYKVa}8W63NtI^_f1KJ=zDv2p~6lA5X5jh2xHT zC+EI?0YzUyc?%Cc{8RSzu4DF$S8(B_KcH>;c>xcoLI?-PChCC=+f#(Fv11@D6ClcX z6RP5~dF}VFqDy@>od(D^Pz+q*zY^ziK% zIfx9R99@#7&m8@=z_;1v*^{{qQ0xJ5`WM(6HD58n)< z52JMjoH>a2GAOS^5BwZxKwC|KK+OCcT5pEI-y+hd!_;@7OPdh!MSu%~H=FlQ{}|fc z1+f{3L@RpdH^E+n=zKls5fDv~o{8@N7E}w6J_{PpM8szx91Gq1Yj8(kWF?~MEVO8X z#5{Dh8=W_sXwmd`gf5^9D>3?tB}D2}XnQ@{-G_+JH9_#;t<oIpgC{egfU{8pM=$ zp$m_~z;%$h5RqAiPA)>IJ*eJa(%hINUvQbb{1iU&zQ1MXntS>DH~*V-HbZe_xkkQbjl$`PE<7t|nV9lDl#@=4h}Y`bv==O#$MjiK85|s7*UldL-rR=} zf~n2Zo)Z_rvj&7RC?MK#i{lrahV%ck_ug@m9QED*yQ;eAFw zn$PRCce@>`t9p96>hles?}I;Mq;Qm$co%uU7>41@<_nsO3Pbz^$8@B&22^#sRtl7& zS|i@%?pXvuSU<|PsH%EOL?}KJdH}IzEM(OM23i|}DTUcjH9Sfq6X<76rUt#OA+5L(c+p0T8xDE!&b zOBKxK_EmEMXVL`1V`^*uRrB?#p`=xBq6};QiK=0)nhFr+`c?A+XO&5-VWv8a2$5KF zc21b-pEmFQT0t4hMx%nMTjsG!=7hgt9xC{<&qnLS=$L{@0a_iqiTXP%xw|;`B9vEd}yqCZ# zaraGs##nC;3h*mq08CHb%H|u2O!PhsK;Y#N!eQvh54q>I97|Tefv)x?j14@*RCX7Y z=|1kdv6qRyK>`gsANl_{5_Oo$<ii_{v7g80db&+p1v7^-H6J-jPXW~e+Qv*kXjBSpGRlz1tL&<44kvTa$w@ShA?RX zK`6T7O4RVD!QUG`H+k@<4VfMLGFnZT7&%uwOb0#EKDA$CS922(CdSPl4i-=&3uxJWB@( zcc2P+C>&sBsa!b-rG2KRU~vm7dlz^kAiB~0|7OBwWdj7$2zSVM{j>%H`o zD=}PfXr=L#hY1gwEtV{WRb84GYjd~=F~#QPOx|FvbgLyLz6!8~g;D`irD-neUdNjG z%V}(GA{MO^!rvAg$H8@7oW_Ox$zS{>8@dyG@|IrmK-5y95^WuI)bU(F2#CbutXwje z^Olct!?s~czD3LuRQxJoGh$ytGLsGfCOrV9OcaP#vtB@$@zl-C4O(MYOG8w1y~BL+ zYI;C*(y!(mRy~okMoBdjnpLe`TdixTs|#?g5Xc!tQ!~iwq-y$Na@e09ierZ*kcNsr ziy9p+Ue`@)TL+dE`EA|)=N_W=*XIN2)u`4A$>yFz!?g-nFsGtByin*=qd~~Y`9TXM>c@R;Ah%?%IE8_!q5s$Z0 zDUIO=rttgZ_~U@_MECChL3j-ZAuKW@_w(@Ptwf_~+|oFK@6;*buW4Up&Hus)_gg?7rtb*1N5b|((Wl(K z;c;=a+YiH^2iatD7`11PRYT~pZ^1+pP%`2+INaw(i1SSKWxXJ z?T?y(vHwL+{2VBNs?6L!ox5x18K^E^wR;qXzW}l!Y%4JBxLeUaHo@ZGCQDg0$5qSy8mJG#d z!tB7A+(Q-K1XCg+yeTtzfC8b7C0GZ6DL5~xCL;%kj#*`#HJ$FfIRnd;`1Yc8U@dp_yLG?7T;xwneGNa6cFLfRCv zLwxUlzefD+Z)Wkzg@|8(>jl_#9$rTs&pDh(gx1z}F4(Y;kxZT~y#;hUO2W4ARWMt& zNP(8K`F|SB`&cQonk9jRdE+x-n}8MqRn0XFOx|~u=o!Lj43t`g2E=OJL1rgcDXX&G zp?^<^kN}!=2NeV}B_)C|M06$uwQ4977PTs8=2wMdS!f}cCt2!)glXr(9>CIB__9G(bf zJtK%X7J*XFB30mFmUfXa?+y@ALxczkOgN?)kr-SMv5<5DL@~rLz!0LUz>J6au$3Wm z8c-!54#E%5w~e|cU`U?@y38?)aS<_n(QZw@h3T^hLIP`>YpN;p|4jeF@1M$s+Y{k9 zb$IRRu(^16jllF>&qAzL*zE_R6A%P22VDd5o zg%+mZyp|?J#}CXGP>1<@fl_$BkLP=axCuZ?6k*7q5XLnr%{dx#Efro<0bbynP*wqc z;1g(#3N6CE3TARvRJahS-h3NLlM^E%B@gBMXis$T$EUuQjVssD+}2DYk(gOP)bX2# zQVPp%!6(GX04wew%|6mJ2 z#FE&SNf?l5EHpA~U&`vS=0~EjB-mlQmXz4Gz_Cr}s4Y!(ik~o$K|CY1S zCqh#2HPdCE?u6pnQ#&|k(`uUA=Mag!xV(eMKbyz={k(c?6-wn$s))3s*pXH&nLz6b zD##-QVJQ?JrCsB-)&W{qYSdDzq0S1WTxLmBxK~$DK@N=$Bc2pm1!(P~wL7yw)7nE< z36~B~s(?Tvtx%y{2hTW)s)1X>jOg9T;bRDi@sJskQ*B>``)jVJgIV&3z>u8U<75x>0xs^I3e^tU&-Hv9~gIPX~ za8^B{rCH*pE6fl*U2Uu8`ZENt+CRVM8liW!dQbH6_e|IH-wO9t%x4+iqOq|tMn=a% zGX2b-e;vOmyf8e3wWt+bd$u*f@k-dg>KfvgT1i*EYy!c{FMI{xiF}QZ-10@X3_OY* zX=Hw^ow#M2{Jk)&vszWed)r}zeXO!z9d*1=@j}fZ ztirY((oHR_T(KO-vgq2~!;bzOLphIWS45EbSxhGi#&l(TEcnXuK_xkd$oKna8hLNAPoT$vFTk*17< z4$~o^`Z<9k1dS2JqK+u1Ep21n%B9TdUO*yYJVP%gob=hOPT0R=NV^#!Y_xKb(joAt z(IFv_RsxiV?+=AXhoQf!c!HMn%z4K`8BvrILWi~Zj^9>uy!MXs?5Pu9KlEUtYjOld z3~4tI1Z9L3#nLV+n0^*NhXzj6UmbeYoN#}s=6DO^9gF})nECbv7>`*Lbb;B0wHN*z zJ1*0P1HubQ78t=BhZ%w;0G&5&izMjKYbXjKIT9FU)R4#tYDj13DI^*8tq}g5V776I zshd~{kE^Z^W!SIkIQ;Ov5f6tIUPDAdN5lJ7V5ZcDj@R55!hN;Zu6Ch%?W&hG6<)6Z z1SoAIWeO=R0>6l!`5fw~L_k`0_~O2 zRO>_5VE$-}lSe7|mCtD}zR5<)=4acFF5 zWtnZ0Zfsy_-w;Oz#u=TiFkSX3Rs?>a2sBjd@)^Dr%)I_VAcP+p=BnIn#xz)KB{arH zQB4;J6|GhEq^eT25sjG%^VH%0Av7u!xKT3-q*ViDHIcvSl@Y>tFNIJDt%*Ap4Ka(B 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

X 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

R;Bc{r(IUB}-|T%7#kKop5pt*5Przb90z^ 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ٖ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 diff --git a/jquery-ui.html b/jquery-ui.html deleted file mode 100755 index 93083590a833d..0000000000000 --- a/jquery-ui.html +++ /dev/null @@ -1,513 +0,0 @@ - - - - - jQuery UI Example Page - - - - - -

Welcome to jQuery UI!

- -
-

This page demonstrates the widgets and theme you selected in Download Builder. Please make sure you are using them with a compatible jQuery version.

-
- -

YOUR COMPONENTS:

- - - -

Accordion

-
-

First

-
Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
-

Second

-
Phasellus mattis tincidunt nibh.
-

Third

-
Nam dui erat, auctor a, dignissim quis.
-
- - - - -

Autocomplete

-
- -
- - - - -

Button

- -
-
- - - -
-
- - - - -

Tabs

-
- -
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
-
Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.
-
Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.
-
- - - - -

Dialog

-

Open Dialog

- -

Overlay and Shadow Classes (not currently used in UI widgets)

-
-

Lorem ipsum dolor sit amet, Nulla nec tortor. Donec id elit quis purus consectetur consequat.

Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci.

Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat.

Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam.

Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante.

Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi.

- - -
-
-
-

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

-
-
- -
- - -
-

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

-
- - - -

Framework Icons (content color preview)

-
    -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
- - - -

Slider

-
- - - - -

Datepicker

-
- - - - -

Progressbar

-
- - - - -

Selectmenu

- - - - - -

Spinner

- - - - - -

Menu

- - - - - -

Tooltip

-

- Tooltips can be attached to any element. When you hover -the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip. -

- - - -

Highlight / Error

-
-
-

- Hey! Sample ui-state-highlight style.

-
-
-
-
-
-

- Alert: Sample ui-state-error style.

-
-
- - - - - - diff --git a/layouts/404.html b/layouts/404.html new file mode 100644 index 0000000000000..a3c8dba173a3d --- /dev/null +++ b/layouts/404.html @@ -0,0 +1,5 @@ +{{ define "main" }} +
+

Sorry, this page was not found. :(

+
+{{ end }} diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html new file mode 100644 index 0000000000000..679078732a941 --- /dev/null +++ b/layouts/_default/baseof.html @@ -0,0 +1,25 @@ + + + + {{ partial "head.html" . }} + + + {{ partialCached "header.html" . "default" }} + {{ block "hero" . }} + +
+
+
+

{{ block "hero-title" . }}{{ .Params.bigheader | default .Title }}{{ end }}

+
{{ .Params.abstract }}
+
+ {{ block "hero-more" . }}{{ end }} +
+
+ {{ block "post-hero" . }}{{ end }} + {{ end }} + {{ block "main" . }}{{ end }} + {{ partialCached "footer.html" . }} + {{ partialCached "footer-scripts.html" . }} + + \ No newline at end of file diff --git a/layouts/_default/list.html b/layouts/_default/list.html new file mode 100644 index 0000000000000..c1339be5e1c7e --- /dev/null +++ b/layouts/_default/list.html @@ -0,0 +1,3 @@ +{{ define "main" }} + {{ .Content }} +{{ end }} diff --git a/layouts/_default/single.html b/layouts/_default/single.html new file mode 100644 index 0000000000000..c1339be5e1c7e --- /dev/null +++ b/layouts/_default/single.html @@ -0,0 +1,3 @@ +{{ define "main" }} + {{ .Content }} +{{ end }} diff --git a/layouts/blog/baseof.html b/layouts/blog/baseof.html new file mode 100644 index 0000000000000..5df29cfce3a2a --- /dev/null +++ b/layouts/blog/baseof.html @@ -0,0 +1,38 @@ + + + + {{ partial "head.html" . }} + + + + + + {{ partialCached "header.html" . "blog" }} +
+

Kubernetes Blog

+
+
+
+
+ {{ block "main" . }}{{ end }} +
+
+
+ {{ with .Site.Home.OutputFormats.Get "rss" -}} + + + {{ end -}} + @Kubernetesio + View on Github + #kubernetes-users + Stack Overflow + Download Kubernetes +
+ {{ partialCached "blog/archive.html" . }} +
+
+
+ {{ partialCached "footer.html" . }} + {{ partialCached "footer-scripts.html" . }} + + \ No newline at end of file diff --git a/layouts/blog/list.html b/layouts/blog/list.html new file mode 100644 index 0000000000000..ad099ed461cda --- /dev/null +++ b/layouts/blog/list.html @@ -0,0 +1,8 @@ +{{ define "main" }} + {{ range (.Paginator 1).Pages }} + {{ .Render "post" }} + {{ end }} + +{{ end }} diff --git a/layouts/blog/pager.html b/layouts/blog/pager.html new file mode 100644 index 0000000000000..d9b7350923bcc --- /dev/null +++ b/layouts/blog/pager.html @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/layouts/blog/post.html b/layouts/blog/post.html new file mode 100644 index 0000000000000..2f65c973f9661 --- /dev/null +++ b/layouts/blog/post.html @@ -0,0 +1,3 @@ +

{{ .Date.Format .Site.Params.time_format_blog }}

+

{{ .Title }}

+{{ .Content }} diff --git a/layouts/blog/single.html b/layouts/blog/single.html new file mode 100644 index 0000000000000..7ccb1c47ba439 --- /dev/null +++ b/layouts/blog/single.html @@ -0,0 +1,4 @@ +{{ define "main" }} + {{ .Render "post" }} + {{ .Render "pager" }} +{{ end }} diff --git a/layouts/case-studies/baseof.html b/layouts/case-studies/baseof.html new file mode 100644 index 0000000000000..580428cbf88a2 --- /dev/null +++ b/layouts/case-studies/baseof.html @@ -0,0 +1,12 @@ + + + + {{ partial "head.html" . }} + + + {{ partialCached "header.html" . "default" }} + {{ block "main" . }}{{ end }} + {{ partialCached "footer.html" . }} + {{ partialCached "footer-scripts.html" . }} + + \ No newline at end of file diff --git a/layouts/case-studies/single.html b/layouts/case-studies/single.html new file mode 100644 index 0000000000000..c1339be5e1c7e --- /dev/null +++ b/layouts/case-studies/single.html @@ -0,0 +1,3 @@ +{{ define "main" }} + {{ .Content }} +{{ end }} diff --git a/layouts/community/list.html b/layouts/community/list.html new file mode 100644 index 0000000000000..0f1e61b061354 --- /dev/null +++ b/layouts/community/list.html @@ -0,0 +1,7 @@ +{{ define "main" }} + {{ .Content }} +{{ end }} + +{{ define "post-hero" }} +KubeConEU +{{ end }} \ No newline at end of file diff --git a/layouts/docs/baseof.html b/layouts/docs/baseof.html new file mode 100644 index 0000000000000..829457a79c808 --- /dev/null +++ b/layouts/docs/baseof.html @@ -0,0 +1,45 @@ + + + + {{ partial "head.html" . }} + + + {{ partialCached "header.html" . "docs" }} + {{ block "hero" . }} + +
+ {{ partial "docs/top-menu.html" . }} +
+ {{ end }} + {{ block "deprecation" . }}{{ partial "deprecation-warning.html" . }}{{ end }} +
+ {{ block "side-menu" . }}{{ end }} +
+ {{ block "content" . }}{{ end }} +
+

Analytics

+ {{ if and (ne .Kind "404") (not (strings.Contains .Path "search")) }} + {{ if not .Params.no_issue }} + + Create an Issue + {{ end }} + {{ end }} + {{ if not .Params.noedit }} + Edit this Page + {{ end }} +
+
+
+ {{ partialCached "footer.html" . }} + {{ partialCached "footer-scripts.html" . }} + + \ No newline at end of file diff --git a/layouts/docs/docsportal.html b/layouts/docs/docsportal.html new file mode 100644 index 0000000000000..807529fc280b8 --- /dev/null +++ b/layouts/docs/docsportal.html @@ -0,0 +1,12 @@ +{{ define "content" }} + {{ if not .Params.notitle }} +

{{ .Title }}

+ {{ end }} + {{ .Content }} + {{ if .Params.track }} + {{ partial "docs/user-journey.html" . }} + {{ end }} +{{ end }} + +{{ define "content-id" }}content{{ end }} + diff --git a/layouts/docs/docsportal_home.html b/layouts/docs/docsportal_home.html new file mode 100644 index 0000000000000..cfd6d4bec45e4 --- /dev/null +++ b/layouts/docs/docsportal_home.html @@ -0,0 +1,96 @@ +{{ define "content" }} + {{ if not .Params.notitle }} +

{{ .Title }}

+ {{ end }} + {{ template "docs-portal-user-journey" . }} + {{ partial "docs/browse.html" (where .Parent.Sections ".Params.toc_hide" "!=" true) }} +{{ end }} + +{{ define "content-id" }}content{{ end }} + +{{ define "docs-portal-user-journey" }} +{{ $data := .Site.Data }} +
+ {{ $user_personas := index $data "user-personas" }} + {{ $user_personas | jsonify }} +
+ +
+{{ $skip_uj_paths := "migrators" }} +{{ range $k, $v := $user_personas }} + +{{ if strings.Contains $skip_uj_paths $k }} +{{ else }} + {{ range $kk, $vv := $v }} +
+ {{ $persona_info := $vv }} + {{ if $persona_info.short_desc }} + {{ $persona_info.short_desc }} + {{ end }} +
+ {{ end }} +{{ end }} + +{{ end }} +
+ +
+
+ Kubernetes is an open source system for managing containerized applications across multiple hosts, providing basic mechanisms for deployment, maintenance, and scaling of applications. + The open source project is hosted by the Cloud Native Computing Foundation (CNCF). + + +
+
+ +
+ + + +
+ +
+
I AM...
+
+
.
+
+
+ +
+
LEVEL
+
+
+ +
+
+ Foundational +
+
+
+ +
+
+ Intermediate +
+
+
+ +
+
+ Advanced Topics +
+
+
+
+ +
+
+ I want to... + +
+
+{{ end }} \ No newline at end of file diff --git a/layouts/docs/glossary.html b/layouts/docs/glossary.html new file mode 100644 index 0000000000000..d279711f5d7c9 --- /dev/null +++ b/layouts/docs/glossary.html @@ -0,0 +1,56 @@ +{{ define "side-menu" }} +{{ partial "docs/side-menu.html" . }} +{{ end }} + +{{ define "content" }} +

{{ .Title }}

+ + +

This glossary is intended to be a comprehensive, standardized list of Kubernetes terminology. It includes technical terms that are specific to K8s, as well as more general terms that provide useful context.

+
+

Filter terms according to their tags:

+ + {{ range (index .Site.Data "canonical-tags") }} +
+ {{ .description }} +
+ {{ end }} + {{ $sorted_tags := sort (index .Site.Data "canonical-tags") "name" }} + {{ range $sorted_tags }} + {{ $full_tag_name := printf "tag-%s" .id }} + + {{ .name }} + + {{ end }} + Select all + Deselect all +
+

Click on the [+] indicators below to get a longer explanation for any particular term.

+{{ $glossary_terms := (.Site.GetPage "page" "docs/reference/glossary").Resources.ByType "page" }} +{{ $glossary_terms := sort $glossary_terms "Title" "asc" }} +
    + {{ range $glossary_terms }} + {{ $.Scratch.Set "tag_classes" "" }} + {{ range .Params.tags }} + {{ $.Scratch.Add "tag_classes" (printf "tag-%s " .) }} + {{ end }} + {{ $term_identifier := (printf "term-%s" .Params.id) }} + +
  • +
    +
    +
    {{ .Title }}
    + {{ with .Params.aka }} + Also known as: {{ delimit . ", " }} +
    + {{ end }} + {{ .Summary }} [+] +
    + {{ .Content | strings.TrimPrefix .Summary | safeHTML }} +
    +
    +
  • + {{ end }} +
+{{ end }} + diff --git a/layouts/docs/list.html b/layouts/docs/list.html new file mode 100644 index 0000000000000..e0a4bd93260bd --- /dev/null +++ b/layouts/docs/list.html @@ -0,0 +1,13 @@ +{{ define "content" }} + {{ with .Content }} + {{ partial "docs/content_page" (dict "ctx" $ "page" $) }} + {{ else }} + {{ if ge (len .Pages) 1 }} + {{ $page := index .Pages 0 }} + {{ partial "docs/content_page" (dict "ctx" $ "page" $page) }} + {{ end }} + {{ end }} +{{ end }} +{{ define "side-menu" }} +{{ partial "docs/side-menu.html" . }} +{{ end }} diff --git a/docs/search.md b/layouts/docs/search.html similarity index 91% rename from docs/search.md rename to layouts/docs/search.html index 619b0152cfa8a..162e9ee1f53e5 100644 --- a/docs/search.md +++ b/layouts/docs/search.html @@ -1,7 +1,5 @@ ---- -layout: docwithnav -title: Search Results ---- +{{ define "content" }} +

{{ .Title }}

@@ -20,3 +18,8 @@ document.querySelector('html').classList.add('search'); })(); +{{ end }} + + + + diff --git a/layouts/docs/single.html b/layouts/docs/single.html new file mode 100644 index 0000000000000..03b59b6544cfe --- /dev/null +++ b/layouts/docs/single.html @@ -0,0 +1,8 @@ + +{{ define "content" }} +{{ partial "docs/content_page" (dict "ctx" . "page" .) }} +{{ end }} + +{{ define "side-menu" }} +{{ partial "docs/side-menu.html" . }} +{{ end }} diff --git a/layouts/index.html b/layouts/index.html new file mode 100644 index 0000000000000..e9e015261dea8 --- /dev/null +++ b/layouts/index.html @@ -0,0 +1,10 @@ +{{ define "main" }} +{{ .Content }} +{{ end }} + + +{{ define "hero-more" }} +{{ with .Site.GetPage "section" "docs/tutorials/kubernetes-basics" }} +{{ .LinkTitle }} +{{ end }} +{{ end }} \ No newline at end of file diff --git a/layouts/index.rss.xml b/layouts/index.rss.xml new file mode 100644 index 0000000000000..ffc294254f87d --- /dev/null +++ b/layouts/index.rss.xml @@ -0,0 +1,38 @@ + + + {{ .Site.Title }} – {{ .Title }} + {{ .Permalink }} + Recent Hugo news from gohugo.io + Hugo -- gohugo.io{{ with .Site.LanguageCode }} + {{.}}{{end}}{{ with .Site.Author.email }} + {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Author.email }} + {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Copyright }} + {{.}}{{end}}{{ if not .Date.IsZero }} + {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}{{ end }} + + {{ "img/hugo.png" | absURL }} + GoHugo.io + {{ .Permalink }} + + {{ with .OutputFormats.Get "RSS" }} + {{ printf "" .Permalink .MediaType | safeHTML }} + {{ end }} + {{ range first 50 (where .Site.RegularPages "Type" "in" (slice "blog")) }} + + {{ .Section | title }}: {{ .Title }} + {{ .Permalink }} + {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }} + {{ with .Site.Author.email }}{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}} + {{ .Permalink }} + + {{ $img := (.Resources.ByType "image").GetMatch "*featured*" }} + {{ with $img }} + {{ $img := .Resize "640x" }} + {{ printf "]]>" $img.Permalink $img.Width $img.Height | safeHTML }} + {{ end }} + {{ .Content | html }} + + + {{ end }} + + \ No newline at end of file diff --git a/layouts/partials/blog/archive.html b/layouts/partials/blog/archive.html new file mode 100644 index 0000000000000..7e069a7c089ad --- /dev/null +++ b/layouts/partials/blog/archive.html @@ -0,0 +1,21 @@ +
+ {{ range $i, $e := .CurrentSection.Pages.GroupByPublishDate "2006" }} +
+
+

+ + {{ .Key }} +

+
+
+
+
    + {{ range .Pages }} +
  • {{ .LinkTitle }} {{ .PublishDate.Format "Jan 2" }}
  • + {{ end }} +
+
+
+
+ {{ end }} +
\ No newline at end of file diff --git a/layouts/partials/deprecation-warning.html b/layouts/partials/deprecation-warning.html new file mode 100644 index 0000000000000..5cacae611b20b --- /dev/null +++ b/layouts/partials/deprecation-warning.html @@ -0,0 +1,12 @@ +{{ if .Param "deprecated" }} +
+
+
+

+ Documentation for Kubernetes {{ .Param "version" }} is no longer actively maintained. The version you are currently viewing is a static snapshot. + For up-to-date documentation, see the latest version. +

+
+
+
+{{ end }} diff --git a/layouts/partials/docs/browse.html b/layouts/partials/docs/browse.html new file mode 100644 index 0000000000000..5e69206c19915 --- /dev/null +++ b/layouts/partials/docs/browse.html @@ -0,0 +1,39 @@ + +
+ +
+{{ range . }} +{{ template "docs-browse-section" . }} +{{ end }} +
+ + +{{ define "docs-browse-section" }} +
+ + {{ $pages := .Pages | union .Sections }} + {{ $pages := where $pages ".Params.toc_hide" "!=" true }} + {{ if ge (len $pages) 1 }} +
+ {{ $num_pages := len $pages }} + {{ if gt $num_pages 0 }} + {{ $column_size := (div $num_pages 3) | math.Ceil | int | default 1 }} + {{ range $i, $e := $pages.ByWeight }} + {{ $offset := mod $i $column_size | add 1 }} + {{ if eq $offset 1 }} +
+ {{ end }} + {{ printf "%02d - %s" (add $i 1) .LinkTitle }}
+ {{ if or (eq $offset $column_size) (eq (add $i 1) $num_pages)}} +
+ {{ end }} + {{ end }} + {{ end }} +
+ {{ end }} +
+{{ end }} diff --git a/layouts/partials/docs/content_page.html b/layouts/partials/docs/content_page.html new file mode 100644 index 0000000000000..b1bad0236d3fc --- /dev/null +++ b/layouts/partials/docs/content_page.html @@ -0,0 +1,12 @@ +

Edit This Page

+{{ if not .page.Params.notitle }} +

{{ .page.Title }}

+{{ end }} +{{ with .page.Params.content_template }} +{{ partial . $ }} +{{ else }} +{{ if and (not .page.Params.toc_hide) (not (.page.HasShortcode "toc")) }} +{{ .page.TableOfContents }} +{{ end }} +{{ .page.Content }} +{{ end }} \ No newline at end of file diff --git a/layouts/partials/docs/side-menu.html b/layouts/partials/docs/side-menu.html new file mode 100644 index 0000000000000..c99e48f11051e --- /dev/null +++ b/layouts/partials/docs/side-menu.html @@ -0,0 +1,24 @@ +
+
+ {{/* This can be any page in the docs tree. Need to find the correct ancestor. + In a roundabout way. This will improve when Go templates gets assignment and break support (both in Go 1.11). + */}} + {{ $p := . }} + {{ .Scratch.Set "section" .CurrentSection }} + {{ .Scratch.Set "sectionFound" false }} + {{ $docs := .Site.GetPage "section" "docs" }} + {{ if ne .CurrentSection $docs }} + {{ range $docs.Sections }} + {{ if not ($.Scratch.Get "sectionFound") }} + {{ if $p.IsDescendant . }} + {{ $.Scratch.Set "section" . }} + {{ $.Scratch.Set "sectionFound" true }} + {{ end }} + {{ end }} + {{ end }} + {{ end }} + {{ $section := (.Scratch.Get "section") }} + {{ partialCached "tree.html" $section $section.RelPermalink }} +
+ +
\ No newline at end of file diff --git a/layouts/partials/docs/top-menu.html b/layouts/partials/docs/top-menu.html new file mode 100644 index 0000000000000..768fbc76a87fd --- /dev/null +++ b/layouts/partials/docs/top-menu.html @@ -0,0 +1,21 @@ +{{ $p := . }} +{{ $home := .Site.Home }} +{{ $docs := .Site.GetPage "section" "docs" }} +{{ $menuSections := (where $docs.Sections ".Params.main_menu" true) }} +{{ range $menuSections }} +{{ if $p.IsDescendant . }} +

{{ if not (strings.Contains .Dir "home")}}{{ .Params.bigheader | default .Title }}{{ end }}

+
{{ .Params.abstract }}
+{{ end }} +{{ end }} +
+ + +
diff --git a/layouts/partials/docs/user-journey.html b/layouts/partials/docs/user-journey.html new file mode 100644 index 0000000000000..6fde88cf2e156 --- /dev/null +++ b/layouts/partials/docs/user-journey.html @@ -0,0 +1,22 @@ +
{{ .Params.track }}
+
+ Introduction +
+
sections in this doc
+
+ +
+ +
+ +{{ partial "insert-capture" (dict "ctx" . "id" "overview" )}} + +{{- with .Scratch.Get "__cid_body" -}} +{{ $body := replace . `` `
` | safeHTML }} +{{- $body -}} +{{- end -}} + +
+ + diff --git a/_includes/footer-scripts.html b/layouts/partials/footer-scripts.html similarity index 90% rename from _includes/footer-scripts.html rename to layouts/partials/footer-scripts.html index 07f1e86bd8787..601ade60d8d9e 100644 --- a/_includes/footer-scripts.html +++ b/layouts/partials/footer-scripts.html @@ -1,17 +1,5 @@ - - + + + + + + {{ with .Params.js }}{{ range (split . ",") }} + {{ end }}{{ else }}{{ end }} + \ No newline at end of file diff --git a/layouts/partials/header.html b/layouts/partials/header.html new file mode 100644 index 0000000000000..c76bd81aec651 --- /dev/null +++ b/layouts/partials/header.html @@ -0,0 +1,79 @@ +
+ +
+ + + + + +
diff --git a/layouts/partials/insert-capture.html b/layouts/partials/insert-capture.html new file mode 100644 index 0000000000000..8dcb9861ad48f --- /dev/null +++ b/layouts/partials/insert-capture.html @@ -0,0 +1,4 @@ +{{- $capture_id := printf "__cid_%s" .id -}} +{{- with .ctx.Scratch.Get $capture_id -}} +{{- . -}} +{{- end -}} diff --git a/layouts/partials/templates/block.html b/layouts/partials/templates/block.html new file mode 100644 index 0000000000000..97b397ed06111 --- /dev/null +++ b/layouts/partials/templates/block.html @@ -0,0 +1,14 @@ +{{/* We need to initialize the shortcode's page's content. This is a very special construct. We are building page blocks by setting state on the Page, +but we are not accessing its content. The .Content is lazily loaded in Hugo, so we must invoke that method before we do anything else. */}} +{{ if .page.Content }}{{ end }} +{{- $capture := printf "__cid_%s" .block -}} +{{- $block := .page.Scratch.Get $capture -}} +{{- if and (not $block) (not $.optional) -}} +{{ partial "templates/errorthrower.html" (dict "block" .block "heading" .heading "purpose" .purpose) . }} +{{- end -}} +{{- with $block -}} +{{- with $.heading }} +

{{ . }}

+{{ end -}} +{{ . }} +{{ end -}} diff --git a/layouts/partials/templates/blocks.html b/layouts/partials/templates/blocks.html new file mode 100644 index 0000000000000..280aa6aa5d14b --- /dev/null +++ b/layouts/partials/templates/blocks.html @@ -0,0 +1,20 @@ +{{ .ctx.Scratch.Set "sections" slice }} +
    +{{ range .ctx.Scratch.Get "blocks" }} +{{ if .content }} +{{ $.ctx.Scratch.Set "section" .content }} +{{ else}} +{{ $.ctx.Scratch.Set "section" (partial "templates/block" .) }} +{{ end }} +{{ $section := $.ctx.Scratch.Get "section" }} +{{ $headers := findRE "(.|\n)*?" $section }} +{{ range $headers }} +{{ $header := . | replaceRE "" "" | htmlUnescape }} +
  • {{ $header }}
  • +{{ end }} +{{ $.ctx.Scratch.Add "sections" $section }} +{{ end }} +
+{{ range .ctx.Scratch.Get "sections" }} +{{ . }} +{{ end }} \ No newline at end of file diff --git a/layouts/partials/templates/concept.html b/layouts/partials/templates/concept.html new file mode 100644 index 0000000000000..0ac99a3f69bf9 --- /dev/null +++ b/layouts/partials/templates/concept.html @@ -0,0 +1,8 @@ +{{ partial "templates/block" (dict "page" .page "block" "overview" "purpose" "states, in one or two sentences, the purpose of this document") }} + +{{ .ctx.Scratch.Set "blocks" slice }} +{{ .ctx.Scratch.Add "blocks" (dict "page" .page "block" "body" "purpose" "supplies the body of the page content.") }} +{{ .ctx.Scratch.Add "blocks" (dict "content" .page.Content) }} +{{ .ctx.Scratch.Add "blocks" (dict "page" .page "block" "whatsnext" "heading" "What's next" "optional" true ) }} + +{{ partial "templates/blocks" . }} diff --git a/layouts/partials/templates/errorthrower.html b/layouts/partials/templates/errorthrower.html new file mode 100644 index 0000000000000..64d2ab77e4258 --- /dev/null +++ b/layouts/partials/templates/errorthrower.html @@ -0,0 +1,14 @@ +

ERROR

+ +

You must define a {{ .block }}

+ + +

This template requires that you provide text that {{ .purpose }}. The text in this block will +be displayed under the heading {{ .heading }}. + +To get rid of this message and take advantage of this template, capture the {{ .block }} variable and populate it with content. + + + + +

\ No newline at end of file diff --git a/_includes/feature-dialog.md b/layouts/partials/templates/feature-dialog.html similarity index 78% rename from _includes/feature-dialog.md rename to layouts/partials/templates/feature-dialog.html index 391f845926e98..2f25aefb0282a 100644 --- a/_includes/feature-dialog.md +++ b/layouts/partials/templates/feature-dialog.html @@ -1,13 +1,14 @@ -{{ dialog_title }} -
-{{ dialog_content | markdownify }} + +{{ .page.Title }} +
+{{ .page.Content | markdownify }}
-{% raw %}{% endraw %} + diff --git a/layouts/partials/templates/feature-state.html b/layouts/partials/templates/feature-state.html new file mode 100644 index 0000000000000..3e0bc3538bfde --- /dev/null +++ b/layouts/partials/templates/feature-state.html @@ -0,0 +1,21 @@ +
+{{ $for_k8s_version := .for_k8s_version | default (.page.Param "version") }} +{{ $width := .width | default "600" }} +{{ $state := .state }} +FEATURE STATE: Kubernetes {{ $for_k8s_version }} +{{/* docs/templates is a Hugo page bundle */}} +{{ $templates_path := "docs/templates" }} +{{ $templates := .page.Site.GetPage "page" $templates_path }} +{{ with $templates.Resources }} + {{ $template_path := printf "**feature-state-%s*" $state }} + {{ $content_template := .GetMatch $template_path }} + {{ with $content_template }} + {{ $dialog := dict "page" $content_template "for_k8s_version" $for_k8s_version "width" $width }} + {{ partial "templates/feature-dialog.html" $dialog }} + {{ else }} + {{ errorf "[%s] template not found in %s" .page.Site.Language.Lang $template_path }} + {{ end }} +{{ else }} + {{ errorf "[%s] templates not found in docs/templates" .page.Site.Language.Lang }} +{{ end }} +
\ No newline at end of file diff --git a/layouts/partials/templates/task.html b/layouts/partials/templates/task.html new file mode 100644 index 0000000000000..df63c141c147b --- /dev/null +++ b/layouts/partials/templates/task.html @@ -0,0 +1,11 @@ + +{{ partial "templates/block" (dict "page" .page "block" "overview" "purpose" "states, in one or two sentences, the purpose of this document") }} + +{{ .ctx.Scratch.Set "blocks" slice }} +{{ .ctx.Scratch.Add "blocks" (dict "page" .page "block" "prerequisites" "heading" "Before you begin" "purpose" "lists action prerequisites and knowledge prerequisites.") }} +{{ .ctx.Scratch.Add "blocks" (dict "page" .page "block" "steps" "purpose" "lists a sequence of numbered steps that accomplish the task.'") }} +{{ .ctx.Scratch.Add "blocks" (dict "page" .page "block" "discussion" "optional" true ) }} +{{ .ctx.Scratch.Add "blocks" (dict "content" .page.Content) }} +{{ .ctx.Scratch.Add "blocks" (dict "page" .page "block" "whatsnext" "heading" "What's next" "optional" true ) }} + +{{ partial "templates/blocks" . }} diff --git a/layouts/partials/templates/tutorial.html b/layouts/partials/templates/tutorial.html new file mode 100644 index 0000000000000..6d600b125160b --- /dev/null +++ b/layouts/partials/templates/tutorial.html @@ -0,0 +1,12 @@ +{{ partial "templates/block" (dict "page" .page "block" "overview" "purpose" "states, in one or two sentences, the purpose of this document") }} + +{{ .ctx.Scratch.Set "blocks" slice }} +{{ .ctx.Scratch.Add "blocks" (dict "page" .page "block" "objectives" "heading" "Objectives" "purpose" "lists the objectives for this tutorial.") }} +{{ .ctx.Scratch.Add "blocks" (dict "page" .page "block" "prerequisites" "heading" "Before you begin" "purpose" "lists action prerequisites and knowledge prerequisites.") }} +{{ .ctx.Scratch.Add "blocks" (dict "page" .page "block" "lessoncontent" "purpose" "provides the lesson content for this tutorial.") }} +{{ .ctx.Scratch.Add "blocks" (dict "content" .page.Content) }} +{{ .ctx.Scratch.Add "blocks" (dict "page" .page "block" "cleanup" "heading" "Cleaning up" "optional" true ) }} +{{ .ctx.Scratch.Add "blocks" (dict "page" .page "block" "whatsnext" "heading" "What's next" "optional" true ) }} + +{{ partial "templates/blocks" . }} + diff --git a/layouts/partials/templates/user-journey-content.html b/layouts/partials/templates/user-journey-content.html new file mode 100644 index 0000000000000..ffae17e6b9882 --- /dev/null +++ b/layouts/partials/templates/user-journey-content.html @@ -0,0 +1,23 @@ +
{{ .Params.track }}
+
+ Introduction +
+
sections in this doc
+
+ +
+ +
+ +{{ partial "templates/block" (dict "page" . "block" "overview" "purpose" "provides an introduction of this level.") }} + +{{- $capture := printf "__cid_%s" "body" -}} +{{- $body := .Scratch.Get $capture -}} +{{ with $body }} +{{ $b := replace $body "" "
+ + diff --git a/layouts/partials/tree.html b/layouts/partials/tree.html new file mode 100644 index 0000000000000..f2854298072be --- /dev/null +++ b/layouts/partials/tree.html @@ -0,0 +1,25 @@ +{{ $section := . }} + +{{ template "section-tree-nav-pages" . }} +{{ template "section-tree-nav" $section }} +{{ define "section-tree-nav" }} + {{ $sections := where .Sections ".Params.toc_hide" "!=" true }} + {{ range $sections }} +
+
+ {{ if ge (len .Content) 10 }} + {{/* The section page has content, so link to it. */}} + + {{ end }} + {{ template "section-tree-nav-pages" . }} + {{ template "section-tree-nav" . }} +
+
+ {{ end }} +{{ end }} +{{ define "section-tree-nav-pages" }} +{{ range where .Pages ".Params.toc_hide" "!=" true }} + +{{ end }} +{{ end }} + diff --git a/layouts/robots.txt b/layouts/robots.txt new file mode 100644 index 0000000000000..7ab0e05478111 --- /dev/null +++ b/layouts/robots.txt @@ -0,0 +1,9 @@ +User-agent: * + +Disallow: /legacy/ +Disallow: /v1.0/ +Disallow: /v1.1/ +Disallow: /404/ +Disallow: 404.html + +SITEMAP: {{ "sitemap.xml" | absLangURL }} \ No newline at end of file diff --git a/layouts/shortcodes/capture.html b/layouts/shortcodes/capture.html new file mode 100644 index 0000000000000..b6a42ad874d2e --- /dev/null +++ b/layouts/shortcodes/capture.html @@ -0,0 +1,6 @@ +{{- $id := .Get 0 -}} +{{- if not $id -}} +{{- errorf "missing id in capture" -}} +{{- end -}} +{{- $capture_id := printf "__cid_%s" $id -}} +{{- .Page.Scratch.Set $capture_id .Inner -}} \ No newline at end of file diff --git a/layouts/shortcodes/caution.html b/layouts/shortcodes/caution.html new file mode 100644 index 0000000000000..4bc88c05fb4d6 --- /dev/null +++ b/layouts/shortcodes/caution.html @@ -0,0 +1,3 @@ +
+
{{ .Inner | markdownify }}
+
diff --git a/layouts/shortcodes/code.html b/layouts/shortcodes/code.html new file mode 100644 index 0000000000000..c3dbcd2d940bf --- /dev/null +++ b/layouts/shortcodes/code.html @@ -0,0 +1,38 @@ +{{ $p := .Page }} +{{ $file := .Get "file" }} +{{ $codelang := .Get "language" | default (path.Ext $file | strings.TrimPrefix ".") }} +{{ $fileDir := path.Split $file }} +{{ $bundlePath := path.Join .Page.Dir $fileDir.Dir }} +{{ $filename := path.Join $p.Dir $file }} +{{ $ghlink := printf "https://%s/blob/master/content/%s/%s" .Page.Site.Params.githubWebsiteRepo .Page.Lang $filename | safeURL }} +{{/* First assume this is a bundle and the file is inside it. */}} +{{ $resource := $p.Resources.GetMatch (printf "%s*" $file ) }} +{{ with $resource }} +{{ $.Scratch.Set "content" .Content }} +{{ else }} +{{/* Read the file relative to the content root. */}} +{{ $resource := readFile $filename}} +{{ with $resource }}{{ $.Scratch.Set "content" . }}{{ end }} +{{ end }} +{{ if not ($.Scratch.Get "content") }} +{{ errorf "[%s] %q not found in %q" $p.Site.Language.Lang $fileDir.File $bundlePath }} +{{ end }} +{{ with $.Scratch.Get "content" }} + + + + + + + + + + + +
+ {{ with $ghlink }}{{ end }} + {{ $file }} {{ $bundlePath }} + {{ if $ghlink }}{{ end }} + +
{{ highlight . $codelang "" }}
+{{ end }} diff --git a/layouts/shortcodes/comment.html b/layouts/shortcodes/comment.html new file mode 100644 index 0000000000000..2b0268e00f96e --- /dev/null +++ b/layouts/shortcodes/comment.html @@ -0,0 +1 @@ +{{ if .Inner}}{{ end }} \ No newline at end of file diff --git a/layouts/shortcodes/deprecationwarning.html b/layouts/shortcodes/deprecationwarning.html new file mode 100644 index 0000000000000..25bc7e2c418fb --- /dev/null +++ b/layouts/shortcodes/deprecationwarning.html @@ -0,0 +1,12 @@ +{{ if .Page.Param "deprecated" }} +
+
+
+

+ Documentation for Kubernetes {{ .Page.Param "version" }} is no longer actively maintained. The version you are currently viewing is a static snapshot. + For up-to-date documentation, see the latest version. +

+
+
+
+{{ end }} diff --git a/layouts/shortcodes/feature-state.html b/layouts/shortcodes/feature-state.html new file mode 100644 index 0000000000000..17f278b1f6996 --- /dev/null +++ b/layouts/shortcodes/feature-state.html @@ -0,0 +1,10 @@ +{{ $valid_states := "alpha, beta, deprecated, stable" }} +{{ $state := .Get "state" }} +{{ $for_k8s_version := .Get "for_k8s_version" }} +{{ $width := .Get "width" }} +{{ $is_valid := strings.Contains $valid_states $state }} +{{ if not $is_valid }} +{{ errorf "%q is not a valid feature-state, use one of %q" $valid_states }} +{{ else }} +{{ partial "templates/feature-state.html" (dict "ctx" . "page" .Page "state" $state "for_k8s_version" $for_k8s_version "width" $width) }} +{{ end }} diff --git a/layouts/shortcodes/glossary_definition.html b/layouts/shortcodes/glossary_definition.html new file mode 100644 index 0000000000000..67b9ecf9b403c --- /dev/null +++ b/layouts/shortcodes/glossary_definition.html @@ -0,0 +1,29 @@ + +{{- $id := .Get "term_id" -}} +{{- $length := .Get "length" -}} +{{- $prepend := .Get "prepend" }} +{{- $glossaryBundle := .Site.GetPage "page" "docs/reference/glossary" -}} +{{- $glossaryItems := $glossaryBundle.Resources.ByType "page" -}} +{{- $term_info := $glossaryItems.GetMatch (printf "%s*" $id ) -}} +{{- if not $term_info -}} +{{- errorf "[%s] %q: %q is not a valid glossary term_id, see ./docs/reference/glossary/* for a full list" .Page.Site.Language.Lang .Page.Path $id -}} +{{- end -}} +{{- with $term_info -}} +{{- if (strings.Contains "short" $length) -}} + {{- with .Summary -}} + {{- if $prepend }}{{- replace . "

" (printf "

%s %s" $prepend .) -}}{{ else }}{{- . -}}{{ end -}} + {{- else -}} + {{- partial "templates/errorthrower.html" (dict "block" "summary" "purpose" .purpose "describes the key term in greater depth, supplementing the short-description") . -}} + {{- end -}} +{{- end -}} +{{- if (strings.Contains "all|long" $length) -}} +{{- with .Content -}} +{{- if $prepend }} +{{- $firstPara := index (findRE "(?s)

.*?

" . 1) 0 -}} +{{- $firstPara := $firstPara | strings.TrimSuffix "

" | strings.TrimPrefix "

" -}} +{{- $first := slicestr $firstPara 0 1 | lower }} +{{- $prepended := printf "

%s %s%s

" $prepend $first (slicestr $firstPara 1) -}} +{{- replace . $firstPara $prepended | safeHTML -}}{{ else }}{{- . -}}{{ end -}} +{{- end -}} +{{- end -}} +{{- end -}} \ No newline at end of file diff --git a/layouts/shortcodes/glossary_tooltip.html b/layouts/shortcodes/glossary_tooltip.html new file mode 100644 index 0000000000000..b70ca794c7266 --- /dev/null +++ b/layouts/shortcodes/glossary_tooltip.html @@ -0,0 +1,22 @@ +{{- $id := .Get "term_id" -}} +{{- $text := .Get "text" -}} +{{- $glossaryBundle := .Site.GetPage "page" "docs/reference/glossary" -}} +{{- $glossaryItems := $glossaryBundle.Resources.ByType "page" -}} +{{- $term_info := $glossaryItems.GetMatch (printf "%s*" $id ) -}} +{{- if not $term_info -}} +{{- errorf "[%s] %q: %q is not a valid glossary term_id, see ./docs/reference/glossary/* for a full list" .Page.Site.Language.Lang .Page.Path $id -}} +{{- end }} +{{- with $term_info -}} +{{- $text := $text | default $term_info.Title -}} +{{- $glossary_home := "docs/reference/glossary/?all=true" | relLangURL -}} +{{- $external_link := $term_info.Params.full_link | default (printf "%s#term-%s" $glossary_home $id | safeURL ) -}} +{{- $tooltip := $term_info.Params.short_description | markdownify -}} +{{- $tooltip := $tooltip | replaceRE "(?s)(.*?).*" "$1" | plainify -}} +{{- $tooltip := trim $tooltip " \n" -}} + + {{- $text -}} + + {{- $tooltip | safeHTML -}} + + +{{- end -}} \ No newline at end of file diff --git a/layouts/shortcodes/include.html b/layouts/shortcodes/include.html new file mode 100644 index 0000000000000..12bc65b09c733 --- /dev/null +++ b/layouts/shortcodes/include.html @@ -0,0 +1,27 @@ +{{/* This will try to find a resource in the "includes" bundle */}} +{{- $name := .Get 0 -}} +{{- if $name -}} + {{- $bundle := $.Site.GetPage "page" "includes" -}} + {{- with $bundle -}} + {{- $pattern := printf "%s*" $name -}} + {{- range $bundle.Resources -}} + {{- end -}} + {{- $resource := $bundle.Resources.GetMatch $pattern -}} + {{- with $resource -}} + {{- .Content | safeHTML -}} + {{- else -}} + {{/* It is not a resource in the includes bundle. Try to find the page relative to the current. */}} + {{- $path := path.Join $.Page.Dir $name -}} + {{- $page := $.Page.Site.GetPage "page" $path -}} + {{- with $page }} + {{ .Content }} + {{- else -}} + {{ errorf "[%s] no Resource or Page matching %q." $.Page.Lang ($pattern | safeHTML ) }} + {{- end -}} + {{- end -}} + {{- else -}} + {{ errorf "[%s] the 'inclucdes' bundle was not found." $.Page.Lang }} + {{- end -}} +{{- else -}} + {{- errorf "[%s] missing resource name in include for page %q" $.Page.Lang $.Page.Path -}} +{{- end -}} diff --git a/layouts/shortcodes/link.html b/layouts/shortcodes/link.html new file mode 100644 index 0000000000000..b4ab7195d48c5 --- /dev/null +++ b/layouts/shortcodes/link.html @@ -0,0 +1,5 @@ +{{- $text := .Get "text" -}} +{{- $url := .Get "url" -}} +{{- $target := .Get "target" | default "_blank" -}} +{{- $class := .Get "class" -}} +{{ $text }} \ No newline at end of file diff --git a/layouts/shortcodes/note.html b/layouts/shortcodes/note.html new file mode 100644 index 0000000000000..7c096dd8e4882 --- /dev/null +++ b/layouts/shortcodes/note.html @@ -0,0 +1,3 @@ +
+
{{ .Inner | markdownify }}
+
diff --git a/layouts/shortcodes/param.html b/layouts/shortcodes/param.html new file mode 100644 index 0000000000000..499251b981a60 --- /dev/null +++ b/layouts/shortcodes/param.html @@ -0,0 +1 @@ +{{- .Page.Param (.Get 0) -}} \ No newline at end of file diff --git a/layouts/shortcodes/reference_docs.html b/layouts/shortcodes/reference_docs.html new file mode 100644 index 0000000000000..0507355eeecaf --- /dev/null +++ b/layouts/shortcodes/reference_docs.html @@ -0,0 +1 @@ +API reference docs \ No newline at end of file diff --git a/layouts/shortcodes/tab.html b/layouts/shortcodes/tab.html new file mode 100644 index 0000000000000..a169c76f3262b --- /dev/null +++ b/layouts/shortcodes/tab.html @@ -0,0 +1,19 @@ +{{ if .Parent }} + {{ $name := trim (.Get "name") " " }} + {{ $include := trim (.Get "include") " "}} + {{ $codelang := .Get "codelang" }} + {{ if not (.Parent.Scratch.Get "tabs") }} + {{ .Parent.Scratch.Set "tabs" slice }} + {{ end }} + {{ with .Inner }} + {{ if $codelang }} + {{ $.Parent.Scratch.Add "tabs" (dict "name" $name "content" (highlight . $codelang "") ) }} + {{ else }} + {{ $.Parent.Scratch.Add "tabs" (dict "name" $name "content" . ) }} + {{ end }} + {{ else }} + {{ $.Parent.Scratch.Add "tabs" (dict "name" $name "include" $include "codelang" $codelang) }} + {{ end }} +{{ else }} + {{- errorf "[%s] %q: tab shortcode missing its parent" .Page.Site.Language.Lang .Page.Path -}} +{{ end}} \ No newline at end of file diff --git a/layouts/shortcodes/tabs.html b/layouts/shortcodes/tabs.html new file mode 100644 index 0000000000000..521a404246e2d --- /dev/null +++ b/layouts/shortcodes/tabs.html @@ -0,0 +1,43 @@ +{{ .Page.Scratch.Add "tabset-counter" 1 }} +{{ $tab_set_id := .Get "name" | default (printf "tabset-%s-%d" (.Page.RelPermalink) (.Page.Scratch.Get "tabset-counter") ) | anchorize }} +{{ $tabs := .Scratch.Get "tabs" }} +{{ if .Inner }}{{/* We don't use the inner content, but Hugo will complain if we don't reference it. */}}{{ end }} +
+
    + {{ range $i, $e := $tabs }} + {{ $id := printf "%s-%d" $tab_set_id $i }} +
  • {{ trim .name " " }}
  • +{{ end }} +
+{{ range $i, $e := $tabs }} +{{ $id := printf "%s-%d" $tab_set_id $i }} +
+ {{ with .content }} + {{ . }} + {{ else }} + {{ if eq $.Page.BundleType "leaf" }} + {{/* find the file somewhere inside the bundle. Note the use of double asterisk */}} + {{ with $.Page.Resources.GetMatch (printf "**%s*" .include) }} + {{ if ne .ResourceType "page" }} + {{/* Assume it is a file that needs code highlighting. */}} + {{ $codelang := $e.codelang | default ( path.Ext .Name | strings.TrimPrefix ".") }} + {{ highlight .Content $codelang "" }} + {{ else}} + {{ .Content }} + {{ end }} + {{ end }} + {{ else}} + {{ $path := path.Join $.Page.Dir .include }} + {{ $page := $.Page.Site.GetPage "page" $path }} + {{ with $page }} + {{ .Content }} + {{ else }} + {{ errorf "[%s] tabs include not found for path %q" $.Page.Site.Language.Lang $path}} + {{ end }} + {{ end }} + {{ end }} +
+{{ end }} +
+{{ $elem := $tab_set_id | safeJS }} + diff --git a/layouts/shortcodes/toc.html b/layouts/shortcodes/toc.html new file mode 100644 index 0000000000000..aca37850a2b9f --- /dev/null +++ b/layouts/shortcodes/toc.html @@ -0,0 +1 @@ +{{ .Page.TableOfContents }} \ No newline at end of file diff --git a/layouts/shortcodes/version-check.html b/layouts/shortcodes/version-check.html new file mode 100644 index 0000000000000..979268bf57127 --- /dev/null +++ b/layouts/shortcodes/version-check.html @@ -0,0 +1,6 @@ +{{ $minVersion := .Page.Param "min-kubernetes-server-version" }} +{{ if eq $minVersion (.Page.Param "version") }} +Your Kubernetes server must be version {{ $minVersion }}. +{{ else if $minVersion}} +Your Kubernetes server must be version {{ $minVersion }} or later. +{{ end }} To check the version, enter kubectl version. diff --git a/layouts/shortcodes/versions-other.html b/layouts/shortcodes/versions-other.html new file mode 100644 index 0000000000000..4f5e3854f265e --- /dev/null +++ b/layouts/shortcodes/versions-other.html @@ -0,0 +1,9 @@ +{{ $versions := .Page.Param "versions" }} +{{ $thisVersion := .Page.Param "version" }} +
    +{{ range $versions }} +{{ if ne .version $thisVersion }} +
  • {{ .version }}
  • +{{ end }} +{{ end }} +
\ No newline at end of file diff --git a/layouts/shortcodes/warning.html b/layouts/shortcodes/warning.html new file mode 100644 index 0000000000000..6b4ea6a3dc2ec --- /dev/null +++ b/layouts/shortcodes/warning.html @@ -0,0 +1,3 @@ +
+
{{ .Inner | markdownify }}
+
diff --git a/netlify.toml b/netlify.toml index 5245ddd42cc72..0471774c33707 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,2 +1,22 @@ +[build] +publish = "public" +command = "hugo" + +[context.production.environment] +HUGO_BASEURL = "https://kubernetes.io/" +HUGO_VERSION = "0.40.2" +HUGO_ENV = "production" +HUGO_ENABLEGITINFO = "true" + [context.deploy-preview] - command = "make build-preview" +command = "hugo -b $DEPLOY_PRIME_URL" + +[context.deploy-preview.environment] +HUGO_VERSION = "0.40.2" + +[context.branch-deploy] +command = "hugo -b $DEPLOY_PRIME_URL" + +[context.branch-deploy.environment] +HUGO_VERSION = "0.40.2" + diff --git a/robots.txt b/robots.txt deleted file mode 100644 index 3094104a31f19..0000000000000 --- a/robots.txt +++ /dev/null @@ -1,11 +0,0 @@ -User-agent: * - -Disallow: /legacy/ -Disallow: /v1.0/ -Disallow: /v1.1/ -Disallow: /404/ -Disallow: 404.html - -# NOTE: site renders /topic.md into /topic/index.html, effectively /topic/ - -SITEMAP: https://kubernetes.io/sitemap.xml diff --git a/_sass/_base.sass b/src/sass/_base.sass similarity index 98% rename from _sass/_base.sass rename to src/sass/_base.sass index 84aa40d406121..025ccd23782ea 100644 --- a/_sass/_base.sass +++ b/src/sass/_base.sass @@ -975,7 +975,7 @@ dd background-position: 12px 10px background-size: 29px 29px - #markdown-toc + #markdown-toc, #TableOfContents margin-bottom: 20px ul, li @@ -1003,6 +1003,11 @@ dd //font-weight: 700 text-decoration: underline + #TableOfContents > ul > li { list-style: none; } + #TableOfContents + ul, li + list-style: disk + // a:visited // color: blueviolet @@ -1751,19 +1756,15 @@ $feature-box-div-margin-bottom: 40px font-weight: 400 - //#bigSocial - // text-align: center - // - // div - // display: inline-block - // float: none - // padding-top: 125px - // width: calc(90%) - // - // a - // margin-top: 15px - // font-size: 18px - // - // - // -// + +/* Google Search */ +.cse .gsc-control-cse, .gsc-control-cse + padding: 0; + + +.gsc-control-cse table, .gsc-control-cse-en table + margin: 0px !important; + + +.gsc-above-wrapper-area + border-bottom: 0; diff --git a/_sass/_case-studies.sass b/src/sass/_case-studies.sass similarity index 100% rename from _sass/_case-studies.sass rename to src/sass/_case-studies.sass diff --git a/_sass/_desktop.sass b/src/sass/_desktop.sass similarity index 100% rename from _sass/_desktop.sass rename to src/sass/_desktop.sass diff --git a/_sass/_reset.sass b/src/sass/_reset.sass similarity index 100% rename from _sass/_reset.sass rename to src/sass/_reset.sass diff --git a/_sass/_size.sass b/src/sass/_size.sass similarity index 100% rename from _sass/_size.sass rename to src/sass/_size.sass diff --git a/_sass/_skin.sass b/src/sass/_skin.sass similarity index 100% rename from _sass/_skin.sass rename to src/sass/_skin.sass diff --git a/_sass/_tablet.sass b/src/sass/_tablet.sass similarity index 100% rename from _sass/_tablet.sass rename to src/sass/_tablet.sass diff --git a/src/sass/case_study_styles.sass b/src/sass/case_study_styles.sass new file mode 100644 index 0000000000000..a954d7fcd0b90 --- /dev/null +++ b/src/sass/case_study_styles.sass @@ -0,0 +1,9 @@ + +@import "reset" +@import "skin" + +// media queries +@import "base" +@import "case-studies" +@import "tablet" +@import "desktop" diff --git a/src/sass/styles.sass b/src/sass/styles.sass new file mode 100755 index 0000000000000..981d39d620fc8 --- /dev/null +++ b/src/sass/styles.sass @@ -0,0 +1,10 @@ + +@import "reset" +@import "skin" + +// media queries +@import "base" +@import "tablet" +@import "desktop" + + diff --git a/_redirects b/static/_redirects similarity index 100% rename from _redirects rename to static/_redirects diff --git a/css/base_fonts.css b/static/css/base_fonts.css similarity index 100% rename from css/base_fonts.css rename to static/css/base_fonts.css diff --git a/css/blog.css b/static/css/blog.css similarity index 100% rename from css/blog.css rename to static/css/blog.css diff --git a/css/callouts.css b/static/css/callouts.css similarity index 100% rename from css/callouts.css rename to static/css/callouts.css diff --git a/static/css/case_study_styles.css b/static/css/case_study_styles.css new file mode 100644 index 0000000000000..c056d2c97e888 --- /dev/null +++ b/static/css/case_study_styles.css @@ -0,0 +1,943 @@ +html, body { margin: 0; padding: 0; } + +input, button { outline: none; } + +button { cursor: pointer; } + +ul, li { list-style: none; } + +ul { margin: 0; padding: 0; } + +a { text-decoration: none; } + +.clear { display: block; clear: both; } + +.light-text { color: white; } + +.right { float: right; } + +.left { float: left; } + +.center { text-align: center; } + +*, .button { box-sizing: border-box; font-family: "Roboto", sans-serif; background: none; margin: 0; border: 0; } + +body { font-family: "Roboto", sans-serif; } + +h1, h2, h5, p { font-weight: 300; } + +h3, h4 { font-weight: 400; } + +html, body { margin: 0; padding: 0; } + +input, button { outline: none; } + +button { cursor: pointer; } + +ul, li { list-style: none; } + +ul { margin: 0; padding: 0; } + +a { text-decoration: none; } + +.clear { display: block; clear: both; } + +.light-text { color: white; } + +.right { float: right; } + +.left { float: left; } + +.center { text-align: center; } + +h1 { font-size: 32px; line-height: 40px; } + +h2 { font-size: 28px; line-height: 60px; } + +h3 { font-size: 24px; line-height: 32px; } + +h4 { font-size: 20px; line-height: 40px; } + +h5 { font-size: 16px; line-height: 36px; } + +p { font-size: 14px; line-height: 22px; } + +section, header, #vendorStrip { padding-left: 20px; padding-right: 20px; } + +section main, header main, #vendorStrip main { width: 100%; max-width: 100%; } + +header { height: 80px; } + +.nav-buttons { height: 80px; line-height: 80px; } + +.nav-buttons .button + * { margin-left: 30px; } + +#hamburger { width: 50px; height: 50px; } + +#mainNav { padding: 140px 0 30px; } + +#mainNav h5 { margin-bottom: 1em; } + +#mainNav h3 { margin-bottom: 0.6em; } + +#mainNav .nav-box { width: 20%; } + +#mainNav .nav-box + .nav-box { margin-left: calc(20% / 3); } + +#mainNav main + main { margin-top: 60px; } + +#mainNav .left .button { height: 50px; line-height: 50px; font-size: 18px; } + +.open-nav #tryKubernetes, .y-enough #tryKubernetes { margin-left: 30px; } + +#hero { padding-top: 80px; } + +#docs #hero h1, #docs #hero h5 { padding-left: 20px; padding-right: 20px; } + +#vendorStrip { height: 88px; line-height: 88px; font-size: 16px; } + +body { background-color: white; } + +section { position: relative; background-color: white; } + +section main, header main, footer main { position: relative; margin: auto; } + +p { font-size: 14px; font-weight: 400; } + +.button { display: inline-block; border-radius: 6px; padding: 0 20px; line-height: 40px; color: white; background-color: #3371e3; text-decoration: none; } + +#cellophane { position: fixed; top: 0; left: 0; width: 100%; height: 100%; display: none; } + +header { position: fixed; top: 0; left: 0; width: 100%; z-index: 8888; background-color: transparent; box-shadow: 0 0 0 transparent; overflow: hidden; transition: 0.3s; text-align: center; } + +.logo { position: relative; float: left; display: block; width: 180px; height: 88px; top: 0; left: 0; transform: none; background-image: url(/images/nav_logo.svg); background-size: contain; background-position: center center; background-repeat: no-repeat; } + +#docs .flyout-button { position: fixed; top: 20px; left: 20px; width: 50px; height: 50px; background-image: url(/images/toc_icon.png); background-position: center center; background-repeat: no-repeat; background-size: auto; border-radius: 50%; transition: 0.3s; z-index: 99999; } + +#docs.open-nav .flyout-button { display: none; } + +#docs .logo { position: absolute; top: 40px; left: 50%; transform: translate(-50%, -50%); display: block; width: 45px; height: 44px; background-image: url(/images/favicon.png); } + +#docs.flip-nav .flyout-button { background-image: url(/images/toc_icon_grey.png); } + +.nav-buttons { float: right; } + +#viewDocs, #tryKubernetes { display: none; } + +#viewDocs { border: 2px solid white; background-color: transparent; transition: 0.3s; } + +#viewDocs:hover { background-color: white; color: #303030; } + +#tryKubernetes { width: 0; padding: 0 0; border: 1px solid transparent; background-color: transparent; text-align: center; white-space: nowrap; vertical-align: middle; overflow: hidden; transition: 0.3s; } + +#hamburger { display: inline-block; position: relative; vertical-align: middle; padding: 0; border: 0; background: none; } + +#hamburger div, #hamburger:before, #hamburger:after { position: absolute; left: 15%; width: 70%; height: 2px; background-color: #3371e3; transition: 0.3s; content: ""; } + +#hamburger div { top: calc(50% - 1px); } + +#hamburger:before { top: 24%; } + +#hamburger:after { bottom: 24%; } + +#hamburger:hover div, #hamburger:hover:before, #hamburger:hover:after { background-color: white; } + +#mainNav h5 { color: #3371e3; font-weight: normal; } + +#mainNav main { white-space: nowrap; overflow: hidden; clear: both; } + +#mainNav .nav-box { float: left; white-space: normal; } + +#mainNav h3 a { color: #3371e3; text-decoration: none; } + +ul.global-nav { display: none; } + +ul.global-nav li { display: inline-block; margin-right: 14px; } + +ul.global-nav li a { color: #fff; font-weight: 400; padding: 0; position: relative; } + +ul.global-nav li a.active:after { position: absolute; width: 100%; height: 2px; content: ''; bottom: -4px; left: 0; background: #fff; } + +ul.global-nav li a .ui-icon { filter: brightness(0) invert(1); } + +ul.global-nav li ul { display: none; position: fixed; top: 40px; text-align: left; } + +ul.global-nav li ul li { display: block; height: 28px; } + +ul.global-nav li ul li a { background: #303030; color: #fff; padding: 7px; } + +ul.global-nav li ul li:last-child a { border-radius: 7px; } + +ul.global-nav li:hover ul { display: block; } + +.flip-nav ul.global-nav li a, .open-nav ul.global-nav li a { color: #303030; } + +.flip-nav ul.global-nav li a .ui-icon { filter: brightness(0); } + +.flip-nav ul.global-nav li ul li a { background: #fff; color: #303030; } + +.flip-nav ul.global-nav li a.active:after, .flip-nav ul.global-nav li ul li a.active:after, .open-nav ul.global-nav li a.active:after { background: #3371e3; } + +.flip-nav header { background-color: white; } + +.open-nav body { overflow: hidden; } + +.open-nav #cellophane { display: block; z-index: 9998; } + +.open-nav header { background-color: #e8e8e8; z-index: 9999; } + +.open-nav #hamburger div { opacity: 0; } + +.open-nav #hamburger:before, .open-nav #hamburger:after { left: 12px; transform-origin: 0 1px; } + +.open-nav #hamburger:before { transform: rotate(45deg); } + +.open-nav #hamburger:after { transform: rotate(-45deg); } + +.open-nav #tryKubernetes, .y-enough #tryKubernetes { width: 150px; background-color: #3371e3; border-color: #3371e3; } + +.flip-nav header, .open-nav header { box-shadow: 0 1px 2px #4c4c4c; } + +.flip-nav #viewDocs, .open-nav #viewDocs { border-color: #303030; color: #303030; } + +.flip-nav #viewDocs:hover, .open-nav #viewDocs:hover { border-color: #3371e3; background-color: #3371e3; color: white; } + +.flip-nav #hamburger:hover div, .flip-nav #hamburger:hover:before, .flip-nav #hamburger:hover:after, .open-nav #hamburger:hover div, .open-nav #hamburger:hover:before, .open-nav #hamburger:hover:after { background-color: #303030; } + +#hero { background-image: url(/images/texture.png); background-color: #303030; text-align: center; padding-left: 0; padding-right: 0; margin-bottom: 0; position: relative; } + +#hero.bot-bar:after { display: block; margin-bottom: -20px; height: 8px; width: 100%; background-color: rgba(255, 255, 255, 0.1); content: ''; } + +#hero.no-sub h5 { display: none; } + +#hero.no-sub h1 { margin-bottom: 20px; } + +#home #hero:after { display: none; } + +#vendorStrip { position: relative; background-color: rgba(255, 255, 255, 0.1); font-weight: 100; white-space: nowrap; text-align: center; } + +#vendorStrip li a { color: rgba(255, 255, 255, 0.5); } + +#vendorStrip li a.YAH { color: white; position: relative; } + +footer { width: 100%; background-image: url(/images/texture.png); background-color: #303030; } + +footer main { padding: 20px 0; } + +footer nav a { width: 100%; text-align: center; display: inline-block; margin: 10px 0; font-size: 24px; font-weight: 300; color: white; text-decoration: none; } + +footer .social { margin: 20px 0; } + +footer .social div { text-align: center; margin-bottom: 20px; } + +footer .social div:last-child { margin: 30px 0; } + +footer .social span { display: block; margin-bottom: 8px; } + +footer .social input { text-align: center; } + +#search, #wishField { background-color: transparent; padding: 10px; font-size: 16px; font-weight: 100; color: white; border: 1px solid white; transition: 0.3s; } + +#search:focus, #wishField:focus { background-color: #f7f7f7; color: #303030; } + +.social a { display: inline-block; background-image: url(/images/social_sprite.png); background-repeat: no-repeat; background-size: auto; width: 50px; height: 50px; border-radius: 5px; margin-right: 10px; } + +.social a:hover { background-color: #fff; } + +.social a span { position: absolute; display: block; height: 0; overflow: hidden; } + +.social a.button { background-image: none; width: auto; height: auto; } + +.social a.button:hover { color: #3371e3; } + +a.twitter { background-position: 0 0; } + +a.twitter:hover { background-position: 0 100%; } + +a.stack-overflow { background-position: -50px 0; } + +a.stack-overflow:hover { background-position: -50px 100%; } + +a.slack { background-position: -100px 0; } + +a.slack:hover { background-position: -100px 100%; } + +a.github { background-position: -150px 0; } + +a.github:hover { background-position: -150px 100%; } + +a.mailing-list { background-position: -200px 0; } + +a.mailing-list:hover { background-position: -200px 100%; } + +a.calendar { background-position: -250px 0; } + +a.calendar:hover { background-position: -250px 100%; } + +#viewDocs { display: none; } + +section { background-color: white; } + +#hero { background-color: #303030; } + +#hero h5 { margin: 20px 0; line-height: 28px; } + +#vendorStrip { position: relative; } + +#vendorStrip ul { float: left; } + +#vendorStrip li { display: inline-block; height: 100%; } + +#vendorStrip a { display: block; height: 100%; color: white; font-size: 0.75em; font-weight: bold; } + +#vendorStrip li + li { margin-left: 0; } + +#docs #vendorStrip { line-height: 44px; } + +#docs #vendorStrip ul { float: none; } + +#docs #vendorStrip #searchBox { float: none; display: block; width: 80%; margin: 0 auto; height: 44px; line-height: 44px; position: relative; } + +#docs #vendorStrip #searchBox:before { position: absolute; width: 15px; height: 15px; content: ''; right: 8px; top: 7px; background-image: url(/images/search-icon.svg); background-repeat: no-repeat; background-size: 100% 100%; z-index: 1; } + +#docs #vendorStrip #search { width: 100%; padding: 0 10px; height: 30px; line-height: 30px; font-size: 16px; vertical-align: top; background: #fff; border: none; border-radius: 4px; position: relative; } + +#encyclopedia { position: relative; padding: 50px 20px 20px 20px; overflow: hidden; font-size: 14px; } + +#encyclopedia > div { height: 100%; } + +#docsToc { position: fixed; background-color: white; top: 0; left: 0; width: 0; height: 100vh; overflow: hidden; padding: 50px 0; z-index: 999999; transition: 0.3s; } + +#docsToc .yah > .title { background-color: #f7f7f7; border-left: 3px solid #3371e3; padding: 7.5px 10px 7.5px 18px; margin-left: -3px; color: #3371e3; } + +.open-toc body { overflow: hidden; } + +.open-toc #docsToc { padding: 50px 20px; width: 400px; max-width: 100vw; overflow-y: auto; } + +.pi-accordion > .container:first-child > .item:first-child > .title:first-child { padding-left: 0; font-size: 1.5em; font-weight: 700; } + +.pi-accordion > .container:first-child > .item.yah:first-child > .title:first-child { margin-left: -20px !important; } + +.pi-accordion .item { overflow: hidden; } + +.pi-accordion .title { color: #303030; position: relative; padding: 7.5px 10px 7.5px 18px; cursor: pointer; transition: 0.3s; } + +.pi-accordion .title:hover { color: #3371e3; } + +.pi-accordion a.item > .title { color: black; } + +.pi-accordion a.item > .title:hover { color: #3371e3; } + +.pi-accordion div.item > .title:before { content: ""; position: absolute; top: 12px; left: 2px; border-style: solid; border-width: 5px 0 5px 8px; border-color: transparent transparent transparent #3371e3; transform: rotate(0deg); transition: 0.3s; } + +.pi-accordion .wrapper { position: relative; width: 100%; transition: height 0.3s; } + +.pi-accordion .content { padding-left: 20px; opacity: 0; transition: 0.3s; } + +.pi-accordion .item.on > .title:before { transform: rotate(90deg); } + +.pi-accordion .item.on > .wrapper > .content { opacity: 1; } + +dt { margin-bottom: 8px; } + +dd { margin-bottom: 16px; } + +.pi-pushmenu { display: none; position: fixed; top: 0; width: 100%; height: 100%; opacity: 0; transition: opacity 0.3s; } + +.pi-pushmenu.on { opacity: 1; } + +.pi-pushmenu .overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.4); } + +.pi-pushmenu .sled { position: absolute; top: 0; width: 0; height: 100%; background-color: white; overflow: auto; transition: 0.3s; } + +.pi-pushmenu.on .sled { width: 400px; max-width: 100vw; } + +.pi-pushmenu .top-bar { height: 0; line-height: 60px; background-color: #444; } + +.pi-pushmenu ul { margin-top: 25px; } + +.pi-pushmenu li { position: relative; display: block; width: 100%; min-height: 45px; padding: 0 60px 0 20px; border-bottom: 1px solid #cccccc; } + +.pi-pushmenu a { display: inline-block; width: 100%; height: 45px; line-height: 45px; font-family: "Roboto", sans-serif; font-size: 20px; color: #3371e3; } + +.pi-pushmenu .button { background: none; padding: 0; } + +.pi-pushmenu ul ul { padding: 0 20px; } + +.pi-pushmenu ul ul li { min-height: 40px; } + +.pi-pushmenu ul ul a { height: 40px; line-height: 40px; font-size: 18px; color: #555555; } + +.push-menu-close-button { position: absolute; top: 0; right: 0; width: 50px; height: 50px; } + +.push-menu-close-button:before, .push-menu-close-button:after { content: ""; position: absolute; top: calc(50% - 1px); left: 25%; width: 50%; height: 2px; background-color: black; } + +.push-menu-close-button:before { transform: rotate(45deg); } + +.push-menu-close-button:after { transform: rotate(-45deg); } + +#docsContent { position: relative; float: right; width: 100%; } + +#docsContent * + h2, #docsContent * + h3, #docsContent * + h4, #docsContent * + h5, #docsContent * + h6 { margin-top: 30px; } + +#docsContent h1, #docsContent h2, #docsContent h3, #docsContent h4, #docsContent h5, #docsContent h6 { line-height: normal; font-weight: 500; margin-bottom: 30px; padding-bottom: 10px; } + +#docsContent h1:before, #docsContent h2:before, #docsContent h3:before, #docsContent h4:before, #docsContent h5:before, #docsContent h6:before { display: block; content: " "; margin-top: -100px; height: 100px; visibility: hidden; } + +#docsContent h1, #docsContent h2 { border-bottom: 1px solid #cccccc; } + +#docsContent h1 { font-size: 32px; padding-right: 60px; } + +#docsContent h2 { font-size: 28px; } + +#docsContent h3 { font-size: 24px; font-weight: 300; margin-bottom: 5px; } + +#docsContent h4 { font-size: 20px; margin-bottom: 0px; } + +#docsContent h5, #docsContent h6 { font-size: 16px; font-weight: 500; } + +#docsContent p { font-size: 16px; font-weight: 300; line-height: 1.75em; } + +#docsContent p + p { margin-top: 10px; } + +#docsContent code { display: inline-block; box-sizing: border-box; background-color: #f7f7f7; color: #303030; font-family: "Roboto Mono", monospace; vertical-align: baseline; font-size: 14px; font-weight: bold; padding: 2px 4px; } + +#docsContent a code { color: #3371e3; text-decoration: underline; } + +#docsContent pre .pi, #docsContent pre .s { margin: 0; padding: 0; } + +#docsContent .highlight code span, #docsContent code, #docsContent pre code { font-family: "Roboto Mono", monospace; } + +#docsContent code, #docsContent pre code { color: #303030; } + +#docsContent pre code { padding: 0; } + +#docsContent pre { background-color: #f7f7f7; display: block; margin: 20px 0; padding: 15px; position: relative; overflow-x: auto; } + +#docsContent h1 code, #docsContent h2 code, #docsContent h3 code, #docsContent h4 code, #docsContent h5 code, #docsContent h6 code { font-family: inherit; font-size: inherit; background-color: transparent; } + +#docsContent .includecode { table-layout: fixed; } + +#docsContent .includecode, #docsContent .includecode th, #docsContent .includecode td { padding: 0 !important; } + +#docsContent .includecode th { text-align: right !important; padding: 10px !important; } + +#docsContent .includecode th a, #docsContent .includecode th a code { color: white !important; background-color: transparent !important; } + +#docsContent .includecode pre { margin: 0 !important; } + +#docsContent ul li { list-style: disc; } + +#docsContent ol li { list-style: decimal; } + +#docsContent ul, #docsContent ol { margin: 20px 0; padding-left: 30px; font-weight: 300; } + +#docsContent ul ul, #docsContent ol ol, #docsContent ul ol, #docsContent ol ul { margin: 0.75em 0; } + +#docsContent li { margin-bottom: 0.75em; font-size: 16px; line-height: 1.75em; } + +#docsContent table { width: 100%; border: 1px solid #ccc; border-spacing: 0; margin-top: 30px; margin-bottom: 30px; } + +#docsContent thead, #docsContent tr:nth-child(even) { background-color: #f7f7f7; } + +#docsContent thead { background-color: #555; color: white; } + +#docsContent th, #docsContent td { padding: 8px; text-align: left; margin: 0; } + +#docsContent th { font-weight: normal; } + +#docsContent td { font-size: 0.85em; } + +#docsContent #editPageButton { position: absolute; top: -25px; right: 5px; width: 50px; height: 50px; line-height: 50px; border-radius: 50%; white-space: nowrap; text-indent: 50px; overflow: hidden; background: #3371e3 url(/images/icon-pencil.svg) no-repeat; background-position: 12px 10px; background-size: 29px 29px; } + +#docsContent #markdown-toc, #docsContent #TableOfContents { margin-bottom: 20px; } + +#docsContent #markdown-toc ul, #docsContent #markdown-toc li, #docsContent #TableOfContents ul, #docsContent #TableOfContents li { list-style: disc; color: #3371e3; } + +#docsContent #markdown-toc ul, #docsContent #TableOfContents ul { padding: 0 15px; margin: 0; } + +#docsContent #markdown-toc li, #docsContent #TableOfContents li { padding: 0; line-height: 1.5em; margin-bottom: 0; } + +#docsContent #markdown-toc a, #docsContent #TableOfContents a { position: relative; color: #3371e3; font-weight: 700; } + +#docsContent img { max-width: 100%; } + +#docsContent a { text-decoration: underline; } + +#docsContent #TableOfContents > ul > li { list-style: none; } + +#docsContent #TableOfContents ul, #docsContent #TableOfContents li { list-style: disk; } + +.fixed footer { position: fixed; bottom: 0; } + +#miceType { clear: both; font-size: 11px; line-height: 18px; color: #aaa; } + +html.search #docsContent { position: relative; float: none; width: 90%; max-width: 850px; margin: 0 auto; } + +html.search #docsContent #editPageButton { display: none; } + +html.search #docsContent table { border: 0; margin-bottom: 0; } + +html.search #docsContent td { padding: 0; } + +html.search #docsContent h1 { margin-bottom: 0; border-bottom: 0; padding-bottom: 0; padding-left: 8px; } + +#home.flip-nav .logo, #home.open-nav .logo { background-image: url(/images/nav_logo2.svg); } + +#home #hero { margin-bottom: 0; padding-bottom: 1px; } + +#home #hero main { padding: 0 10px; margin-bottom: 30px; } + +#home #hero #vendorStrip { display: none; } + +#oceanNodes { padding-top: 60px; padding-bottom: 60px; } + +#oceanNodes a { color: #3371e3; } + +#oceanNodes main { margin-bottom: 60px; min-height: 160px; } + +#oceanNodes .image-wrapper { max-width: 75%; margin: 0 auto 20px; text-align: center; } + +#oceanNodes .image-wrapper img { width: 100%; max-width: 160px; } + +#oceanNodes main:first-child .image-wrapper { max-width: 100%; } + +#oceanNodes main:first-child .image-wrapper img { max-width: 491px; } + +#oceanNodes h3 { margin-bottom: 30px; } + +#video { height: 200px; } + +#video { width: 100%; position: relative; background-image: url(/images/kub_video_banner_box.jpg); background-position: center center; background-size: cover; } + +#video > .light-text { display: none; position: absolute; top: 50%; left: 75%; width: 525px; padding-right: 80px; transform: translate(-50%, -50%); color: white; } + +#video h2 { font-size: 32px; line-height: 44px; margin-bottom: 20px; } + +#video p { margin-bottom: 20px; } + +#video #desktopKCButton { position: relative; font-size: 18px; background-color: #303030; border-radius: 8px; color: #ffffff; padding: 20px 10px 20px 10px; } + +#video #desktopShowVideoButton { position: relative; font-size: 24px; background-color: white; border-radius: 8px; color: #3371e3; padding: 15px 30px 15px 80px; margin-bottom: 15px; } + +#video #desktopShowVideoButton:before { content: ""; position: absolute; position: absolute; top: 50%; left: 40px; transform: translate(-50%, -50%); width: 0; height: 0; border-style: solid; border-width: 10px 0 10px 20px; border-color: transparent transparent transparent #3371e3; } + +#video #mobileShowVideoButton { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 80px; height: 80px; border-radius: 50%; background-color: transparent; border: 5px solid rgba(255, 255, 255, 0.2); overflow: visible; } + +#video #mobileShowVideoButton:after { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); left: 40px; content: ""; width: 0; height: 0; border-style: solid; border-width: 20px 0 20px 30px; border-color: transparent transparent transparent #ffffff; } + +#videoPlayer { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background-color: rgba(0, 0, 0, 0.9); display: none; } + +#videoPlayer iframe { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 80vw; height: 45vw; max-width: 142.22222vh; max-height: 80vh; } + +#videoPlayer #closeButton { position: absolute; top: 20px; right: 20px; width: 50px; height: 50px; border: 2px solid transparent; transition: 0.3s; } + +#videoPlayer #closeButton:before, #videoPlayer #closeButton:after { content: ""; position: absolute; top: calc(50% - 1px); left: 10%; width: 80%; height: 2px; background-color: white; } + +#videoPlayer #closeButton:before { transform: rotate(45deg); } + +#videoPlayer #closeButton:after { transform: rotate(-45deg); } + +#videoPlayer #closeButton:hover { border-color: white; } + +#features { padding-top: 140px; background-color: #f7f7f7; background-image: url(/images/wheel.png); background-position: center 60px; background-repeat: no-repeat; background-size: auto; } + +.feature-box { width: 100%; overflow: hidden; clear: both; } + +.feature-box h4 { line-height: normal; margin-bottom: 15px; } + +.feature-box > div:first-child { float: left; } + +.feature-box > div:last-child { float: right; } + +#features h3 { margin-bottom: 20px; } + +#features .feature-box { margin-bottom: 0; } + +#features .feature-box > div { width: 100%; margin-bottom: 40px; } + +#community.open-nav .logo, #community.flip-nav .logo, .gridPage.open-nav .logo, .gridPage.flip-nav .logo { background-image: url(/images/nav_logo2.svg); } + +#community #hero, .gridPage #hero { padding-bottom: 20px; } + +#community #mainContent, .gridPage #mainContent { padding: 20px 0; } + +#community #mainContent main, .gridPage #mainContent main { max-width: none; } + +#community #mainContent a, .gridPage #mainContent a { color: #3371e3; } + +#community #mainContent .content, .gridPage #mainContent .content { margin-bottom: 30px; padding: 30px 0; } + +#community #mainContent .content h1, #community #mainContent .content h2, #community #mainContent .content h3, #community #mainContent .content h4, #community #mainContent .content h5, #community #mainContent .content h6, #community #mainContent .content p, .gridPage #mainContent .content h1, .gridPage #mainContent .content h2, .gridPage #mainContent .content h3, .gridPage #mainContent .content h4, .gridPage #mainContent .content h5, .gridPage #mainContent .content h6, .gridPage #mainContent .content p { line-height: normal; max-width: 1200px; padding: 0 20px; margin: 0 auto 20px; } + +#community #mainContent .content:nth-child(even), .gridPage #mainContent .content:nth-child(even) { background-color: #f7f7f7; } + +#community #mainContent .company-logos, .gridPage #mainContent .company-logos { text-align: center; max-width: 1200px; margin: 0 auto; } + +#community #mainContent .company-logos img, .gridPage #mainContent .company-logos img { width: auto; margin: 10px; background-color: #f7f7f7; } + +#community #mainContent .partner-logos, .gridPage #mainContent .partner-logos { text-align: center; max-width: 1200px; margin: 0 auto; } + +#community #mainContent .partner-logos img, .gridPage #mainContent .partner-logos img { width: auto; margin: 10px; background-color: #ffffff; box-shadow: 0 5px 5px rgba(0, 0, 0, 0.24), 0 0 5px rgba(0, 0, 0, 0.12); } + +#community #mainContent #calendarMeetings, .gridPage #mainContent #calendarMeetings { position: relative; width: 80vw; height: 60vw; max-width: 1200px; max-height: 900px; margin: 20px auto; } + +#community #mainContent #calendarEvents, .gridPage #mainContent #calendarEvents { position: relative; width: 80vw; height: 30vw; max-width: 1200px; max-height: 450px; margin: 20px auto; } + +#community #mainContent iframe, .gridPage #mainContent iframe { position: absolute; border: 0; width: 100%; height: 100%; } + +.ui-icon { display: inline-block !important; } + +#feature-state-dialog-link { text-decoration: none !important; padding: 5px !important; } + +#feature-state-dialog-link a:visited { color: #454545 !important; } + +#feature-state-dialog-link a code { display: inline-block !important; box-sizing: border-box !important; background-color: #f7f7f7 !important; color: #303030 !important; font-family: "Roboto Mono", monospace !important; vertical-align: baseline !important; font-size: 14px !important; font-weight: bold !important; padding: 0px 4px !important; } + +#feature-state-dialog { background: #fff !important; border: 1px solid #ddd !important; padding: 0.5em 1em !important; } + +#feature-state-dialog ul, #feature-state-dialog li { list-style: disc !important; margin: 4px 12px !important; } + +#feature-state-dialog p { margin: 8px 0px !important; } + +#feature-state-dialog code { display: inline-block !important; box-sizing: border-box !important; background-color: #f7f7f7 !important; color: #303030 !important; font-family: "Roboto Mono", monospace !important; vertical-align: baseline !important; font-size: 14px !important; font-weight: bold !important; padding: 0px 4px !important; } + +.ui-dialog { background: #f7f7f7 !important; padding: 0.5em; } + +.ui-dialog-content { position: relative; float: right; width: 100%; } + +.ui-dialog-content * + h2, .ui-dialog-content * + h3, .ui-dialog-content * + h4, .ui-dialog-content * + h5, .ui-dialog-content * + h6 { margin-top: 30px; } + +.ui-dialog-content h1, .ui-dialog-content h2, .ui-dialog-content h3, .ui-dialog-content h4, .ui-dialog-content h5, .ui-dialog-content h6 { line-height: normal; font-weight: 500; margin-bottom: 30px; padding-bottom: 10px; } + +.ui-dialog-content h1:before, .ui-dialog-content h2:before, .ui-dialog-content h3:before, .ui-dialog-content h4:before, .ui-dialog-content h5:before, .ui-dialog-content h6:before { display: block; content: " "; margin-top: -100px; height: 100px; visibility: hidden; } + +.ui-dialog-content h1, .ui-dialog-content h2 { border-bottom: 1px solid #cccccc; } + +.ui-dialog-content h1 { font-size: 32px; padding-right: 60px; } + +.ui-dialog-content h2 { font-size: 28px; } + +.ui-dialog-content h3 { font-size: 24px; font-weight: 300; margin-bottom: 5px; } + +.ui-dialog-content h4 { font-size: 20px; margin-bottom: 0px; } + +.ui-dialog-content h5, .ui-dialog-content h6 { font-size: 16px; font-weight: 500; } + +.ui-dialog-content p { font-size: 16px; font-weight: 300; line-height: 1.75em; } + +.ui-dialog-content p + p { margin-top: 10px; } + +.ui-dialog-content code { display: inline-block; box-sizing: border-box; background-color: #f7f7f7; color: #303030; font-family: "Roboto Mono", monospace; vertical-align: baseline; font-size: 14px; font-weight: bold; padding: 2px 4px; } + +.ui-dialog-content a code { color: #3371e3; text-decoration: underline; } + +.ui-dialog-content pre .pi, .ui-dialog-content pre .s { margin: 0; padding: 0; } + +.ui-dialog-content .highlight code span, .ui-dialog-content code, .ui-dialog-content pre code { font-family: "Roboto Mono", monospace; } + +.ui-dialog-content code, .ui-dialog-content pre code { color: #303030; } + +.ui-dialog-content pre code { padding: 0; } + +.ui-dialog-content pre { background-color: #f7f7f7; display: block; margin: 20px 0; padding: 15px; position: relative; overflow-x: auto; } + +.ui-dialog-content h1 code, .ui-dialog-content h2 code, .ui-dialog-content h3 code, .ui-dialog-content h4 code, .ui-dialog-content h5 code, .ui-dialog-content h6 code { font-family: inherit; font-size: inherit; background-color: transparent; } + +.ui-dialog-content .includecode { table-layout: fixed; } + +.ui-dialog-content .includecode, .ui-dialog-content .includecode th, .ui-dialog-content .includecode td { padding: 0 !important; } + +.ui-dialog-content .includecode th { text-align: right !important; padding: 10px !important; } + +.ui-dialog-content .includecode th a, .ui-dialog-content .includecode th a code { color: white !important; background-color: transparent !important; } + +.ui-dialog-content .includecode pre { margin: 0 !important; } + +.ui-dialog-content ul li { list-style: disc; } + +.ui-dialog-content ol li { list-style: decimal; } + +.ui-dialog-content ul, .ui-dialog-content ol { margin: 20px 0; padding-left: 30px; font-weight: 300; } + +.ui-dialog-content ul ul, .ui-dialog-content ol ol, .ui-dialog-content ul ol, .ui-dialog-content ol ul { margin: 0.75em 0; } + +.ui-dialog-content li { margin-bottom: 0.75em; font-size: 16px; line-height: 1.75em; } + +.ui-dialog-content table { width: 100%; border: 1px solid #ccc; border-spacing: 0; margin-top: 30px; margin-bottom: 30px; } + +.ui-dialog-content thead, .ui-dialog-content tr:nth-child(even) { background-color: #f7f7f7; } + +.ui-dialog-content thead { background-color: #555; color: white; } + +.ui-dialog-content th, .ui-dialog-content td { padding: 8px; text-align: left; margin: 0; } + +.ui-dialog-content th { font-weight: normal; } + +.ui-dialog-content td { font-size: 0.85em; } + +.ui-dialog-content #editPageButton { position: absolute; top: -25px; right: 5px; width: 50px; height: 50px; line-height: 50px; border-radius: 50%; white-space: nowrap; text-indent: 50px; overflow: hidden; background: #3371e3 url(/images/icon-pencil.svg) no-repeat; background-position: 12px 10px; background-size: 29px 29px; } + +.ui-dialog-content #markdown-toc { margin-bottom: 20px; } + +.ui-dialog-content #markdown-toc ul, .ui-dialog-content #markdown-toc li { list-style: disc; color: #3371e3; } + +.ui-dialog-content #markdown-toc ul { padding: 0 15px; margin: 0; } + +.ui-dialog-content #markdown-toc li { padding: 0; line-height: 1.5em; margin-bottom: 0; } + +.ui-dialog-content #markdown-toc a { position: relative; color: #3371e3; font-weight: 700; } + +.ui-dialog-content img { max-width: 100%; } + +.ui-dialog-content a { text-decoration: underline; } + +.ui-dialog-buttonpane { background: #f7f7f7 !important; } + +.ui-widget-header { background: transparent !important; background-color: transparent !important; border: 0px !important; } + +.ui-tabs ul, .ui-tabs ol, .ui-tabs li { padding: 0px !important; list-style: none !important; margin-bottom: 0px !important; margin-left: 4px !important; } + +.ui-tabs-panel ul li { list-style: disc !important; } + +.ui-tabs-panel ol li { list-style: decimal !important; } + +.ui-widget-content { border: 0px !important; } + +.ui-widget-content table { margin: 0px !important; } + +.ui-tabs .ui-tabs-panel { border: 1px solid #ccc !important; } + +.ui-tabs-anchor { text-decoration: none !important; } + +#talkToUs h3, #talkToUs h4 { text-align: center; } + +#talkToUs h3 { margin-bottom: 15px; } + +#talkToUs h4 { line-height: normal; margin-bottom: 50px; } + +#talkToUs h4 br { display: none; } + +#talkToUs #bigSocial { overflow: hidden; } + +#talkToUs #bigSocial div { width: 100%; float: left; padding: 30px; padding-top: 110px; background-position: center top; background-size: auto; background-repeat: no-repeat; } + +#talkToUs #bigSocial div:nth-child(1) { background-image: url(/images/twitter_icon.png); } + +#talkToUs #bigSocial div:nth-child(2) { background-image: url(/images/github_icon.png); } + +#talkToUs #bigSocial div:nth-child(3) { background-image: url(/images/slack_icon.png); } + +#talkToUs #bigSocial div:nth-child(4) { background-image: url(/images/stackoverflow_icon.png); } + +#talkToUs #bigSocial div + div { margin-top: 20px; margin-left: 0; } + +#talkToUs #bigSocial a { display: inline-block; color: #3371e3; font-size: 24px; font-weight: 400; text-decoration: none; margin-bottom: 15px; } + +#talkToUs #bigSocial a, #talkToUs #bigSocial p { text-align: center; width: 100%; } + +#home #talkToUs main { padding: 30px 0; } + +#home #talkToUs h5 { font-size: 20px; } + +#home #caseStudiesWrapper { position: relative; text-align: center; margin-bottom: 30px; } + +#home #caseStudiesWrapper div { position: relative; display: inline-block; vertical-align: top; width: 100%; min-height: 230px; padding: 125px 10px 15px; margin-bottom: 30px; background-position: top center; background-repeat: no-repeat; } + +#home #caseStudiesWrapper div:nth-child(1) { background-image: url(/images/community_logos/pearson_logo.png); } + +#home #caseStudiesWrapper div:nth-child(2) { background-image: url(/images/community_logos/box_logo.png); } + +#home #caseStudiesWrapper div:nth-child(3) { background-image: url(/images/community_logos/ebay_logo.png); } + +#home #caseStudiesWrapper div:nth-child(4) { background-image: url(/images/community_logos/wikimedia_foundation_logo.png); } + +#home #caseStudiesWrapper p { font-size: 20px; } + +#home #caseStudiesWrapper a { position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); color: #3371e3; font-weight: 400; } + +/* Google Search */ +.cse .gsc-control-cse, .gsc-control-cse { padding: 0; } + +.gsc-control-cse table, .gsc-control-cse-en table { margin: 0px !important; } + +.gsc-above-wrapper-area { border-bottom: 0; } + +hr { background-color: #999999; } + +h2 { margin-bottom: 15px !important; } + +.subhead { padding-bottom: 2% !important; padding-top: 0% !important; } + +.details { margin-left: 1.9%; padding-right: 5%; font-size: 16px !important; padding-bottom: 2% !important; } + +.section1 { margin-bottom: 3%; } + +.section1 .cols { width: 80% !important; margin-left: 6.8%; padding-top: 1.5%; } + +.section1 .cols .col1 { width: 52% !important; font-weight: 300 !important; } + +.section1 .cols .col2 { width: 46% !important; } + +.banner2text { width: 63%; padding-top: 10%; padding-left: 0% !important; float: initial !important; text-align: center; margin: 0 auto; position: relative; } + +.banner3text, .banner4text, .banner5text { width: 63%; padding-left: 0% !important; float: initial !important; text-align: center; margin: 0 auto; position: relative; } + +.fullcol { float: initial !important; } + +body footer { background-color: #585858 !important; } + +.section1 { float: left !important; } + +.banner1 { padding-left: 11.9% !important; } + +.banner2 { float: initial !important; padding-bottom: 2% !important; } + +footer { padding: 0% 7%; } + +.banner4, .banner3, .banner5 { float: initial !important; } + +@media screen and (max-width: 910px) { .banner2text { width: 47%; padding-top: 45%; } + .details { margin-left: 0%; margin-bottom: 3%; } + .subhead { padding-bottom: 0% !important; padding-top: 0% !important; } + .banner3 { width: 100% !important; } } + +@media screen and (max-width: 780px) { .section1 .cols { width: 100% !important; margin-left: 0%; padding-top: 5%; } + .section1 .cols .col1, .section1 .cols .col2 { width: 100% !important; margin-left: 0% !important; } + .fullcol { width: 90% !important; margin-left: 5% !important; } + .banner1 { padding-left: 10% !important; margin-bottom: 6% !important; } + .banner2text { padding-top: 60% !important; padding-bottom: 2% !important; } } + +@media screen and (min-width: 750px) { h1 { font-size: 32px; line-height: 40px; } + h2 { font-size: 28px; line-height: 60px; } + h3 { font-size: 24px; line-height: 32px; } + h4 { font-size: 20px; line-height: 40px; } + h5 { font-size: 16px; line-height: 36px; } + p { font-size: 14px; line-height: 22px; } + section, header, #vendorStrip { padding-left: 20px; padding-right: 20px; } + section main, header main, #vendorStrip main { width: 100%; max-width: 100%; } + header { height: 80px; } + .nav-buttons { height: 80px; line-height: 80px; } + .nav-buttons .button + * { margin-left: 30px; } + #hamburger { width: 50px; height: 50px; } + #mainNav { padding: 140px 0 30px; } + #mainNav h5 { margin-bottom: 1em; } + #mainNav h3 { margin-bottom: 0.6em; } + #mainNav .nav-box { width: 20%; } + #mainNav .nav-box + .nav-box { margin-left: calc(20% / 3); } + #mainNav main + main { margin-top: 60px; } + #mainNav .left .button { height: 50px; line-height: 50px; font-size: 18px; } + .open-nav #tryKubernetes, .y-enough #tryKubernetes { margin-left: 30px; } + #hero { padding-top: 80px; } + #docs #hero h1, #docs #hero h5 { padding-left: 20px; padding-right: 20px; } + #vendorStrip { height: 88px; line-height: 88px; font-size: 16px; } + p { font-size: 16px; line-height: 24px; letter-spacing: 0.1px; } + h1 { font-size: 36px; line-height: 44px; } + h3 { font-size: 28px; line-height: 36px; } + h4 { font-size: 24px; line-height: 40px; } + #home #viewDocs, #home #tryKubernetes { display: inline-block; } + #vendorStrip { display: block; text-align: center; } + #vendorStrip img { max-height: 24px; vertical-align: middle; margin: 0 30px; } + #docs #vendorStrip li a { font-size: 1em; font-weight: normal; } + #docs #vendorStrip li li + li { margin-left: 60px; } + #oceanNodes h3 { text-align: left; margin-bottom: 18px; } + #oceanNodes main { position: relative; clear: both; display: table; } + #oceanNodes main .content { display: table-cell; position: relative; vertical-align: middle; } + #oceanNodes main .image-wrapper { position: absolute; top: 50%; max-width: 25%; max-height: 100%; transform: translateY(-50%); } + #oceanNodes main:nth-child(odd) { padding-right: 210px; } + #oceanNodes main:nth-child(odd) .image-wrapper { right: 0; } + #oceanNodes main:nth-child(even) { padding-left: 210px; } + #oceanNodes main:nth-child(even) .image-wrapper { left: 0; } + #oceanNodes main:nth-child(1) { padding-right: 0; } + #oceanNodes main:nth-child(1) h3, #oceanNodes main:nth-child(1) p { text-align: center; } + #oceanNodes main:nth-child(1) .image-wrapper { position: relative; display: block; float: none; max-width: 100%; transform: none; } + #oceanNodes main:nth-child(1) .content { display: block; } + #oceanNodes main img { width: 100%; } + #video { height: 400px; display: block; } + #video > .light-text { display: block; } + #mobileShowVideoButton { display: none; } + #features { padding-bottom: 60px; } + #features .feature-box { margin-bottom: 30px; } + #features .feature-box:last-child { margin-bottom: 0; } + #features h3 { margin-bottom: 40px; } + #features .feature-box > div { width: 45%; margin-bottom: 0; } + #talkToUs #bigSocial div { width: calc(50% - 15px); } + #talkToUs #bigSocial div + div { margin-top: 0; } + #talkToUs #bigSocial div:nth-child(2) { margin-left: 20px; } + #talkToUs #bigSocial div:nth-child(3) { margin-top: 20px; } + #talkToUs #bigSocial div:nth-child(4) { margin-top: 20px; margin-left: 20px; } + #talkToUs #bigSocial a { display: inline-block; color: #3371e3; font-weight: 400; text-decoration: none; } + footer nav { text-align: center; } + footer nav a { width: 30%; padding: 0 20px; } + footer .social { text-align: center; } + footer .social div { display: inline-block; } + footer .social div:last-child { display: block; margin: 0; } + footer .social span { display: inline-block; margin-right: 10px; } + footer .social input { text-align: left; } + #home #caseStudiesWrapper div { width: 48%; } } + +@media screen and (min-width: 1025px) { #hamburger { display: none; } + ul.global-nav { display: inline-block; } + #docs #vendorStrip #searchBox:before { top: 15px; } + #vendorStrip { height: 44px; line-height: 44px; } + #vendorStrip li a.YAH:after { content: ""; display: block; position: absolute; left: 0; bottom: 0; width: 100%; height: 4px; background-color: #3371e3; } + #vendorStrip #searchBox { float: right; } + #home #hero #vendorStrip { display: block; } + #docs #hero h1, #docs #hero h5 { text-align: left; } + #docs #hero #vendorStrip ul { float: left; } + #docs #hero #vendorStrip #searchBox { float: right; width: 250px; } + #docs #hero #vendorStrip #search { vertical-align: middle; } + #docs .flyout-button { display: none; } + #docs .logo { position: relative; float: left; display: block; width: 180px; height: 88px; top: 0; left: 0; transform: none; background-image: url(../images/nav_logo.svg); } + #docs.flip-nav .logo, #docs.open-nav .logo { background-image: url(../images/nav_logo2.svg); } + #encyclopedia { padding: 50px 50px 100px 100px; clear: both; } + #docsToc { position: relative; float: left; padding: 0 20px; left: 0; width: 350px; z-index: auto; } + #docsToc .push-menu-close-button { display: none; } + #docsContent { width: calc(100% - 400px); } + #docsContent #editPageButton { right: -25px; } + section main, header main, footer main { max-width: 1200px; } + header, #vendorStrip, #encyclopedia, #hero h1, #hero h5, #docs #hero h1, #docs #hero h5, #community #hero h1, .gridPage #hero h1, #community #hero h5, .gridPage #hero h5 { padding-left: 100px; padding-right: 100px; } + #vendorStrip { padding-right: 10px; } + #home section main, #home header main, #home footer main { max-width: 1000px; } + #oceanNodes main { position: relative; max-width: 830px; } + #oceanNodes main:nth-child(1) { max-width: 1000px; padding-right: 475px; } + #oceanNodes main:nth-child(1) h3, #oceanNodes main:nth-child(1) p { text-align: left; } + #oceanNodes main:nth-child(1) .image-wrapper { position: absolute; max-width: 48%; transform: translateY(-50%); } + #oceanNodes main:nth-child(1) .image-wrapper img { max-width: 425px; } + #video { height: 550px; position: relative; background-image: url(../images/kub_video_banner_box.jpg); background-position: center center; background-size: cover; } + #talkToUs h4 br { display: block; } + #talkToUs #bigSocial div { width: calc(25% - 18px); } + #talkToUs #bigSocial div + div { margin-left: 20px; } + footer { width: 100%; background-image: url(../images/texture.png); background-color: #303030; } + footer main { padding: 20px 0; } + footer nav { overflow: hidden; margin-bottom: 20px; } + footer nav a { width: 16.65%; float: left; font-size: 24px; font-weight: 300; white-space: nowrap; } + footer .social { padding: 0 30px; max-width: 1200px; } + footer .social div { float: left; } + footer .social div:last-child { float: right; } + #search, #wishField { background-color: transparent; padding: 10px; font-size: 16px; font-weight: 100; color: white; border: 1px solid white; transition: 0.3s; } + #search:focus, #wishField:focus { background-color: #f7f7f7; color: #303030; } + .social a { display: inline-block; background-image: url(../images/social_sprite.png); background-repeat: no-repeat; background-size: auto; width: 50px; height: 50px; border-radius: 5px; margin-right: 10px; } + .social a:hover { background-color: #fff; } + .social a span { position: absolute; display: block; height: 0; overflow: hidden; } + a.twitter { background-position: 0 0; } + a.twitter:hover { background-position: 0 100%; } + a.stack-overflow { background-position: -50px 0; } + a.stack-overflow:hover { background-position: -50px 100%; } + a.slack { background-position: -100px 0; } + a.slack:hover { background-position: -100px 100%; } + a.github { background-position: -150px 0; } + a.github:hover { background-position: -150px 100%; } + a.mailing-list { background-position: -200px 0; } + a.mailing-list:hover { background-position: -200px 100%; } + a.calendar { background-position: -250px 0; } + a.calendar:hover { background-position: -250px 100%; } + #community #hero, .gridPage #hero { text-align: left; } + #community #hero h1, .gridPage #hero h1 { padding: 20px 100px; } + #community #tryKubernetes, .gridPage #tryKubernetes { width: auto; background-color: #3371e3; padding: 0 20px; } + #bigSocial div { width: calc(25% - 18px); } + #home #caseStudiesWrapper div { width: 24%; min-height: 260px; } } + +@media screen and (min-width: 1300px) { #vendorStrip { padding-right: 100px; } } + +@media screen and (min-width: 456px) { #vendorStrip li + li { margin-left: 20px; } } diff --git a/css/case_study_styles.sass b/static/css/case_study_styles.sass similarity index 100% rename from css/case_study_styles.sass rename to static/css/case_study_styles.sass diff --git a/css/custom-jekyll/tags.css b/static/css/custom-jekyll/tags.css similarity index 100% rename from css/custom-jekyll/tags.css rename to static/css/custom-jekyll/tags.css diff --git a/css/deprecation-warning.css b/static/css/deprecation-warning.css similarity index 100% rename from css/deprecation-warning.css rename to static/css/deprecation-warning.css diff --git a/css/glossary.css b/static/css/glossary.css similarity index 100% rename from css/glossary.css rename to static/css/glossary.css diff --git a/css/gridpage.css b/static/css/gridpage.css similarity index 100% rename from css/gridpage.css rename to static/css/gridpage.css diff --git a/css/jquery-ui.min.css b/static/css/jquery-ui.min.css similarity index 100% rename from css/jquery-ui.min.css rename to static/css/jquery-ui.min.css diff --git a/css/jquery-ui.structure.min.css b/static/css/jquery-ui.structure.min.css similarity index 100% rename from css/jquery-ui.structure.min.css rename to static/css/jquery-ui.structure.min.css diff --git a/css/jquery-ui.theme.min.css b/static/css/jquery-ui.theme.min.css similarity index 100% rename from css/jquery-ui.theme.min.css rename to static/css/jquery-ui.theme.min.css diff --git a/css/style_amadeus.css b/static/css/style_amadeus.css similarity index 100% rename from css/style_amadeus.css rename to static/css/style_amadeus.css diff --git a/css/style_ancestry.css b/static/css/style_ancestry.css similarity index 100% rename from css/style_ancestry.css rename to static/css/style_ancestry.css diff --git a/css/style_blablacar.css b/static/css/style_blablacar.css similarity index 100% rename from css/style_blablacar.css rename to static/css/style_blablacar.css diff --git a/css/style_blackrock.css b/static/css/style_blackrock.css similarity index 100% rename from css/style_blackrock.css rename to static/css/style_blackrock.css diff --git a/css/style_box.css b/static/css/style_box.css similarity index 100% rename from css/style_box.css rename to static/css/style_box.css diff --git a/css/style_buffer.css b/static/css/style_buffer.css similarity index 100% rename from css/style_buffer.css rename to static/css/style_buffer.css diff --git a/css/style_case_studies.css b/static/css/style_case_studies.css similarity index 100% rename from css/style_case_studies.css rename to static/css/style_case_studies.css diff --git a/css/style_crowdfire.css b/static/css/style_crowdfire.css similarity index 100% rename from css/style_crowdfire.css rename to static/css/style_crowdfire.css diff --git a/css/style_golfnow.css b/static/css/style_golfnow.css similarity index 100% rename from css/style_golfnow.css rename to static/css/style_golfnow.css diff --git a/css/style_haufegroup.css b/static/css/style_haufegroup.css similarity index 100% rename from css/style_haufegroup.css rename to static/css/style_haufegroup.css diff --git a/css/style_huawei.css b/static/css/style_huawei.css similarity index 100% rename from css/style_huawei.css rename to static/css/style_huawei.css diff --git a/css/style_peardeck.css b/static/css/style_peardeck.css similarity index 100% rename from css/style_peardeck.css rename to static/css/style_peardeck.css diff --git a/css/style_user_journeys.css b/static/css/style_user_journeys.css similarity index 100% rename from css/style_user_journeys.css rename to static/css/style_user_journeys.css diff --git a/css/style_wink.css b/static/css/style_wink.css similarity index 100% rename from css/style_wink.css rename to static/css/style_wink.css diff --git a/css/style_zalando.css b/static/css/style_zalando.css similarity index 100% rename from css/style_zalando.css rename to static/css/style_zalando.css diff --git a/static/css/styles.css b/static/css/styles.css new file mode 100644 index 0000000000000..6857fb7fcc084 --- /dev/null +++ b/static/css/styles.css @@ -0,0 +1,898 @@ +html, body { margin: 0; padding: 0; } + +input, button { outline: none; } + +button { cursor: pointer; } + +ul, li { list-style: none; } + +ul { margin: 0; padding: 0; } + +a { text-decoration: none; } + +.clear { display: block; clear: both; } + +.light-text { color: white; } + +.right { float: right; } + +.left { float: left; } + +.center { text-align: center; } + +*, .button { box-sizing: border-box; font-family: "Roboto", sans-serif; background: none; margin: 0; border: 0; } + +body { font-family: "Roboto", sans-serif; } + +h1, h2, h5, p { font-weight: 300; } + +h3, h4 { font-weight: 400; } + +html, body { margin: 0; padding: 0; } + +input, button { outline: none; } + +button { cursor: pointer; } + +ul, li { list-style: none; } + +ul { margin: 0; padding: 0; } + +a { text-decoration: none; } + +.clear { display: block; clear: both; } + +.light-text { color: white; } + +.right { float: right; } + +.left { float: left; } + +.center { text-align: center; } + +h1 { font-size: 32px; line-height: 40px; } + +h2 { font-size: 28px; line-height: 60px; } + +h3 { font-size: 24px; line-height: 32px; } + +h4 { font-size: 20px; line-height: 40px; } + +h5 { font-size: 16px; line-height: 36px; } + +p { font-size: 14px; line-height: 22px; } + +section, header, #vendorStrip { padding-left: 20px; padding-right: 20px; } + +section main, header main, #vendorStrip main { width: 100%; max-width: 100%; } + +header { height: 80px; } + +.nav-buttons { height: 80px; line-height: 80px; } + +.nav-buttons .button + * { margin-left: 30px; } + +#hamburger { width: 50px; height: 50px; } + +#mainNav { padding: 140px 0 30px; } + +#mainNav h5 { margin-bottom: 1em; } + +#mainNav h3 { margin-bottom: 0.6em; } + +#mainNav .nav-box { width: 20%; } + +#mainNav .nav-box + .nav-box { margin-left: calc(20% / 3); } + +#mainNav main + main { margin-top: 60px; } + +#mainNav .left .button { height: 50px; line-height: 50px; font-size: 18px; } + +.open-nav #tryKubernetes, .y-enough #tryKubernetes { margin-left: 30px; } + +#hero { padding-top: 80px; } + +#docs #hero h1, #docs #hero h5 { padding-left: 20px; padding-right: 20px; } + +#vendorStrip { height: 88px; line-height: 88px; font-size: 16px; } + +body { background-color: white; } + +section { position: relative; background-color: white; } + +section main, header main, footer main { position: relative; margin: auto; } + +p { font-size: 14px; font-weight: 400; } + +.button { display: inline-block; border-radius: 6px; padding: 0 20px; line-height: 40px; color: white; background-color: #3371e3; text-decoration: none; } + +#cellophane { position: fixed; top: 0; left: 0; width: 100%; height: 100%; display: none; } + +header { position: fixed; top: 0; left: 0; width: 100%; z-index: 8888; background-color: transparent; box-shadow: 0 0 0 transparent; overflow: hidden; transition: 0.3s; text-align: center; } + +.logo { position: relative; float: left; display: block; width: 180px; height: 88px; top: 0; left: 0; transform: none; background-image: url(/images/nav_logo.svg); background-size: contain; background-position: center center; background-repeat: no-repeat; } + +#docs .flyout-button { position: fixed; top: 20px; left: 20px; width: 50px; height: 50px; background-image: url(/images/toc_icon.png); background-position: center center; background-repeat: no-repeat; background-size: auto; border-radius: 50%; transition: 0.3s; z-index: 99999; } + +#docs.open-nav .flyout-button { display: none; } + +#docs .logo { position: absolute; top: 40px; left: 50%; transform: translate(-50%, -50%); display: block; width: 45px; height: 44px; background-image: url(/images/favicon.png); } + +#docs.flip-nav .flyout-button { background-image: url(/images/toc_icon_grey.png); } + +.nav-buttons { float: right; } + +#viewDocs, #tryKubernetes { display: none; } + +#viewDocs { border: 2px solid white; background-color: transparent; transition: 0.3s; } + +#viewDocs:hover { background-color: white; color: #303030; } + +#tryKubernetes { width: 0; padding: 0 0; border: 1px solid transparent; background-color: transparent; text-align: center; white-space: nowrap; vertical-align: middle; overflow: hidden; transition: 0.3s; } + +#hamburger { display: inline-block; position: relative; vertical-align: middle; padding: 0; border: 0; background: none; } + +#hamburger div, #hamburger:before, #hamburger:after { position: absolute; left: 15%; width: 70%; height: 2px; background-color: #3371e3; transition: 0.3s; content: ""; } + +#hamburger div { top: calc(50% - 1px); } + +#hamburger:before { top: 24%; } + +#hamburger:after { bottom: 24%; } + +#hamburger:hover div, #hamburger:hover:before, #hamburger:hover:after { background-color: white; } + +#mainNav h5 { color: #3371e3; font-weight: normal; } + +#mainNav main { white-space: nowrap; overflow: hidden; clear: both; } + +#mainNav .nav-box { float: left; white-space: normal; } + +#mainNav h3 a { color: #3371e3; text-decoration: none; } + +ul.global-nav { display: none; } + +ul.global-nav li { display: inline-block; margin-right: 14px; } + +ul.global-nav li a { color: #fff; font-weight: 400; padding: 0; position: relative; } + +ul.global-nav li a.active:after { position: absolute; width: 100%; height: 2px; content: ''; bottom: -4px; left: 0; background: #fff; } + +ul.global-nav li a .ui-icon { filter: brightness(0) invert(1); } + +ul.global-nav li ul { display: none; position: fixed; top: 40px; text-align: left; } + +ul.global-nav li ul li { display: block; height: 28px; } + +ul.global-nav li ul li a { background: #303030; color: #fff; padding: 7px; } + +ul.global-nav li ul li:last-child a { border-radius: 7px; } + +ul.global-nav li:hover ul { display: block; } + +.flip-nav ul.global-nav li a, .open-nav ul.global-nav li a { color: #303030; } + +.flip-nav ul.global-nav li a .ui-icon { filter: brightness(0); } + +.flip-nav ul.global-nav li ul li a { background: #fff; color: #303030; } + +.flip-nav ul.global-nav li a.active:after, .flip-nav ul.global-nav li ul li a.active:after, .open-nav ul.global-nav li a.active:after { background: #3371e3; } + +.flip-nav header { background-color: white; } + +.open-nav body { overflow: hidden; } + +.open-nav #cellophane { display: block; z-index: 9998; } + +.open-nav header { background-color: #e8e8e8; z-index: 9999; } + +.open-nav #hamburger div { opacity: 0; } + +.open-nav #hamburger:before, .open-nav #hamburger:after { left: 12px; transform-origin: 0 1px; } + +.open-nav #hamburger:before { transform: rotate(45deg); } + +.open-nav #hamburger:after { transform: rotate(-45deg); } + +.open-nav #tryKubernetes, .y-enough #tryKubernetes { width: 150px; background-color: #3371e3; border-color: #3371e3; } + +.flip-nav header, .open-nav header { box-shadow: 0 1px 2px #4c4c4c; } + +.flip-nav #viewDocs, .open-nav #viewDocs { border-color: #303030; color: #303030; } + +.flip-nav #viewDocs:hover, .open-nav #viewDocs:hover { border-color: #3371e3; background-color: #3371e3; color: white; } + +.flip-nav #hamburger:hover div, .flip-nav #hamburger:hover:before, .flip-nav #hamburger:hover:after, .open-nav #hamburger:hover div, .open-nav #hamburger:hover:before, .open-nav #hamburger:hover:after { background-color: #303030; } + +#hero { background-image: url(/images/texture.png); background-color: #303030; text-align: center; padding-left: 0; padding-right: 0; margin-bottom: 0; position: relative; } + +#hero.bot-bar:after { display: block; margin-bottom: -20px; height: 8px; width: 100%; background-color: rgba(255, 255, 255, 0.1); content: ''; } + +#hero.no-sub h5 { display: none; } + +#hero.no-sub h1 { margin-bottom: 20px; } + +#home #hero:after { display: none; } + +#vendorStrip { position: relative; background-color: rgba(255, 255, 255, 0.1); font-weight: 100; white-space: nowrap; text-align: center; } + +#vendorStrip li a { color: rgba(255, 255, 255, 0.5); } + +#vendorStrip li a.YAH { color: white; position: relative; } + +footer { width: 100%; background-image: url(/images/texture.png); background-color: #303030; } + +footer main { padding: 20px 0; } + +footer nav a { width: 100%; text-align: center; display: inline-block; margin: 10px 0; font-size: 24px; font-weight: 300; color: white; text-decoration: none; } + +footer .social { margin: 20px 0; } + +footer .social div { text-align: center; margin-bottom: 20px; } + +footer .social div:last-child { margin: 30px 0; } + +footer .social span { display: block; margin-bottom: 8px; } + +footer .social input { text-align: center; } + +#search, #wishField { background-color: transparent; padding: 10px; font-size: 16px; font-weight: 100; color: white; border: 1px solid white; transition: 0.3s; } + +#search:focus, #wishField:focus { background-color: #f7f7f7; color: #303030; } + +.social a { display: inline-block; background-image: url(/images/social_sprite.png); background-repeat: no-repeat; background-size: auto; width: 50px; height: 50px; border-radius: 5px; margin-right: 10px; } + +.social a:hover { background-color: #fff; } + +.social a span { position: absolute; display: block; height: 0; overflow: hidden; } + +.social a.button { background-image: none; width: auto; height: auto; } + +.social a.button:hover { color: #3371e3; } + +a.twitter { background-position: 0 0; } + +a.twitter:hover { background-position: 0 100%; } + +a.stack-overflow { background-position: -50px 0; } + +a.stack-overflow:hover { background-position: -50px 100%; } + +a.slack { background-position: -100px 0; } + +a.slack:hover { background-position: -100px 100%; } + +a.github { background-position: -150px 0; } + +a.github:hover { background-position: -150px 100%; } + +a.mailing-list { background-position: -200px 0; } + +a.mailing-list:hover { background-position: -200px 100%; } + +a.calendar { background-position: -250px 0; } + +a.calendar:hover { background-position: -250px 100%; } + +#viewDocs { display: none; } + +section { background-color: white; } + +#hero { background-color: #303030; } + +#hero h5 { margin: 20px 0; line-height: 28px; } + +#vendorStrip { position: relative; } + +#vendorStrip ul { float: left; } + +#vendorStrip li { display: inline-block; height: 100%; } + +#vendorStrip a { display: block; height: 100%; color: white; font-size: 0.75em; font-weight: bold; } + +#vendorStrip li + li { margin-left: 0; } + +#docs #vendorStrip { line-height: 44px; } + +#docs #vendorStrip ul { float: none; } + +#docs #vendorStrip #searchBox { float: none; display: block; width: 80%; margin: 0 auto; height: 44px; line-height: 44px; position: relative; } + +#docs #vendorStrip #searchBox:before { position: absolute; width: 15px; height: 15px; content: ''; right: 8px; top: 7px; background-image: url(/images/search-icon.svg); background-repeat: no-repeat; background-size: 100% 100%; z-index: 1; } + +#docs #vendorStrip #search { width: 100%; padding: 0 10px; height: 30px; line-height: 30px; font-size: 16px; vertical-align: top; background: #fff; border: none; border-radius: 4px; position: relative; } + +#encyclopedia { position: relative; padding: 50px 20px 20px 20px; overflow: hidden; font-size: 14px; } + +#encyclopedia > div { height: 100%; } + +#docsToc { position: fixed; background-color: white; top: 0; left: 0; width: 0; height: 100vh; overflow: hidden; padding: 50px 0; z-index: 999999; transition: 0.3s; } + +#docsToc .yah > .title { background-color: #f7f7f7; border-left: 3px solid #3371e3; padding: 7.5px 10px 7.5px 18px; margin-left: -3px; color: #3371e3; } + +.open-toc body { overflow: hidden; } + +.open-toc #docsToc { padding: 50px 20px; width: 400px; max-width: 100vw; overflow-y: auto; } + +.pi-accordion > .container:first-child > .item:first-child > .title:first-child { padding-left: 0; font-size: 1.5em; font-weight: 700; } + +.pi-accordion > .container:first-child > .item.yah:first-child > .title:first-child { margin-left: -20px !important; } + +.pi-accordion .item { overflow: hidden; } + +.pi-accordion .title { color: #303030; position: relative; padding: 7.5px 10px 7.5px 18px; cursor: pointer; transition: 0.3s; } + +.pi-accordion .title:hover { color: #3371e3; } + +.pi-accordion a.item > .title { color: black; } + +.pi-accordion a.item > .title:hover { color: #3371e3; } + +.pi-accordion div.item > .title:before { content: ""; position: absolute; top: 12px; left: 2px; border-style: solid; border-width: 5px 0 5px 8px; border-color: transparent transparent transparent #3371e3; transform: rotate(0deg); transition: 0.3s; } + +.pi-accordion .wrapper { position: relative; width: 100%; transition: height 0.3s; } + +.pi-accordion .content { padding-left: 20px; opacity: 0; transition: 0.3s; } + +.pi-accordion .item.on > .title:before { transform: rotate(90deg); } + +.pi-accordion .item.on > .wrapper > .content { opacity: 1; } + +dt { margin-bottom: 8px; } + +dd { margin-bottom: 16px; } + +.pi-pushmenu { display: none; position: fixed; top: 0; width: 100%; height: 100%; opacity: 0; transition: opacity 0.3s; } + +.pi-pushmenu.on { opacity: 1; } + +.pi-pushmenu .overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.4); } + +.pi-pushmenu .sled { position: absolute; top: 0; width: 0; height: 100%; background-color: white; overflow: auto; transition: 0.3s; } + +.pi-pushmenu.on .sled { width: 400px; max-width: 100vw; } + +.pi-pushmenu .top-bar { height: 0; line-height: 60px; background-color: #444; } + +.pi-pushmenu ul { margin-top: 25px; } + +.pi-pushmenu li { position: relative; display: block; width: 100%; min-height: 45px; padding: 0 60px 0 20px; border-bottom: 1px solid #cccccc; } + +.pi-pushmenu a { display: inline-block; width: 100%; height: 45px; line-height: 45px; font-family: "Roboto", sans-serif; font-size: 20px; color: #3371e3; } + +.pi-pushmenu .button { background: none; padding: 0; } + +.pi-pushmenu ul ul { padding: 0 20px; } + +.pi-pushmenu ul ul li { min-height: 40px; } + +.pi-pushmenu ul ul a { height: 40px; line-height: 40px; font-size: 18px; color: #555555; } + +.push-menu-close-button { position: absolute; top: 0; right: 0; width: 50px; height: 50px; } + +.push-menu-close-button:before, .push-menu-close-button:after { content: ""; position: absolute; top: calc(50% - 1px); left: 25%; width: 50%; height: 2px; background-color: black; } + +.push-menu-close-button:before { transform: rotate(45deg); } + +.push-menu-close-button:after { transform: rotate(-45deg); } + +#docsContent { position: relative; float: right; width: 100%; } + +#docsContent * + h2, #docsContent * + h3, #docsContent * + h4, #docsContent * + h5, #docsContent * + h6 { margin-top: 30px; } + +#docsContent h1, #docsContent h2, #docsContent h3, #docsContent h4, #docsContent h5, #docsContent h6 { line-height: normal; font-weight: 500; margin-bottom: 30px; padding-bottom: 10px; } + +#docsContent h1:before, #docsContent h2:before, #docsContent h3:before, #docsContent h4:before, #docsContent h5:before, #docsContent h6:before { display: block; content: " "; margin-top: -100px; height: 100px; visibility: hidden; } + +#docsContent h1, #docsContent h2 { border-bottom: 1px solid #cccccc; } + +#docsContent h1 { font-size: 32px; padding-right: 60px; } + +#docsContent h2 { font-size: 28px; } + +#docsContent h3 { font-size: 24px; font-weight: 300; margin-bottom: 5px; } + +#docsContent h4 { font-size: 20px; margin-bottom: 0px; } + +#docsContent h5, #docsContent h6 { font-size: 16px; font-weight: 500; } + +#docsContent p { font-size: 16px; font-weight: 300; line-height: 1.75em; } + +#docsContent p + p { margin-top: 10px; } + +#docsContent code { display: inline-block; box-sizing: border-box; background-color: #f7f7f7; color: #303030; font-family: "Roboto Mono", monospace; vertical-align: baseline; font-size: 14px; font-weight: bold; padding: 2px 4px; } + +#docsContent a code { color: #3371e3; text-decoration: underline; } + +#docsContent pre .pi, #docsContent pre .s { margin: 0; padding: 0; } + +#docsContent .highlight code span, #docsContent code, #docsContent pre code { font-family: "Roboto Mono", monospace; } + +#docsContent code, #docsContent pre code { color: #303030; } + +#docsContent pre code { padding: 0; } + +#docsContent pre { background-color: #f7f7f7; display: block; margin: 20px 0; padding: 15px; position: relative; overflow-x: auto; } + +#docsContent h1 code, #docsContent h2 code, #docsContent h3 code, #docsContent h4 code, #docsContent h5 code, #docsContent h6 code { font-family: inherit; font-size: inherit; background-color: transparent; } + +#docsContent .includecode { table-layout: fixed; } + +#docsContent .includecode, #docsContent .includecode th, #docsContent .includecode td { padding: 0 !important; } + +#docsContent .includecode th { text-align: right !important; padding: 10px !important; } + +#docsContent .includecode th a, #docsContent .includecode th a code { color: white !important; background-color: transparent !important; } + +#docsContent .includecode pre { margin: 0 !important; } + +#docsContent ul li { list-style: disc; } + +#docsContent ol li { list-style: decimal; } + +#docsContent ul, #docsContent ol { margin: 20px 0; padding-left: 30px; font-weight: 300; } + +#docsContent ul ul, #docsContent ol ol, #docsContent ul ol, #docsContent ol ul { margin: 0.75em 0; } + +#docsContent li { margin-bottom: 0.75em; font-size: 16px; line-height: 1.75em; } + +#docsContent table { width: 100%; border: 1px solid #ccc; border-spacing: 0; margin-top: 30px; margin-bottom: 30px; } + +#docsContent thead, #docsContent tr:nth-child(even) { background-color: #f7f7f7; } + +#docsContent thead { background-color: #555; color: white; } + +#docsContent th, #docsContent td { padding: 8px; text-align: left; margin: 0; } + +#docsContent th { font-weight: normal; } + +#docsContent td { font-size: 0.85em; } + +#docsContent #editPageButton { position: absolute; top: -25px; right: 5px; width: 50px; height: 50px; line-height: 50px; border-radius: 50%; white-space: nowrap; text-indent: 50px; overflow: hidden; background: #3371e3 url(/images/icon-pencil.svg) no-repeat; background-position: 12px 10px; background-size: 29px 29px; } + +#docsContent #markdown-toc, #docsContent #TableOfContents { margin-bottom: 20px; } + +#docsContent #markdown-toc ul, #docsContent #markdown-toc li, #docsContent #TableOfContents ul, #docsContent #TableOfContents li { list-style: disc; color: #3371e3; } + +#docsContent #markdown-toc ul, #docsContent #TableOfContents ul { padding: 0 15px; margin: 0; } + +#docsContent #markdown-toc li, #docsContent #TableOfContents li { padding: 0; line-height: 1.5em; margin-bottom: 0; } + +#docsContent #markdown-toc a, #docsContent #TableOfContents a { position: relative; color: #3371e3; font-weight: 700; } + +#docsContent img { max-width: 100%; } + +#docsContent a { text-decoration: underline; } + +#docsContent #TableOfContents > ul > li { list-style: none; } + +#docsContent #TableOfContents ul, #docsContent #TableOfContents li { list-style: disk; } + +.fixed footer { position: fixed; bottom: 0; } + +#miceType { clear: both; font-size: 11px; line-height: 18px; color: #aaa; } + +html.search #docsContent { position: relative; float: none; width: 90%; max-width: 850px; margin: 0 auto; } + +html.search #docsContent #editPageButton { display: none; } + +html.search #docsContent table { border: 0; margin-bottom: 0; } + +html.search #docsContent td { padding: 0; } + +html.search #docsContent h1 { margin-bottom: 0; border-bottom: 0; padding-bottom: 0; padding-left: 8px; } + +#home.flip-nav .logo, #home.open-nav .logo { background-image: url(/images/nav_logo2.svg); } + +#home #hero { margin-bottom: 0; padding-bottom: 1px; } + +#home #hero main { padding: 0 10px; margin-bottom: 30px; } + +#home #hero #vendorStrip { display: none; } + +#oceanNodes { padding-top: 60px; padding-bottom: 60px; } + +#oceanNodes a { color: #3371e3; } + +#oceanNodes main { margin-bottom: 60px; min-height: 160px; } + +#oceanNodes .image-wrapper { max-width: 75%; margin: 0 auto 20px; text-align: center; } + +#oceanNodes .image-wrapper img { width: 100%; max-width: 160px; } + +#oceanNodes main:first-child .image-wrapper { max-width: 100%; } + +#oceanNodes main:first-child .image-wrapper img { max-width: 491px; } + +#oceanNodes h3 { margin-bottom: 30px; } + +#video { height: 200px; } + +#video { width: 100%; position: relative; background-image: url(/images/kub_video_banner_box.jpg); background-position: center center; background-size: cover; } + +#video > .light-text { display: none; position: absolute; top: 50%; left: 75%; width: 525px; padding-right: 80px; transform: translate(-50%, -50%); color: white; } + +#video h2 { font-size: 32px; line-height: 44px; margin-bottom: 20px; } + +#video p { margin-bottom: 20px; } + +#video #desktopKCButton { position: relative; font-size: 18px; background-color: #303030; border-radius: 8px; color: #ffffff; padding: 20px 10px 20px 10px; } + +#video #desktopShowVideoButton { position: relative; font-size: 24px; background-color: white; border-radius: 8px; color: #3371e3; padding: 15px 30px 15px 80px; margin-bottom: 15px; } + +#video #desktopShowVideoButton:before { content: ""; position: absolute; position: absolute; top: 50%; left: 40px; transform: translate(-50%, -50%); width: 0; height: 0; border-style: solid; border-width: 10px 0 10px 20px; border-color: transparent transparent transparent #3371e3; } + +#video #mobileShowVideoButton { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 80px; height: 80px; border-radius: 50%; background-color: transparent; border: 5px solid rgba(255, 255, 255, 0.2); overflow: visible; } + +#video #mobileShowVideoButton:after { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); left: 40px; content: ""; width: 0; height: 0; border-style: solid; border-width: 20px 0 20px 30px; border-color: transparent transparent transparent #ffffff; } + +#videoPlayer { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background-color: rgba(0, 0, 0, 0.9); display: none; } + +#videoPlayer iframe { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 80vw; height: 45vw; max-width: 142.22222vh; max-height: 80vh; } + +#videoPlayer #closeButton { position: absolute; top: 20px; right: 20px; width: 50px; height: 50px; border: 2px solid transparent; transition: 0.3s; } + +#videoPlayer #closeButton:before, #videoPlayer #closeButton:after { content: ""; position: absolute; top: calc(50% - 1px); left: 10%; width: 80%; height: 2px; background-color: white; } + +#videoPlayer #closeButton:before { transform: rotate(45deg); } + +#videoPlayer #closeButton:after { transform: rotate(-45deg); } + +#videoPlayer #closeButton:hover { border-color: white; } + +#features { padding-top: 140px; background-color: #f7f7f7; background-image: url(/images/wheel.png); background-position: center 60px; background-repeat: no-repeat; background-size: auto; } + +.feature-box { width: 100%; overflow: hidden; clear: both; } + +.feature-box h4 { line-height: normal; margin-bottom: 15px; } + +.feature-box > div:first-child { float: left; } + +.feature-box > div:last-child { float: right; } + +#features h3 { margin-bottom: 20px; } + +#features .feature-box { margin-bottom: 0; } + +#features .feature-box > div { width: 100%; margin-bottom: 40px; } + +#community.open-nav .logo, #community.flip-nav .logo, .gridPage.open-nav .logo, .gridPage.flip-nav .logo { background-image: url(/images/nav_logo2.svg); } + +#community #hero, .gridPage #hero { padding-bottom: 20px; } + +#community #mainContent, .gridPage #mainContent { padding: 20px 0; } + +#community #mainContent main, .gridPage #mainContent main { max-width: none; } + +#community #mainContent a, .gridPage #mainContent a { color: #3371e3; } + +#community #mainContent .content, .gridPage #mainContent .content { margin-bottom: 30px; padding: 30px 0; } + +#community #mainContent .content h1, #community #mainContent .content h2, #community #mainContent .content h3, #community #mainContent .content h4, #community #mainContent .content h5, #community #mainContent .content h6, #community #mainContent .content p, .gridPage #mainContent .content h1, .gridPage #mainContent .content h2, .gridPage #mainContent .content h3, .gridPage #mainContent .content h4, .gridPage #mainContent .content h5, .gridPage #mainContent .content h6, .gridPage #mainContent .content p { line-height: normal; max-width: 1200px; padding: 0 20px; margin: 0 auto 20px; } + +#community #mainContent .content:nth-child(even), .gridPage #mainContent .content:nth-child(even) { background-color: #f7f7f7; } + +#community #mainContent .company-logos, .gridPage #mainContent .company-logos { text-align: center; max-width: 1200px; margin: 0 auto; } + +#community #mainContent .company-logos img, .gridPage #mainContent .company-logos img { width: auto; margin: 10px; background-color: #f7f7f7; } + +#community #mainContent .partner-logos, .gridPage #mainContent .partner-logos { text-align: center; max-width: 1200px; margin: 0 auto; } + +#community #mainContent .partner-logos img, .gridPage #mainContent .partner-logos img { width: auto; margin: 10px; background-color: #ffffff; box-shadow: 0 5px 5px rgba(0, 0, 0, 0.24), 0 0 5px rgba(0, 0, 0, 0.12); } + +#community #mainContent #calendarMeetings, .gridPage #mainContent #calendarMeetings { position: relative; width: 80vw; height: 60vw; max-width: 1200px; max-height: 900px; margin: 20px auto; } + +#community #mainContent #calendarEvents, .gridPage #mainContent #calendarEvents { position: relative; width: 80vw; height: 30vw; max-width: 1200px; max-height: 450px; margin: 20px auto; } + +#community #mainContent iframe, .gridPage #mainContent iframe { position: absolute; border: 0; width: 100%; height: 100%; } + +.ui-icon { display: inline-block !important; } + +#feature-state-dialog-link { text-decoration: none !important; padding: 5px !important; } + +#feature-state-dialog-link a:visited { color: #454545 !important; } + +#feature-state-dialog-link a code { display: inline-block !important; box-sizing: border-box !important; background-color: #f7f7f7 !important; color: #303030 !important; font-family: "Roboto Mono", monospace !important; vertical-align: baseline !important; font-size: 14px !important; font-weight: bold !important; padding: 0px 4px !important; } + +#feature-state-dialog { background: #fff !important; border: 1px solid #ddd !important; padding: 0.5em 1em !important; } + +#feature-state-dialog ul, #feature-state-dialog li { list-style: disc !important; margin: 4px 12px !important; } + +#feature-state-dialog p { margin: 8px 0px !important; } + +#feature-state-dialog code { display: inline-block !important; box-sizing: border-box !important; background-color: #f7f7f7 !important; color: #303030 !important; font-family: "Roboto Mono", monospace !important; vertical-align: baseline !important; font-size: 14px !important; font-weight: bold !important; padding: 0px 4px !important; } + +.ui-dialog { background: #f7f7f7 !important; padding: 0.5em; } + +.ui-dialog-content { position: relative; float: right; width: 100%; } + +.ui-dialog-content * + h2, .ui-dialog-content * + h3, .ui-dialog-content * + h4, .ui-dialog-content * + h5, .ui-dialog-content * + h6 { margin-top: 30px; } + +.ui-dialog-content h1, .ui-dialog-content h2, .ui-dialog-content h3, .ui-dialog-content h4, .ui-dialog-content h5, .ui-dialog-content h6 { line-height: normal; font-weight: 500; margin-bottom: 30px; padding-bottom: 10px; } + +.ui-dialog-content h1:before, .ui-dialog-content h2:before, .ui-dialog-content h3:before, .ui-dialog-content h4:before, .ui-dialog-content h5:before, .ui-dialog-content h6:before { display: block; content: " "; margin-top: -100px; height: 100px; visibility: hidden; } + +.ui-dialog-content h1, .ui-dialog-content h2 { border-bottom: 1px solid #cccccc; } + +.ui-dialog-content h1 { font-size: 32px; padding-right: 60px; } + +.ui-dialog-content h2 { font-size: 28px; } + +.ui-dialog-content h3 { font-size: 24px; font-weight: 300; margin-bottom: 5px; } + +.ui-dialog-content h4 { font-size: 20px; margin-bottom: 0px; } + +.ui-dialog-content h5, .ui-dialog-content h6 { font-size: 16px; font-weight: 500; } + +.ui-dialog-content p { font-size: 16px; font-weight: 300; line-height: 1.75em; } + +.ui-dialog-content p + p { margin-top: 10px; } + +.ui-dialog-content code { display: inline-block; box-sizing: border-box; background-color: #f7f7f7; color: #303030; font-family: "Roboto Mono", monospace; vertical-align: baseline; font-size: 14px; font-weight: bold; padding: 2px 4px; } + +.ui-dialog-content a code { color: #3371e3; text-decoration: underline; } + +.ui-dialog-content pre .pi, .ui-dialog-content pre .s { margin: 0; padding: 0; } + +.ui-dialog-content .highlight code span, .ui-dialog-content code, .ui-dialog-content pre code { font-family: "Roboto Mono", monospace; } + +.ui-dialog-content code, .ui-dialog-content pre code { color: #303030; } + +.ui-dialog-content pre code { padding: 0; } + +.ui-dialog-content pre { background-color: #f7f7f7; display: block; margin: 20px 0; padding: 15px; position: relative; overflow-x: auto; } + +.ui-dialog-content h1 code, .ui-dialog-content h2 code, .ui-dialog-content h3 code, .ui-dialog-content h4 code, .ui-dialog-content h5 code, .ui-dialog-content h6 code { font-family: inherit; font-size: inherit; background-color: transparent; } + +.ui-dialog-content .includecode { table-layout: fixed; } + +.ui-dialog-content .includecode, .ui-dialog-content .includecode th, .ui-dialog-content .includecode td { padding: 0 !important; } + +.ui-dialog-content .includecode th { text-align: right !important; padding: 10px !important; } + +.ui-dialog-content .includecode th a, .ui-dialog-content .includecode th a code { color: white !important; background-color: transparent !important; } + +.ui-dialog-content .includecode pre { margin: 0 !important; } + +.ui-dialog-content ul li { list-style: disc; } + +.ui-dialog-content ol li { list-style: decimal; } + +.ui-dialog-content ul, .ui-dialog-content ol { margin: 20px 0; padding-left: 30px; font-weight: 300; } + +.ui-dialog-content ul ul, .ui-dialog-content ol ol, .ui-dialog-content ul ol, .ui-dialog-content ol ul { margin: 0.75em 0; } + +.ui-dialog-content li { margin-bottom: 0.75em; font-size: 16px; line-height: 1.75em; } + +.ui-dialog-content table { width: 100%; border: 1px solid #ccc; border-spacing: 0; margin-top: 30px; margin-bottom: 30px; } + +.ui-dialog-content thead, .ui-dialog-content tr:nth-child(even) { background-color: #f7f7f7; } + +.ui-dialog-content thead { background-color: #555; color: white; } + +.ui-dialog-content th, .ui-dialog-content td { padding: 8px; text-align: left; margin: 0; } + +.ui-dialog-content th { font-weight: normal; } + +.ui-dialog-content td { font-size: 0.85em; } + +.ui-dialog-content #editPageButton { position: absolute; top: -25px; right: 5px; width: 50px; height: 50px; line-height: 50px; border-radius: 50%; white-space: nowrap; text-indent: 50px; overflow: hidden; background: #3371e3 url(/images/icon-pencil.svg) no-repeat; background-position: 12px 10px; background-size: 29px 29px; } + +.ui-dialog-content #markdown-toc { margin-bottom: 20px; } + +.ui-dialog-content #markdown-toc ul, .ui-dialog-content #markdown-toc li { list-style: disc; color: #3371e3; } + +.ui-dialog-content #markdown-toc ul { padding: 0 15px; margin: 0; } + +.ui-dialog-content #markdown-toc li { padding: 0; line-height: 1.5em; margin-bottom: 0; } + +.ui-dialog-content #markdown-toc a { position: relative; color: #3371e3; font-weight: 700; } + +.ui-dialog-content img { max-width: 100%; } + +.ui-dialog-content a { text-decoration: underline; } + +.ui-dialog-buttonpane { background: #f7f7f7 !important; } + +.ui-widget-header { background: transparent !important; background-color: transparent !important; border: 0px !important; } + +.ui-tabs ul, .ui-tabs ol, .ui-tabs li { padding: 0px !important; list-style: none !important; margin-bottom: 0px !important; margin-left: 4px !important; } + +.ui-tabs-panel ul li { list-style: disc !important; } + +.ui-tabs-panel ol li { list-style: decimal !important; } + +.ui-widget-content { border: 0px !important; } + +.ui-widget-content table { margin: 0px !important; } + +.ui-tabs .ui-tabs-panel { border: 1px solid #ccc !important; } + +.ui-tabs-anchor { text-decoration: none !important; } + +#talkToUs h3, #talkToUs h4 { text-align: center; } + +#talkToUs h3 { margin-bottom: 15px; } + +#talkToUs h4 { line-height: normal; margin-bottom: 50px; } + +#talkToUs h4 br { display: none; } + +#talkToUs #bigSocial { overflow: hidden; } + +#talkToUs #bigSocial div { width: 100%; float: left; padding: 30px; padding-top: 110px; background-position: center top; background-size: auto; background-repeat: no-repeat; } + +#talkToUs #bigSocial div:nth-child(1) { background-image: url(/images/twitter_icon.png); } + +#talkToUs #bigSocial div:nth-child(2) { background-image: url(/images/github_icon.png); } + +#talkToUs #bigSocial div:nth-child(3) { background-image: url(/images/slack_icon.png); } + +#talkToUs #bigSocial div:nth-child(4) { background-image: url(/images/stackoverflow_icon.png); } + +#talkToUs #bigSocial div + div { margin-top: 20px; margin-left: 0; } + +#talkToUs #bigSocial a { display: inline-block; color: #3371e3; font-size: 24px; font-weight: 400; text-decoration: none; margin-bottom: 15px; } + +#talkToUs #bigSocial a, #talkToUs #bigSocial p { text-align: center; width: 100%; } + +#home #talkToUs main { padding: 30px 0; } + +#home #talkToUs h5 { font-size: 20px; } + +#home #caseStudiesWrapper { position: relative; text-align: center; margin-bottom: 30px; } + +#home #caseStudiesWrapper div { position: relative; display: inline-block; vertical-align: top; width: 100%; min-height: 230px; padding: 125px 10px 15px; margin-bottom: 30px; background-position: top center; background-repeat: no-repeat; } + +#home #caseStudiesWrapper div:nth-child(1) { background-image: url(/images/community_logos/pearson_logo.png); } + +#home #caseStudiesWrapper div:nth-child(2) { background-image: url(/images/community_logos/box_logo.png); } + +#home #caseStudiesWrapper div:nth-child(3) { background-image: url(/images/community_logos/ebay_logo.png); } + +#home #caseStudiesWrapper div:nth-child(4) { background-image: url(/images/community_logos/wikimedia_foundation_logo.png); } + +#home #caseStudiesWrapper p { font-size: 20px; } + +#home #caseStudiesWrapper a { position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); color: #3371e3; font-weight: 400; } + +/* Google Search */ +.cse .gsc-control-cse, .gsc-control-cse { padding: 0; } + +.gsc-control-cse table, .gsc-control-cse-en table { margin: 0px !important; } + +.gsc-above-wrapper-area { border-bottom: 0; } + +@media screen and (min-width: 750px) { h1 { font-size: 32px; line-height: 40px; } + h2 { font-size: 28px; line-height: 60px; } + h3 { font-size: 24px; line-height: 32px; } + h4 { font-size: 20px; line-height: 40px; } + h5 { font-size: 16px; line-height: 36px; } + p { font-size: 14px; line-height: 22px; } + section, header, #vendorStrip { padding-left: 20px; padding-right: 20px; } + section main, header main, #vendorStrip main { width: 100%; max-width: 100%; } + header { height: 80px; } + .nav-buttons { height: 80px; line-height: 80px; } + .nav-buttons .button + * { margin-left: 30px; } + #hamburger { width: 50px; height: 50px; } + #mainNav { padding: 140px 0 30px; } + #mainNav h5 { margin-bottom: 1em; } + #mainNav h3 { margin-bottom: 0.6em; } + #mainNav .nav-box { width: 20%; } + #mainNav .nav-box + .nav-box { margin-left: calc(20% / 3); } + #mainNav main + main { margin-top: 60px; } + #mainNav .left .button { height: 50px; line-height: 50px; font-size: 18px; } + .open-nav #tryKubernetes, .y-enough #tryKubernetes { margin-left: 30px; } + #hero { padding-top: 80px; } + #docs #hero h1, #docs #hero h5 { padding-left: 20px; padding-right: 20px; } + #vendorStrip { height: 88px; line-height: 88px; font-size: 16px; } + p { font-size: 16px; line-height: 24px; letter-spacing: 0.1px; } + h1 { font-size: 36px; line-height: 44px; } + h3 { font-size: 28px; line-height: 36px; } + h4 { font-size: 24px; line-height: 40px; } + #home #viewDocs, #home #tryKubernetes { display: inline-block; } + #vendorStrip { display: block; text-align: center; } + #vendorStrip img { max-height: 24px; vertical-align: middle; margin: 0 30px; } + #docs #vendorStrip li a { font-size: 1em; font-weight: normal; } + #docs #vendorStrip li li + li { margin-left: 60px; } + #oceanNodes h3 { text-align: left; margin-bottom: 18px; } + #oceanNodes main { position: relative; clear: both; display: table; } + #oceanNodes main .content { display: table-cell; position: relative; vertical-align: middle; } + #oceanNodes main .image-wrapper { position: absolute; top: 50%; max-width: 25%; max-height: 100%; transform: translateY(-50%); } + #oceanNodes main:nth-child(odd) { padding-right: 210px; } + #oceanNodes main:nth-child(odd) .image-wrapper { right: 0; } + #oceanNodes main:nth-child(even) { padding-left: 210px; } + #oceanNodes main:nth-child(even) .image-wrapper { left: 0; } + #oceanNodes main:nth-child(1) { padding-right: 0; } + #oceanNodes main:nth-child(1) h3, #oceanNodes main:nth-child(1) p { text-align: center; } + #oceanNodes main:nth-child(1) .image-wrapper { position: relative; display: block; float: none; max-width: 100%; transform: none; } + #oceanNodes main:nth-child(1) .content { display: block; } + #oceanNodes main img { width: 100%; } + #video { height: 400px; display: block; } + #video > .light-text { display: block; } + #mobileShowVideoButton { display: none; } + #features { padding-bottom: 60px; } + #features .feature-box { margin-bottom: 30px; } + #features .feature-box:last-child { margin-bottom: 0; } + #features h3 { margin-bottom: 40px; } + #features .feature-box > div { width: 45%; margin-bottom: 0; } + #talkToUs #bigSocial div { width: calc(50% - 15px); } + #talkToUs #bigSocial div + div { margin-top: 0; } + #talkToUs #bigSocial div:nth-child(2) { margin-left: 20px; } + #talkToUs #bigSocial div:nth-child(3) { margin-top: 20px; } + #talkToUs #bigSocial div:nth-child(4) { margin-top: 20px; margin-left: 20px; } + #talkToUs #bigSocial a { display: inline-block; color: #3371e3; font-weight: 400; text-decoration: none; } + footer nav { text-align: center; } + footer nav a { width: 30%; padding: 0 20px; } + footer .social { text-align: center; } + footer .social div { display: inline-block; } + footer .social div:last-child { display: block; margin: 0; } + footer .social span { display: inline-block; margin-right: 10px; } + footer .social input { text-align: left; } + #home #caseStudiesWrapper div { width: 48%; } } + +@media screen and (min-width: 1025px) { #hamburger { display: none; } + ul.global-nav { display: inline-block; } + #docs #vendorStrip #searchBox:before { top: 15px; } + #vendorStrip { height: 44px; line-height: 44px; } + #vendorStrip li a.YAH:after { content: ""; display: block; position: absolute; left: 0; bottom: 0; width: 100%; height: 4px; background-color: #3371e3; } + #vendorStrip #searchBox { float: right; } + #home #hero #vendorStrip { display: block; } + #docs #hero h1, #docs #hero h5 { text-align: left; } + #docs #hero #vendorStrip ul { float: left; } + #docs #hero #vendorStrip #searchBox { float: right; width: 250px; } + #docs #hero #vendorStrip #search { vertical-align: middle; } + #docs .flyout-button { display: none; } + #docs .logo { position: relative; float: left; display: block; width: 180px; height: 88px; top: 0; left: 0; transform: none; background-image: url(../images/nav_logo.svg); } + #docs.flip-nav .logo, #docs.open-nav .logo { background-image: url(../images/nav_logo2.svg); } + #encyclopedia { padding: 50px 50px 100px 100px; clear: both; } + #docsToc { position: relative; float: left; padding: 0 20px; left: 0; width: 350px; z-index: auto; } + #docsToc .push-menu-close-button { display: none; } + #docsContent { width: calc(100% - 400px); } + #docsContent #editPageButton { right: -25px; } + section main, header main, footer main { max-width: 1200px; } + header, #vendorStrip, #encyclopedia, #hero h1, #hero h5, #docs #hero h1, #docs #hero h5, #community #hero h1, .gridPage #hero h1, #community #hero h5, .gridPage #hero h5 { padding-left: 100px; padding-right: 100px; } + #vendorStrip { padding-right: 10px; } + #home section main, #home header main, #home footer main { max-width: 1000px; } + #oceanNodes main { position: relative; max-width: 830px; } + #oceanNodes main:nth-child(1) { max-width: 1000px; padding-right: 475px; } + #oceanNodes main:nth-child(1) h3, #oceanNodes main:nth-child(1) p { text-align: left; } + #oceanNodes main:nth-child(1) .image-wrapper { position: absolute; max-width: 48%; transform: translateY(-50%); } + #oceanNodes main:nth-child(1) .image-wrapper img { max-width: 425px; } + #video { height: 550px; position: relative; background-image: url(../images/kub_video_banner_box.jpg); background-position: center center; background-size: cover; } + #talkToUs h4 br { display: block; } + #talkToUs #bigSocial div { width: calc(25% - 18px); } + #talkToUs #bigSocial div + div { margin-left: 20px; } + footer { width: 100%; background-image: url(../images/texture.png); background-color: #303030; } + footer main { padding: 20px 0; } + footer nav { overflow: hidden; margin-bottom: 20px; } + footer nav a { width: 16.65%; float: left; font-size: 24px; font-weight: 300; white-space: nowrap; } + footer .social { padding: 0 30px; max-width: 1200px; } + footer .social div { float: left; } + footer .social div:last-child { float: right; } + #search, #wishField { background-color: transparent; padding: 10px; font-size: 16px; font-weight: 100; color: white; border: 1px solid white; transition: 0.3s; } + #search:focus, #wishField:focus { background-color: #f7f7f7; color: #303030; } + .social a { display: inline-block; background-image: url(../images/social_sprite.png); background-repeat: no-repeat; background-size: auto; width: 50px; height: 50px; border-radius: 5px; margin-right: 10px; } + .social a:hover { background-color: #fff; } + .social a span { position: absolute; display: block; height: 0; overflow: hidden; } + a.twitter { background-position: 0 0; } + a.twitter:hover { background-position: 0 100%; } + a.stack-overflow { background-position: -50px 0; } + a.stack-overflow:hover { background-position: -50px 100%; } + a.slack { background-position: -100px 0; } + a.slack:hover { background-position: -100px 100%; } + a.github { background-position: -150px 0; } + a.github:hover { background-position: -150px 100%; } + a.mailing-list { background-position: -200px 0; } + a.mailing-list:hover { background-position: -200px 100%; } + a.calendar { background-position: -250px 0; } + a.calendar:hover { background-position: -250px 100%; } + #community #hero, .gridPage #hero { text-align: left; } + #community #hero h1, .gridPage #hero h1 { padding: 20px 100px; } + #community #tryKubernetes, .gridPage #tryKubernetes { width: auto; background-color: #3371e3; padding: 0 20px; } + #bigSocial div { width: calc(25% - 18px); } + #home #caseStudiesWrapper div { width: 24%; min-height: 260px; } } + +@media screen and (min-width: 1300px) { #vendorStrip { padding-right: 100px; } } + +@media screen and (min-width: 456px) { #vendorStrip li + li { margin-left: 20px; } } diff --git a/css/styles.sass b/static/css/styles.sass similarity index 100% rename from css/styles.sass rename to static/css/styles.sass diff --git a/css/sweetalert.css b/static/css/sweetalert.css similarity index 100% rename from css/sweetalert.css rename to static/css/sweetalert.css diff --git a/fonts/MaterialIcons-Regular.eot b/static/fonts/MaterialIcons-Regular.eot similarity index 100% rename from fonts/MaterialIcons-Regular.eot rename to static/fonts/MaterialIcons-Regular.eot diff --git a/fonts/MaterialIcons-Regular.svg b/static/fonts/MaterialIcons-Regular.svg similarity index 100% rename from fonts/MaterialIcons-Regular.svg rename to static/fonts/MaterialIcons-Regular.svg diff --git a/fonts/MaterialIcons-Regular.ttf b/static/fonts/MaterialIcons-Regular.ttf similarity index 100% rename from fonts/MaterialIcons-Regular.ttf rename to static/fonts/MaterialIcons-Regular.ttf diff --git a/fonts/MaterialIcons-Regular.woff b/static/fonts/MaterialIcons-Regular.woff similarity index 100% rename from fonts/MaterialIcons-Regular.woff rename to static/fonts/MaterialIcons-Regular.woff diff --git a/fonts/MaterialIcons-Regular.woff2 b/static/fonts/MaterialIcons-Regular.woff2 similarity index 100% rename from fonts/MaterialIcons-Regular.woff2 rename to static/fonts/MaterialIcons-Regular.woff2 diff --git a/fonts/roboto-mono-v5-latin-regular.eot b/static/fonts/roboto-mono-v5-latin-regular.eot similarity index 100% rename from fonts/roboto-mono-v5-latin-regular.eot rename to static/fonts/roboto-mono-v5-latin-regular.eot diff --git a/fonts/roboto-mono-v5-latin-regular.svg b/static/fonts/roboto-mono-v5-latin-regular.svg similarity index 100% rename from fonts/roboto-mono-v5-latin-regular.svg rename to static/fonts/roboto-mono-v5-latin-regular.svg diff --git a/fonts/roboto-mono-v5-latin-regular.ttf b/static/fonts/roboto-mono-v5-latin-regular.ttf similarity index 100% rename from fonts/roboto-mono-v5-latin-regular.ttf rename to static/fonts/roboto-mono-v5-latin-regular.ttf diff --git a/fonts/roboto-mono-v5-latin-regular.woff b/static/fonts/roboto-mono-v5-latin-regular.woff similarity index 100% rename from fonts/roboto-mono-v5-latin-regular.woff rename to static/fonts/roboto-mono-v5-latin-regular.woff diff --git a/fonts/roboto-mono-v5-latin-regular.woff2 b/static/fonts/roboto-mono-v5-latin-regular.woff2 similarity index 100% rename from fonts/roboto-mono-v5-latin-regular.woff2 rename to static/fonts/roboto-mono-v5-latin-regular.woff2 diff --git a/fonts/roboto-v18-latin-100.eot b/static/fonts/roboto-v18-latin-100.eot similarity index 100% rename from fonts/roboto-v18-latin-100.eot rename to static/fonts/roboto-v18-latin-100.eot diff --git a/fonts/roboto-v18-latin-100.svg b/static/fonts/roboto-v18-latin-100.svg similarity index 100% rename from fonts/roboto-v18-latin-100.svg rename to static/fonts/roboto-v18-latin-100.svg diff --git a/fonts/roboto-v18-latin-100.ttf b/static/fonts/roboto-v18-latin-100.ttf similarity index 100% rename from fonts/roboto-v18-latin-100.ttf rename to static/fonts/roboto-v18-latin-100.ttf diff --git a/fonts/roboto-v18-latin-100.woff b/static/fonts/roboto-v18-latin-100.woff similarity index 100% rename from fonts/roboto-v18-latin-100.woff rename to static/fonts/roboto-v18-latin-100.woff diff --git a/fonts/roboto-v18-latin-100.woff2 b/static/fonts/roboto-v18-latin-100.woff2 similarity index 100% rename from fonts/roboto-v18-latin-100.woff2 rename to static/fonts/roboto-v18-latin-100.woff2 diff --git a/fonts/roboto-v18-latin-100italic.eot b/static/fonts/roboto-v18-latin-100italic.eot similarity index 100% rename from fonts/roboto-v18-latin-100italic.eot rename to static/fonts/roboto-v18-latin-100italic.eot diff --git a/fonts/roboto-v18-latin-100italic.svg b/static/fonts/roboto-v18-latin-100italic.svg similarity index 100% rename from fonts/roboto-v18-latin-100italic.svg rename to static/fonts/roboto-v18-latin-100italic.svg diff --git a/fonts/roboto-v18-latin-100italic.ttf b/static/fonts/roboto-v18-latin-100italic.ttf similarity index 100% rename from fonts/roboto-v18-latin-100italic.ttf rename to static/fonts/roboto-v18-latin-100italic.ttf diff --git a/fonts/roboto-v18-latin-100italic.woff b/static/fonts/roboto-v18-latin-100italic.woff similarity index 100% rename from fonts/roboto-v18-latin-100italic.woff rename to static/fonts/roboto-v18-latin-100italic.woff diff --git a/fonts/roboto-v18-latin-100italic.woff2 b/static/fonts/roboto-v18-latin-100italic.woff2 similarity index 100% rename from fonts/roboto-v18-latin-100italic.woff2 rename to static/fonts/roboto-v18-latin-100italic.woff2 diff --git a/fonts/roboto-v18-latin-300.eot b/static/fonts/roboto-v18-latin-300.eot similarity index 100% rename from fonts/roboto-v18-latin-300.eot rename to static/fonts/roboto-v18-latin-300.eot diff --git a/fonts/roboto-v18-latin-300.svg b/static/fonts/roboto-v18-latin-300.svg similarity index 100% rename from fonts/roboto-v18-latin-300.svg rename to static/fonts/roboto-v18-latin-300.svg diff --git a/fonts/roboto-v18-latin-300.ttf b/static/fonts/roboto-v18-latin-300.ttf similarity index 100% rename from fonts/roboto-v18-latin-300.ttf rename to static/fonts/roboto-v18-latin-300.ttf diff --git a/fonts/roboto-v18-latin-300.woff b/static/fonts/roboto-v18-latin-300.woff similarity index 100% rename from fonts/roboto-v18-latin-300.woff rename to static/fonts/roboto-v18-latin-300.woff diff --git a/fonts/roboto-v18-latin-300.woff2 b/static/fonts/roboto-v18-latin-300.woff2 similarity index 100% rename from fonts/roboto-v18-latin-300.woff2 rename to static/fonts/roboto-v18-latin-300.woff2 diff --git a/fonts/roboto-v18-latin-300italic.eot b/static/fonts/roboto-v18-latin-300italic.eot similarity index 100% rename from fonts/roboto-v18-latin-300italic.eot rename to static/fonts/roboto-v18-latin-300italic.eot diff --git a/fonts/roboto-v18-latin-300italic.svg b/static/fonts/roboto-v18-latin-300italic.svg similarity index 100% rename from fonts/roboto-v18-latin-300italic.svg rename to static/fonts/roboto-v18-latin-300italic.svg diff --git a/fonts/roboto-v18-latin-300italic.ttf b/static/fonts/roboto-v18-latin-300italic.ttf similarity index 100% rename from fonts/roboto-v18-latin-300italic.ttf rename to static/fonts/roboto-v18-latin-300italic.ttf diff --git a/fonts/roboto-v18-latin-300italic.woff b/static/fonts/roboto-v18-latin-300italic.woff similarity index 100% rename from fonts/roboto-v18-latin-300italic.woff rename to static/fonts/roboto-v18-latin-300italic.woff diff --git a/fonts/roboto-v18-latin-300italic.woff2 b/static/fonts/roboto-v18-latin-300italic.woff2 similarity index 100% rename from fonts/roboto-v18-latin-300italic.woff2 rename to static/fonts/roboto-v18-latin-300italic.woff2 diff --git a/fonts/roboto-v18-latin-500.eot b/static/fonts/roboto-v18-latin-500.eot similarity index 100% rename from fonts/roboto-v18-latin-500.eot rename to static/fonts/roboto-v18-latin-500.eot diff --git a/fonts/roboto-v18-latin-500.svg b/static/fonts/roboto-v18-latin-500.svg similarity index 100% rename from fonts/roboto-v18-latin-500.svg rename to static/fonts/roboto-v18-latin-500.svg diff --git a/fonts/roboto-v18-latin-500.ttf b/static/fonts/roboto-v18-latin-500.ttf similarity index 100% rename from fonts/roboto-v18-latin-500.ttf rename to static/fonts/roboto-v18-latin-500.ttf diff --git a/fonts/roboto-v18-latin-500.woff b/static/fonts/roboto-v18-latin-500.woff similarity index 100% rename from fonts/roboto-v18-latin-500.woff rename to static/fonts/roboto-v18-latin-500.woff diff --git a/fonts/roboto-v18-latin-500.woff2 b/static/fonts/roboto-v18-latin-500.woff2 similarity index 100% rename from fonts/roboto-v18-latin-500.woff2 rename to static/fonts/roboto-v18-latin-500.woff2 diff --git a/fonts/roboto-v18-latin-500italic.eot b/static/fonts/roboto-v18-latin-500italic.eot similarity index 100% rename from fonts/roboto-v18-latin-500italic.eot rename to static/fonts/roboto-v18-latin-500italic.eot diff --git a/fonts/roboto-v18-latin-500italic.svg b/static/fonts/roboto-v18-latin-500italic.svg similarity index 100% rename from fonts/roboto-v18-latin-500italic.svg rename to static/fonts/roboto-v18-latin-500italic.svg diff --git a/fonts/roboto-v18-latin-500italic.ttf b/static/fonts/roboto-v18-latin-500italic.ttf similarity index 100% rename from fonts/roboto-v18-latin-500italic.ttf rename to static/fonts/roboto-v18-latin-500italic.ttf diff --git a/fonts/roboto-v18-latin-500italic.woff b/static/fonts/roboto-v18-latin-500italic.woff similarity index 100% rename from fonts/roboto-v18-latin-500italic.woff rename to static/fonts/roboto-v18-latin-500italic.woff diff --git a/fonts/roboto-v18-latin-500italic.woff2 b/static/fonts/roboto-v18-latin-500italic.woff2 similarity index 100% rename from fonts/roboto-v18-latin-500italic.woff2 rename to static/fonts/roboto-v18-latin-500italic.woff2 diff --git a/fonts/roboto-v18-latin-700.eot b/static/fonts/roboto-v18-latin-700.eot similarity index 100% rename from fonts/roboto-v18-latin-700.eot rename to static/fonts/roboto-v18-latin-700.eot diff --git a/fonts/roboto-v18-latin-700.svg b/static/fonts/roboto-v18-latin-700.svg similarity index 100% rename from fonts/roboto-v18-latin-700.svg rename to static/fonts/roboto-v18-latin-700.svg diff --git a/fonts/roboto-v18-latin-700.ttf b/static/fonts/roboto-v18-latin-700.ttf similarity index 100% rename from fonts/roboto-v18-latin-700.ttf rename to static/fonts/roboto-v18-latin-700.ttf diff --git a/fonts/roboto-v18-latin-700.woff b/static/fonts/roboto-v18-latin-700.woff similarity index 100% rename from fonts/roboto-v18-latin-700.woff rename to static/fonts/roboto-v18-latin-700.woff diff --git a/fonts/roboto-v18-latin-700.woff2 b/static/fonts/roboto-v18-latin-700.woff2 similarity index 100% rename from fonts/roboto-v18-latin-700.woff2 rename to static/fonts/roboto-v18-latin-700.woff2 diff --git a/fonts/roboto-v18-latin-700italic.eot b/static/fonts/roboto-v18-latin-700italic.eot similarity index 100% rename from fonts/roboto-v18-latin-700italic.eot rename to static/fonts/roboto-v18-latin-700italic.eot diff --git a/fonts/roboto-v18-latin-700italic.svg b/static/fonts/roboto-v18-latin-700italic.svg similarity index 100% rename from fonts/roboto-v18-latin-700italic.svg rename to static/fonts/roboto-v18-latin-700italic.svg diff --git a/fonts/roboto-v18-latin-700italic.ttf b/static/fonts/roboto-v18-latin-700italic.ttf similarity index 100% rename from fonts/roboto-v18-latin-700italic.ttf rename to static/fonts/roboto-v18-latin-700italic.ttf diff --git a/fonts/roboto-v18-latin-700italic.woff b/static/fonts/roboto-v18-latin-700italic.woff similarity index 100% rename from fonts/roboto-v18-latin-700italic.woff rename to static/fonts/roboto-v18-latin-700italic.woff diff --git a/fonts/roboto-v18-latin-700italic.woff2 b/static/fonts/roboto-v18-latin-700italic.woff2 similarity index 100% rename from fonts/roboto-v18-latin-700italic.woff2 rename to static/fonts/roboto-v18-latin-700italic.woff2 diff --git a/fonts/roboto-v18-latin-900.eot b/static/fonts/roboto-v18-latin-900.eot similarity index 100% rename from fonts/roboto-v18-latin-900.eot rename to static/fonts/roboto-v18-latin-900.eot diff --git a/fonts/roboto-v18-latin-900.svg b/static/fonts/roboto-v18-latin-900.svg similarity index 100% rename from fonts/roboto-v18-latin-900.svg rename to static/fonts/roboto-v18-latin-900.svg diff --git a/fonts/roboto-v18-latin-900.ttf b/static/fonts/roboto-v18-latin-900.ttf similarity index 100% rename from fonts/roboto-v18-latin-900.ttf rename to static/fonts/roboto-v18-latin-900.ttf diff --git a/fonts/roboto-v18-latin-900.woff b/static/fonts/roboto-v18-latin-900.woff similarity index 100% rename from fonts/roboto-v18-latin-900.woff rename to static/fonts/roboto-v18-latin-900.woff diff --git a/fonts/roboto-v18-latin-900.woff2 b/static/fonts/roboto-v18-latin-900.woff2 similarity index 100% rename from fonts/roboto-v18-latin-900.woff2 rename to static/fonts/roboto-v18-latin-900.woff2 diff --git a/fonts/roboto-v18-latin-900italic.eot b/static/fonts/roboto-v18-latin-900italic.eot similarity index 100% rename from fonts/roboto-v18-latin-900italic.eot rename to static/fonts/roboto-v18-latin-900italic.eot diff --git a/fonts/roboto-v18-latin-900italic.svg b/static/fonts/roboto-v18-latin-900italic.svg similarity index 100% rename from fonts/roboto-v18-latin-900italic.svg rename to static/fonts/roboto-v18-latin-900italic.svg diff --git a/fonts/roboto-v18-latin-900italic.ttf b/static/fonts/roboto-v18-latin-900italic.ttf similarity index 100% rename from fonts/roboto-v18-latin-900italic.ttf rename to static/fonts/roboto-v18-latin-900italic.ttf diff --git a/fonts/roboto-v18-latin-900italic.woff b/static/fonts/roboto-v18-latin-900italic.woff similarity index 100% rename from fonts/roboto-v18-latin-900italic.woff rename to static/fonts/roboto-v18-latin-900italic.woff diff --git a/fonts/roboto-v18-latin-900italic.woff2 b/static/fonts/roboto-v18-latin-900italic.woff2 similarity index 100% rename from fonts/roboto-v18-latin-900italic.woff2 rename to static/fonts/roboto-v18-latin-900italic.woff2 diff --git a/fonts/roboto-v18-latin-italic.eot b/static/fonts/roboto-v18-latin-italic.eot similarity index 100% rename from fonts/roboto-v18-latin-italic.eot rename to static/fonts/roboto-v18-latin-italic.eot diff --git a/fonts/roboto-v18-latin-italic.svg b/static/fonts/roboto-v18-latin-italic.svg similarity index 100% rename from fonts/roboto-v18-latin-italic.svg rename to static/fonts/roboto-v18-latin-italic.svg diff --git a/fonts/roboto-v18-latin-italic.ttf b/static/fonts/roboto-v18-latin-italic.ttf similarity index 100% rename from fonts/roboto-v18-latin-italic.ttf rename to static/fonts/roboto-v18-latin-italic.ttf diff --git a/fonts/roboto-v18-latin-italic.woff b/static/fonts/roboto-v18-latin-italic.woff similarity index 100% rename from fonts/roboto-v18-latin-italic.woff rename to static/fonts/roboto-v18-latin-italic.woff diff --git a/fonts/roboto-v18-latin-italic.woff2 b/static/fonts/roboto-v18-latin-italic.woff2 similarity index 100% rename from fonts/roboto-v18-latin-italic.woff2 rename to static/fonts/roboto-v18-latin-italic.woff2 diff --git a/fonts/roboto-v18-latin-regular.eot b/static/fonts/roboto-v18-latin-regular.eot similarity index 100% rename from fonts/roboto-v18-latin-regular.eot rename to static/fonts/roboto-v18-latin-regular.eot diff --git a/fonts/roboto-v18-latin-regular.svg b/static/fonts/roboto-v18-latin-regular.svg similarity index 100% rename from fonts/roboto-v18-latin-regular.svg rename to static/fonts/roboto-v18-latin-regular.svg diff --git a/fonts/roboto-v18-latin-regular.ttf b/static/fonts/roboto-v18-latin-regular.ttf similarity index 100% rename from fonts/roboto-v18-latin-regular.ttf rename to static/fonts/roboto-v18-latin-regular.ttf diff --git a/fonts/roboto-v18-latin-regular.woff b/static/fonts/roboto-v18-latin-regular.woff similarity index 100% rename from fonts/roboto-v18-latin-regular.woff rename to static/fonts/roboto-v18-latin-regular.woff diff --git a/fonts/roboto-v18-latin-regular.woff2 b/static/fonts/roboto-v18-latin-regular.woff2 similarity index 100% rename from fonts/roboto-v18-latin-regular.woff2 rename to static/fonts/roboto-v18-latin-regular.woff2 diff --git a/images/CaseStudy_amadeus_banner1.jpg b/static/images/CaseStudy_amadeus_banner1.jpg similarity index 100% rename from images/CaseStudy_amadeus_banner1.jpg rename to static/images/CaseStudy_amadeus_banner1.jpg diff --git a/images/CaseStudy_amadeus_banner3.jpg b/static/images/CaseStudy_amadeus_banner3.jpg similarity index 100% rename from images/CaseStudy_amadeus_banner3.jpg rename to static/images/CaseStudy_amadeus_banner3.jpg diff --git a/images/CaseStudy_amadeus_banner4.jpg b/static/images/CaseStudy_amadeus_banner4.jpg similarity index 100% rename from images/CaseStudy_amadeus_banner4.jpg rename to static/images/CaseStudy_amadeus_banner4.jpg diff --git a/images/CaseStudy_amadeus_banner_mobile.jpg b/static/images/CaseStudy_amadeus_banner_mobile.jpg similarity index 100% rename from images/CaseStudy_amadeus_banner_mobile.jpg rename to static/images/CaseStudy_amadeus_banner_mobile.jpg diff --git a/images/CaseStudy_ancestry_banner1.jpg b/static/images/CaseStudy_ancestry_banner1.jpg similarity index 100% rename from images/CaseStudy_ancestry_banner1.jpg rename to static/images/CaseStudy_ancestry_banner1.jpg diff --git a/images/CaseStudy_ancestry_banner3.jpg b/static/images/CaseStudy_ancestry_banner3.jpg similarity index 100% rename from images/CaseStudy_ancestry_banner3.jpg rename to static/images/CaseStudy_ancestry_banner3.jpg diff --git a/images/CaseStudy_ancestry_banner4.jpg b/static/images/CaseStudy_ancestry_banner4.jpg similarity index 100% rename from images/CaseStudy_ancestry_banner4.jpg rename to static/images/CaseStudy_ancestry_banner4.jpg diff --git a/images/CaseStudy_blablacar_banner1.jpg b/static/images/CaseStudy_blablacar_banner1.jpg similarity index 100% rename from images/CaseStudy_blablacar_banner1.jpg rename to static/images/CaseStudy_blablacar_banner1.jpg diff --git a/images/CaseStudy_blablacar_banner1_mobile.jpg b/static/images/CaseStudy_blablacar_banner1_mobile.jpg similarity index 100% rename from images/CaseStudy_blablacar_banner1_mobile.jpg rename to static/images/CaseStudy_blablacar_banner1_mobile.jpg diff --git a/images/CaseStudy_blablacar_banner3.jpg b/static/images/CaseStudy_blablacar_banner3.jpg similarity index 100% rename from images/CaseStudy_blablacar_banner3.jpg rename to static/images/CaseStudy_blablacar_banner3.jpg diff --git a/images/CaseStudy_blablacar_banner4.jpg b/static/images/CaseStudy_blablacar_banner4.jpg similarity index 100% rename from images/CaseStudy_blablacar_banner4.jpg rename to static/images/CaseStudy_blablacar_banner4.jpg diff --git a/images/CaseStudy_blackrock_banner1.jpg b/static/images/CaseStudy_blackrock_banner1.jpg similarity index 100% rename from images/CaseStudy_blackrock_banner1.jpg rename to static/images/CaseStudy_blackrock_banner1.jpg diff --git a/images/CaseStudy_blackrock_banner3.jpg b/static/images/CaseStudy_blackrock_banner3.jpg similarity index 100% rename from images/CaseStudy_blackrock_banner3.jpg rename to static/images/CaseStudy_blackrock_banner3.jpg diff --git a/images/CaseStudy_blackrock_banner4.jpg b/static/images/CaseStudy_blackrock_banner4.jpg similarity index 100% rename from images/CaseStudy_blackrock_banner4.jpg rename to static/images/CaseStudy_blackrock_banner4.jpg diff --git a/images/CaseStudy_box_banner1.jpg b/static/images/CaseStudy_box_banner1.jpg similarity index 100% rename from images/CaseStudy_box_banner1.jpg rename to static/images/CaseStudy_box_banner1.jpg diff --git a/images/CaseStudy_box_banner3.jpg b/static/images/CaseStudy_box_banner3.jpg similarity index 100% rename from images/CaseStudy_box_banner3.jpg rename to static/images/CaseStudy_box_banner3.jpg diff --git a/images/CaseStudy_box_banner4.jpg b/static/images/CaseStudy_box_banner4.jpg similarity index 100% rename from images/CaseStudy_box_banner4.jpg rename to static/images/CaseStudy_box_banner4.jpg diff --git a/images/CaseStudy_buffer_banner1.jpg b/static/images/CaseStudy_buffer_banner1.jpg similarity index 100% rename from images/CaseStudy_buffer_banner1.jpg rename to static/images/CaseStudy_buffer_banner1.jpg diff --git a/images/CaseStudy_buffer_banner3.jpg b/static/images/CaseStudy_buffer_banner3.jpg similarity index 100% rename from images/CaseStudy_buffer_banner3.jpg rename to static/images/CaseStudy_buffer_banner3.jpg diff --git a/images/CaseStudy_buffer_banner4.jpg b/static/images/CaseStudy_buffer_banner4.jpg similarity index 100% rename from images/CaseStudy_buffer_banner4.jpg rename to static/images/CaseStudy_buffer_banner4.jpg diff --git a/images/CaseStudy_crowdfire_banner1.jpg b/static/images/CaseStudy_crowdfire_banner1.jpg similarity index 100% rename from images/CaseStudy_crowdfire_banner1.jpg rename to static/images/CaseStudy_crowdfire_banner1.jpg diff --git a/images/CaseStudy_crowdfire_banner3.jpg b/static/images/CaseStudy_crowdfire_banner3.jpg similarity index 100% rename from images/CaseStudy_crowdfire_banner3.jpg rename to static/images/CaseStudy_crowdfire_banner3.jpg diff --git a/images/CaseStudy_crowdfire_banner4.jpg b/static/images/CaseStudy_crowdfire_banner4.jpg similarity index 100% rename from images/CaseStudy_crowdfire_banner4.jpg rename to static/images/CaseStudy_crowdfire_banner4.jpg diff --git a/images/CaseStudy_golfnow_banner1.jpg b/static/images/CaseStudy_golfnow_banner1.jpg similarity index 100% rename from images/CaseStudy_golfnow_banner1.jpg rename to static/images/CaseStudy_golfnow_banner1.jpg diff --git a/images/CaseStudy_golfnow_banner3.jpg b/static/images/CaseStudy_golfnow_banner3.jpg similarity index 100% rename from images/CaseStudy_golfnow_banner3.jpg rename to static/images/CaseStudy_golfnow_banner3.jpg diff --git a/images/CaseStudy_golfnow_banner4.jpg b/static/images/CaseStudy_golfnow_banner4.jpg similarity index 100% rename from images/CaseStudy_golfnow_banner4.jpg rename to static/images/CaseStudy_golfnow_banner4.jpg diff --git a/images/CaseStudy_haufegroup_banner1.jpg b/static/images/CaseStudy_haufegroup_banner1.jpg similarity index 100% rename from images/CaseStudy_haufegroup_banner1.jpg rename to static/images/CaseStudy_haufegroup_banner1.jpg diff --git a/images/CaseStudy_haufegroup_banner3.jpg b/static/images/CaseStudy_haufegroup_banner3.jpg similarity index 100% rename from images/CaseStudy_haufegroup_banner3.jpg rename to static/images/CaseStudy_haufegroup_banner3.jpg diff --git a/images/CaseStudy_haufegroup_banner4.jpg b/static/images/CaseStudy_haufegroup_banner4.jpg similarity index 100% rename from images/CaseStudy_haufegroup_banner4.jpg rename to static/images/CaseStudy_haufegroup_banner4.jpg diff --git a/images/CaseStudy_huawei_banner1.jpg b/static/images/CaseStudy_huawei_banner1.jpg similarity index 100% rename from images/CaseStudy_huawei_banner1.jpg rename to static/images/CaseStudy_huawei_banner1.jpg diff --git a/images/CaseStudy_huawei_banner3.jpg b/static/images/CaseStudy_huawei_banner3.jpg similarity index 100% rename from images/CaseStudy_huawei_banner3.jpg rename to static/images/CaseStudy_huawei_banner3.jpg diff --git a/images/CaseStudy_huawei_banner4.jpg b/static/images/CaseStudy_huawei_banner4.jpg similarity index 100% rename from images/CaseStudy_huawei_banner4.jpg rename to static/images/CaseStudy_huawei_banner4.jpg diff --git a/images/CaseStudy_peardeck_banner1.jpg b/static/images/CaseStudy_peardeck_banner1.jpg similarity index 100% rename from images/CaseStudy_peardeck_banner1.jpg rename to static/images/CaseStudy_peardeck_banner1.jpg diff --git a/images/CaseStudy_peardeck_banner2.jpg b/static/images/CaseStudy_peardeck_banner2.jpg similarity index 100% rename from images/CaseStudy_peardeck_banner2.jpg rename to static/images/CaseStudy_peardeck_banner2.jpg diff --git a/images/CaseStudy_peardeck_banner3.jpg b/static/images/CaseStudy_peardeck_banner3.jpg similarity index 100% rename from images/CaseStudy_peardeck_banner3.jpg rename to static/images/CaseStudy_peardeck_banner3.jpg diff --git a/images/CaseStudy_squarespace_banner1.jpg b/static/images/CaseStudy_squarespace_banner1.jpg similarity index 100% rename from images/CaseStudy_squarespace_banner1.jpg rename to static/images/CaseStudy_squarespace_banner1.jpg diff --git a/images/CaseStudy_squarespace_banner3.jpg b/static/images/CaseStudy_squarespace_banner3.jpg similarity index 100% rename from images/CaseStudy_squarespace_banner3.jpg rename to static/images/CaseStudy_squarespace_banner3.jpg diff --git a/images/CaseStudy_squarespace_banner4.jpg b/static/images/CaseStudy_squarespace_banner4.jpg similarity index 100% rename from images/CaseStudy_squarespace_banner4.jpg rename to static/images/CaseStudy_squarespace_banner4.jpg diff --git a/images/CaseStudy_wink_banner1.jpg b/static/images/CaseStudy_wink_banner1.jpg similarity index 100% rename from images/CaseStudy_wink_banner1.jpg rename to static/images/CaseStudy_wink_banner1.jpg diff --git a/images/CaseStudy_wink_banner3.jpg b/static/images/CaseStudy_wink_banner3.jpg similarity index 100% rename from images/CaseStudy_wink_banner3.jpg rename to static/images/CaseStudy_wink_banner3.jpg diff --git a/images/CaseStudy_wink_banner4.jpg b/static/images/CaseStudy_wink_banner4.jpg similarity index 100% rename from images/CaseStudy_wink_banner4.jpg rename to static/images/CaseStudy_wink_banner4.jpg diff --git a/images/CaseStudy_zalando_banner1.jpg b/static/images/CaseStudy_zalando_banner1.jpg similarity index 100% rename from images/CaseStudy_zalando_banner1.jpg rename to static/images/CaseStudy_zalando_banner1.jpg diff --git a/images/CaseStudy_zalando_banner3.jpg b/static/images/CaseStudy_zalando_banner3.jpg similarity index 100% rename from images/CaseStudy_zalando_banner3.jpg rename to static/images/CaseStudy_zalando_banner3.jpg diff --git a/images/CaseStudy_zalando_banner4.jpg b/static/images/CaseStudy_zalando_banner4.jpg similarity index 100% rename from images/CaseStudy_zalando_banner4.jpg rename to static/images/CaseStudy_zalando_banner4.jpg diff --git a/images/KubeCon_EU_Community.jpg b/static/images/KubeCon_EU_Community.jpg similarity index 100% rename from images/KubeCon_EU_Community.jpg rename to static/images/KubeCon_EU_Community.jpg diff --git a/images/KubeCon_NA_Community.jpg b/static/images/KubeCon_NA_Community.jpg similarity index 100% rename from images/KubeCon_NA_Community.jpg rename to static/images/KubeCon_NA_Community.jpg diff --git a/images/KubeCon_NA_Community.png b/static/images/KubeCon_NA_Community.png similarity index 100% rename from images/KubeCon_NA_Community.png rename to static/images/KubeCon_NA_Community.png diff --git a/images/amadeus.png b/static/images/amadeus.png similarity index 100% rename from images/amadeus.png rename to static/images/amadeus.png diff --git a/images/amadeus_logo.png b/static/images/amadeus_logo.png similarity index 100% rename from images/amadeus_logo.png rename to static/images/amadeus_logo.png diff --git a/images/blablacar_logo.png b/static/images/blablacar_logo.png similarity index 100% rename from images/blablacar_logo.png rename to static/images/blablacar_logo.png diff --git a/images/blackrock_logo.png b/static/images/blackrock_logo.png similarity index 100% rename from images/blackrock_logo.png rename to static/images/blackrock_logo.png diff --git a/images/blocks.png b/static/images/blocks.png similarity index 100% rename from images/blocks.png rename to static/images/blocks.png diff --git a/images/blog-logging/2018-04-10-container-storage-interface-beta/csi-kubernetes.png b/static/images/blog-logging/2018-04-10-container-storage-interface-beta/csi-kubernetes.png similarity index 100% rename from images/blog-logging/2018-04-10-container-storage-interface-beta/csi-kubernetes.png rename to static/images/blog-logging/2018-04-10-container-storage-interface-beta/csi-kubernetes.png diff --git a/images/blog-logging/2018-04-10-container-storage-interface-beta/csi-logo.png b/static/images/blog-logging/2018-04-10-container-storage-interface-beta/csi-logo.png similarity index 100% rename from images/blog-logging/2018-04-10-container-storage-interface-beta/csi-logo.png rename to static/images/blog-logging/2018-04-10-container-storage-interface-beta/csi-logo.png diff --git a/images/blog-logging/2018-04-24-open-source-charts-2017/most-discussed.png b/static/images/blog-logging/2018-04-24-open-source-charts-2017/most-discussed.png similarity index 100% rename from images/blog-logging/2018-04-24-open-source-charts-2017/most-discussed.png rename to static/images/blog-logging/2018-04-24-open-source-charts-2017/most-discussed.png diff --git a/images/blog-logging/2018-04-24-open-source-charts-2017/most-reviews.png b/static/images/blog-logging/2018-04-24-open-source-charts-2017/most-reviews.png similarity index 100% rename from images/blog-logging/2018-04-24-open-source-charts-2017/most-reviews.png rename to static/images/blog-logging/2018-04-24-open-source-charts-2017/most-reviews.png diff --git a/images/blog-logging/diagrams/27gf-counter.png b/static/images/blog-logging/diagrams/27gf-counter.png similarity index 100% rename from images/blog-logging/diagrams/27gf-counter.png rename to static/images/blog-logging/diagrams/27gf-counter.png diff --git a/images/blog-logging/diagrams/cloud-logging.png b/static/images/blog-logging/diagrams/cloud-logging.png similarity index 100% rename from images/blog-logging/diagrams/cloud-logging.png rename to static/images/blog-logging/diagrams/cloud-logging.png diff --git a/images/blog/2018-03-01-cncf-color.svg b/static/images/blog/2018-03-01-cncf-color.svg similarity index 100% rename from images/blog/2018-03-01-cncf-color.svg rename to static/images/blog/2018-03-01-cncf-color.svg diff --git a/images/blog/OWNERS b/static/images/blog/OWNERS similarity index 100% rename from images/blog/OWNERS rename to static/images/blog/OWNERS diff --git a/images/blog/survey-results/2018-application-survey/custom-tooling.png b/static/images/blog/survey-results/2018-application-survey/custom-tooling.png similarity index 100% rename from images/blog/survey-results/2018-application-survey/custom-tooling.png rename to static/images/blog/survey-results/2018-application-survey/custom-tooling.png diff --git a/images/blog/survey-results/2018-application-survey/minikube-os-usage.png b/static/images/blog/survey-results/2018-application-survey/minikube-os-usage.png similarity index 100% rename from images/blog/survey-results/2018-application-survey/minikube-os-usage.png rename to static/images/blog/survey-results/2018-application-survey/minikube-os-usage.png diff --git a/images/blog/survey-results/2018-application-survey/tool-manage-apps.png b/static/images/blog/survey-results/2018-application-survey/tool-manage-apps.png similarity index 100% rename from images/blog/survey-results/2018-application-survey/tool-manage-apps.png rename to static/images/blog/survey-results/2018-application-survey/tool-manage-apps.png diff --git a/images/box_logo.png b/static/images/box_logo.png similarity index 100% rename from images/box_logo.png rename to static/images/box_logo.png diff --git a/images/buffer.png b/static/images/buffer.png similarity index 100% rename from images/buffer.png rename to static/images/buffer.png diff --git a/images/case_studies/Video-Clip-Box.png b/static/images/case_studies/Video-Clip-Box.png similarity index 100% rename from images/case_studies/Video-Clip-Box.png rename to static/images/case_studies/Video-Clip-Box.png diff --git a/images/case_studies/amadeus.png b/static/images/case_studies/amadeus.png similarity index 100% rename from images/case_studies/amadeus.png rename to static/images/case_studies/amadeus.png diff --git a/images/case_studies/amadeus_feature.png b/static/images/case_studies/amadeus_feature.png similarity index 100% rename from images/case_studies/amadeus_feature.png rename to static/images/case_studies/amadeus_feature.png diff --git a/images/case_studies/ancestry-logo.png b/static/images/case_studies/ancestry-logo.png similarity index 100% rename from images/case_studies/ancestry-logo.png rename to static/images/case_studies/ancestry-logo.png diff --git a/images/case_studies/ancestry.png b/static/images/case_studies/ancestry.png similarity index 100% rename from images/case_studies/ancestry.png rename to static/images/case_studies/ancestry.png diff --git a/images/case_studies/blablacar-logo.png b/static/images/case_studies/blablacar-logo.png similarity index 100% rename from images/case_studies/blablacar-logo.png rename to static/images/case_studies/blablacar-logo.png diff --git a/images/case_studies/blablacar.png b/static/images/case_studies/blablacar.png similarity index 100% rename from images/case_studies/blablacar.png rename to static/images/case_studies/blablacar.png diff --git a/images/case_studies/blackrock.png b/static/images/case_studies/blackrock.png similarity index 100% rename from images/case_studies/blackrock.png rename to static/images/case_studies/blackrock.png diff --git a/images/case_studies/blackrock2.png b/static/images/case_studies/blackrock2.png similarity index 100% rename from images/case_studies/blackrock2.png rename to static/images/case_studies/blackrock2.png diff --git a/images/case_studies/box-small.png b/static/images/case_studies/box-small.png similarity index 100% rename from images/case_studies/box-small.png rename to static/images/case_studies/box-small.png diff --git a/images/case_studies/box.png b/static/images/case_studies/box.png similarity index 100% rename from images/case_studies/box.png rename to static/images/case_studies/box.png diff --git a/images/case_studies/box_logo.png b/static/images/case_studies/box_logo.png similarity index 100% rename from images/case_studies/box_logo.png rename to static/images/case_studies/box_logo.png diff --git a/images/case_studies/buffer.png b/static/images/case_studies/buffer.png similarity index 100% rename from images/case_studies/buffer.png rename to static/images/case_studies/buffer.png diff --git a/images/case_studies/buffer_logo.png b/static/images/case_studies/buffer_logo.png similarity index 100% rename from images/case_studies/buffer_logo.png rename to static/images/case_studies/buffer_logo.png diff --git a/images/case_studies/ccp.png b/static/images/case_studies/ccp.png similarity index 100% rename from images/case_studies/ccp.png rename to static/images/case_studies/ccp.png diff --git a/images/case_studies/comcast_logo.png b/static/images/case_studies/comcast_logo.png similarity index 100% rename from images/case_studies/comcast_logo.png rename to static/images/case_studies/comcast_logo.png diff --git a/images/case_studies/concur.png b/static/images/case_studies/concur.png similarity index 100% rename from images/case_studies/concur.png rename to static/images/case_studies/concur.png diff --git a/images/case_studies/crowdfire_feature.png b/static/images/case_studies/crowdfire_feature.png similarity index 100% rename from images/case_studies/crowdfire_feature.png rename to static/images/case_studies/crowdfire_feature.png diff --git a/images/case_studies/ebay.png b/static/images/case_studies/ebay.png similarity index 100% rename from images/case_studies/ebay.png rename to static/images/case_studies/ebay.png diff --git a/images/case_studies/ebay_logo.png b/static/images/case_studies/ebay_logo.png similarity index 100% rename from images/case_studies/ebay_logo.png rename to static/images/case_studies/ebay_logo.png diff --git a/images/case_studies/golfnow.png b/static/images/case_studies/golfnow.png similarity index 100% rename from images/case_studies/golfnow.png rename to static/images/case_studies/golfnow.png diff --git a/images/case_studies/golfnow_logo.png b/static/images/case_studies/golfnow_logo.png similarity index 100% rename from images/case_studies/golfnow_logo.png rename to static/images/case_studies/golfnow_logo.png diff --git a/images/case_studies/gs.png b/static/images/case_studies/gs.png similarity index 100% rename from images/case_studies/gs.png rename to static/images/case_studies/gs.png diff --git a/images/case_studies/haufegroup_logo.png b/static/images/case_studies/haufegroup_logo.png similarity index 100% rename from images/case_studies/haufegroup_logo.png rename to static/images/case_studies/haufegroup_logo.png diff --git a/images/case_studies/haufegroup_logo_feature.png b/static/images/case_studies/haufegroup_logo_feature.png similarity index 100% rename from images/case_studies/haufegroup_logo_feature.png rename to static/images/case_studies/haufegroup_logo_feature.png diff --git a/images/case_studies/homeoffice.png b/static/images/case_studies/homeoffice.png similarity index 100% rename from images/case_studies/homeoffice.png rename to static/images/case_studies/homeoffice.png diff --git a/images/case_studies/huawei.png b/static/images/case_studies/huawei.png similarity index 100% rename from images/case_studies/huawei.png rename to static/images/case_studies/huawei.png diff --git a/images/case_studies/huawei_feature.png b/static/images/case_studies/huawei_feature.png similarity index 100% rename from images/case_studies/huawei_feature.png rename to static/images/case_studies/huawei_feature.png diff --git a/images/case_studies/jd.png b/static/images/case_studies/jd.png similarity index 100% rename from images/case_studies/jd.png rename to static/images/case_studies/jd.png diff --git a/images/case_studies/liveperson.png b/static/images/case_studies/liveperson.png similarity index 100% rename from images/case_studies/liveperson.png rename to static/images/case_studies/liveperson.png diff --git a/images/case_studies/monzo_logo.png b/static/images/case_studies/monzo_logo.png similarity index 100% rename from images/case_studies/monzo_logo.png rename to static/images/case_studies/monzo_logo.png diff --git a/images/case_studies/nyt.png b/static/images/case_studies/nyt.png similarity index 100% rename from images/case_studies/nyt.png rename to static/images/case_studies/nyt.png diff --git a/images/case_studies/openai.png b/static/images/case_studies/openai.png similarity index 100% rename from images/case_studies/openai.png rename to static/images/case_studies/openai.png diff --git a/images/case_studies/peardeck.png b/static/images/case_studies/peardeck.png similarity index 100% rename from images/case_studies/peardeck.png rename to static/images/case_studies/peardeck.png diff --git a/images/case_studies/peardeck_logo.png b/static/images/case_studies/peardeck_logo.png similarity index 100% rename from images/case_studies/peardeck_logo.png rename to static/images/case_studies/peardeck_logo.png diff --git a/images/case_studies/pearson.png b/static/images/case_studies/pearson.png similarity index 100% rename from images/case_studies/pearson.png rename to static/images/case_studies/pearson.png diff --git a/images/case_studies/pearson_logo.png b/static/images/case_studies/pearson_logo.png similarity index 100% rename from images/case_studies/pearson_logo.png rename to static/images/case_studies/pearson_logo.png diff --git a/images/case_studies/philips_logo.png b/static/images/case_studies/philips_logo.png similarity index 100% rename from images/case_studies/philips_logo.png rename to static/images/case_studies/philips_logo.png diff --git a/images/case_studies/pokemon_go_logo.png b/static/images/case_studies/pokemon_go_logo.png similarity index 100% rename from images/case_studies/pokemon_go_logo.png rename to static/images/case_studies/pokemon_go_logo.png diff --git a/images/case_studies/sap.png b/static/images/case_studies/sap.png similarity index 100% rename from images/case_studies/sap.png rename to static/images/case_studies/sap.png diff --git a/images/case_studies/sap_small.png b/static/images/case_studies/sap_small.png similarity index 100% rename from images/case_studies/sap_small.png rename to static/images/case_studies/sap_small.png diff --git a/images/case_studies/sds.png b/static/images/case_studies/sds.png similarity index 100% rename from images/case_studies/sds.png rename to static/images/case_studies/sds.png diff --git a/images/case_studies/soundcloud.png b/static/images/case_studies/soundcloud.png similarity index 100% rename from images/case_studies/soundcloud.png rename to static/images/case_studies/soundcloud.png diff --git a/images/case_studies/squarespace_feature.png b/static/images/case_studies/squarespace_feature.png similarity index 100% rename from images/case_studies/squarespace_feature.png rename to static/images/case_studies/squarespace_feature.png diff --git a/images/case_studies/story.png b/static/images/case_studies/story.png similarity index 100% rename from images/case_studies/story.png rename to static/images/case_studies/story.png diff --git a/images/case_studies/video_thumb.jpg b/static/images/case_studies/video_thumb.jpg similarity index 100% rename from images/case_studies/video_thumb.jpg rename to static/images/case_studies/video_thumb.jpg diff --git a/images/case_studies/video_thumb1.png b/static/images/case_studies/video_thumb1.png similarity index 100% rename from images/case_studies/video_thumb1.png rename to static/images/case_studies/video_thumb1.png diff --git a/images/case_studies/wepay.png b/static/images/case_studies/wepay.png similarity index 100% rename from images/case_studies/wepay.png rename to static/images/case_studies/wepay.png diff --git a/images/case_studies/wikimedia.png b/static/images/case_studies/wikimedia.png similarity index 100% rename from images/case_studies/wikimedia.png rename to static/images/case_studies/wikimedia.png diff --git a/images/case_studies/wikimedia_logo.png b/static/images/case_studies/wikimedia_logo.png similarity index 100% rename from images/case_studies/wikimedia_logo.png rename to static/images/case_studies/wikimedia_logo.png diff --git a/images/case_studies/wink.png b/static/images/case_studies/wink.png similarity index 100% rename from images/case_studies/wink.png rename to static/images/case_studies/wink.png diff --git a/images/case_studies/wink_logo.png b/static/images/case_studies/wink_logo.png similarity index 100% rename from images/case_studies/wink_logo.png rename to static/images/case_studies/wink_logo.png diff --git a/images/case_studies/wmc.png b/static/images/case_studies/wmc.png similarity index 100% rename from images/case_studies/wmc.png rename to static/images/case_studies/wmc.png diff --git a/images/case_studies/yahooJapan_logo.png b/static/images/case_studies/yahooJapan_logo.png similarity index 100% rename from images/case_studies/yahooJapan_logo.png rename to static/images/case_studies/yahooJapan_logo.png diff --git a/images/case_studies/yahoojapan.png b/static/images/case_studies/yahoojapan.png similarity index 100% rename from images/case_studies/yahoojapan.png rename to static/images/case_studies/yahoojapan.png diff --git a/images/case_studies/zalando_feature.png b/static/images/case_studies/zalando_feature.png similarity index 100% rename from images/case_studies/zalando_feature.png rename to static/images/case_studies/zalando_feature.png diff --git a/images/case_studies/zulily.png b/static/images/case_studies/zulily.png similarity index 100% rename from images/case_studies/zulily.png rename to static/images/case_studies/zulily.png diff --git a/images/case_studies/zulily_logo.png b/static/images/case_studies/zulily_logo.png similarity index 100% rename from images/case_studies/zulily_logo.png rename to static/images/case_studies/zulily_logo.png diff --git a/images/community_logos/appformix_logo.png b/static/images/community_logos/appformix_logo.png similarity index 100% rename from images/community_logos/appformix_logo.png rename to static/images/community_logos/appformix_logo.png diff --git a/images/community_logos/apprenda_logo.png b/static/images/community_logos/apprenda_logo.png similarity index 100% rename from images/community_logos/apprenda_logo.png rename to static/images/community_logos/apprenda_logo.png diff --git a/images/community_logos/aqua_logo.png b/static/images/community_logos/aqua_logo.png similarity index 100% rename from images/community_logos/aqua_logo.png rename to static/images/community_logos/aqua_logo.png diff --git a/images/community_logos/box_logo.png b/static/images/community_logos/box_logo.png similarity index 100% rename from images/community_logos/box_logo.png rename to static/images/community_logos/box_logo.png diff --git a/images/community_logos/citrix_logo.png b/static/images/community_logos/citrix_logo.png similarity index 100% rename from images/community_logos/citrix_logo.png rename to static/images/community_logos/citrix_logo.png diff --git a/images/community_logos/core_os_logo.png b/static/images/community_logos/core_os_logo.png similarity index 100% rename from images/community_logos/core_os_logo.png rename to static/images/community_logos/core_os_logo.png diff --git a/images/community_logos/crunchy_data_logo.png b/static/images/community_logos/crunchy_data_logo.png similarity index 100% rename from images/community_logos/crunchy_data_logo.png rename to static/images/community_logos/crunchy_data_logo.png diff --git a/images/community_logos/datadog_logo.png b/static/images/community_logos/datadog_logo.png similarity index 100% rename from images/community_logos/datadog_logo.png rename to static/images/community_logos/datadog_logo.png diff --git a/images/community_logos/deis_logo.png b/static/images/community_logos/deis_logo.png similarity index 100% rename from images/community_logos/deis_logo.png rename to static/images/community_logos/deis_logo.png diff --git a/images/community_logos/distelli_logo.png b/static/images/community_logos/distelli_logo.png similarity index 100% rename from images/community_logos/distelli_logo.png rename to static/images/community_logos/distelli_logo.png diff --git a/images/community_logos/ebay_logo.png b/static/images/community_logos/ebay_logo.png similarity index 100% rename from images/community_logos/ebay_logo.png rename to static/images/community_logos/ebay_logo.png diff --git a/images/community_logos/elastickube_logo.png b/static/images/community_logos/elastickube_logo.png similarity index 100% rename from images/community_logos/elastickube_logo.png rename to static/images/community_logos/elastickube_logo.png diff --git a/images/community_logos/goldman_sachs_logo.png b/static/images/community_logos/goldman_sachs_logo.png similarity index 100% rename from images/community_logos/goldman_sachs_logo.png rename to static/images/community_logos/goldman_sachs_logo.png diff --git a/images/community_logos/ibm_logo.png b/static/images/community_logos/ibm_logo.png similarity index 100% rename from images/community_logos/ibm_logo.png rename to static/images/community_logos/ibm_logo.png diff --git a/images/community_logos/intel_logo.png b/static/images/community_logos/intel_logo.png similarity index 100% rename from images/community_logos/intel_logo.png rename to static/images/community_logos/intel_logo.png diff --git a/images/community_logos/kabam_logo.png b/static/images/community_logos/kabam_logo.png similarity index 100% rename from images/community_logos/kabam_logo.png rename to static/images/community_logos/kabam_logo.png diff --git a/images/community_logos/mesosphere_logo.png b/static/images/community_logos/mesosphere_logo.png similarity index 100% rename from images/community_logos/mesosphere_logo.png rename to static/images/community_logos/mesosphere_logo.png diff --git a/images/community_logos/mirantis_logo.png b/static/images/community_logos/mirantis_logo.png similarity index 100% rename from images/community_logos/mirantis_logo.png rename to static/images/community_logos/mirantis_logo.png diff --git a/images/community_logos/new_york_times_logo.png b/static/images/community_logos/new_york_times_logo.png similarity index 100% rename from images/community_logos/new_york_times_logo.png rename to static/images/community_logos/new_york_times_logo.png diff --git a/images/community_logos/nuage_network_logo.png b/static/images/community_logos/nuage_network_logo.png similarity index 100% rename from images/community_logos/nuage_network_logo.png rename to static/images/community_logos/nuage_network_logo.png diff --git a/images/community_logos/pearson_logo.png b/static/images/community_logos/pearson_logo.png similarity index 100% rename from images/community_logos/pearson_logo.png rename to static/images/community_logos/pearson_logo.png diff --git a/images/community_logos/platform9_logo.png b/static/images/community_logos/platform9_logo.png similarity index 100% rename from images/community_logos/platform9_logo.png rename to static/images/community_logos/platform9_logo.png diff --git a/images/community_logos/puppet_logo.png b/static/images/community_logos/puppet_logo.png similarity index 100% rename from images/community_logos/puppet_logo.png rename to static/images/community_logos/puppet_logo.png diff --git a/images/community_logos/rancher_logo.png b/static/images/community_logos/rancher_logo.png similarity index 100% rename from images/community_logos/rancher_logo.png rename to static/images/community_logos/rancher_logo.png diff --git a/images/community_logos/red_hat_logo.png b/static/images/community_logos/red_hat_logo.png similarity index 100% rename from images/community_logos/red_hat_logo.png rename to static/images/community_logos/red_hat_logo.png diff --git a/images/community_logos/soundcloud_logo.png b/static/images/community_logos/soundcloud_logo.png similarity index 100% rename from images/community_logos/soundcloud_logo.png rename to static/images/community_logos/soundcloud_logo.png diff --git a/images/community_logos/sysdig_cloud_logo.png b/static/images/community_logos/sysdig_cloud_logo.png similarity index 100% rename from images/community_logos/sysdig_cloud_logo.png rename to static/images/community_logos/sysdig_cloud_logo.png diff --git a/images/community_logos/sysdig_logo.png b/static/images/community_logos/sysdig_logo.png similarity index 100% rename from images/community_logos/sysdig_logo.png rename to static/images/community_logos/sysdig_logo.png diff --git a/images/community_logos/ubuntu_cannonical_logo.png b/static/images/community_logos/ubuntu_cannonical_logo.png similarity index 100% rename from images/community_logos/ubuntu_cannonical_logo.png rename to static/images/community_logos/ubuntu_cannonical_logo.png diff --git a/images/community_logos/viacom_logo.png b/static/images/community_logos/viacom_logo.png similarity index 100% rename from images/community_logos/viacom_logo.png rename to static/images/community_logos/viacom_logo.png diff --git a/images/community_logos/we_pay_logo.png b/static/images/community_logos/we_pay_logo.png similarity index 100% rename from images/community_logos/we_pay_logo.png rename to static/images/community_logos/we_pay_logo.png diff --git a/images/community_logos/wercker_logo.png b/static/images/community_logos/wercker_logo.png similarity index 100% rename from images/community_logos/wercker_logo.png rename to static/images/community_logos/wercker_logo.png diff --git a/images/community_logos/wikimedia_foundation_logo.png b/static/images/community_logos/wikimedia_foundation_logo.png similarity index 100% rename from images/community_logos/wikimedia_foundation_logo.png rename to static/images/community_logos/wikimedia_foundation_logo.png diff --git a/images/community_logos/wikimedia_logo.png b/static/images/community_logos/wikimedia_logo.png similarity index 100% rename from images/community_logos/wikimedia_logo.png rename to static/images/community_logos/wikimedia_logo.png diff --git a/images/community_logos/zulily_logo.png b/static/images/community_logos/zulily_logo.png similarity index 100% rename from images/community_logos/zulily_logo.png rename to static/images/community_logos/zulily_logo.png diff --git a/images/copycode.svg b/static/images/copycode.svg similarity index 100% rename from images/copycode.svg rename to static/images/copycode.svg diff --git a/images/crowdfire_logo.png b/static/images/crowdfire_logo.png similarity index 100% rename from images/crowdfire_logo.png rename to static/images/crowdfire_logo.png diff --git a/images/diamanti.png b/static/images/diamanti.png similarity index 100% rename from images/diamanti.png rename to static/images/diamanti.png diff --git a/images/docs/Kubemark_architecture.png b/static/images/docs/Kubemark_architecture.png similarity index 100% rename from images/docs/Kubemark_architecture.png rename to static/images/docs/Kubemark_architecture.png diff --git a/images/docs/Makefile b/static/images/docs/Makefile similarity index 100% rename from images/docs/Makefile rename to static/images/docs/Makefile diff --git a/images/docs/admin/access-control-overview.svg b/static/images/docs/admin/access-control-overview.svg similarity index 100% rename from images/docs/admin/access-control-overview.svg rename to static/images/docs/admin/access-control-overview.svg diff --git a/images/docs/admin/k8s_oidc_login.svg b/static/images/docs/admin/k8s_oidc_login.svg similarity index 100% rename from images/docs/admin/k8s_oidc_login.svg rename to static/images/docs/admin/k8s_oidc_login.svg diff --git a/images/docs/all-lines.png b/static/images/docs/all-lines.png similarity index 100% rename from images/docs/all-lines.png rename to static/images/docs/all-lines.png diff --git a/images/docs/architecture.png b/static/images/docs/architecture.png similarity index 100% rename from images/docs/architecture.png rename to static/images/docs/architecture.png diff --git a/images/docs/architecture.svg b/static/images/docs/architecture.svg similarity index 100% rename from images/docs/architecture.svg rename to static/images/docs/architecture.svg diff --git a/images/docs/bigquery-logging.png b/static/images/docs/bigquery-logging.png similarity index 100% rename from images/docs/bigquery-logging.png rename to static/images/docs/bigquery-logging.png diff --git a/images/docs/cadvisor.png b/static/images/docs/cadvisor.png similarity index 100% rename from images/docs/cadvisor.png rename to static/images/docs/cadvisor.png diff --git a/images/docs/cassandra.svg b/static/images/docs/cassandra.svg similarity index 100% rename from images/docs/cassandra.svg rename to static/images/docs/cassandra.svg diff --git a/images/docs/cloud-logging-console.png b/static/images/docs/cloud-logging-console.png similarity index 100% rename from images/docs/cloud-logging-console.png rename to static/images/docs/cloud-logging-console.png diff --git a/images/docs/diagram.png b/static/images/docs/diagram.png similarity index 100% rename from images/docs/diagram.png rename to static/images/docs/diagram.png diff --git a/images/docs/dynamic.png b/static/images/docs/dynamic.png similarity index 100% rename from images/docs/dynamic.png rename to static/images/docs/dynamic.png diff --git a/images/docs/es-browser.png b/static/images/docs/es-browser.png similarity index 100% rename from images/docs/es-browser.png rename to static/images/docs/es-browser.png diff --git a/images/docs/external_access.png b/static/images/docs/external_access.png similarity index 100% rename from images/docs/external_access.png rename to static/images/docs/external_access.png diff --git a/images/docs/federation-high-level-arch.png b/static/images/docs/federation-high-level-arch.png similarity index 100% rename from images/docs/federation-high-level-arch.png rename to static/images/docs/federation-high-level-arch.png diff --git a/images/docs/gcm.png b/static/images/docs/gcm.png similarity index 100% rename from images/docs/gcm.png rename to static/images/docs/gcm.png diff --git a/images/docs/git_workflow.png b/static/images/docs/git_workflow.png similarity index 100% rename from images/docs/git_workflow.png rename to static/images/docs/git_workflow.png diff --git a/images/docs/ha-master-gce.png b/static/images/docs/ha-master-gce.png similarity index 100% rename from images/docs/ha-master-gce.png rename to static/images/docs/ha-master-gce.png diff --git a/images/docs/ha.png b/static/images/docs/ha.png similarity index 100% rename from images/docs/ha.png rename to static/images/docs/ha.png diff --git a/images/docs/ha.svg b/static/images/docs/ha.svg similarity index 100% rename from images/docs/ha.svg rename to static/images/docs/ha.svg diff --git a/images/docs/horizontal-pod-autoscaler.png b/static/images/docs/horizontal-pod-autoscaler.png similarity index 100% rename from images/docs/horizontal-pod-autoscaler.png rename to static/images/docs/horizontal-pod-autoscaler.png diff --git a/images/docs/horizontal-pod-autoscaler.svg b/static/images/docs/horizontal-pod-autoscaler.svg similarity index 100% rename from images/docs/horizontal-pod-autoscaler.svg rename to static/images/docs/horizontal-pod-autoscaler.svg diff --git a/images/docs/influx.png b/static/images/docs/influx.png similarity index 100% rename from images/docs/influx.png rename to static/images/docs/influx.png diff --git a/images/docs/ip-masq.png b/static/images/docs/ip-masq.png similarity index 100% rename from images/docs/ip-masq.png rename to static/images/docs/ip-masq.png diff --git a/images/docs/k8s-docker.png b/static/images/docs/k8s-docker.png similarity index 100% rename from images/docs/k8s-docker.png rename to static/images/docs/k8s-docker.png diff --git a/images/docs/k8s-firewall.png b/static/images/docs/k8s-firewall.png similarity index 100% rename from images/docs/k8s-firewall.png rename to static/images/docs/k8s-firewall.png diff --git a/images/docs/k8s-guestbook.png b/static/images/docs/k8s-guestbook.png similarity index 100% rename from images/docs/k8s-guestbook.png rename to static/images/docs/k8s-guestbook.png diff --git a/images/docs/k8s-singlenode-docker.png b/static/images/docs/k8s-singlenode-docker.png similarity index 100% rename from images/docs/k8s-singlenode-docker.png rename to static/images/docs/k8s-singlenode-docker.png diff --git a/images/docs/kibana-logs.png b/static/images/docs/kibana-logs.png similarity index 100% rename from images/docs/kibana-logs.png rename to static/images/docs/kibana-logs.png diff --git a/images/docs/kibana.png b/static/images/docs/kibana.png similarity index 100% rename from images/docs/kibana.png rename to static/images/docs/kibana.png diff --git a/images/docs/kitten.jpg b/static/images/docs/kitten.jpg similarity index 100% rename from images/docs/kitten.jpg rename to static/images/docs/kitten.jpg diff --git a/images/docs/kubectl_drain.svg b/static/images/docs/kubectl_drain.svg similarity index 100% rename from images/docs/kubectl_drain.svg rename to static/images/docs/kubectl_drain.svg diff --git a/images/docs/kubectl_rollingupdate.svg b/static/images/docs/kubectl_rollingupdate.svg similarity index 100% rename from images/docs/kubectl_rollingupdate.svg rename to static/images/docs/kubectl_rollingupdate.svg diff --git a/images/docs/monitoring-architecture.png b/static/images/docs/monitoring-architecture.png similarity index 100% rename from images/docs/monitoring-architecture.png rename to static/images/docs/monitoring-architecture.png diff --git a/images/docs/nautilus.jpg b/static/images/docs/nautilus.jpg similarity index 100% rename from images/docs/nautilus.jpg rename to static/images/docs/nautilus.jpg diff --git a/images/docs/node-allocatable.png b/static/images/docs/node-allocatable.png similarity index 100% rename from images/docs/node-allocatable.png rename to static/images/docs/node-allocatable.png diff --git a/images/docs/ovs-networking.png b/static/images/docs/ovs-networking.png similarity index 100% rename from images/docs/ovs-networking.png rename to static/images/docs/ovs-networking.png diff --git a/images/docs/pleg.png b/static/images/docs/pleg.png similarity index 100% rename from images/docs/pleg.png rename to static/images/docs/pleg.png diff --git a/images/docs/pod-cache.png b/static/images/docs/pod-cache.png similarity index 100% rename from images/docs/pod-cache.png rename to static/images/docs/pod-cache.png diff --git a/images/docs/pod-overview.svg b/static/images/docs/pod-overview.svg similarity index 100% rename from images/docs/pod-overview.svg rename to static/images/docs/pod-overview.svg diff --git a/images/docs/pod.svg b/static/images/docs/pod.svg similarity index 100% rename from images/docs/pod.svg rename to static/images/docs/pod.svg diff --git a/images/docs/pods/single-container_1.ai b/static/images/docs/pods/single-container_1.ai similarity index 100% rename from images/docs/pods/single-container_1.ai rename to static/images/docs/pods/single-container_1.ai diff --git a/images/docs/pods/single-container_1.svg b/static/images/docs/pods/single-container_1.svg similarity index 100% rename from images/docs/pods/single-container_1.svg rename to static/images/docs/pods/single-container_1.svg diff --git a/images/docs/post-ccm-arch.png b/static/images/docs/post-ccm-arch.png similarity index 100% rename from images/docs/post-ccm-arch.png rename to static/images/docs/post-ccm-arch.png diff --git a/images/docs/pr_workflow.png b/static/images/docs/pr_workflow.png similarity index 100% rename from images/docs/pr_workflow.png rename to static/images/docs/pr_workflow.png diff --git a/images/docs/pre-ccm-arch.png b/static/images/docs/pre-ccm-arch.png similarity index 100% rename from images/docs/pre-ccm-arch.png rename to static/images/docs/pre-ccm-arch.png diff --git a/images/docs/redis.svg b/static/images/docs/redis.svg similarity index 100% rename from images/docs/redis.svg rename to static/images/docs/redis.svg diff --git a/images/docs/releasing.png b/static/images/docs/releasing.png similarity index 100% rename from images/docs/releasing.png rename to static/images/docs/releasing.png diff --git a/images/docs/releasing.svg b/static/images/docs/releasing.svg similarity index 100% rename from images/docs/releasing.svg rename to static/images/docs/releasing.svg diff --git a/images/docs/service-catalog-architecture.svg b/static/images/docs/service-catalog-architecture.svg similarity index 100% rename from images/docs/service-catalog-architecture.svg rename to static/images/docs/service-catalog-architecture.svg diff --git a/images/docs/service-catalog-bind.svg b/static/images/docs/service-catalog-bind.svg similarity index 100% rename from images/docs/service-catalog-bind.svg rename to static/images/docs/service-catalog-bind.svg diff --git a/images/docs/service-catalog-list.svg b/static/images/docs/service-catalog-list.svg similarity index 100% rename from images/docs/service-catalog-list.svg rename to static/images/docs/service-catalog-list.svg diff --git a/images/docs/service-catalog-map.svg b/static/images/docs/service-catalog-map.svg similarity index 100% rename from images/docs/service-catalog-map.svg rename to static/images/docs/service-catalog-map.svg diff --git a/images/docs/service-catalog-provision.svg b/static/images/docs/service-catalog-provision.svg similarity index 100% rename from images/docs/service-catalog-provision.svg rename to static/images/docs/service-catalog-provision.svg diff --git a/images/docs/services-detail.png b/static/images/docs/services-detail.png similarity index 100% rename from images/docs/services-detail.png rename to static/images/docs/services-detail.png diff --git a/images/docs/services-detail.svg b/static/images/docs/services-detail.svg similarity index 100% rename from images/docs/services-detail.svg rename to static/images/docs/services-detail.svg diff --git a/images/docs/services-iptables-overview.png b/static/images/docs/services-iptables-overview.png similarity index 100% rename from images/docs/services-iptables-overview.png rename to static/images/docs/services-iptables-overview.png diff --git a/images/docs/services-iptables-overview.svg b/static/images/docs/services-iptables-overview.svg similarity index 100% rename from images/docs/services-iptables-overview.svg rename to static/images/docs/services-iptables-overview.svg diff --git a/images/docs/services-ipvs-overview.svg b/static/images/docs/services-ipvs-overview.svg similarity index 100% rename from images/docs/services-ipvs-overview.svg rename to static/images/docs/services-ipvs-overview.svg diff --git a/images/docs/services-overview.png b/static/images/docs/services-overview.png similarity index 100% rename from images/docs/services-overview.png rename to static/images/docs/services-overview.png diff --git a/images/docs/services-overview.svg b/static/images/docs/services-overview.svg similarity index 100% rename from images/docs/services-overview.svg rename to static/images/docs/services-overview.svg diff --git a/images/docs/services-userspace-overview.png b/static/images/docs/services-userspace-overview.png similarity index 100% rename from images/docs/services-userspace-overview.png rename to static/images/docs/services-userspace-overview.png diff --git a/images/docs/services-userspace-overview.svg b/static/images/docs/services-userspace-overview.svg similarity index 100% rename from images/docs/services-userspace-overview.svg rename to static/images/docs/services-userspace-overview.svg diff --git a/images/docs/stackdriver-event-exporter-filter.png b/static/images/docs/stackdriver-event-exporter-filter.png similarity index 100% rename from images/docs/stackdriver-event-exporter-filter.png rename to static/images/docs/stackdriver-event-exporter-filter.png diff --git a/images/docs/stackdriver-event-exporter-resource.png b/static/images/docs/stackdriver-event-exporter-resource.png similarity index 100% rename from images/docs/stackdriver-event-exporter-resource.png rename to static/images/docs/stackdriver-event-exporter-resource.png diff --git a/images/docs/static.png b/static/images/docs/static.png similarity index 100% rename from images/docs/static.png rename to static/images/docs/static.png diff --git a/images/docs/synth-logger.png b/static/images/docs/synth-logger.png similarity index 100% rename from images/docs/synth-logger.png rename to static/images/docs/synth-logger.png diff --git a/images/docs/ubuntu/00-select-cloud.png b/static/images/docs/ubuntu/00-select-cloud.png similarity index 100% rename from images/docs/ubuntu/00-select-cloud.png rename to static/images/docs/ubuntu/00-select-cloud.png diff --git a/images/docs/ubuntu/01-deploy.png b/static/images/docs/ubuntu/01-deploy.png similarity index 100% rename from images/docs/ubuntu/01-deploy.png rename to static/images/docs/ubuntu/01-deploy.png diff --git a/images/docs/ubuntu/02-bootstrap.png b/static/images/docs/ubuntu/02-bootstrap.png similarity index 100% rename from images/docs/ubuntu/02-bootstrap.png rename to static/images/docs/ubuntu/02-bootstrap.png diff --git a/images/docs/ubuntu/03-waiting.png b/static/images/docs/ubuntu/03-waiting.png similarity index 100% rename from images/docs/ubuntu/03-waiting.png rename to static/images/docs/ubuntu/03-waiting.png diff --git a/images/docs/ubuntu/04-postprocessing.png b/static/images/docs/ubuntu/04-postprocessing.png similarity index 100% rename from images/docs/ubuntu/04-postprocessing.png rename to static/images/docs/ubuntu/04-postprocessing.png diff --git a/images/docs/ubuntu/05-final-summary.png b/static/images/docs/ubuntu/05-final-summary.png similarity index 100% rename from images/docs/ubuntu/05-final-summary.png rename to static/images/docs/ubuntu/05-final-summary.png diff --git a/images/docs/ui-dashboard-deploy-file.png b/static/images/docs/ui-dashboard-deploy-file.png similarity index 100% rename from images/docs/ui-dashboard-deploy-file.png rename to static/images/docs/ui-dashboard-deploy-file.png diff --git a/images/docs/ui-dashboard-deploy-simple.png b/static/images/docs/ui-dashboard-deploy-simple.png similarity index 100% rename from images/docs/ui-dashboard-deploy-simple.png rename to static/images/docs/ui-dashboard-deploy-simple.png diff --git a/images/docs/ui-dashboard-deployment-detail.png b/static/images/docs/ui-dashboard-deployment-detail.png similarity index 100% rename from images/docs/ui-dashboard-deployment-detail.png rename to static/images/docs/ui-dashboard-deployment-detail.png diff --git a/images/docs/ui-dashboard-detailsview.png b/static/images/docs/ui-dashboard-detailsview.png similarity index 100% rename from images/docs/ui-dashboard-detailsview.png rename to static/images/docs/ui-dashboard-detailsview.png diff --git a/images/docs/ui-dashboard-logs-view.png b/static/images/docs/ui-dashboard-logs-view.png similarity index 100% rename from images/docs/ui-dashboard-logs-view.png rename to static/images/docs/ui-dashboard-logs-view.png diff --git a/images/docs/ui-dashboard-node.png b/static/images/docs/ui-dashboard-node.png similarity index 100% rename from images/docs/ui-dashboard-node.png rename to static/images/docs/ui-dashboard-node.png diff --git a/images/docs/ui-dashboard-secret-detail.png b/static/images/docs/ui-dashboard-secret-detail.png similarity index 100% rename from images/docs/ui-dashboard-secret-detail.png rename to static/images/docs/ui-dashboard-secret-detail.png diff --git a/images/docs/ui-dashboard-service-list.png b/static/images/docs/ui-dashboard-service-list.png similarity index 100% rename from images/docs/ui-dashboard-service-list.png rename to static/images/docs/ui-dashboard-service-list.png diff --git a/images/docs/ui-dashboard-workloadview.png b/static/images/docs/ui-dashboard-workloadview.png similarity index 100% rename from images/docs/ui-dashboard-workloadview.png rename to static/images/docs/ui-dashboard-workloadview.png diff --git a/images/docs/ui-dashboard-zerostate.png b/static/images/docs/ui-dashboard-zerostate.png similarity index 100% rename from images/docs/ui-dashboard-zerostate.png rename to static/images/docs/ui-dashboard-zerostate.png diff --git a/images/docs/ui-dashboard.png b/static/images/docs/ui-dashboard.png similarity index 100% rename from images/docs/ui-dashboard.png rename to static/images/docs/ui-dashboard.png diff --git a/images/docs/user-guide/logging/logging-from-application.png b/static/images/docs/user-guide/logging/logging-from-application.png similarity index 100% rename from images/docs/user-guide/logging/logging-from-application.png rename to static/images/docs/user-guide/logging/logging-from-application.png diff --git a/images/docs/user-guide/logging/logging-node-level.png b/static/images/docs/user-guide/logging/logging-node-level.png similarity index 100% rename from images/docs/user-guide/logging/logging-node-level.png rename to static/images/docs/user-guide/logging/logging-node-level.png diff --git a/images/docs/user-guide/logging/logging-with-node-agent.png b/static/images/docs/user-guide/logging/logging-with-node-agent.png similarity index 100% rename from images/docs/user-guide/logging/logging-with-node-agent.png rename to static/images/docs/user-guide/logging/logging-with-node-agent.png diff --git a/images/docs/user-guide/logging/logging-with-sidecar-agent.png b/static/images/docs/user-guide/logging/logging-with-sidecar-agent.png similarity index 100% rename from images/docs/user-guide/logging/logging-with-sidecar-agent.png rename to static/images/docs/user-guide/logging/logging-with-sidecar-agent.png diff --git a/images/docs/user-guide/logging/logging-with-streaming-sidecar.png b/static/images/docs/user-guide/logging/logging-with-streaming-sidecar.png similarity index 100% rename from images/docs/user-guide/logging/logging-with-streaming-sidecar.png rename to static/images/docs/user-guide/logging/logging-with-streaming-sidecar.png diff --git a/images/docs/warning.png b/static/images/docs/warning.png similarity index 100% rename from images/docs/warning.png rename to static/images/docs/warning.png diff --git a/images/docs/why_containers.svg b/static/images/docs/why_containers.svg similarity index 100% rename from images/docs/why_containers.svg rename to static/images/docs/why_containers.svg diff --git a/images/docs/wordpress.svg b/static/images/docs/wordpress.svg similarity index 100% rename from images/docs/wordpress.svg rename to static/images/docs/wordpress.svg diff --git a/images/favicon.png b/static/images/favicon.png similarity index 100% rename from images/favicon.png rename to static/images/favicon.png diff --git a/images/flower.png b/static/images/flower.png similarity index 100% rename from images/flower.png rename to static/images/flower.png diff --git a/images/github_icon.png b/static/images/github_icon.png similarity index 100% rename from images/github_icon.png rename to static/images/github_icon.png diff --git a/images/golfnow.png b/static/images/golfnow.png similarity index 100% rename from images/golfnow.png rename to static/images/golfnow.png diff --git a/images/golfnow_logo.png b/static/images/golfnow_logo.png similarity index 100% rename from images/golfnow_logo.png rename to static/images/golfnow_logo.png diff --git a/images/haufegroup_logo.png b/static/images/haufegroup_logo.png similarity index 100% rename from images/haufegroup_logo.png rename to static/images/haufegroup_logo.png diff --git a/images/hellonode/image_0.png b/static/images/hellonode/image_0.png similarity index 100% rename from images/hellonode/image_0.png rename to static/images/hellonode/image_0.png diff --git a/images/hellonode/image_1.png b/static/images/hellonode/image_1.png similarity index 100% rename from images/hellonode/image_1.png rename to static/images/hellonode/image_1.png diff --git a/images/hellonode/image_10.png b/static/images/hellonode/image_10.png similarity index 100% rename from images/hellonode/image_10.png rename to static/images/hellonode/image_10.png diff --git a/images/hellonode/image_11.png b/static/images/hellonode/image_11.png similarity index 100% rename from images/hellonode/image_11.png rename to static/images/hellonode/image_11.png diff --git a/images/hellonode/image_12.png b/static/images/hellonode/image_12.png similarity index 100% rename from images/hellonode/image_12.png rename to static/images/hellonode/image_12.png diff --git a/images/hellonode/image_13.png b/static/images/hellonode/image_13.png similarity index 100% rename from images/hellonode/image_13.png rename to static/images/hellonode/image_13.png diff --git a/images/hellonode/image_14.png b/static/images/hellonode/image_14.png similarity index 100% rename from images/hellonode/image_14.png rename to static/images/hellonode/image_14.png diff --git a/images/hellonode/image_2.png b/static/images/hellonode/image_2.png similarity index 100% rename from images/hellonode/image_2.png rename to static/images/hellonode/image_2.png diff --git a/images/hellonode/image_3.png b/static/images/hellonode/image_3.png similarity index 100% rename from images/hellonode/image_3.png rename to static/images/hellonode/image_3.png diff --git a/images/hellonode/image_4.png b/static/images/hellonode/image_4.png similarity index 100% rename from images/hellonode/image_4.png rename to static/images/hellonode/image_4.png diff --git a/images/hellonode/image_5.png b/static/images/hellonode/image_5.png similarity index 100% rename from images/hellonode/image_5.png rename to static/images/hellonode/image_5.png diff --git a/images/hellonode/image_6.png b/static/images/hellonode/image_6.png similarity index 100% rename from images/hellonode/image_6.png rename to static/images/hellonode/image_6.png diff --git a/images/hellonode/image_7.png b/static/images/hellonode/image_7.png similarity index 100% rename from images/hellonode/image_7.png rename to static/images/hellonode/image_7.png diff --git a/images/hellonode/image_8.png b/static/images/hellonode/image_8.png similarity index 100% rename from images/hellonode/image_8.png rename to static/images/hellonode/image_8.png diff --git a/images/hellonode/image_9.png b/static/images/hellonode/image_9.png similarity index 100% rename from images/hellonode/image_9.png rename to static/images/hellonode/image_9.png diff --git a/images/hpc-ec2-vpc-2.png b/static/images/hpc-ec2-vpc-2.png similarity index 100% rename from images/hpc-ec2-vpc-2.png rename to static/images/hpc-ec2-vpc-2.png diff --git a/images/hpn-ec2-vpc.png b/static/images/hpn-ec2-vpc.png similarity index 100% rename from images/hpn-ec2-vpc.png rename to static/images/hpn-ec2-vpc.png diff --git a/images/huawei_logo.png b/static/images/huawei_logo.png similarity index 100% rename from images/huawei_logo.png rename to static/images/huawei_logo.png diff --git a/images/icon-pencil.svg b/static/images/icon-pencil.svg similarity index 100% rename from images/icon-pencil.svg rename to static/images/icon-pencil.svg diff --git a/images/journeys/placeholder.png b/static/images/journeys/placeholder.png similarity index 100% rename from images/journeys/placeholder.png rename to static/images/journeys/placeholder.png diff --git a/images/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png b/static/images/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png similarity index 100% rename from images/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png rename to static/images/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png diff --git a/images/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png b/static/images/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png similarity index 100% rename from images/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png rename to static/images/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png diff --git a/images/jquery-ui/ui-bg_flat_10_000000_40x100.png b/static/images/jquery-ui/ui-bg_flat_10_000000_40x100.png similarity index 100% rename from images/jquery-ui/ui-bg_flat_10_000000_40x100.png rename to static/images/jquery-ui/ui-bg_flat_10_000000_40x100.png diff --git a/images/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png b/static/images/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png similarity index 100% rename from images/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png rename to static/images/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png diff --git a/images/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png b/static/images/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png similarity index 100% rename from images/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png rename to static/images/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png diff --git a/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png b/static/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png similarity index 100% rename from images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png rename to static/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png diff --git a/images/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png b/static/images/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png similarity index 100% rename from images/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png rename to static/images/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png diff --git a/images/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png b/static/images/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png similarity index 100% rename from images/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png rename to static/images/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png diff --git a/images/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png b/static/images/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png similarity index 100% rename from images/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png rename to static/images/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png diff --git a/images/jquery-ui/ui-icons_222222_256x240.png b/static/images/jquery-ui/ui-icons_222222_256x240.png similarity index 100% rename from images/jquery-ui/ui-icons_222222_256x240.png rename to static/images/jquery-ui/ui-icons_222222_256x240.png diff --git a/images/jquery-ui/ui-icons_228ef1_256x240.png b/static/images/jquery-ui/ui-icons_228ef1_256x240.png similarity index 100% rename from images/jquery-ui/ui-icons_228ef1_256x240.png rename to static/images/jquery-ui/ui-icons_228ef1_256x240.png diff --git a/images/jquery-ui/ui-icons_444444_256x240.png b/static/images/jquery-ui/ui-icons_444444_256x240.png similarity index 100% rename from images/jquery-ui/ui-icons_444444_256x240.png rename to static/images/jquery-ui/ui-icons_444444_256x240.png diff --git a/images/jquery-ui/ui-icons_555555_256x240.png b/static/images/jquery-ui/ui-icons_555555_256x240.png similarity index 100% rename from images/jquery-ui/ui-icons_555555_256x240.png rename to static/images/jquery-ui/ui-icons_555555_256x240.png diff --git a/images/jquery-ui/ui-icons_777620_256x240.png b/static/images/jquery-ui/ui-icons_777620_256x240.png similarity index 100% rename from images/jquery-ui/ui-icons_777620_256x240.png rename to static/images/jquery-ui/ui-icons_777620_256x240.png diff --git a/images/jquery-ui/ui-icons_777777_256x240.png b/static/images/jquery-ui/ui-icons_777777_256x240.png similarity index 100% rename from images/jquery-ui/ui-icons_777777_256x240.png rename to static/images/jquery-ui/ui-icons_777777_256x240.png diff --git a/images/jquery-ui/ui-icons_cc0000_256x240.png b/static/images/jquery-ui/ui-icons_cc0000_256x240.png similarity index 100% rename from images/jquery-ui/ui-icons_cc0000_256x240.png rename to static/images/jquery-ui/ui-icons_cc0000_256x240.png diff --git a/images/jquery-ui/ui-icons_ef8c08_256x240.png b/static/images/jquery-ui/ui-icons_ef8c08_256x240.png similarity index 100% rename from images/jquery-ui/ui-icons_ef8c08_256x240.png rename to static/images/jquery-ui/ui-icons_ef8c08_256x240.png diff --git a/images/jquery-ui/ui-icons_ffd27a_256x240.png b/static/images/jquery-ui/ui-icons_ffd27a_256x240.png similarity index 100% rename from images/jquery-ui/ui-icons_ffd27a_256x240.png rename to static/images/jquery-ui/ui-icons_ffd27a_256x240.png diff --git a/images/jquery-ui/ui-icons_ffffff_256x240.png b/static/images/jquery-ui/ui-icons_ffffff_256x240.png similarity index 100% rename from images/jquery-ui/ui-icons_ffffff_256x240.png rename to static/images/jquery-ui/ui-icons_ffffff_256x240.png diff --git a/images/kub_video_banner.jpg b/static/images/kub_video_banner.jpg similarity index 100% rename from images/kub_video_banner.jpg rename to static/images/kub_video_banner.jpg diff --git a/images/kub_video_banner_box.jpg b/static/images/kub_video_banner_box.jpg similarity index 100% rename from images/kub_video_banner_box.jpg rename to static/images/kub_video_banner_box.jpg diff --git a/images/kub_video_thm.jpg b/static/images/kub_video_thm.jpg similarity index 100% rename from images/kub_video_thm.jpg rename to static/images/kub_video_thm.jpg diff --git a/images/link.png b/static/images/link.png similarity index 100% rename from images/link.png rename to static/images/link.png diff --git a/images/logos/redhat_logo.png b/static/images/logos/redhat_logo.png similarity index 100% rename from images/logos/redhat_logo.png rename to static/images/logos/redhat_logo.png diff --git a/images/logos/soundcloud_logo.png b/static/images/logos/soundcloud_logo.png similarity index 100% rename from images/logos/soundcloud_logo.png rename to static/images/logos/soundcloud_logo.png diff --git a/images/logos/verizon_logo.png b/static/images/logos/verizon_logo.png similarity index 100% rename from images/logos/verizon_logo.png rename to static/images/logos/verizon_logo.png diff --git a/images/logos/viacom_logo.png b/static/images/logos/viacom_logo.png similarity index 100% rename from images/logos/viacom_logo.png rename to static/images/logos/viacom_logo.png diff --git a/images/logos/wepay_logo.png b/static/images/logos/wepay_logo.png similarity index 100% rename from images/logos/wepay_logo.png rename to static/images/logos/wepay_logo.png diff --git a/images/metadocs/jekyll-tags-glossary-injector.gif b/static/images/metadocs/jekyll-tags-glossary-injector.gif similarity index 100% rename from images/metadocs/jekyll-tags-glossary-injector.gif rename to static/images/metadocs/jekyll-tags-glossary-injector.gif diff --git a/images/metadocs/jekyll-tags-glossary-tooltip.png b/static/images/metadocs/jekyll-tags-glossary-tooltip.png similarity index 100% rename from images/metadocs/jekyll-tags-glossary-tooltip.png rename to static/images/metadocs/jekyll-tags-glossary-tooltip.png diff --git a/images/nav_logo.svg b/static/images/nav_logo.svg similarity index 100% rename from images/nav_logo.svg rename to static/images/nav_logo.svg diff --git a/images/nav_logo2.svg b/static/images/nav_logo2.svg similarity index 100% rename from images/nav_logo2.svg rename to static/images/nav_logo2.svg diff --git a/images/overview_uml.svg b/static/images/overview_uml.svg similarity index 100% rename from images/overview_uml.svg rename to static/images/overview_uml.svg diff --git a/images/peardeck_logo.png b/static/images/peardeck_logo.png similarity index 100% rename from images/peardeck_logo.png rename to static/images/peardeck_logo.png diff --git a/images/pencil.png b/static/images/pencil.png similarity index 100% rename from images/pencil.png rename to static/images/pencil.png diff --git a/images/scalable.png b/static/images/scalable.png similarity index 100% rename from images/scalable.png rename to static/images/scalable.png diff --git a/images/search-icon.svg b/static/images/search-icon.svg similarity index 100% rename from images/search-icon.svg rename to static/images/search-icon.svg diff --git a/images/self-heal.png b/static/images/self-heal.png similarity index 100% rename from images/self-heal.png rename to static/images/self-heal.png diff --git a/images/slack_icon.png b/static/images/slack_icon.png similarity index 100% rename from images/slack_icon.png rename to static/images/slack_icon.png diff --git a/images/social_sprite.png b/static/images/social_sprite.png similarity index 100% rename from images/social_sprite.png rename to static/images/social_sprite.png diff --git a/images/square-logos/accenture.png b/static/images/square-logos/accenture.png similarity index 100% rename from images/square-logos/accenture.png rename to static/images/square-logos/accenture.png diff --git a/images/square-logos/alauda.png b/static/images/square-logos/alauda.png similarity index 100% rename from images/square-logos/alauda.png rename to static/images/square-logos/alauda.png diff --git a/images/square-logos/alibaba.png b/static/images/square-logos/alibaba.png similarity index 100% rename from images/square-logos/alibaba.png rename to static/images/square-logos/alibaba.png diff --git a/images/square-logos/altoros.png b/static/images/square-logos/altoros.png similarity index 100% rename from images/square-logos/altoros.png rename to static/images/square-logos/altoros.png diff --git a/images/square-logos/aporeto.png b/static/images/square-logos/aporeto.png similarity index 100% rename from images/square-logos/aporeto.png rename to static/images/square-logos/aporeto.png diff --git a/images/square-logos/appformix.png b/static/images/square-logos/appformix.png similarity index 100% rename from images/square-logos/appformix.png rename to static/images/square-logos/appformix.png diff --git a/images/square-logos/applatix.png b/static/images/square-logos/applatix.png similarity index 100% rename from images/square-logos/applatix.png rename to static/images/square-logos/applatix.png diff --git a/images/square-logos/apprenda.png b/static/images/square-logos/apprenda.png similarity index 100% rename from images/square-logos/apprenda.png rename to static/images/square-logos/apprenda.png diff --git a/images/square-logos/appscode.png b/static/images/square-logos/appscode.png similarity index 100% rename from images/square-logos/appscode.png rename to static/images/square-logos/appscode.png diff --git a/images/square-logos/aqua.png b/static/images/square-logos/aqua.png similarity index 100% rename from images/square-logos/aqua.png rename to static/images/square-logos/aqua.png diff --git a/images/square-logos/asag.png b/static/images/square-logos/asag.png similarity index 100% rename from images/square-logos/asag.png rename to static/images/square-logos/asag.png diff --git a/images/square-logos/asm.png b/static/images/square-logos/asm.png similarity index 100% rename from images/square-logos/asm.png rename to static/images/square-logos/asm.png diff --git a/images/square-logos/avinetworks.png b/static/images/square-logos/avinetworks.png similarity index 100% rename from images/square-logos/avinetworks.png rename to static/images/square-logos/avinetworks.png diff --git a/images/square-logos/aws.png b/static/images/square-logos/aws.png similarity index 100% rename from images/square-logos/aws.png rename to static/images/square-logos/aws.png diff --git a/images/square-logos/azure.png b/static/images/square-logos/azure.png similarity index 100% rename from images/square-logos/azure.png rename to static/images/square-logos/azure.png diff --git a/images/square-logos/baidu.png b/static/images/square-logos/baidu.png similarity index 100% rename from images/square-logos/baidu.png rename to static/images/square-logos/baidu.png diff --git a/images/square-logos/biarca.png b/static/images/square-logos/biarca.png similarity index 100% rename from images/square-logos/biarca.png rename to static/images/square-logos/biarca.png diff --git a/images/square-logos/bigbinary.png b/static/images/square-logos/bigbinary.png similarity index 100% rename from images/square-logos/bigbinary.png rename to static/images/square-logos/bigbinary.png diff --git a/images/square-logos/bitnami.png b/static/images/square-logos/bitnami.png similarity index 100% rename from images/square-logos/bitnami.png rename to static/images/square-logos/bitnami.png diff --git a/images/square-logos/bloombase.png b/static/images/square-logos/bloombase.png similarity index 100% rename from images/square-logos/bloombase.png rename to static/images/square-logos/bloombase.png diff --git a/images/square-logos/bluefyre.png b/static/images/square-logos/bluefyre.png similarity index 100% rename from images/square-logos/bluefyre.png rename to static/images/square-logos/bluefyre.png diff --git a/images/square-logos/bocloud.png b/static/images/square-logos/bocloud.png similarity index 100% rename from images/square-logos/bocloud.png rename to static/images/square-logos/bocloud.png diff --git a/images/square-logos/bootkube.png b/static/images/square-logos/bootkube.png similarity index 100% rename from images/square-logos/bootkube.png rename to static/images/square-logos/bootkube.png diff --git a/images/square-logos/boozallenhamilton.png b/static/images/square-logos/boozallenhamilton.png similarity index 100% rename from images/square-logos/boozallenhamilton.png rename to static/images/square-logos/boozallenhamilton.png diff --git a/images/square-logos/ca.png b/static/images/square-logos/ca.png similarity index 100% rename from images/square-logos/ca.png rename to static/images/square-logos/ca.png diff --git a/images/square-logos/caicloud.png b/static/images/square-logos/caicloud.png similarity index 100% rename from images/square-logos/caicloud.png rename to static/images/square-logos/caicloud.png diff --git a/images/square-logos/canonical.png b/static/images/square-logos/canonical.png similarity index 100% rename from images/square-logos/canonical.png rename to static/images/square-logos/canonical.png diff --git a/images/square-logos/cascadeo.png b/static/images/square-logos/cascadeo.png similarity index 100% rename from images/square-logos/cascadeo.png rename to static/images/square-logos/cascadeo.png diff --git a/images/square-logos/cff.png b/static/images/square-logos/cff.png similarity index 100% rename from images/square-logos/cff.png rename to static/images/square-logos/cff.png diff --git a/images/square-logos/circulo.png b/static/images/square-logos/circulo.png similarity index 100% rename from images/square-logos/circulo.png rename to static/images/square-logos/circulo.png diff --git a/images/square-logos/cisco.png b/static/images/square-logos/cisco.png similarity index 100% rename from images/square-logos/cisco.png rename to static/images/square-logos/cisco.png diff --git a/images/square-logos/citrix.png b/static/images/square-logos/citrix.png similarity index 100% rename from images/square-logos/citrix.png rename to static/images/square-logos/citrix.png diff --git a/images/square-logos/claranet.png b/static/images/square-logos/claranet.png similarity index 100% rename from images/square-logos/claranet.png rename to static/images/square-logos/claranet.png diff --git a/images/square-logos/cloudbase.png b/static/images/square-logos/cloudbase.png similarity index 100% rename from images/square-logos/cloudbase.png rename to static/images/square-logos/cloudbase.png diff --git a/images/square-logos/cloudbourne.png b/static/images/square-logos/cloudbourne.png similarity index 100% rename from images/square-logos/cloudbourne.png rename to static/images/square-logos/cloudbourne.png diff --git a/images/square-logos/cloudkite.png b/static/images/square-logos/cloudkite.png similarity index 100% rename from images/square-logos/cloudkite.png rename to static/images/square-logos/cloudkite.png diff --git a/images/square-logos/cloudops.png b/static/images/square-logos/cloudops.png similarity index 100% rename from images/square-logos/cloudops.png rename to static/images/square-logos/cloudops.png diff --git a/images/square-logos/cloudperceptions.png b/static/images/square-logos/cloudperceptions.png similarity index 100% rename from images/square-logos/cloudperceptions.png rename to static/images/square-logos/cloudperceptions.png diff --git a/images/square-logos/cloudplex.png b/static/images/square-logos/cloudplex.png similarity index 100% rename from images/square-logos/cloudplex.png rename to static/images/square-logos/cloudplex.png diff --git a/images/square-logos/cobe.png b/static/images/square-logos/cobe.png similarity index 100% rename from images/square-logos/cobe.png rename to static/images/square-logos/cobe.png diff --git a/images/square-logos/cockroach_labs.png b/static/images/square-logos/cockroach_labs.png similarity index 100% rename from images/square-logos/cockroach_labs.png rename to static/images/square-logos/cockroach_labs.png diff --git a/images/square-logos/codecrux.png b/static/images/square-logos/codecrux.png similarity index 100% rename from images/square-logos/codecrux.png rename to static/images/square-logos/codecrux.png diff --git a/images/square-logos/codedellemc.png b/static/images/square-logos/codedellemc.png similarity index 100% rename from images/square-logos/codedellemc.png rename to static/images/square-logos/codedellemc.png diff --git a/images/square-logos/codefresh.png b/static/images/square-logos/codefresh.png similarity index 100% rename from images/square-logos/codefresh.png rename to static/images/square-logos/codefresh.png diff --git a/images/square-logos/componentsoft.png b/static/images/square-logos/componentsoft.png similarity index 100% rename from images/square-logos/componentsoft.png rename to static/images/square-logos/componentsoft.png diff --git a/images/square-logos/container_solutions.png b/static/images/square-logos/container_solutions.png similarity index 100% rename from images/square-logos/container_solutions.png rename to static/images/square-logos/container_solutions.png diff --git a/images/square-logos/containership.png b/static/images/square-logos/containership.png similarity index 100% rename from images/square-logos/containership.png rename to static/images/square-logos/containership.png diff --git a/images/square-logos/contino.png b/static/images/square-logos/contino.png similarity index 100% rename from images/square-logos/contino.png rename to static/images/square-logos/contino.png diff --git a/images/square-logos/controlplane.png b/static/images/square-logos/controlplane.png similarity index 100% rename from images/square-logos/controlplane.png rename to static/images/square-logos/controlplane.png diff --git a/images/square-logos/core_os.png b/static/images/square-logos/core_os.png similarity index 100% rename from images/square-logos/core_os.png rename to static/images/square-logos/core_os.png diff --git a/images/square-logos/coreos.png b/static/images/square-logos/coreos.png similarity index 100% rename from images/square-logos/coreos.png rename to static/images/square-logos/coreos.png diff --git a/images/square-logos/coscale.png b/static/images/square-logos/coscale.png similarity index 100% rename from images/square-logos/coscale.png rename to static/images/square-logos/coscale.png diff --git a/images/square-logos/creationline.png b/static/images/square-logos/creationline.png similarity index 100% rename from images/square-logos/creationline.png rename to static/images/square-logos/creationline.png diff --git a/images/square-logos/crunchy.png b/static/images/square-logos/crunchy.png similarity index 100% rename from images/square-logos/crunchy.png rename to static/images/square-logos/crunchy.png diff --git a/images/square-logos/daocloud.png b/static/images/square-logos/daocloud.png similarity index 100% rename from images/square-logos/daocloud.png rename to static/images/square-logos/daocloud.png diff --git a/images/square-logos/datacore.png b/static/images/square-logos/datacore.png similarity index 100% rename from images/square-logos/datacore.png rename to static/images/square-logos/datacore.png diff --git a/images/square-logos/datadog.png b/static/images/square-logos/datadog.png similarity index 100% rename from images/square-logos/datadog.png rename to static/images/square-logos/datadog.png diff --git a/images/square-logos/dataspine.png b/static/images/square-logos/dataspine.png similarity index 100% rename from images/square-logos/dataspine.png rename to static/images/square-logos/dataspine.png diff --git a/images/square-logos/datawire.png b/static/images/square-logos/datawire.png similarity index 100% rename from images/square-logos/datawire.png rename to static/images/square-logos/datawire.png diff --git a/images/square-logos/datera.png b/static/images/square-logos/datera.png similarity index 100% rename from images/square-logos/datera.png rename to static/images/square-logos/datera.png diff --git a/images/square-logos/deis.png b/static/images/square-logos/deis.png similarity index 100% rename from images/square-logos/deis.png rename to static/images/square-logos/deis.png diff --git a/images/square-logos/devopsguru.png b/static/images/square-logos/devopsguru.png similarity index 100% rename from images/square-logos/devopsguru.png rename to static/images/square-logos/devopsguru.png diff --git a/images/square-logos/diamanti.png b/static/images/square-logos/diamanti.png similarity index 100% rename from images/square-logos/diamanti.png rename to static/images/square-logos/diamanti.png diff --git a/images/square-logos/distelli.png b/static/images/square-logos/distelli.png similarity index 100% rename from images/square-logos/distelli.png rename to static/images/square-logos/distelli.png diff --git a/images/square-logos/docker.png b/static/images/square-logos/docker.png similarity index 100% rename from images/square-logos/docker.png rename to static/images/square-logos/docker.png diff --git a/images/square-logos/easynube.png b/static/images/square-logos/easynube.png similarity index 100% rename from images/square-logos/easynube.png rename to static/images/square-logos/easynube.png diff --git a/images/square-logos/easystack.png b/static/images/square-logos/easystack.png similarity index 100% rename from images/square-logos/easystack.png rename to static/images/square-logos/easystack.png diff --git a/images/square-logos/ein.png b/static/images/square-logos/ein.png similarity index 100% rename from images/square-logos/ein.png rename to static/images/square-logos/ein.png diff --git a/images/square-logos/eking.png b/static/images/square-logos/eking.png similarity index 100% rename from images/square-logos/eking.png rename to static/images/square-logos/eking.png diff --git a/images/square-logos/elastickube.png b/static/images/square-logos/elastickube.png similarity index 100% rename from images/square-logos/elastickube.png rename to static/images/square-logos/elastickube.png diff --git a/images/square-logos/elastifile.png b/static/images/square-logos/elastifile.png similarity index 100% rename from images/square-logos/elastifile.png rename to static/images/square-logos/elastifile.png diff --git a/images/square-logos/elastisys.png b/static/images/square-logos/elastisys.png similarity index 100% rename from images/square-logos/elastisys.png rename to static/images/square-logos/elastisys.png diff --git a/images/square-logos/endocode.png b/static/images/square-logos/endocode.png similarity index 100% rename from images/square-logos/endocode.png rename to static/images/square-logos/endocode.png diff --git a/images/square-logos/eta.png b/static/images/square-logos/eta.png similarity index 100% rename from images/square-logos/eta.png rename to static/images/square-logos/eta.png diff --git a/images/square-logos/f5networks.png b/static/images/square-logos/f5networks.png similarity index 100% rename from images/square-logos/f5networks.png rename to static/images/square-logos/f5networks.png diff --git a/images/square-logos/fluentd.png b/static/images/square-logos/fluentd.png similarity index 100% rename from images/square-logos/fluentd.png rename to static/images/square-logos/fluentd.png diff --git a/images/square-logos/gce.png b/static/images/square-logos/gce.png similarity index 100% rename from images/square-logos/gce.png rename to static/images/square-logos/gce.png diff --git a/images/square-logos/gcp.png b/static/images/square-logos/gcp.png similarity index 100% rename from images/square-logos/gcp.png rename to static/images/square-logos/gcp.png diff --git a/images/square-logos/ghostcloud.png b/static/images/square-logos/ghostcloud.png similarity index 100% rename from images/square-logos/ghostcloud.png rename to static/images/square-logos/ghostcloud.png diff --git a/images/square-logos/giant_swarm.png b/static/images/square-logos/giant_swarm.png similarity index 100% rename from images/square-logos/giant_swarm.png rename to static/images/square-logos/giant_swarm.png diff --git a/images/square-logos/gitlab.png b/static/images/square-logos/gitlab.png similarity index 100% rename from images/square-logos/gitlab.png rename to static/images/square-logos/gitlab.png diff --git a/images/square-logos/google.png b/static/images/square-logos/google.png similarity index 100% rename from images/square-logos/google.png rename to static/images/square-logos/google.png diff --git a/images/square-logos/gopaddle.png b/static/images/square-logos/gopaddle.png similarity index 100% rename from images/square-logos/gopaddle.png rename to static/images/square-logos/gopaddle.png diff --git a/images/square-logos/gravitational.png b/static/images/square-logos/gravitational.png similarity index 100% rename from images/square-logos/gravitational.png rename to static/images/square-logos/gravitational.png diff --git a/images/square-logos/greenfield.png b/static/images/square-logos/greenfield.png similarity index 100% rename from images/square-logos/greenfield.png rename to static/images/square-logos/greenfield.png diff --git a/images/square-logos/guardicore.png b/static/images/square-logos/guardicore.png similarity index 100% rename from images/square-logos/guardicore.png rename to static/images/square-logos/guardicore.png diff --git a/images/square-logos/harbur.png b/static/images/square-logos/harbur.png similarity index 100% rename from images/square-logos/harbur.png rename to static/images/square-logos/harbur.png diff --git a/images/square-logos/harmony.png b/static/images/square-logos/harmony.png similarity index 100% rename from images/square-logos/harmony.png rename to static/images/square-logos/harmony.png diff --git a/images/square-logos/harness.png b/static/images/square-logos/harness.png similarity index 100% rename from images/square-logos/harness.png rename to static/images/square-logos/harness.png diff --git a/images/square-logos/hasura.png b/static/images/square-logos/hasura.png similarity index 100% rename from images/square-logos/hasura.png rename to static/images/square-logos/hasura.png diff --git a/images/square-logos/hedvig.png b/static/images/square-logos/hedvig.png similarity index 100% rename from images/square-logos/hedvig.png rename to static/images/square-logos/hedvig.png diff --git a/images/square-logos/heptio.png b/static/images/square-logos/heptio.png similarity index 100% rename from images/square-logos/heptio.png rename to static/images/square-logos/heptio.png diff --git a/images/square-logos/hitachi.png b/static/images/square-logos/hitachi.png similarity index 100% rename from images/square-logos/hitachi.png rename to static/images/square-logos/hitachi.png diff --git a/images/square-logos/hpe.png b/static/images/square-logos/hpe.png similarity index 100% rename from images/square-logos/hpe.png rename to static/images/square-logos/hpe.png diff --git a/images/square-logos/huawei.png b/static/images/square-logos/huawei.png similarity index 100% rename from images/square-logos/huawei.png rename to static/images/square-logos/huawei.png diff --git a/images/square-logos/humio.png b/static/images/square-logos/humio.png similarity index 100% rename from images/square-logos/humio.png rename to static/images/square-logos/humio.png diff --git a/images/square-logos/ibm.png b/static/images/square-logos/ibm.png similarity index 100% rename from images/square-logos/ibm.png rename to static/images/square-logos/ibm.png diff --git a/images/square-logos/ibmcloud.png b/static/images/square-logos/ibmcloud.png similarity index 100% rename from images/square-logos/ibmcloud.png rename to static/images/square-logos/ibmcloud.png diff --git a/images/square-logos/ibmprivate.png b/static/images/square-logos/ibmprivate.png similarity index 100% rename from images/square-logos/ibmprivate.png rename to static/images/square-logos/ibmprivate.png diff --git a/images/square-logos/inexcco.png b/static/images/square-logos/inexcco.png similarity index 100% rename from images/square-logos/inexcco.png rename to static/images/square-logos/inexcco.png diff --git a/images/square-logos/infosys.png b/static/images/square-logos/infosys.png similarity index 100% rename from images/square-logos/infosys.png rename to static/images/square-logos/infosys.png diff --git a/images/square-logos/infracloud.png b/static/images/square-logos/infracloud.png similarity index 100% rename from images/square-logos/infracloud.png rename to static/images/square-logos/infracloud.png diff --git a/images/square-logos/instana.png b/static/images/square-logos/instana.png similarity index 100% rename from images/square-logos/instana.png rename to static/images/square-logos/instana.png diff --git a/images/square-logos/intel.png b/static/images/square-logos/intel.png similarity index 100% rename from images/square-logos/intel.png rename to static/images/square-logos/intel.png diff --git a/images/square-logos/inwinstack.png b/static/images/square-logos/inwinstack.png similarity index 100% rename from images/square-logos/inwinstack.png rename to static/images/square-logos/inwinstack.png diff --git a/images/square-logos/isotoma.png b/static/images/square-logos/isotoma.png similarity index 100% rename from images/square-logos/isotoma.png rename to static/images/square-logos/isotoma.png diff --git a/images/square-logos/jetbrains.png b/static/images/square-logos/jetbrains.png similarity index 100% rename from images/square-logos/jetbrains.png rename to static/images/square-logos/jetbrains.png diff --git a/images/square-logos/jetstack.png b/static/images/square-logos/jetstack.png similarity index 100% rename from images/square-logos/jetstack.png rename to static/images/square-logos/jetstack.png diff --git a/images/square-logos/jfrog.png b/static/images/square-logos/jfrog.png similarity index 100% rename from images/square-logos/jfrog.png rename to static/images/square-logos/jfrog.png diff --git a/images/square-logos/joyent.png b/static/images/square-logos/joyent.png similarity index 100% rename from images/square-logos/joyent.png rename to static/images/square-logos/joyent.png diff --git a/images/square-logos/kasten.png b/static/images/square-logos/kasten.png similarity index 100% rename from images/square-logos/kasten.png rename to static/images/square-logos/kasten.png diff --git a/images/square-logos/kenzan.png b/static/images/square-logos/kenzan.png similarity index 100% rename from images/square-logos/kenzan.png rename to static/images/square-logos/kenzan.png diff --git a/images/square-logos/kinvolk.png b/static/images/square-logos/kinvolk.png similarity index 100% rename from images/square-logos/kinvolk.png rename to static/images/square-logos/kinvolk.png diff --git a/images/square-logos/kismatic.png b/static/images/square-logos/kismatic.png similarity index 100% rename from images/square-logos/kismatic.png rename to static/images/square-logos/kismatic.png diff --git a/images/square-logos/kloia.png b/static/images/square-logos/kloia.png similarity index 100% rename from images/square-logos/kloia.png rename to static/images/square-logos/kloia.png diff --git a/images/square-logos/kong.png b/static/images/square-logos/kong.png similarity index 100% rename from images/square-logos/kong.png rename to static/images/square-logos/kong.png diff --git a/images/square-logos/kraken.png b/static/images/square-logos/kraken.png similarity index 100% rename from images/square-logos/kraken.png rename to static/images/square-logos/kraken.png diff --git a/images/square-logos/kubeadm.png b/static/images/square-logos/kubeadm.png similarity index 100% rename from images/square-logos/kubeadm.png rename to static/images/square-logos/kubeadm.png diff --git a/images/square-logos/kubermatic.png b/static/images/square-logos/kubermatic.png similarity index 100% rename from images/square-logos/kubermatic.png rename to static/images/square-logos/kubermatic.png diff --git a/images/square-logos/kubernetic.png b/static/images/square-logos/kubernetic.png similarity index 100% rename from images/square-logos/kubernetic.png rename to static/images/square-logos/kubernetic.png diff --git a/images/square-logos/kublr.png b/static/images/square-logos/kublr.png similarity index 100% rename from images/square-logos/kublr.png rename to static/images/square-logos/kublr.png diff --git a/images/square-logos/kumina.png b/static/images/square-logos/kumina.png similarity index 100% rename from images/square-logos/kumina.png rename to static/images/square-logos/kumina.png diff --git a/images/square-logos/landoop.png b/static/images/square-logos/landoop.png similarity index 100% rename from images/square-logos/landoop.png rename to static/images/square-logos/landoop.png diff --git a/images/square-logos/livewyer.png b/static/images/square-logos/livewyer.png similarity index 100% rename from images/square-logos/livewyer.png rename to static/images/square-logos/livewyer.png diff --git a/images/square-logos/logdna.png b/static/images/square-logos/logdna.png similarity index 100% rename from images/square-logos/logdna.png rename to static/images/square-logos/logdna.png diff --git a/images/square-logos/loodse.png b/static/images/square-logos/loodse.png similarity index 100% rename from images/square-logos/loodse.png rename to static/images/square-logos/loodse.png diff --git a/images/square-logos/lovable.png b/static/images/square-logos/lovable.png similarity index 100% rename from images/square-logos/lovable.png rename to static/images/square-logos/lovable.png diff --git a/images/square-logos/lti.png b/static/images/square-logos/lti.png similarity index 100% rename from images/square-logos/lti.png rename to static/images/square-logos/lti.png diff --git a/images/square-logos/mashape.png b/static/images/square-logos/mashape.png similarity index 100% rename from images/square-logos/mashape.png rename to static/images/square-logos/mashape.png diff --git a/images/square-logos/mesosphere.png b/static/images/square-logos/mesosphere.png similarity index 100% rename from images/square-logos/mesosphere.png rename to static/images/square-logos/mesosphere.png diff --git a/images/square-logos/microsoft.png b/static/images/square-logos/microsoft.png similarity index 100% rename from images/square-logos/microsoft.png rename to static/images/square-logos/microsoft.png diff --git a/images/square-logos/mirantis.png b/static/images/square-logos/mirantis.png similarity index 100% rename from images/square-logos/mirantis.png rename to static/images/square-logos/mirantis.png diff --git a/images/square-logos/mobilise.png b/static/images/square-logos/mobilise.png similarity index 100% rename from images/square-logos/mobilise.png rename to static/images/square-logos/mobilise.png diff --git a/images/square-logos/naitways.png b/static/images/square-logos/naitways.png similarity index 100% rename from images/square-logos/naitways.png rename to static/images/square-logos/naitways.png diff --git a/images/square-logos/nats.png b/static/images/square-logos/nats.png similarity index 100% rename from images/square-logos/nats.png rename to static/images/square-logos/nats.png diff --git a/images/square-logos/navops.png b/static/images/square-logos/navops.png similarity index 100% rename from images/square-logos/navops.png rename to static/images/square-logos/navops.png diff --git a/images/square-logos/nebulaworks.png b/static/images/square-logos/nebulaworks.png similarity index 100% rename from images/square-logos/nebulaworks.png rename to static/images/square-logos/nebulaworks.png diff --git a/images/square-logos/netapp.png b/static/images/square-logos/netapp.png similarity index 100% rename from images/square-logos/netapp.png rename to static/images/square-logos/netapp.png diff --git a/images/square-logos/netease.png b/static/images/square-logos/netease.png similarity index 100% rename from images/square-logos/netease.png rename to static/images/square-logos/netease.png diff --git a/images/square-logos/netsil.png b/static/images/square-logos/netsil.png similarity index 100% rename from images/square-logos/netsil.png rename to static/images/square-logos/netsil.png diff --git a/images/square-logos/neuvector.png b/static/images/square-logos/neuvector.png similarity index 100% rename from images/square-logos/neuvector.png rename to static/images/square-logos/neuvector.png diff --git a/images/square-logos/nirmata.png b/static/images/square-logos/nirmata.png similarity index 100% rename from images/square-logos/nirmata.png rename to static/images/square-logos/nirmata.png diff --git a/images/square-logos/nuagenetworks.png b/static/images/square-logos/nuagenetworks.png similarity index 100% rename from images/square-logos/nuagenetworks.png rename to static/images/square-logos/nuagenetworks.png diff --git a/images/square-logos/objectcomputing.png b/static/images/square-logos/objectcomputing.png similarity index 100% rename from images/square-logos/objectcomputing.png rename to static/images/square-logos/objectcomputing.png diff --git a/images/square-logos/opcito.png b/static/images/square-logos/opcito.png similarity index 100% rename from images/square-logos/opcito.png rename to static/images/square-logos/opcito.png diff --git a/images/square-logos/openebs.png b/static/images/square-logos/openebs.png similarity index 100% rename from images/square-logos/openebs.png rename to static/images/square-logos/openebs.png diff --git a/images/square-logos/opensense.png b/static/images/square-logos/opensense.png similarity index 100% rename from images/square-logos/opensense.png rename to static/images/square-logos/opensense.png diff --git a/images/square-logos/openshift.png b/static/images/square-logos/openshift.png similarity index 100% rename from images/square-logos/openshift.png rename to static/images/square-logos/openshift.png diff --git a/images/square-logos/opszero.png b/static/images/square-logos/opszero.png similarity index 100% rename from images/square-logos/opszero.png rename to static/images/square-logos/opszero.png diff --git a/images/square-logos/oracle.png b/static/images/square-logos/oracle.png similarity index 100% rename from images/square-logos/oracle.png rename to static/images/square-logos/oracle.png diff --git a/images/square-logos/oraclelinux.png b/static/images/square-logos/oraclelinux.png similarity index 100% rename from images/square-logos/oraclelinux.png rename to static/images/square-logos/oraclelinux.png diff --git a/images/square-logos/outcold.png b/static/images/square-logos/outcold.png similarity index 100% rename from images/square-logos/outcold.png rename to static/images/square-logos/outcold.png diff --git a/images/square-logos/pivotal.png b/static/images/square-logos/pivotal.png similarity index 100% rename from images/square-logos/pivotal.png rename to static/images/square-logos/pivotal.png diff --git a/images/square-logos/platform9.png b/static/images/square-logos/platform9.png similarity index 100% rename from images/square-logos/platform9.png rename to static/images/square-logos/platform9.png diff --git a/images/square-logos/polarseven.png b/static/images/square-logos/polarseven.png similarity index 100% rename from images/square-logos/polarseven.png rename to static/images/square-logos/polarseven.png diff --git a/images/square-logos/portworx.png b/static/images/square-logos/portworx.png similarity index 100% rename from images/square-logos/portworx.png rename to static/images/square-logos/portworx.png diff --git a/images/square-logos/poseidon.png b/static/images/square-logos/poseidon.png similarity index 100% rename from images/square-logos/poseidon.png rename to static/images/square-logos/poseidon.png diff --git a/images/square-logos/puppet.png b/static/images/square-logos/puppet.png similarity index 100% rename from images/square-logos/puppet.png rename to static/images/square-logos/puppet.png diff --git a/images/square-logos/pure_storage.png b/static/images/square-logos/pure_storage.png similarity index 100% rename from images/square-logos/pure_storage.png rename to static/images/square-logos/pure_storage.png diff --git a/images/square-logos/qstack.png b/static/images/square-logos/qstack.png similarity index 100% rename from images/square-logos/qstack.png rename to static/images/square-logos/qstack.png diff --git a/images/square-logos/rackn.png b/static/images/square-logos/rackn.png similarity index 100% rename from images/square-logos/rackn.png rename to static/images/square-logos/rackn.png diff --git a/images/square-logos/rancher-labs.png b/static/images/square-logos/rancher-labs.png similarity index 100% rename from images/square-logos/rancher-labs.png rename to static/images/square-logos/rancher-labs.png diff --git a/images/square-logos/rancher.png b/static/images/square-logos/rancher.png similarity index 100% rename from images/square-logos/rancher.png rename to static/images/square-logos/rancher.png diff --git a/images/square-logos/reactive_ops.png b/static/images/square-logos/reactive_ops.png similarity index 100% rename from images/square-logos/reactive_ops.png rename to static/images/square-logos/reactive_ops.png diff --git a/images/square-logos/redhat.png b/static/images/square-logos/redhat.png similarity index 100% rename from images/square-logos/redhat.png rename to static/images/square-logos/redhat.png diff --git a/images/square-logos/redis.png b/static/images/square-logos/redis.png similarity index 100% rename from images/square-logos/redis.png rename to static/images/square-logos/redis.png diff --git a/images/square-logos/redzara.png b/static/images/square-logos/redzara.png similarity index 100% rename from images/square-logos/redzara.png rename to static/images/square-logos/redzara.png diff --git a/images/square-logos/rxm.png b/static/images/square-logos/rxm.png similarity index 100% rename from images/square-logos/rxm.png rename to static/images/square-logos/rxm.png diff --git a/images/square-logos/samsung_sds.png b/static/images/square-logos/samsung_sds.png similarity index 100% rename from images/square-logos/samsung_sds.png rename to static/images/square-logos/samsung_sds.png diff --git a/images/square-logos/sap.png b/static/images/square-logos/sap.png similarity index 100% rename from images/square-logos/sap.png rename to static/images/square-logos/sap.png diff --git a/images/square-logos/semantix.png b/static/images/square-logos/semantix.png similarity index 100% rename from images/square-logos/semantix.png rename to static/images/square-logos/semantix.png diff --git a/images/square-logos/sematext.png b/static/images/square-logos/sematext.png similarity index 100% rename from images/square-logos/sematext.png rename to static/images/square-logos/sematext.png diff --git a/images/square-logos/servian.png b/static/images/square-logos/servian.png similarity index 100% rename from images/square-logos/servian.png rename to static/images/square-logos/servian.png diff --git a/images/square-logos/shiwaforce.png b/static/images/square-logos/shiwaforce.png similarity index 100% rename from images/square-logos/shiwaforce.png rename to static/images/square-logos/shiwaforce.png diff --git a/images/square-logos/signalfx.png b/static/images/square-logos/signalfx.png similarity index 100% rename from images/square-logos/signalfx.png rename to static/images/square-logos/signalfx.png diff --git a/images/square-logos/skippbox.png b/static/images/square-logos/skippbox.png similarity index 100% rename from images/square-logos/skippbox.png rename to static/images/square-logos/skippbox.png diff --git a/images/square-logos/softserve.png b/static/images/square-logos/softserve.png similarity index 100% rename from images/square-logos/softserve.png rename to static/images/square-logos/softserve.png diff --git a/images/square-logos/solinea.png b/static/images/square-logos/solinea.png similarity index 100% rename from images/square-logos/solinea.png rename to static/images/square-logos/solinea.png diff --git a/images/square-logos/spheresoftware.png b/static/images/square-logos/spheresoftware.png similarity index 100% rename from images/square-logos/spheresoftware.png rename to static/images/square-logos/spheresoftware.png diff --git a/images/square-logos/spotinst.png b/static/images/square-logos/spotinst.png similarity index 100% rename from images/square-logos/spotinst.png rename to static/images/square-logos/spotinst.png diff --git a/images/square-logos/stackiq.png b/static/images/square-logos/stackiq.png similarity index 100% rename from images/square-logos/stackiq.png rename to static/images/square-logos/stackiq.png diff --git a/images/square-logos/stackoverdrive.png b/static/images/square-logos/stackoverdrive.png similarity index 100% rename from images/square-logos/stackoverdrive.png rename to static/images/square-logos/stackoverdrive.png diff --git a/images/square-logos/stackpoint.png b/static/images/square-logos/stackpoint.png similarity index 100% rename from images/square-logos/stackpoint.png rename to static/images/square-logos/stackpoint.png diff --git a/images/square-logos/stackstate.png b/static/images/square-logos/stackstate.png similarity index 100% rename from images/square-logos/stackstate.png rename to static/images/square-logos/stackstate.png diff --git a/images/square-logos/supergiant.png b/static/images/square-logos/supergiant.png similarity index 100% rename from images/square-logos/supergiant.png rename to static/images/square-logos/supergiant.png diff --git a/images/square-logos/superorbital.png b/static/images/square-logos/superorbital.png similarity index 100% rename from images/square-logos/superorbital.png rename to static/images/square-logos/superorbital.png diff --git a/images/square-logos/suse.png b/static/images/square-logos/suse.png similarity index 100% rename from images/square-logos/suse.png rename to static/images/square-logos/suse.png diff --git a/images/square-logos/sys_dig.png b/static/images/square-logos/sys_dig.png similarity index 100% rename from images/square-logos/sys_dig.png rename to static/images/square-logos/sys_dig.png diff --git a/images/square-logos/syseleven.png b/static/images/square-logos/syseleven.png similarity index 100% rename from images/square-logos/syseleven.png rename to static/images/square-logos/syseleven.png diff --git a/images/square-logos/tectonic.png b/static/images/square-logos/tectonic.png similarity index 100% rename from images/square-logos/tectonic.png rename to static/images/square-logos/tectonic.png diff --git a/images/square-logos/tencent.png b/static/images/square-logos/tencent.png similarity index 100% rename from images/square-logos/tencent.png rename to static/images/square-logos/tencent.png diff --git a/images/square-logos/tenxcloud.png b/static/images/square-logos/tenxcloud.png similarity index 100% rename from images/square-logos/tenxcloud.png rename to static/images/square-logos/tenxcloud.png diff --git a/images/square-logos/tigera.png b/static/images/square-logos/tigera.png similarity index 100% rename from images/square-logos/tigera.png rename to static/images/square-logos/tigera.png diff --git a/images/square-logos/treasuredata.png b/static/images/square-logos/treasuredata.png similarity index 100% rename from images/square-logos/treasuredata.png rename to static/images/square-logos/treasuredata.png diff --git a/images/square-logos/twistlock.png b/static/images/square-logos/twistlock.png similarity index 100% rename from images/square-logos/twistlock.png rename to static/images/square-logos/twistlock.png diff --git a/images/square-logos/vexxhost.png b/static/images/square-logos/vexxhost.png similarity index 100% rename from images/square-logos/vexxhost.png rename to static/images/square-logos/vexxhost.png diff --git a/images/square-logos/vmware.png b/static/images/square-logos/vmware.png similarity index 100% rename from images/square-logos/vmware.png rename to static/images/square-logos/vmware.png diff --git a/images/square-logos/wavefront.png b/static/images/square-logos/wavefront.png similarity index 100% rename from images/square-logos/wavefront.png rename to static/images/square-logos/wavefront.png diff --git a/images/square-logos/weave_works.png b/static/images/square-logos/weave_works.png similarity index 100% rename from images/square-logos/weave_works.png rename to static/images/square-logos/weave_works.png diff --git a/images/square-logos/wercker.png b/static/images/square-logos/wercker.png similarity index 100% rename from images/square-logos/wercker.png rename to static/images/square-logos/wercker.png diff --git a/images/square-logos/wise2c.png b/static/images/square-logos/wise2c.png similarity index 100% rename from images/square-logos/wise2c.png rename to static/images/square-logos/wise2c.png diff --git a/images/square-logos/wisecloud.png b/static/images/square-logos/wisecloud.png similarity index 100% rename from images/square-logos/wisecloud.png rename to static/images/square-logos/wisecloud.png diff --git a/images/square-logos/woqutech.png b/static/images/square-logos/woqutech.png similarity index 100% rename from images/square-logos/woqutech.png rename to static/images/square-logos/woqutech.png diff --git a/images/square-logos/zte.png b/static/images/square-logos/zte.png similarity index 100% rename from images/square-logos/zte.png rename to static/images/square-logos/zte.png diff --git a/images/squarespace_logo.png b/static/images/squarespace_logo.png similarity index 100% rename from images/squarespace_logo.png rename to static/images/squarespace_logo.png diff --git a/images/stackoverflow_icon.png b/static/images/stackoverflow_icon.png similarity index 100% rename from images/stackoverflow_icon.png rename to static/images/stackoverflow_icon.png diff --git a/images/suitcase.png b/static/images/suitcase.png similarity index 100% rename from images/suitcase.png rename to static/images/suitcase.png diff --git a/images/texture.png b/static/images/texture.png similarity index 100% rename from images/texture.png rename to static/images/texture.png diff --git a/images/toc_icon.png b/static/images/toc_icon.png similarity index 100% rename from images/toc_icon.png rename to static/images/toc_icon.png diff --git a/images/toc_icon_grey.png b/static/images/toc_icon_grey.png similarity index 100% rename from images/toc_icon_grey.png rename to static/images/toc_icon_grey.png diff --git a/images/twitter_icon.png b/static/images/twitter_icon.png similarity index 100% rename from images/twitter_icon.png rename to static/images/twitter_icon.png diff --git a/images/wheel.png b/static/images/wheel.png similarity index 100% rename from images/wheel.png rename to static/images/wheel.png diff --git a/images/wink_logo.png b/static/images/wink_logo.png similarity index 100% rename from images/wink_logo.png rename to static/images/wink_logo.png diff --git a/images/zalando_logo.png b/static/images/zalando_logo.png similarity index 100% rename from images/zalando_logo.png rename to static/images/zalando_logo.png diff --git a/js/bootstrap.min.js b/static/js/bootstrap.min.js similarity index 100% rename from js/bootstrap.min.js rename to static/js/bootstrap.min.js diff --git a/js/custom-jekyll/tags.js b/static/js/custom-jekyll/tags.js similarity index 100% rename from js/custom-jekyll/tags.js rename to static/js/custom-jekyll/tags.js diff --git a/js/glossary.js b/static/js/glossary.js similarity index 100% rename from js/glossary.js rename to static/js/glossary.js diff --git a/js/jquery-2.2.0.min.js b/static/js/jquery-2.2.0.min.js similarity index 100% rename from js/jquery-2.2.0.min.js rename to static/js/jquery-2.2.0.min.js diff --git a/js/jquery-ui.min.js b/static/js/jquery-ui.min.js similarity index 100% rename from js/jquery-ui.min.js rename to static/js/jquery-ui.min.js diff --git a/js/redirects.js b/static/js/redirects.js similarity index 100% rename from js/redirects.js rename to static/js/redirects.js diff --git a/js/script.js b/static/js/script.js similarity index 100% rename from js/script.js rename to static/js/script.js diff --git a/js/sweetalert.min.js b/static/js/sweetalert.min.js similarity index 100% rename from js/sweetalert.min.js rename to static/js/sweetalert.min.js diff --git a/js/user-journeys/home.js b/static/js/user-journeys/home.js similarity index 100% rename from js/user-journeys/home.js rename to static/js/user-journeys/home.js diff --git a/js/user-journeys/toc.js b/static/js/user-journeys/toc.js similarity index 100% rename from js/user-journeys/toc.js rename to static/js/user-journeys/toc.js