+ 파드는 쿠버네티스 애플리케이션의 기본 실행 단위이다. 각 파드는 클러스터에서 실행중인 워크로드의 일부를 나타낸다. 파드에 대해 더 자세히 알아본다. +
+서비스와 레이블
여러분은 kubectl 명령에--expose
옵션을 사용함으로써 디플로이먼트 생성과 동일 시점에 서비스를 생성할 수 있다.
diff --git a/content/ko/docs/tutorials/online-training/_index.md b/content/ko/docs/tutorials/online-training/_index.md deleted file mode 100755 index 7d3447fd4eef9..0000000000000 --- a/content/ko/docs/tutorials/online-training/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "온라인 트레이닝 코스" -weight: 20 ---- - diff --git a/content/ko/docs/tutorials/online-training/overview.md b/content/ko/docs/tutorials/online-training/overview.md deleted file mode 100644 index 44f1c69ddc358..0000000000000 --- a/content/ko/docs/tutorials/online-training/overview.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: 쿠버네티스 온라인 트레이닝 개요 -content_template: templates/concept ---- - -{{% capture overview %}} - -이 페이지에서는 쿠버네티스 온라인 트레이닝을 제공하는 사이트를 소개한다. - -{{% /capture %}} - -{{% capture body %}} - -* [AIOps Essentials (Autoscaling Kubernetes with Prometheus Metrics) with Hands-On Labs (Linux Academy)](https://linuxacademy.com/devops/training/course/name/using-machine-learning-to-scale-kubernetes-clusters) - -* [Amazon EKS Deep Dive with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/amazon-web-services/training/course/name/amazon-eks-deep-dive) - -* [Cloud Native Certified Kubernetes Administrator (CKA) with Hands-On Labs & Practice Exams (Linux Academy)](https://linuxacademy.com/linux/training/course/name/cloud-native-certified-kubernetes-administrator-cka) - -* [Certified Kubernetes Administrator (CKA) Preparation Course (CloudYuga)](https://cloudyuga.guru/courses/cka-online-self-paced) - -* [Certified Kubernetes Administrator Preparation Course with Practice Tests (KodeKloud)](https://kodekloud.com/p/certified-kubernetes-administrator-with-practice-tests) - -* [Certified Kubernetes Application Developer (CKAD) with Hands-On Labs & Practice Exams (Linux Academy)] (https://linuxacademy.com/containers/training/course/name/certified-kubernetes-application-developer-ckad/) - -* [Certified Kubernetes Application Developer (CKAD) Preparation Course (CloudYuga)](https://cloudyuga.guru/courses/ckad-online-self-paced) - -* [Certified Kubernetes Application Developer Preparation Course with Practice Tests (KodeKloud)](https://kodekloud.com/p/kubernetes-certification-course) - -* [Getting Started with Google Kubernetes Engine (Coursera)](https://www.coursera.org/learn/google-kubernetes-engine) - -* [Getting Started with Kubernetes (Pluralsight)](https://www.pluralsight.com/courses/getting-started-kubernetes) - -* [Getting Started with Kubernetes Clusters on OCI Oracle Kubernetes Engine (OKE) (Learning Library)](https://apexapps.oracle.com/pls/apex/f?p=44785:50:0:::50:P50_EVENT_ID,P50_COURSE_ID:5935,256) - -* [Google Kubernetes Engine Deep Dive (Linux Academy)] (https://linuxacademy.com/google-cloud-platform/training/course/name/google-kubernetes-engine-deep-dive) - -* [Helm Deep Dive with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/helm-deep-dive-part-1) - -* [Hands-on Introduction to Kubernetes (Instruqt)](https://play.instruqt.com/public/topics/getting-started-with-kubernetes) - -* [Introduction to Kubernetes (edX)](https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x) - -* [Kubernetes Essentials with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-essentials) - -* [Kubernetes for the Absolute Beginners with Hands-on Labs (KodeKloud)](https://kodekloud.com/p/kubernetes-for-the-absolute-beginners-hands-on) - -* [Kubernetes Fundamentals (LFS258) (The Linux Foundation)](https://training.linuxfoundation.org/training/kubernetes-fundamentals/) - -* [Kubernetes Quick Start with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-quick-start) - -* [Kubernetes the Hard Way with Hands-On Labs (Linux Academy)](https://linuxacademy.com/linux/training/course/name/kubernetes-the-hard-way) - -* [Kubernetes Security with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-security) - -* [Launch Your First OpenShift Operator with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/containers/training/course/name/red-hat-open-shift) - -* [Learn Kubernetes by Doing - 100% Hands-On Experience (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/learn-kubernetes-by-doing) - -* [Learn Kubernetes using Interactive Hands-on Scenarios (Katacoda)](https://www.katacoda.com/courses/kubernetes/) - -* [Microservice Applications in Kubernetes - 100% Hands-On Experience (Linux Academy)] (https://linuxacademy.com/devops/training/course/name/learn-microservices-by-doing) - -* [Monitoring Kubernetes With Prometheus with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-and-prometheus) - -* [Service Mesh with Istio with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/service-mesh-with-istio-part-1) - -* [Scalable Microservices with Kubernetes (Udacity)](https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615) - -* [Self-paced Kubernetes online course (Learnk8s Academy)](https://learnk8s.io/academy) -{{% /capture %}} diff --git a/content/ko/docs/tutorials/services/source-ip.md b/content/ko/docs/tutorials/services/source-ip.md index 23ba647830651..11af03664d29c 100644 --- a/content/ko/docs/tutorials/services/source-ip.md +++ b/content/ko/docs/tutorials/services/source-ip.md @@ -1,6 +1,7 @@ --- title: 소스 IP 주소 이용하기 content_template: templates/tutorial +min-kubernetes-server-version: v1.5 --- {{% capture overview %}} @@ -14,26 +15,38 @@ content_template: templates/tutorial {{% capture prerequisites %}} -{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} - -## 용어 +### 용어 이 문서는 다음 용어를 사용한다. -* [NAT](https://en.wikipedia.org/wiki/Network_address_translation): 네트워크 주소 변환 -* [소스 NAT](https://en.wikipedia.org/wiki/Network_address_translation#SNAT): 패킷 상의 소스 IP 주소를 변경함, 보통 노드의 IP 주소 -* [대상 NAT](https://en.wikipedia.org/wiki/Network_address_translation#DNAT): 패킷 상의 대상 IP 주소를 변경함, 보통 파드의 IP 주소 -* [VIP](/ko/docs/concepts/services-networking/service/#가상-ip와-서비스-프록시): 가상 IP 주소, 모든 쿠버네티스 서비스에 할당된 것 같은 -* [Kube-proxy](/ko/docs/concepts/services-networking/service/#가상-ip와-서비스-프록시): 네트워크 데몬으로 모든 노드에서 서비스 VIP 관리를 관리한다. +{{< comment >}} +이 섹션을 현지화하는 경우 대상 지역에 대한 위키피디아 +페이지로 연결한다. +{{< /comment >}} + +[NAT](https://en.wikipedia.org/wiki/Network_address_translation) +: 네트워크 주소 변환 + +[소스 NAT](https://en.wikipedia.org/wiki/Network_address_translation#SNAT) +: 패킷 상의 소스 IP 주소를 변경함, 보통 노드의 IP 주소 + +[대상 NAT](https://en.wikipedia.org/wiki/Network_address_translation#DNAT) +: 패킷 상의 대상 IP 주소를 변경함, 보통 파드의 IP 주소 + +[VIP](/ko/docs/concepts/services-networking/service/#가상-ip와-서비스-프록시) +: 가상 IP 주소, 모든 쿠버네티스 서비스에 할당된 것 같은 +[Kube-proxy](/ko/docs/concepts/services-networking/service/#가상-ip와-서비스-프록시) +: 네트워크 데몬으로 모든 노드에서 서비스 VIP 관리를 관리한다. -## 전제 조건 +### 전제 조건 + +{{< include "task-tutorial-prereqs.md" >}} -이 문서의 예시를 실행하기 위해서 쿠버네티스 1.5 이상의 동작하는 클러스터가 필요하다. 이 예시는 HTTP 헤더로 수신한 요청의 소스 IP 주소를 회신하는 작은 nginx 웹 서버를 이용한다. 다음과 같이 생성할 수 있다. -```console +```shell kubectl create deployment source-ip-app --image=k8s.gcr.io/echoserver:1.4 ``` 출력은 다음과 같다. @@ -54,12 +67,13 @@ deployment.apps/source-ip-app created {{% capture lessoncontent %}} -## Type=ClusterIP인 서비스에서 소스 IP +## `Type=ClusterIP` 인 서비스에서 소스 IP -쿠버네티스 1.2부터 기본으로 제공하는 -[iptables 모드](/ko/docs/concepts/services-networking/service/#proxy-mode-iptables)로 운영하는 경우 -클러스터 내에서 클러스터 IP로 패킷을 보내면 소스 NAT를 통과하지 않는다. -Kube-proxy는 이 모드를 `proxyMode` 엔드포인트를 통해 노출한다. +[iptables 모드](/ko/docs/concepts/services-networking/service/#proxy-mode-iptables) +(기본값)에서 kube-proxy를 운영하는 경우 클러스터 내에서 +클러스터IP로 패킷을 보내면 +소스 NAT를 통과하지 않는다. kube-proxy가 실행중인 노드에서 +`http://localhost:10249/proxyMode` 를 입력해서 kube-proxy 모드를 조회할 수 있다. ```console kubectl get nodes @@ -71,9 +85,11 @@ kubernetes-node-6jst Ready
클라우드 네이티브 커리어를 구축하세요
+쿠버네티스는 클라우드 네이티브 무브먼트의 핵심입니다. 리눅스 재단이 제공하는 교육과 인증 프로그램을 통해 커리어에 투자하고, 쿠버네티스를 배우며, 클라우드 네이티브 프로젝트를 성공적으로 수행하세요.
+edX에서 무료 강좌 수강하기
+
+ 쿠버네티스 소개
+
+ 쿠버네티스를 배우고 싶습니까? 컨테이너화된 애플리케이션의 관리를 위한 이 강력한 시스템에 대해 심도있는 입문 교육을 받으세요.
++ 강좌로 이동하기 +
+ 클라우드 인프라 기술 소개 +
+오픈 소스의 리더인 리눅스 재단으로부터 직접 클라우드를 구축하고 관리하는 기술의 기초를 배우세요.
++ 강좌로 이동하기 +
+ 리눅스 소개 +
+리눅스를 배운 적이 없습니까? 새로 다시 배우기를 원하시나요? 주요 리눅스 배포판에 걸쳐서 그래픽 인터페이스와 커멘드 라인을 모두 사용할 수 있는 유용한 실무 지식을 개발하세요.
++ 강좌로 이동하기 +
리눅스 재단과 함께 배우기
+리눅스 재단은 쿠버네티스 애플리케이션 개발과 운영 라이프사이클의 모든 측면에 대해 강사 주도와 자기 주도 학습 과정을 제공합니다.
++ 강좌 보기 +
쿠버네티스 공인 자격 획득하기
++ 공인 쿠버네티스 애플리케이션 개발자(Certified Kubernetes Application Developer, CKAD) +
+공인 쿠버네티스 애플리케이션 개발자 시험은 사용자가 쿠버네티스의 클라우드 네이티브 애플리케이션을 디자인, 구축, 구성과 노출을 할 수 있음을 인증합니다.
++ 인증으로 이동하기 +
+ 공인 쿠버네티스 관리자(Certified Kubernetes Administrator, CKA) +
+공인 쿠버네티스 관리자 프로그램은 CKA가 쿠버네티스 관리자 직무을 수행할 수 있는 기술, 지식과 역량을 갖추고 있음을 보장합니다.
++ 인증으로 이동하기 +
쿠버네티스 교육 파트너
+쿠버네티스 교육 파트너 네트워크는 쿠버네티스 및 클라우드 네이티브 프로젝트를 위한 교육 서비스를 제공합니다.
+Kariera Cloud Native
+Kubernetes stanowi serce całego ruchu cloud native. Korzystając ze szkoleń i certyfikacji oferowanych przez Linux Foundation i naszych partnerów zainwestujesz w swoją karierę, nauczysz się korzystać z Kubernetesa i sprawisz, że Twoje projekty cloud native osiągną sukces.
+Darmowe kursy na edX
+
+ Wprowadzenie do Kubernetesa
+
+ Chcesz nauczyć się Kubernetesa? Oto solidne podstawy do poznania tego potężnego systemu zarządzania aplikacjami w kontenerach.
++ Przejdź do kursu +
+ Wprowadzenie do technologii infrastruktur chmurowych +
+Poznaj podstawy budowy i zarządzania technologiami chmurowymi bezpośrednio od Linux Foundation – lidera otwartego oprogramowania.
++ Przejdź do kursu +
+ Wprowadzenie do Linuksa +
+Nigdy nie uczyłeś sie o Linuksie? Chcesz odświeżyć swoją wiedzę? Zdobądź praktyczną wiedzę używając interfejsów graficznych oraz linii poleceń w najważniejszych dystrybucjach Linuksa.
++ Przejdź do kursu +
Nauka z Linux Foundation
+Linux Foundation oferuje szkolenia prowadzone przez instruktora oraz szkolenia samodzielne obejmujące wszystkie aspekty rozwijania i zarządzania aplikacjami na Kubrnetesie.
++ Zobacz ofertę szkoleń +
Uzyskaj certyfikat Kubernetes
++ Certified Kubernetes Application Developer (CKAD) +
+Egzamin na certyfikowanego dewelopera aplikacji (Certified Kubernetes Application Developer) potwierdza umiejętności projektowania, budowania, konfigurowania i udostępniania "rdzennych" aplikacji dla Kubernetesa.
++ Przejdź do certyfikacji +
+ Certified Kubernetes Administrator (CKA) +
+Program certyfikowanego administratora Kubernetes (Certified Kubernetes Administrator) potwierdza umiejętności, wiedzę i kompetencje do podejmowania się zadań administracji Kubernetesem.
++ Przejdź do certyfikacji +
Partnerzy szkoleniowi Kubernetes
+Nasza sieć partnerów oferuje usługi szkoleniowe z Kubernetesa i projektów cloud native.
+--add-dir-header | +|
Если true, добавляет директорию файла в заголовок | +|
--alsologtostderr | +|
Логировать в стандартный поток ошибок, а также в файлы | +|
--application-metrics-count-limit int По умолчанию: 100 | +|
Максимальное количество сохраняемых метрик приложения (на каждый контейнер) | +|
--as string | +|
Имя пользователя, от которого будет выполняться операция | +|
--as-group stringArray | +|
Группа, от которой будет выполняться операция, этот флаг можно использовать неоднократно, чтобы указать несколько групп. | +|
--azure-container-registry-config string | +|
Путь к файлу, который содержит информацию с конфигурацией реестра контейнера Azure. | +|
--boot-id-file string По умолчанию: "/proc/sys/kernel/random/boot_id" | +|
Разделенный запятыми список файлов для проверки boot-id. Используйте первый существующий. | +|
--cache-dir string По умолчанию: "$HOME/.kube/http-cache" | +|
Директория HTTP-кеша по умолчанию | +|
--certificate-authority string | +|
Путь к файлу сертификата для центра сертификации | +|
--client-certificate string | +|
Путь к файлу клиентского сертификата для TLS | +|
--client-key string | +|
Путь к файлу клиентского ключа для TLS | +|
--cloud-provider-gce-l7lb-src-cidrs cidrs По умолчанию: 130.211.0.0/22,35.191.0.0/16 | +|
Открыть CIDR в брандмауэре GCE для прокси трафика L7 LB и проверки работоспособности | +|
--cloud-provider-gce-lb-src-cidrs cidrs По умолчанию: 130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16 | +|
Открыть CIDR в брандмауэре GCE для прокси трафика L4 LB и проверки работоспособности | +|
--cluster string | +|
Имя используемого кластера kubeconfig | +|
--container-hints string По умолчанию: "/etc/cadvisor/container_hints.json" | +|
Путь к файлу подсказок контейнера | +|
--containerd string По умолчанию: "/run/containerd/containerd.sock" | +|
Конечная точка containerd | +|
--containerd-namespace string По умолчанию: "k8s.io" | +|
Пространство имени containerd | +|
--context string | +|
Имя контекста kubeconfig | +|
--default-not-ready-toleration-seconds int По умолчанию: 300 | +|
Указывает tolerationSeconds для допущения notReady:NoExecute, которое по умолчанию добавляется к каждому поду, у которого нет установлено такое допущение. | +|
--default-unreachable-toleration-seconds int По умолчанию: 300 | +|
Указывает tolerationSeconds для допущения unreachable:NoExecute, которое по умолчанию добавляется к каждому поду, у которого нет установлено такое допущение. | +|
--disable-root-cgroup-stats | +|
Отключить сбор статистики корневой группы (Cgroup) | +|
--docker string По умолчанию: "unix:///var/run/docker.sock" | +|
docker endpoint | +|
--docker-env-metadata-whitelist string | +|
Список ключей переменных окружения, разделенный запятыми, которые необходимо собрать для Docker-контейнеров | +|
--docker-only | +|
В дополнение к корневой статистике уведомлять только о Docker-контейнерах | +|
--docker-root string По умолчанию: "/var/lib/docker" | +|
УСТАРЕЛО: корень docker считывается из информации docker (запасной вариант, по умолчанию: /var/lib/docker) | +|
--docker-tls | +|
Использовать TLS для подключения к Docker | +|
--docker-tls-ca string По умолчанию: "ca.pem" | +|
Путь к доверенному CA | +|
--docker-tls-cert string По умолчанию: "cert.pem" | +|
путь к клиентскому сертификату | +|
--docker-tls-key string По умолчанию: "key.pem" | +|
Путь к приватному ключу | +|
--enable-load-reader | +|
Включить считыватель нагрузки процессора | +|
--event-storage-age-limit string По умолчанию: "default=0" | +|
Максимальный период времени для хранения события (по каждому типу). Значение флага — список из ключей и значений, разделенные запятыми, где ключи — это типы событий (например: создание, oom) либо "default", а значение — длительность. По умолчанию флаг применяется ко всем неуказанным типам событий | +|
--event-storage-event-limit string По умолчанию: "default=0" | +|
Максимальное количество событий для хранения (по каждому типу). Значение флага — список из ключей и значений, разделенные запятыми, где ключи — это типы событий (например: создание, oom) либо "default", а значение — целое число. По умолчанию флаг применяется ко всем неуказанным типам событий | +|
--global-housekeeping-interval duration По умолчанию: 1m0s | +|
Интервал между глобальными служебными операциями (housekeepings) | +|
-h, --help | +|
Получить справочную информацию по команде kubectl | +|
--housekeeping-interval duration По умолчанию: 10s | +|
Интервал между служебными операциями (housekeepings) контейнера | +|
--insecure-skip-tls-verify | +|
Если true, значит сертификат сервера не будет проверятся на достоверность. Это сделает подключения через HTTPS небезопасными. | +|
--kubeconfig string | +|
Путь к файлу kubeconfig для использования в CLI-запросах. | +|
--log-backtrace-at traceLocation По умолчанию: :0 | +|
При логировании указанной строки (file:N), сгенерировать трассировку стека | +|
--log-cadvisor-usage | +|
Записывать ли в журнал использование контейнера cAdvisor | +|
--log-dir string | +|
Если указан, хранить лог-файлы в этой директории. | +|
--log-file string | +|
Если указан, использовать этот лог-файл | +|
--log-file-max-size uint По умолчанию: 1800 | +|
Установить максимальный размер файла лог-файла (в Мб). Если значение равно 0, максимальный размер файла не ограничен. | +|
--log-flush-frequency duration По умолчанию: 5s | +|
Максимальное количество секунд между очисткой лог-файлов | +|
--logtostderr По умолчанию: true | +|
Логировать в стандартный поток ошибок вместо сохранения логов в файлы | +|
--machine-id-file string По умолчанию: "/etc/machine-id,/var/lib/dbus/machine-id" | +|
Список файлов, разделенных запятыми, для проверки machine-id. Используйте первый существующий. | +|
--match-server-version | +|
Убедиться, что версия сервера соответствует версии клиента | +|
-n, --namespace string | +|
Указать область пространства имен для данного запроса CLI | +|
--password string | +|
Пароль для базовой аутентификации на API-сервере | +|
--profile string По умолчанию: "none" | +|
Имя профиля. Может быть одним из перечисленных значений: none|cpu|heap|goroutine|threadcreate|block|mutex | +|
--profile-output string По умолчанию: "profile.pprof" | +|
Имя файла для записи профиля. | +|
--request-timeout string По умолчанию: "0" | +|
Время ожидания перед тем, как перестать ожидать ответ от сервера. Значения должны содержать соответствующую единицу времени (например, 1s, 2m, 3h). Нулевое значение означает, что у запросов нет тайм-аута. +. | +|
-s, --server string | +|
Адрес и порт API-сервера Kubernetes | +|
--skip-headers | +|
Если true, не отображать заголовки в сообщениях лога. | +|
--skip-log-headers | +|
Если true, не отображать заголовки при открытии лог-файлов. | +|
--stderrthreshold severity По умолчанию: 2 | +|
Логи указанного уровня серьёзности или выше выводить в поток stderr | +|
--storage-driver-buffer-duration duration По умолчанию: 1m0s | +|
Буферизировать запись в драйвере хранилища в течение указанного времени, и сохранять в файловом хранилище в виде одной транзакции | +|
--storage-driver-db string По умолчанию: "cadvisor" | +|
Имя базы данных | +|
--storage-driver-host string По умолчанию: "localhost:8086" | +|
Хост и порт базы данных, записанный в формате host:port | +|
--storage-driver-password string По умолчанию: "root" | +|
Пароль к базе данных | +|
--storage-driver-secure | +|
Использовать безопасное соединение с базой данных | +|
--storage-driver-table string По умолчанию: "stats" | +|
Имя таблицы | +|
--storage-driver-user string По умолчанию: "root" | +|
Имя пользователя базы данных | +|
--token string | +|
Аутентификационный (bearer) токен для аутентификации на API-сервере | +|
--update-machine-info-interval duration По умолчанию: 5m0s | +|
Интервал между обновлениями информации о машине. | +|
--user string | +|
Имя пользователя для kubeconfig | +|
--username string | +|
Имя пользователя для базовой аутентификации на API-сервере | +|
-v, --v Level | +|
Номер уровня серьёзности логирования | +|
--version version[=true] | +|
Вывод версии команды | +|
--vmodule moduleSpec | +|
Список, разделённый запятыми, в виде настроек pattern=N для фильтрации лог-файлов | +
+ Пример: `kubectl get pod example-pod1 example-pod2` + + * Выбор нескольких типов ресурсов по отдельности: `TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>`.
+ Пример: `kubectl get pod/example-pod1 replicationcontroller/example-rc1` + + * Выбор ресурсов по одному или нескольким файлов: `-f file1 -f file2 -f file<#>` + + * [Используйте YAML вместо JSON](/docs/concepts/configuration/overview/#general-configuration-tips), так так YAML удобнее для пользователей, особенно в конфигурационных файлов.
+ Пример: `kubectl get pod -f ./pod.yaml` + +* `flags`: определяет дополнительные флаги. Например, вы можете использовать флаги `-s` или `--server`, чтобы указать адрес и порт API-сервера Kubernetes.
+ +{{< caution >}} +Указанные вами флаги из командной строки переопределят значения по умолчанию и связанные переменные окружения. +{{< /caution >}} + +Если вам нужна помощь, выполните команду `kubectl help`. + +## Операции + +В следующей таблице приведены краткие описания и общий синтаксис всех операций `kubectl`: + +Операция | Синтаксис | Описание +-------------------- | -------------------- | -------------------- +`annotate` |
kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
| Добавить или обновить аннотации одного или нескольких ресурсов.
+`api-versions` | `kubectl api-versions [flags]` | Вывести доступные версии API.
+`apply` | `kubectl apply -f FILENAME [flags]`| Внести изменения в конфигурацию ресурса из файла или потока stdin.
+`attach` | `kubectl attach POD -c CONTAINER [-i] [-t] [flags]` | Подключиться к запущенному контейнеру либо для просмотра потока вывода, либо для работы с контейнером (stdin).
+`autoscale` | kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]
| Автоматически промасштабировать набор подов, управляемых контроллером репликации.
+`cluster-info` | `kubectl cluster-info [flags]` | Показать информацию о главном узле и сервисов в кластере.
+`config` | `kubectl config SUBCOMMAND [flags]` | Изменить файлы kubeconfig. Подробные сведения смотрите в отдельных подкомандах.
+`create` | `kubectl create -f FILENAME [flags]` | Создать один или несколько ресурсов из файла или stdin.
+`delete` | kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]
| Удалить ресурсы из файла, потока stdin, либо с помощью селекторов меток, имен, селекторов ресурсов или ресурсов.
+`describe` | kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]
| Показать подробное состояние одного или нескольких ресурсов.
+`diff` | `kubectl diff -f FILENAME [flags]`| Diff file or stdin against live configuration (**BETA**)
+`edit` | kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]
| Отредактировать и обновить определение одного или нескольких ресурсов на сервере, используя редактор по умолчанию.
+`exec` | `kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]` | Выполнить команду в контейнере пода.
+`explain` | `kubectl explain [--recursive=false] [flags]` | Посмотреть документацию по ресурсам. Например, поды, узлы, сервисы и т.д.
+`expose` | kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags]
| Создать Kubernetes-сервис из контроллера репликации, сервиса или пода.
+`get` | kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]
| Вывести один или несколько ресурсов.
+`label` | kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
| Добавить или обновить метки для одного или нескольких ресурсов.
+`logs` | `kubectl logs POD [-c CONTAINER] [--follow] [flags]` | Вывести логи контейнера в поде.
+`patch` | kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags]
| Обновить один или несколько полей ресурса, используя стратегию слияния патча.
+`port-forward` | `kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]` | Переадресовать один или несколько локальных портов в под.
+`proxy` | `kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]` | Запустить прокси для API Kubernetes.
+`replace` | `kubectl replace -f FILENAME` | Заменить ресурс из файла или потока stdin.
+`rolling-update` | kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags]
| Выполните плавающее обновление, постепенно заменяя указанный контроллер репликации и его поды.
+`run` | `kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags]` | Запустить указанный образ в кластере.
+`scale` | kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags]
| Обновить размер указанного контроллера репликации.
+`version` | `kubectl version [--client] [flags]` | Отобразить версию Kubernetes, запущенного на клиенте и сервере.
+
+Примечание: подробную информацию о командных операциях смотрите в справочную документацию [kubectl](/ru/docs/user-guide/kubectl/).
+
+## Типы ресурсов
+
+В следующей таблице перечислены все доступные типы ресурсов вместе с сокращенными аббревиатурами.
+
+(Это актуальный вывод команды `kubectl api-resources` с версии Kubernetes 1.13.3.)
+
+| Resource Name | Short Names | API Group | Namespaced | Resource Kind |
+|---|---|---|---|---|
+| `bindings` | | | true | Binding|
+| `componentstatuses` | `cs` | | false | ComponentStatus |
+| `configmaps` | `cm` | | true | ConfigMap |
+| `endpoints` | `ep` | | true | Endpoints |
+| `limitranges` | `limits` | | true | LimitRange |
+| `namespaces` | `ns` | | false | Namespace |
+| `nodes` | `no` | | false | Node |
+| `persistentvolumeclaims` | `pvc` | | true | PersistentVolumeClaim |
+| `persistentvolumes` | `pv` | | false | PersistentVolume |
+| `pods` | `po` | | true | Pod |
+| `podtemplates` | | | true | PodTemplate |
+| `replicationcontrollers` | `rc` | | true| ReplicationController |
+| `resourcequotas` | `quota` | | true | ResourceQuota |
+| `secrets` | | | true | Secret |
+| `serviceaccounts` | `sa` | | true | ServiceAccount |
+| `services` | `svc` | | true | Service |
+| `mutatingwebhookconfigurations` | | admissionregistration.k8s.io | false | MutatingWebhookConfiguration |
+| `validatingwebhookconfigurations` | | admissionregistration.k8s.io | false | ValidatingWebhookConfiguration |
+| `customresourcedefinitions` | `crd`, `crds` | apiextensions.k8s.io | false | CustomResourceDefinition |
+| `apiservices` | | apiregistration.k8s.io | false | APIService |
+| `controllerrevisions` | | apps | true | ControllerRevision |
+| `daemonsets` | `ds` | apps | true | DaemonSet |
+| `deployments` | `deploy` | apps | true | Deployment |
+| `replicasets` | `rs` | apps | true | ReplicaSet |
+| `statefulsets` | `sts` | apps | true | StatefulSet |
+| `tokenreviews` | | authentication.k8s.io | false | TokenReview |
+| `localsubjectaccessreviews` | | authorization.k8s.io | true | LocalSubjectAccessReview |
+| `selfsubjectaccessreviews` | | authorization.k8s.io | false | SelfSubjectAccessReview |
+| `selfsubjectrulesreviews` | | authorization.k8s.io | false | SelfSubjectRulesReview |
+| `subjectaccessreviews` | | authorization.k8s.io | false | SubjectAccessReview |
+| `horizontalpodautoscalers` | `hpa` | autoscaling | true | HorizontalPodAutoscaler |
+| `cronjobs` | `cj` | batch | true | CronJob |
+| `jobs` | | batch | true | Job |
+| `certificatesigningrequests` | `csr` | certificates.k8s.io | false | CertificateSigningRequest |
+| `leases` | | coordination.k8s.io | true | Lease |
+| `events` | `ev` | events.k8s.io | true | Event |
+| `ingresses` | `ing` | extensions | true | Ingress |
+| `networkpolicies` | `netpol` | networking.k8s.io | true | NetworkPolicy |
+| `poddisruptionbudgets` | `pdb` | policy | true | PodDisruptionBudget |
+| `podsecuritypolicies` | `psp` | policy | false | PodSecurityPolicy |
+| `clusterrolebindings` | | rbac.authorization.k8s.io | false | ClusterRoleBinding |
+| `clusterroles` | | rbac.authorization.k8s.io | false | ClusterRole |
+| `rolebindings` | | rbac.authorization.k8s.io | true | RoleBinding |
+| `roles` | | rbac.authorization.k8s.io | true | Role |
+| `priorityclasses` | `pc` | scheduling.k8s.io | false | PriorityClass |
+| `csidrivers` | | storage.k8s.io | false | CSIDriver |
+| `csinodes` | | storage.k8s.io | false | CSINode |
+| `storageclasses` | `sc` | storage.k8s.io | false | StorageClass |
+| `volumeattachments` | | storage.k8s.io | false | VolumeAttachment |
+
+## Опции вывода
+
+В следующих разделах рассматривается форматирование и сортировка вывода определенных команд. Дополнительные сведения о том, какие команды поддерживают разные варианты вывода, смотрите в справочной документации [kubectl](/ru/docs/user-guide/kubectl/).
+
+### Форматирование вывода
+
+Стандартный формат вывода всех команд `kubectl` представлен в человекочитаемом текстовом формате. Чтобы вывести подробности в определенном формате можно добавить флаги `-o` или `--output` к команде `kubectl`.
+
+#### Синтаксис
+
+```shell
+kubectl [command] [TYPE] [NAME] -o 阅读关于 kubernetes 和容器规范的最新信息,以及获取最新的技术。
--- - - diff --git a/content/zh/blog/_posts/2018-08-29-kubernetes-testing-ci-automating-contributor-experience.md b/content/zh/blog/_posts/2018-08-29-kubernetes-testing-ci-automating-contributor-experience.md index 6ee4f9c11b08e..492c6917eb1da 100644 --- a/content/zh/blog/_posts/2018-08-29-kubernetes-testing-ci-automating-contributor-experience.md +++ b/content/zh/blog/_posts/2018-08-29-kubernetes-testing-ci-automating-contributor-experience.md @@ -135,10 +135,10 @@ Prow 让我们做以下事情: * 实施组织范围和重构 GitHub 仓库策略,如[Knative Builds](https://github.com/kubernetes/test-infra/tree/master/prow/cmd/branchprotector)和[GitHub labels](https://github.com/kubernetes/test-infra/tree/master/label_sync) -Prow最初由构建 Google Kubernetes Engine 的工程效率团队开发,并由 Kubernetes SIG Testing 的多个成员积极贡献。 Prow 已被其他几个开源项目采用,包括 Istio,JetStack,Knative 和 OpenShift。 [Getting started with Prow](https://github.com/kubernetes/test-infra/blob/master/prow/getting_started.md)需要一个 Kubernetes 集群和 `kubectl apply starter.yaml`(在 Kubernetes 集群上运行 pod)。 +Prow最初由构建 Google Kubernetes Engine 的工程效率团队开发,并由 Kubernetes SIG Testing 的多个成员积极贡献。 Prow 已被其他几个开源项目采用,包括 Istio,JetStack,Knative 和 OpenShift。 [Getting started with Prow](https://github.com/kubernetes/test-infra/tree/master/prow#getting-started)需要一个 Kubernetes 集群和 `kubectl apply starter.yaml`(在 Kubernetes 集群上运行 pod)。 -* [Prow: Testing the way to Kubernetes Next](https://bentheelder.io/posts/prow) +* [Prow: Testing the way to Kubernetes Next](https://elder.dev/posts/prow) * [Automation and the Kubernetes Contributor Experience](https://www.youtube.com/watch?v=BsIC7gPkH5M) diff --git a/content/zh/case-studies/_index.html b/content/zh/case-studies/_index.html index 12823ae1a1708..0fcec1439d9ca 100644 --- a/content/zh/case-studies/_index.html +++ b/content/zh/case-studies/_index.html @@ -7,15 +7,3 @@ class: gridPage cid: caseStudies --- - - diff --git a/content/zh/docs/_index.md b/content/zh/docs/_index.md index 0b9545eaa6524..916fb499639d8 100644 --- a/content/zh/docs/_index.md +++ b/content/zh/docs/_index.md @@ -2,8 +2,3 @@ title: 文档 weight: 5 --- - - diff --git a/content/zh/docs/concepts/architecture/_index.md b/content/zh/docs/concepts/architecture/_index.md index d64618a95839d..a68ed48a4577e 100755 --- a/content/zh/docs/concepts/architecture/_index.md +++ b/content/zh/docs/concepts/architecture/_index.md @@ -2,10 +2,3 @@ title: "Kubernetes 架构" weight: 30 --- - - diff --git a/content/zh/docs/concepts/architecture/nodes.md b/content/zh/docs/concepts/architecture/nodes.md index e83f3bad58903..d62eaf81851b9 100644 --- a/content/zh/docs/concepts/architecture/nodes.md +++ b/content/zh/docs/concepts/architecture/nodes.md @@ -338,7 +338,7 @@ In most cases, node controller limits the eviction rate to `--node-eviction-rate` (default 0.1) per second, meaning it won't evict pods from more than 1 node per 10 seconds. --> -大部分情况下,节点控制器把驱逐频率限制在每秒 `--node-eviction-rate` 个(默认为 0.1)。这表示它每 10 秒钟内之多从一个节点驱逐 Pods。 +大部分情况下,节点控制器把驱逐频率限制在每秒 `--node-eviction-rate` 个(默认为 0.1)。这表示它每 10 秒钟内至多从一个节点驱逐 Pods。 diff --git a/content/zh/docs/concepts/configuration/_index.md b/content/zh/docs/concepts/configuration/_index.md index d717de50f5463..c2419c817b6db 100644 --- a/content/zh/docs/concepts/configuration/_index.md +++ b/content/zh/docs/concepts/configuration/_index.md @@ -2,10 +2,3 @@ title: "配置" weight: 70 --- - - diff --git a/content/zh/docs/concepts/containers/_index.md b/content/zh/docs/concepts/containers/_index.md index 083fad7a49308..b4c6dc3821891 100644 --- a/content/zh/docs/concepts/containers/_index.md +++ b/content/zh/docs/concepts/containers/_index.md @@ -2,10 +2,3 @@ title: "容器" weight: 50 --- - - diff --git a/content/zh/docs/concepts/extend-kubernetes/_index.md b/content/zh/docs/concepts/extend-kubernetes/_index.md index 9eef5fffc5f54..c52f4624e6971 100644 --- a/content/zh/docs/concepts/extend-kubernetes/_index.md +++ b/content/zh/docs/concepts/extend-kubernetes/_index.md @@ -2,10 +2,3 @@ title: 扩展 Kubernetes weight: 40 --- - - diff --git a/content/zh/docs/concepts/extend-kubernetes/api-extension/_index.md b/content/zh/docs/concepts/extend-kubernetes/api-extension/_index.md index 51c5bdcc7ac70..6da3f808f7bcc 100644 --- a/content/zh/docs/concepts/extend-kubernetes/api-extension/_index.md +++ b/content/zh/docs/concepts/extend-kubernetes/api-extension/_index.md @@ -2,10 +2,3 @@ title: 扩展 Kubernetes API weight: 20 --- - - diff --git a/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/_index.md b/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/_index.md index 1b46b18dd2a52..7fc201326e0d1 100644 --- a/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/_index.md +++ b/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/_index.md @@ -2,10 +2,3 @@ title: 计算、存储和网络扩展 weight: 30 --- - - diff --git a/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md b/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md new file mode 100644 index 0000000000000..f4180fc41068c --- /dev/null +++ b/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md @@ -0,0 +1,374 @@ +--- +title: 设备插件 +description: 使用 Kubernetes 设备插件框架来实现适用于 GPU、NIC、FPGA、InfiniBand 以及类似的需要特定于供应商设置的资源的插件。 +content_template: templates/concept +weight: 20 +--- + +{{% capture overview %}} +{{< feature-state for_k8s_version="v1.10" state="beta" >}} + + +Kubernetes 提供了一个[设备插件框架](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/resource-management/device-plugin.md),您可以用来将系统硬件资源发布到 {{< glossary_tooltip term_id="kubelet" >}}。 + +供应商可以实现设备插件,由您手动部署或作为 {{< glossary_tooltip term_id="daemonset" >}} 来部署,而不必定制 Kubernetes 本身的代码。目标设备包括 GPU、高性能 NIC、FPGA、InfiniBand 适配器以及其他类似的、可能需要特定于供应商的初始化和设置的计算资源。 + +{{% /capture %}} + +{{% capture body %}} + +## 注册设备插件 + + +kubelet 输出了一个 `Registration` 的 gRPC 服务: + +```gRPC +service Registration { + rpc Register(RegisterRequest) returns (Empty) {} +} +``` + + +设备插件可以通过此 gRPC 服务在 kubelet 进行注册。在注册期间,设备插件需要发送下面几样内容: + + * 设备插件的 Unix 套接字。 + * 设备插件的 API 版本。 + * `ResourceName` 是需要公布的。这里 `ResourceName` 需要遵循[扩展资源命名方案](/docs/concepts/configuration/manage-compute-resources-container/#extended-resources),类似于 `vendor-domain/resourcetype`。(比如 NVIDIA GPU 就被公布为 `nvidia.com/gpu`。) + +成功注册后,设备插件就向 kubelet 发送他所管理的设备列表,然后 kubelet 负责将这些资源发布到 API 服务器,作为 kubelet 节点状态更新的一部分。 + +比如,设备插件在 kubelet 中注册了 `hardware-vendor.example/foo` 并报告了节点上的两个运行状况良好的设备后,节点状态将更新以通告该节点已安装2个 `Foo` 设备并且是可用的。 + + +然后用户需要去请求其他类型的资源的时候,就可以在 [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core) 规范请求这类设备,但是有以下的限制: + * 扩展资源仅可作为整数资源使用,并且不能被过量使用 + * 设备不能在容器之间共享 + + +假设 Kubernetes 集群正在运行一个设备插件,该插件在一些节点上公布的资源为 `hardware-vendor.example/foo`。 + +下面就是一个 Pod 示例,请求此资源以运行某演示负载: + +```yaml +--- +apiVersion: v1 +kind: Pod +metadata: + name: demo-pod +spec: + containers: + - name: demo-container-1 + image: k8s.gcr.io/pause:2.0 + resources: + limits: + hardware-vendor.example/foo: 2 +# +# 这个 pod 需要两个 hardware-vendor.example/foo 设备 +# 而且只能够调度到满足需求的 node 上 +# +# 如果该节点中有2个以上的设备可用,其余的可供其他 pod 使用 +``` + + +## 设备插件的实现 + +设备插件的常规工作流程包括以下几个步骤: + + * 初始化。在这个阶段,设备插件将执行供应商特定的初始化和设置,以确保设备处于就绪状态。 + * 插件使用主机路径 `/var/lib/kubelet/device-plugins/` 下的 Unix socket 启动一个 gRPC 服务,该服务实现以下接口: + + ```gRPC + service DevicePlugin { + // ListAndWatch returns a stream of List of Devices + // Whenever a Device state change or a Device disappears, ListAndWatch + // returns the new list + rpc ListAndWatch(Empty) returns (stream ListAndWatchResponse) {} + + // Allocate is called during container creation so that the Device + // Plugin can run device specific operations and instruct Kubelet + // of the steps to make the Device available in the container + rpc Allocate(AllocateRequest) returns (AllocateResponse) {} + } + ``` + + * 插件通过 Unix socket 在主机路径 `/var/lib/kubelet/device-plugins/kubelet.sock` 处向 kubelet 注册自身。 + * 成功注册自身后,设备插件将以服务模式运行,在此期间,它将持续监控设备运行状况,并在设备状态发生任何变化时向 kubelet 报告。它还负责响应 `Allocate` gRPC 请求。在 `Allocate` 期间,设备插件可能还会做一些设备特定的准备;例如 GPU 清理或 QRNG 初始化。如果操作成功,则设备插件将返回 `AllocateResponse`,其中包含用于访问被分配的设备容器运行时的配置。kubelet 将此信息传递到容器运行时。 + + +### 处理 kubelet 重启 + +设备插件应能监测到 kubelet 重启,并且向新的 kubelet 实例来重新注册自己。在当前实现中,当 kubelet 重启的时候,新的 kubelet 实例会删除 `/var/lib/kubelet/device-plugins` 下所有已经存在的 Unix sockets。设备插件需要能够监控到它的 Unix socket 被删除,并且当发生此类事件时重新注册自己。 + + +## 设备插件部署 + +你可以将你的设备插件作为节点操作系统的软件包来部署、作为 DaemonSet 来部署或者手动部署。 + +规范目录 `/var/lib/kubelet/device-plugins` 是需要特权访问的,所以设备插件必须要在被授权的安全的上下文中运行。如果你将设备插件部署为 DaemonSet,`/var/lib/kubelet/device-plugins` 目录必须要在插件的 [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core) 中声明作为 {{< glossary_tooltip term_id="volume" >}} 被 mount 到插件中。 + +如果你选择 DaemonSet 方法,你可以通过 Kubernetes 进行以下操作:将设备插件的 Pod 放置在节点上,在出现故障后重新启动 daemon Pod,来进行自动进行升级。 + + +## API 兼容性 + +Kubernetes 设备插件支持还处于 beta 版本。所以在稳定版本出来之前 API 会以不兼容的方式进行更改。作为一个项目,Kubernetes 建议设备插件开发者: + +* 注意未来版本的更改 +* 支持多个版本的设备插件 API,以实现向后/向前兼容性。 + +如果你启用 DevicePlugins 功能,并在需要升级到 Kubernetes 版本来获得较新的设备插件 API 版本的节点上运行设备插件,请在升级这些节点之前先升级设备插件以支持这两个版本。采用该方法将确保升级期间设备分配的连续运行。 + + +## 监控设备插件资源 + +{{< feature-state for_k8s_version="v1.15" state="beta" >}} + +为了监控设备插件提供的资源,监控代理程序需要能够发现节点上正在使用的设备,并获取元数据来描述哪个指标与容器相关联。设备监控代理暴露给 [Prometheus](https://prometheus.io/) 的指标应该遵循 [Kubernetes Instrumentation Guidelines](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/instrumentation.md),使用 `pod`、`namespace` 和 `container` 标签来标识容器。 + + +kubelet 提供了 gRPC 服务来使得正在使用中的设备被发现,并且还为这些设备提供了元数据: + +```gRPC +// PodResourcesLister is a service provided by the kubelet that provides information about the +// node resources consumed by pods and containers on the node +service PodResourcesLister { + rpc List(ListPodResourcesRequest) returns (ListPodResourcesResponse) {} +} +``` + +gRPC 服务通过 `/var/lib/kubelet/pod-resources/kubelet.sock` 的 UNIX 套接字来提供服务。设备插件资源的监控代理程序可以部署为守护进程或者 DaemonSet。规范的路径 `/var/lib/kubelet/pod-resources` 需要特权来进入,所以监控代理程序必须要在获得授权的安全的上下文中运行。如果设备监控代理以 DaemonSet 形式运行,必须要在插件的 [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core) 中声明将 `/var/lib/kubelet/pod-resources` 目录以 {{< glossary_tooltip term_id="volume" >}} 形式被 mount 到容器中。 + +对“PodResources 服务”的支持要求启用 “KubeletPodResources” [特性门控](/docs/reference/command-line-tools-reference/feature-gates/)。从 Kubernetes 1.15 开始默认启用。 + + +## 设备插件与拓扑管理器的集成 + +{{< feature-state for_k8s_version="v1.17" state="alpha" >}} + +拓扑管理器是 Kubelet 的一个组件,它允许以拓扑对齐方式来调度资源。为了做到这一点,设备插件 API 进行了扩展来包括一个 `TopologyInfo` 结构体。 + +```gRPC +message TopologyInfo { + repeated NUMANode nodes = 1; +} + +message NUMANode { + int64 ID = 1; +} +``` + + +设备插件希望拓扑管理器可以将填充的 TopologyInfo 结构体作为设备注册的一部分以及设备 ID 和设备的运行状况发送回去。然后设备管理器将使用此信息来咨询拓扑管理器并做出资源分配决策。 + +`TopologyInfo` 支持定义 `nodes` 字段,允许为 `nil`(默认)或者是一个 NUMA nodes 的列表。这样就可以使设备插件可以跨越 NUMA nodes 去发布。 + +下面是一个由设备插件为设备填充 `TopologyInfo` 结构体的示例: + +``` +pluginapi.Device{ID: "25102017", Health: pluginapi.Healthy, Topology:&pluginapi.TopologyInfo{Nodes: []*pluginapi.NUMANode{&pluginapi.NUMANode{ID: 0,},}}} +``` + + +## 设备插件示例 {#examples} + +下面是一些设备插件实现的示例: + +* [AMD GPU device plugin](https://github.com/RadeonOpenCompute/k8s-device-plugin) +* [Intel device plugins](https://github.com/intel/intel-device-plugins-for-kubernetes) 支持 Intel GPU、FPGA 和 QuickAssist 设备 +* [KubeVirt device plugins](https://github.com/kubevirt/kubernetes-device-plugins) 用于硬件辅助的虚拟化 +* The [NVIDIA GPU device plugin](https://github.com/NVIDIA/k8s-device-plugin) + * 需要 [nvidia-docker](https://github.com/NVIDIA/nvidia-docker) 2.0,允许运行 Docker 容器的时候开启 GPU。 +* [NVIDIA GPU device plugin for Container-Optimized OS](https://github.com/GoogleCloudPlatform/container-engine-accelerators/tree/master/cmd/nvidia_gpu) +* [RDMA device plugin](https://github.com/hustcat/k8s-rdma-device-plugin) +* [Solarflare device plugin](https://github.com/vikaschoudhary16/sfc-device-plugin) +* [SR-IOV Network device plugin](https://github.com/intel/sriov-network-device-plugin) +* [Xilinx FPGA device plugins](https://github.com/Xilinx/FPGA_as_a_Service/tree/master/k8s-fpga-device-plugin/trunk) + +{{% /capture %}} +{{% capture whatsnext %}} + + +* 查看 [调度 GPU 资源](/docs/tasks/manage-gpus/scheduling-gpus/) 来学习使用设备插件 +* 查看在 node 上如何[广告扩展资源](/docs/tasks/administer-cluster/extended-resource-node/) +* 阅读如何在 Kubernetes 中使用 [TLS 入口的硬件加速](https://kubernetes.io/blog/2019/04/24/hardware-accelerated-ssl/tls-termination-in-ingress-controllers-using-kubernetes-device-plugins-and-runtimeclass/) +* 学习[拓扑管理器](/docs/tasks/adminster-cluster/topology-manager/) + +{{% /capture %}} diff --git a/content/zh/docs/concepts/overview/_index.md b/content/zh/docs/concepts/overview/_index.md index 87550923ffca5..932a448363820 100644 --- a/content/zh/docs/concepts/overview/_index.md +++ b/content/zh/docs/concepts/overview/_index.md @@ -2,10 +2,3 @@ title: 概述 weight: 20 --- - - diff --git a/content/zh/docs/concepts/overview/working-with-objects/_index.md b/content/zh/docs/concepts/overview/working-with-objects/_index.md index 477bdc5b18829..5a57415cc2442 100644 --- a/content/zh/docs/concepts/overview/working-with-objects/_index.md +++ b/content/zh/docs/concepts/overview/working-with-objects/_index.md @@ -2,10 +2,3 @@ title: "使用 Kubernetes 对象" weight: 40 --- - - diff --git a/content/zh/docs/concepts/policy/_index.md b/content/zh/docs/concepts/policy/_index.md index a724a7dd475c2..68973c7a8581a 100644 --- a/content/zh/docs/concepts/policy/_index.md +++ b/content/zh/docs/concepts/policy/_index.md @@ -2,10 +2,3 @@ title: "策略" weight: 160 --- - - diff --git a/content/zh/docs/concepts/scheduling/_index.md b/content/zh/docs/concepts/scheduling/_index.md index bab0d7198826b..2f5138bfd8f6f 100644 --- a/content/zh/docs/concepts/scheduling/_index.md +++ b/content/zh/docs/concepts/scheduling/_index.md @@ -2,8 +2,3 @@ title: "调度" weight: 90 --- - - diff --git a/content/zh/docs/concepts/security/_index.md b/content/zh/docs/concepts/security/_index.md index 4c79303ff30a0..ec97d8f15529c 100644 --- a/content/zh/docs/concepts/security/_index.md +++ b/content/zh/docs/concepts/security/_index.md @@ -2,8 +2,3 @@ title: "安全" weight: 81 --- - - diff --git a/content/zh/docs/concepts/services-networking/_index.md b/content/zh/docs/concepts/services-networking/_index.md index 905f25af01b37..b8cc1a2f5860c 100644 --- a/content/zh/docs/concepts/services-networking/_index.md +++ b/content/zh/docs/concepts/services-networking/_index.md @@ -2,10 +2,3 @@ title: "服务、负载均衡和联网" weight: 80 --- - - diff --git a/content/zh/docs/concepts/storage/_index.md b/content/zh/docs/concepts/storage/_index.md index 1880a0aef7278..c6accc53143bb 100644 --- a/content/zh/docs/concepts/storage/_index.md +++ b/content/zh/docs/concepts/storage/_index.md @@ -2,10 +2,3 @@ title: "存储" weight: 70 --- - - diff --git a/content/zh/docs/concepts/workloads/_index.md b/content/zh/docs/concepts/workloads/_index.md index 850d6b64bd22d..de9c41d3c266b 100644 --- a/content/zh/docs/concepts/workloads/_index.md +++ b/content/zh/docs/concepts/workloads/_index.md @@ -2,10 +2,3 @@ title: "工作负载" weight: 50 --- - - diff --git a/content/zh/docs/concepts/workloads/controllers/_index.md b/content/zh/docs/concepts/workloads/controllers/_index.md index 21c6b5b903529..05824cb1905ca 100644 --- a/content/zh/docs/concepts/workloads/controllers/_index.md +++ b/content/zh/docs/concepts/workloads/controllers/_index.md @@ -2,10 +2,3 @@ title: "控制器" weight: 20 --- - - diff --git a/content/zh/docs/concepts/workloads/controllers/cron-jobs.md b/content/zh/docs/concepts/workloads/controllers/cron-jobs.md index 1dfb9f39488fe..3c8bb9fdafb0a 100644 --- a/content/zh/docs/concepts/workloads/controllers/cron-jobs.md +++ b/content/zh/docs/concepts/workloads/controllers/cron-jobs.md @@ -36,7 +36,7 @@ All **CronJob** `schedule:` times are based on the timezone of the master where --> {{< note >}} -所有 **CronJob** 的 `schedule:` 时间都是基于初始 Job 的主控节点的时区。 +所有 **CronJob** 的 `schedule:` 时间都使用 UTC 时间表示。 {{< /note >}} +描述 Deployment 中的 _desired state_,并且 Deployment 控制器以受控速率更改实际状态,以达到期望状态。可以定义 Deployments 以创建新的 ReplicaSets ,或删除现有 Deployments ,并通过新的 Deployments 使用其所有资源。 + 2. 运行 `kubectl get deployments` 以检查 Deployment 是否已创建。如果仍在创建 Deployment ,则输出以下内容: - + ```shell NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-deployment 3 0 0 0 1s @@ -247,7 +251,7 @@ The following is an example of a Deployment. It creates a ReplicaSet to bring up 3. To see the Deployment rollout status, run `kubectl rollout status deployment.v1.apps/nginx-deployment`. The output is similar to this: --> 3. 要查看 Deployment 展开状态,运行 `kubectl rollout status deployment.v1.apps/nginx-deployment`。输出: - + ```shell Waiting for rollout to finish: 2 out of 3 new replicas have been updated... deployment.apps/nginx-deployment successfully rolled out @@ -257,7 +261,7 @@ The following is an example of a Deployment. It creates a ReplicaSet to bring up 4. Run the `kubectl get deployments` again a few seconds later. The output is similar to this: --> 4. 几秒钟后再次运行 `kubectl get deployments`。输出: - + ```shell NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-deployment 3 3 3 3 18s @@ -271,7 +275,7 @@ The following is an example of a Deployment. It creates a ReplicaSet to bring up 5. To see the ReplicaSet (`rs`) created by the Deployment, run `kubectl get rs`. The output is similar to this: --> 5. 要查看 Deployment 创建的 ReplicaSet (`rs`),运行 `kubectl get rs`。输出: - + ```shell NAME DESIRED CURRENT READY AGE nginx-deployment-75675f5897 3 3 3 18s @@ -286,7 +290,7 @@ The following is an example of a Deployment. It creates a ReplicaSet to bring up 6. To see the labels automatically generated for each Pod, run `kubectl get pods --show-labels`. The following output is returned: --> 6. 要查看每个 Pod 自动生成的标签,运行 `kubectl get pods --show-labels`。返回以下输出: - + ```shell NAME READY STATUS RESTARTS AGE LABELS nginx-deployment-75675f5897-7ci7o 1/1 Running 0 18s app=nginx,pod-template-hash=3123191453 @@ -361,7 +365,7 @@ is changed, for example if the labels or container images of the template are up The output is similar to this: --> 输出: - + ```shell deployment.apps/nginx-deployment image updated ``` @@ -378,7 +382,7 @@ is changed, for example if the labels or container images of the template are up - + 输出: ```shell @@ -499,12 +503,11 @@ up to 3 replicas, as well as scaling down the old ReplicaSet to 0 replicas. * Get details of your Deployment: --> * 获取 Deployment 的更多信息 - ```shell kubectl describe deployments ``` 输出: @@ -648,7 +651,6 @@ rolled back. * Suppose that you made a typo while updating the Deployment, by putting the image name as `nginx:1.91` instead of `nginx:1.9.1`: --> * 假设在更新 Deployment 时犯了一个拼写错误,将镜像名称命名为 `nginx:1.91` 而不是 `nginx:1.9.1`: - ```shell kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true ``` @@ -693,7 +695,6 @@ rolled back. * You see that the number of old replicas --> * 查看旧 ReplicaSets : - ```shell kubectl get rs ``` @@ -742,16 +743,15 @@ rolled back. {{< /note >}} * 获取 Deployment 描述信息: - ```shell kubectl describe deployment ``` 输出: @@ -811,7 +811,7 @@ rolled back. 按照如下步骤检查回滚历史: 1. 首先,检查 Deployment 修改历史: @@ -819,7 +819,7 @@ rolled back. kubectl rollout history deployment.v1.apps/nginx-deployment ``` 输出: @@ -855,7 +855,7 @@ rolled back. ``` 输出: @@ -893,7 +893,7 @@ Follow the steps given below to rollback the Deployment from the current version ``` 输出: @@ -910,7 +910,7 @@ Follow the steps given below to rollback the Deployment from the current version ``` 输出: @@ -939,7 +939,7 @@ Follow the steps given below to rollback the Deployment from the current version ``` 输出: @@ -958,7 +958,7 @@ Follow the steps given below to rollback the Deployment from the current version ``` 输出: @@ -1073,7 +1073,6 @@ ReplicaSets (ReplicaSets with Pods) in order to mitigate risk. This is called *p * Ensure that the 10 replicas in your Deployment are running. --> * 确保这10个副本都在运行。 - ```shell kubectl get deploy ``` @@ -1092,7 +1091,6 @@ ReplicaSets (ReplicaSets with Pods) in order to mitigate risk. This is called *p * You update to a new image which happens to be unresolvable from inside the cluster. --> * 更新到新镜像,该镜像恰好无法从集群内部解析。 - ```shell kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:sometag ``` @@ -1111,7 +1109,6 @@ ReplicaSets (ReplicaSets with Pods) in order to mitigate risk. This is called *p `maxUnavailable` requirement that you mentioned above. Check out the rollout status: --> * 镜像更新使用 ReplicaSet nginx-deployment-1989198191 启动新的展开,但由于上面提到的最大不可用要求。检查展开状态: - ```shell kubectl get rs ``` @@ -1139,7 +1136,7 @@ ReplicaSet with the most replicas. ReplicaSets with zero replicas are not scaled 在上面的示例中,3 个副本添加到旧 ReplicaSet 中,2 个副本添加到新 ReplicaSet 。展开过程最终应将所有副本移动到新的 ReplicaSet ,假定新的副本变得正常。要确认这一点,请运行: @@ -1395,6 +1392,198 @@ apply multiple fixes in between pausing and resuming without triggering unnecess nginx-3926361531 3 3 3 28s ``` + +可以在触发一个或多个更新之前暂停 Deployment ,然后继续它。这允许在暂停和恢复之间应用多个修补程序,而不会触发不必要的 Deployment 。 + + +* 例如,对于一个刚刚创建的 Deployment : + 获取 Deployment 信息: + ```shell + kubectl get deploy + ``` + + 输出: + ``` + NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE + nginx 3 3 3 3 1m + ``` + + + 获取 Deployment 状态: + ```shell + kubectl get rs + ``` + + + 输出: + ``` + NAME DESIRED CURRENT READY AGE + nginx-2142116321 3 3 3 1m + ``` + + +使用如下指令中断运行: + ```shell + kubectl rollout pause deployment.v1.apps/nginx-deployment + ``` + + + 输出: + ``` + deployment.apps/nginx-deployment paused + ``` + + +* 然后更新 Deployment 镜像: + ```shell + kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 + ``` + + + 输出: + ``` + deployment.apps/nginx-deployment image updated + ``` + + +* 注意没有新的展开: + ```shell + kubectl rollout history deployment.v1.apps/nginx-deployment + ``` + + + 输出: + ``` + deployments "nginx" + REVISION CHANGE-CAUSE + 1