Я сопоставил с документацией на веб-странице Kubernetes, и этот код совпадает с кодом, который я написал ниже ...
Не могли бы вы связать фрагмент документации, с которымВы сравниваете свой код? Как другие люди уже предложили в своих ответах и комментариях, ваш yaml
недействителен. Вы уверены, что не используете какой-то устаревший учебник или документы?
Давайте отладим его вместе шаг за шагом:
- Когда я использую точно такой же кодВы отправили в своем вопросе, сообщение об ошибке, которое я получил, сильно отличается от того, которое вы отправили:
ошибка: ошибка синтаксического анализа pod.yml: ошибка преобразования YAML в JSON: yaml: строка 12: не нашел ожидаемый ключ
ОК, так что давайте перейдем к упомянутой строке 12 и проверим, в чем может быть проблема:
11 ports:
12 containerPort: 3000
13 resources:
14 limits:
15 memory: "100Mi"
16 cpu: "100m"
Сама строка 12 выглядит фактически полностью нормально, поэтомупроблема должна быть в другом месте. Давайте отладим его дальше, используя этот онлайн-валидатор yaml. Это также предполагает, что это yaml
синтаксически неверно, однако оно указало на другую строку:
(): не нашел ожидаемый ключ при синтаксическом анализе сопоставления блоков в столбце 9 строки 5
Если вы внимательно посмотрите на приведенный выше фрагмент кода, вы можете заметить, что уровень отступа в строке 13 выглядит довольно странно. Когда вы удаляете один ненужный пробел прямо перед resources
(он должен быть на том же уровне, что и порты) yaml validador сообщит вам, что ваш синтаксис yaml
правильный. Хотя это может быть уже действительный yaml
, это не значит, что это действительный ввод для Kubernetes , который требует определенной структуры, следуя определенным правилам.
Давайте попробуем еще раз ... Теперь
kubectl apply -f pod.yml
возвращает совершенно другую ошибку:
Ошибка сервера (BadRequest): ошибка при создании «pod.yml»: pod в версии«v1» не может быть обработан как Pod: никакой тип «pod» не зарегистрирован для версии «v1» в схеме «k8s.io/kubernetes/pkg/api/legacyscheme/scheme.go:29"
Быстрый поиск также даст вам ответ. Правильное значение ключа kind:
равно Pod
, но не pod
.
Как только мы исправим это, давайте снова запустим
kubectl apply -f pod.yml
. Теперь он возвращает нам другую ошибку:
ошибка: ошибка проверки "pod.yml": ошибка проверки данных: ValidationError (Pod.spec.containers [0] .ports): неверный типдля io.k8s.api.core.v1.Container.ports: есть «карта», ожидаемый «массив»;
, что само собой разумеется и означает, что вы не должны использовать "map" в месте, где ожидался "array" , и в сообщении об ошибке точно указано, где, а именно:
Pod.spec.containers[0].ports
.
Давайте исправим этот фрагмент:
11 ports:
12 containerPort: 3000
В формате yaml символ -
подразумевает начало массива, поэтому он должен выглядеть следующим образом:
11 ports:
12 - containerPort: 3000
Если мы снова запустим
kubectl apply -f pod.yml
, мы, наконец, получим ожидаемое сообщение:
pod / helloworld-deployed creation
Окончательная, правильная версияопределения Pod
выглядит следующим образом:
apiVersion: v1
kind: Pod
metadata:
name: helloworld-deployment
labels:
app: helloworld
spec:
containers:
- name: helloworld
image: anishanil/kubernetes:node
ports:
- containerPort: 3000
resources:
limits:
memory: "100Mi"
cpu: "100m"