Шпаргалка по Kubectl для администраторов Kubernetes и подготовка к экзамену CKA
Это шпаргалка, создана для использования в качестве ориентира для ежедневных операций Kubernetes и администрирования, выполняемых через интерфейс командной строки с помощью kubectl. Если вы готовитесь к экзаменам CKA или CKAD, шпаргалка содержит команды, которые помогут вам быстро выполнить экзаменационные задания. При подготовке к экзамену не следует полностью полагаться на этот документ, а лучше пройти курс по содержанию с большой практикой.
Если у вас есть команда kubectl для экономии времени, которую мы пропустили в этом посте, не стесняйтесь оставить ее в разделе комментариев. Мы будем рады обновить документ в любое время.
Мы начнем с полезных общих команд, прежде чем рассмотрим команды для конкретных задач, используемые при развертывании администрирования и приложений в Kubernetes или OpenShift Cluster.
Полезные команды для общего использования
Ниже приведены некоторые из наиболее полезных команд общего пользования при работе с Kubernetes.
# Display Kubernetes API Server URL
$ kubectl cluster-info
# Dump all cluster information
$ kubectl cluster-info dump
# Get kubeadm config
$ kubectl -n kube-system get configmap kubeadm-config -o yaml
# List all nodes in the cluster
$ kubectl get nodes
# Check health of cluster components
$ kubectl get componentstatuses
$ kubectl get cs
# List all API resources
$ kubectl api-resources
# List API versions
$ kubectl api-versions1.Установите kubectl
Вот как установить kubectl в Linux и macOS:
Linux
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectlmacOS:
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectlПодтвердите установку, проверив версию:
$ kubectl version --client
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.3", GitCommit:"1e11e4a2108024935ecfcb2912226cedeafd99df", GitTreeState:"clean", BuildDate:"2020-10-14T12:50:19Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"darwin/amd64"}2. Включите завершение Bash.
По умолчанию завершение Bash не включено после установки команды kubectl. Включите его с помощью команд ниже.
Bash:
echo 'source <(kubectl completion bash)' >>~/.bashrc
source ~/.bashrczsh:
echo 'source <(kubectl completion zsh) >> ~/.zshrc
source ~/.zshrc3. Список и переключение контекста
Контекст — это группа параметров доступа. Каждый контекст содержит кластер Kubernetes, пользователя и пространство имен.
Контексты листинга:
kubectl config get-contextsПереключайтесь между кластерами, задав текущий контекст в файле kubeconfig :
$ kubectl config use-context <context-name>Установите запись контекста в kubeconfig:
kubectl config set-context <context-name>Если вы хотите изменить предпочтение пространства имен, используйте:
kubectl config set-context <context-name> --namespace=<ns-name>См. Текущий контекст:
kubectl config current-context4. Проверьте синтаксис файла yaml манифеста.
Если вы создали yaml-файл развертывания и хотите проверить синтаксис, используйте команду:
kubectl create --dry-run --validate -f <file>.yamlПример:
$ kubectl create --dry-run=client --validate -f hello-world.yml
pod/hello-world created (dry run)Если есть синтаксические ошибки, вы получите из вывода:
error: error parsing hello-world.yml: error converting YAML to JSON: yaml: line 12: did not find expected '-' indicator5. Очистите узел при удалении локальных данных.
Узел может быть очищен, а также очищены локальные данные, используемые запущенными контейнерами. Для этого используется синтаксис команды:
kubectl drain <node-name> --ignore-daemonsets=true --delete-local-data=trueДля принудительного слива вы можете добавить --force флаг, хотя это не рекомендуется.
6. Примените файлы и папки yaml.
Вы можете использовать аргумент apply, чтобы применить конфигурацию к ресурсу по имени файла или стандартному вводу. Синтаксис команды:
kubectl apply -f <file-name>.yaml
# Or for json:
kubectl apply -f <file-name>.jsonДля папки с несколькими ямл-филами используйте:
kubectl apply -R -f . # If files are in current working directoryС абсолютным путем:
kubectl apply -R -f /path/to/yaml/files7. Создавайте псевдонимы для экономии времени.
Вы также можете создать несколько псевдонимов, которые значительно ускорят использование командной строки.
$ vim ~/.bashrc
# kubectl alias
alias k='kubectl'
# Create resources
alias kcf='kubectl create -f'
alias kaf='kubectl apply -f'
# List resources
alias kgp='kubectl get pods'
alias kgpa='kubectl get pods --all-namespaces'
alias kgd='kubectl get deployments'
alias kgs='kubectl get service'
alias kgh='kubectl get hpa'
# Delete resources
alias kd='kubectl delete'
alias kdp='kubectl delete pods'
alias kdd='kubectl delete deployments'
alias kgs='kubectl delete service'8. Запустите временный модуль, который умирает при выходе.
Вы можете быстро создать временный модуль с сеансом оболочки для целей тестирования, который будет уничтожен при выходе.
kubectl run --rm -it --image=<image> <podname> -- shПример:
$ kubectl run --rm -it --image=alpine alpine -- sh
If you don't see a command prompt, try pressing enter.
/ # apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
v3.12.1-82-g0e1cfdcae4 [http://dl-cdn.alpinelinux.org/alpine/v3.12/main]
v3.12.1-85-gd70a46ae6d [http://dl-cdn.alpinelinux.org/alpine/v3.12/community]
OK: 12747 distinct packages available
/ # apk add wget curl vim
(1/12) Installing ca-certificates (20191127-r4)
(2/12) Installing nghttp2-libs (1.41.0-r0)
(3/12) Installing libcurl (7.69.1-r2)
(4/12) Installing curl (7.69.1-r2)
(5/12) Installing xxd (8.2.0735-r0)
(6/12) Installing lua5.3-libs (5.3.5-r6)
(7/12) Installing ncurses-terminfo-base (6.2_p20200523-r0)
(8/12) Installing ncurses-libs (6.2_p20200523-r0)
(9/12) Installing vim (8.2.0735-r0)
(10/12) Installing libunistring (0.9.10-r0)
(11/12) Installing libidn2 (2.3.0-r0)
(12/12) Installing wget (1.20.3-r1)
Executing busybox-1.31.1-r19.trigger
Executing ca-certificates-20191127-r4.trigger
OK: 39 MiB in 26 packages
/ # curl google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
/ # exit
Session ended, resume using 'kubectl attach alpine -c alpine -i -t' command when the pod is running
pod "alpine" deleted
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
alpine 0/1 Terminating 0 80s9. Создайте пространство имен.
Пространство имен создается с помощью команды:
kubectl create namespace <namespace-name>Или же
kubectl create ns <namespace-name>Чтобы переключиться в пространство имен для всех операций, используйте:
$ kubectl config get-contexts
$ kubectl config set-context <context-name> --namespace=<namespace-name>Примеры:
$ kubectl create ns dev
namespace/dev created
$ kubectl get ns dev -o yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: "2020-12-10T08:19:10Z"
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:status:
f:phase: {}
manager: kubectl-create
operation: Update
time: "2020-12-10T08:19:10Z"
name: dev
resourceVersion: "592755"
selfLink: /api/v1/namespaces/dev
uid: 8cd5639a-85db-4c84-927d-344bdec9acba
spec:
finalizers:
- kubernetes
status:
phase: Active10. Запустите команду оболочки в Pod без tty.
Давайте создадим модуль, работающий в фоновом режиме.
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: ubuntu
labels:
app: ubuntu
spec:
containers:
- name: ubuntu
image: ubuntu:latest
command: ["/bin/sleep", "3650d"]
imagePullPolicy: IfNotPresent
restartPolicy: Always
EOFПодтвердите, что Pod запущен:
$ kubectl get pods ubuntu
NAME READY STATUS RESTARTS AGE
ubuntu 1/1 Running 0 14sЗапуск сеанса оболочки с модулем:
$ kubectl exec --stdin --tty ubuntu -- sh
# exit
$ kubectl exec --stdin --tty ubuntu -- /bin/bash
root@ubuntu:/# exit
exitЗапуск команды прямо в контейнере без tty.
$ kubectl exec -it ubuntu -- ls -l /etc/hosts
-rw-r--r-- 1 root root 205 Dec 10 08:25 /etc/hosts
$ kubectl exec -it ubuntu -- apt update
kubectl exec -ti busybox -- nslookup <Pod-ip>
$ kubectl exec -it ubuntu -- cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focalУбить Pod.
$ kubectl delete pod ubuntu
pod "ubuntu" deleted11. Проверьте переменные среды в модуле.
Чтобы перечислить все переменные среды в модуле, используйте команду:
$ kubectl exec <pod> -- envПример
$ kubectl exec ubuntu -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=ubuntu
KUBERNETES_PORT_443_TCP_ADDR=172.20.0.1
KUBERNETES_SERVICE_HOST=172.20.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://172.20.0.1:443
KUBERNETES_PORT_443_TCP=tcp://172.20.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
HOME=/root12. Получите объяснение использования ресурсов.
Синтаксис команды:
$ kubectl explain <resource>Примеры:
kubectl explain pods
kubectl explain deploy
kubectl explain serviceОбъясните поля.
kubectl explain deploy.spec
kubectl explain deploy.spec.replicas
kubectl explain pod.metadata.namespace13. Сортировка ресурсов по названию.
Чтобы перечислить ресурсы, отсортированные по имени, вы будете использовать.
kubectl get <resource> --sort-by=.metadata.nameПримеры.
$ kubectl get pods --sort-by=.metadata.name
NAME READY STATUS RESTARTS AGE
ubuntu 1/1 Running 0 10m
$ kubectl get svc --sort-by=.metadata.name --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-system kube-dns ClusterIP 172.20.0.10 <none> 53/UDP,53/TCP 2d11h
default kubernetes ClusterIP 172.20.0.1 <none> 443/TCP 2d11h14. Создайте YAML-файл манифеста модуля.
Вы можете использовать kubectl run для создания файла манифеста yaml для развертывания Pods.
Страница справки по командам.
kubectl run pod --helpСледующая команда печатает соответствующие объекты API, не создавая их:
$ kubectl run nginx --image=nginx --restart=Never --dry-run=client -o yamlС ограничениями памяти и ЦП:
kubectl run nginx --image=nginx --restart=Never --limits='cpu=300m,memory=512Mi' --dry-run=client -o yamlС запросами и ограничениями как ЦП, так и памяти.
kubectl run nginx --image=nginx --restart=Never --requests='cpu=100m,memory=256Mi' --limits='cpu=300m,memory=512Mi' --dry-run=client -o yamlВы можете направить вывод в файл.
kubectl run nginx --image=nginx --restart=Never --dry-run=client -o yaml >nginx-pod.yamlЗатем вы можете создать модуль, применив файл.
$ kubectl apply -f ./nginx-pod.yaml
pod/nginx createdПодтвердите, что Pod запущен:
$ kubectl get pod nginx
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 31sУдалить Pod.
$ kubectl delete pod nginx
pod "nginx" deleted15. Создайте файл YAML для развертывания.
Аналогичные команды генерации применяются для типов ресурсов развертывания. Только то, что мы не пройдем –restart=Never.
kubectl create deploy nginx --image=nginx --replicas=3 --dry-run=client -o yamlЗаписать в файл
kubectl create deploy nginx --image=nginx --replicas=3 --dry-run=client -o yaml >nginx-deployment.ymlВы можете изменить файл и применить создание ресурсов.
$ kubectl apply -f nginx-deployment.yml
deployment.apps/nginx createdПроверить развертывание.
$ kubectl get deploy nginx
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 3/3 3 3 37sСписок модулей, соответствующих Nginx.
$ kubectl get pods -l app=nginx
NAME READY STATUS RESTARTS AGE
nginx-f89759699-6hcng 1/1 Running 0 70s
nginx-f89759699-dvqhf 1/1 Running 0 70s
nginx-f89759699-hgbtq 1/1 Running 0 70sУдалить развертывание.
$ kubectl delete deploy nginx
deployment.apps "nginx" deleted16. Предоставление доступа к модулю или развертыванию в службе.
Используйте команду kubectl expose, чтобы сделать развертывание или Pod доступными на ClusterIP или NodePort.
$ kubectl expose -hСм. Пример ниже.
$ kubectl expose deployment nginx --port=80 --type=ClusterIP
service/nginx exposed
$ kubectl get svc nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx ClusterIP 172.20.29.63 <none> 80/TCP 17sПоддерживаемые типы для службы: ClusterIP , NodePort , LoadBalancer или ExternalName .
$ kubectl expose deployment nginx --port=80 --type=NodePort
$ kubectl get svc nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 172.20.32.97 <none> 80:30292/TCP 3sВ этом другом примере создается служба для модуля redis , который обслуживает порт 6379 с именем «redis».
$ kubectl expose pod redis --port=6379 --name=redisВы также можете вручную указать порт, предоставляемый контейнером (порт приложения).
$ kubectl expose pod redis --type=ClusterIP --port=6379 --target-port=637917. Масштабирование модулей в развертывании.
Вы можете увеличить количество модулей в развертывании, не редактируя какой-либо файл.
$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 3/3 3 3 7h
$ kubectl scale --replicas=4 deployment nginx
deployment.apps/nginx scaled
$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 4/4 4 4 7h3m
$ kubectl get pods -l app=nginx
NAME READY STATUS RESTARTS AGE
nginx-f89759699-7x7q7 1/1 Running 0 2m21s
nginx-f89759699-jz9cj 1/1 Running 0 7h3m
nginx-f89759699-nm2nk 1/1 Running 0 7h3m
nginx-f89759699-ppdzr 1/1 Running 0 7h3m
$ kubectl scale --replicas=3 deployment nginx
deployment.apps/nginx scaled
$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 3/3 3 3 7h4m18. Перенесите все модули в узел и сделайте его недоступным для планирования.
Определите узел, над которым нужно действовать:
$ kubectl get nodesЗатем скажите Kubernetes, чтобы он опустошил узел:
$ kubectl drain <node-name>Возможно, вам придется игнорировать наборы демонов и удалить данные локального контейнера.
$ kubectl drain <node-name> --delete-local-data --ignore-daemonsetsСкажите Kubernetes, чтобы он прекратил планировать новые поды на ноде:
$ kubectl cordon <node-name>Чтобы возобновить планирование на узле, используйте команду:
$ kubectl uncordon <node-name>19. Создание нескольких контейнеров в модуле
Сначала сгенерируйте файл манифеста Pod. Мы создадим модуль под названием mypod с изображением ubuntu .
kubectl run mypod --image=nginx --restart=Never --dry-run=client -o yaml >mypod.yamlОтредактируйте файл и добавьте другие контейнеры в названный модуль.
$ vim mypod.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: mypod
name: mypod
spec:
containers:
- image: nginx
name: nginx
- image: redis
name: redis
dnsPolicy: ClusterFirst
restartPolicy: Never
status: {}Мы добавили два контейнера — nginx и redis. Чтобы применить конфигурации, выполните команду:
$ kubectl apply -f mypod.yaml
pod/mypod createdУбедитесь, что в капсуле есть два контейнера.
$ kubectl get pod mypod
NAME READY STATUS RESTARTS AGE
mypod 2/2 Running 0 39sОчистить:
$ kubectl delete -f mypod.yaml
pod "mypod" deleted20. Создание учетной записи службы, роли и привязки ролей
Создайте сервис под названием demo.
$ kubectl create sa demo
serviceaccount/demo createdСоздайте роль с именем demo, которая позволяет пользователю выполнять «получение», «просмотр» и «список» для модулей, развертывания, ds, rs, sts:
$ kubectl create role demo --verb=get,list,watch --resource=pods,deploy,ds,rs,sts
role.rbac.authorization.k8s.io/demo created
# All verbs
$ kubectl create clusterrole demo --verb='*' --resource=pods,deploy,ds,rs,sts
# For cluster role
$ kubectl create clusterrole demo --verb=get,list,watch --resource=pods,deploy,ds,rs,sts
clusterrole.rbac.authorization.k8s.io/demo createdСоздайте RoleBinding для demo роли.
$ kubectl create rolebinding demo --role=demo --user=demo
rolebinding.rbac.authorization.k8s.io/demo created
# For Cluster role
$ kubectl create rolebinding demo --clusterrole==demo --user=demo
# Clusterrole binding
$ kubectl create clusterrolebinding demo-admin --clusterrole=demo --user=demoПодтверждать:
$ kubectl get sa,role,rolebinding
NAME SECRETS AGE
serviceaccount/default 1 2d21h
serviceaccount/demo 1 4m48s
serviceaccount/newrelic 1 3h51m
NAME CREATED AT
role.rbac.authorization.k8s.io/demo 2020-12-10T19:09:01Z
NAME ROLE AGE
rolebinding.rbac.authorization.k8s.io/demo Role/demo 21sПодтвердить:
kubectl auth can-i create deployment --as demo # yes
kubectl auth can-i '*' ds --as demo # yesОчистить:
kubectl delete sa demo
kubectl delete role demo
kubectl delete clusterrole demo
kubectl delete rolebinding demo21. Получение журналов для пакетов
Получить последние журналы на именованном поде:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
newrelic-infra-hp8dt 1/1 Running 0 3h57m
newrelic-infra-r4bpg 1/1 Running 0 3h57m
nginx-f89759699-jz9cj 1/1 Running 0 8h
nginx-f89759699-nm2nk 1/1 Running 0 8h
nginx-f89759699-ppdzr 1/1 Running 0 8h
ubuntu 1/1 Running 0 10h
$ kubectl logs newrelic-infra-r4bpgСледите за потоком логов в реальном времени.
$ kubectl logs newrelic-infra-r4bpg -fПолучите последние журналы из всех модулей в развертывании:
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 3/3 3 3 8h
$ kubectl logs deploy/nginx
$ kubectl logs deploy/nginx -fИспользуйте регулярное выражение для извлечения журналов.
$ kubectl logs newrelic-infra-r4bpg | grep 'connect got id'
time="2020-12-10T15:19:37Z" level=info msg="connect got id" agent-guid=MjU4Mjg0NXxJTkZSQXxOQXw0NDQ3ODMzNDM1Nzk0NDYyMjgx agent-id=4447833435794462281 component=IdentityConnectServiceЗаписать вывод в файл:
$ kubectl logs newrelic-infra-r4bpg | grep 'connect got id' > logs.txtРаспечатайте журналы для предыдущего экземпляра контейнера в модуле, если он существует.
kubectl logs <pod-name> --previous22. Получите лучшие стручки
Получите лучшие модули использования ресурсов.
$ kubectl top podПолучите лучшие модули с высокой загрузкой ЦП:
$ kubectl top pod --sort-by='cpu'Фильтр с помощью меток.
$ kubectl top pod -l 'app=nginx' --sort-by='cpu'
NAME CPU(cores) MEMORY(bytes)
nginx-f89759699-jz9cj 0m 2Mi
nginx-f89759699-nm2nk 0m 2Mi
nginx-f89759699-ppdzr 0m 2MiПолучите только один модуль с максимальной загрузкой ЦП и запишите вывод в файл.
$ kubectl top pod -l 'app=nginx' --sort-by='cpu' | awk 'NR==2{print $1}'
$ kubectl top pod -l 'app=nginx' --sort-by='cpu' | awk 'NR==2{print $1}' >top_cpu.txt23. Развернуть и откатить развертывание
Разверните контейнер Nginx.
$ kubectl create deploy web --replicas=2 --image=nginx:1.13.2
deployment.apps/web created
$ kubectl get deploy web
NAME READY UP-TO-DATE AVAILABLE AGE
web 2/2 2 2 16sОбновление развертывания для использования образа nginx версии 1.14.2
# Syntax: $ kubectl set image CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N
$ kubectl set image deployment web nginx=nginx:1.14.2 --record
deployment.apps/web image updatedПроверить статус внедрения
$ kubectl rollout status deployment/web
deployment "web" successfully rolled outПросмотрите историю развертывания развертывания:
$ kubectl rollout history deployment/web
deployment.apps/web
REVISION CHANGE-CAUSE
1 kubectl set image deployment web nginx=nginx:1.14.2 --record=trueОткат к предыдущему развертыванию:
$ kubectl rollout undo deployment web
deployment.apps/web rolled backРазвертывание до конкретной версии
$ kubectl rollout undo deployment/web --to-revision=324. Обозначьте узел и назначьте модули узлам.
Как добавить метки к Node.
$ kubectl label nodes <node-name> <label-key>=<label-value>Пример:
kubectl label nodes k8snode01 disktype=ssdЗатем вы можете назначить модули для узлов.
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disktype: ssd25. Копирование файлов в модули и из модулей.
В kubectl CP команды могут быть использованы для копирования файлов в стручках или из стручки.
$ kubectl cp --helpВ этом примере мы скопируем файлы из модуля в нашу локальную систему.
$ kubectl exec -ti mypod1 -- ls
bin boot dev dump_ops_in_flight.txt etc home lib lib64 lost+found media mnt opt proc root run sbin session_ls.txt srv sys tmp usr var
$ kubectl cp mypod1:/dump_ops_in_flight.txt dump_ops_in_flight.txt
tar: Removing leading `/' from member names
$ kubectl cp mypod1:/dump_ops_in_flight.txt session_ls.txt
tar: Removing leading `/' from member namesДавайте подтвердим, что два скопированных файла доступны локально.
$ file dump_ops_in_flight.txt session_ls.txt
dump_ops_in_flight.txt: ASCII text
session_ls.txt: ASCII textСкопируйте файл в Pod.
$ kubectl cp myfile.txt mypod1:/myfile.txt
$ kubectl exec -ti mypod1 -- ls
README.md bin boot dev dump_ops_in_flight.txt etc home lib lib64 lost+found media mnt opt proc root run sbin session_ls.txt srv sys tmp usr varДополнительные примеры см. На странице справки.
26. Отладка DNS.
Запустите модуль DNS Utils:
kubectl apply -f https://k8s.io/examples/admin/dns/dnsutils.yamlПодтвердите, что модуль запущен:
kubectl get pods dnsutilsЗапуск nslookup:
kubectl exec -i -t dnsutils -- nslookup <dns-entry>Или получить доступ к оболочке
kubectl exec -i -t dnsutils -- shПроверка настроек конфигурации локального DNS:
kubectl exec -ti dnsutils -- cat /etc/resolv.confПроверка того, запущены ли DNS Pods:
$ kubectl get pods --namespace=kube-system -l k8s-app=kube-dns
NAME READY STATUS RESTARTS AGE
coredns-5c59fd465f-777cw 1/1 Running 0 29m
coredns-5c59fd465f-bwpj4 1/1 Running 0 29m
coredns-5c59fd465f-sdndq 1/1 Running 0 29m
coredns-5c59fd465f-wldl9 1/1 Running 0 29mУбедитесь, что конечные точки DNS доступны:
kubectl get endpoints kube-dns --namespace=kube-system

Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.