验证错误:缺少必填字段“选择器";在 io.k8s.api.v1.DeploymentSpec [英] ValidationError: missing required field "selector" in io.k8s.api.v1.DeploymentSpec
问题描述
我已经创建了 Hyper-V 机器并尝试使用 Sawtooth YAML 文件在 Minikube 上部署 Sawtooth:
---api版本:v1种类:列表项目:- apiVersion: 应用程序/v1种类:部署元数据:名称:锯齿-0规格:复制品:1选择器:匹配标签:名称:锯齿-0模板:元数据:标签:名称:锯齿-0规格:容器:- 名称:sawtooth-devmode-engine图片:hyperledger/sawtooth-devmode-engine-rust:chime命令:- 重击参数:- -C- "devmode-engine-rust -C tcp://$HOSTNAME:5050"- 名称:锯齿设置-tp图片:hyperledger/sawtooth-settings-tp:chime命令:- 重击参数:- -C- "settings-tp -vv -C tcp://$HOSTNAME:4004"- 名称:sawtooth-intkey-tp-python图片:hyperledger/sawtooth-intkey-tp-python:chime命令:- 重击参数:- -C- "intkey-tp-python -vv -C tcp://$HOSTNAME:4004"- 名称:sawtooth-xo-tp-python图片:hyperledger/sawtooth-xo-tp-python:chime命令:- 重击参数:- -C- "xo-tp-python -vv -C tcp://$HOSTNAME:4004"- 名称:锯齿验证器图片:hyperledger/sawtooth-validator:chime端口:- 名称:tp容器端口:4004- 名称:共识容器端口:5050- 名称:验证器容器端口:8800命令:- 重击参数:- -C- "sawadm 注册机&&锯齿密钥生成器 my_key &&锯切创世 -k/root/.sawtooth/keys/my_key.priv &&锯切提案创建-k/root/.sawtooth/keys/my_key.priv 锯齿.consensus.algorithm.name=开发模式锯齿.consensus.algorithm.version=0.1 -o config.batch &&sawadm 创世 config-genesis.batch config.batch &&锯齿验证器 -vv --endpoint tcp://$SAWTOOTH_0_SERVICE_HOST:8800 --绑定组件:tcp://eth0:4004 --bind 共识:tcp://eth0:5050 --绑定网络:tcp://eth0:8800"- 名称:sawtooth-rest-api图片:hyperledger/sawtooth-rest-api:chime端口:- 名称:api容器端口:8008命令:- 重击参数:- -C- "sawtooth-rest-api -C tcp://$HOSTNAME:4004"- 名称:锯齿壳图片:hyperledger/sawtooth-shell:chime命令:- 重击参数:- -C- "sawtooth keygen && tail -f/dev/null"- apiVersion: 应用程序/v1种类:服务元数据:名称:锯齿-0规格:类型:集群IP选择器:名称:锯齿-0端口:- 名称:4004"协议:TCP端口:4004目标端口:4004- 名称:5050"协议:TCP端口:5050目标端口:5050- 名称:8008"协议:TCP端口:8008目标端口:8008- 名称:8800"协议:TCP端口:8800目标端口:8800
您需要修复部署 yaml
文件.从错误消息中可以看出,Deployment.spec.selector
字段不能为空.
更新yaml
(即添加spec.selector
),如下所示:
规范:复制品:1选择器:匹配标签:app.kubernetes.io/name:sawtooth-0模板:元数据:标签:app.kubernetes.io/name:sawtooth-0
- 为什么
selector
字段很重要?
selector
字段定义了 Deployment 如何找到要管理的 Pod.在这种情况下,您只需选择在 Pod 模板 (app.kubernetes.io/name:sawtooth-0
) 中定义的标签.然而,更复杂的选择规则是可能的,只要 Pod 模板本身满足规则.
更新:
k8s服务的apiVersion
是v1
:
- apiVersion: v1 # 在这里更新种类:服务元数据:app.kubernetes.io/name:sawtooth-0规格:类型:集群IP选择器:app.kubernetes.io/name:sawtooth-0…………
I've created Hyper-V machine and tried to deploy Sawtooth on Minikube using Sawtooth YAML file : https://sawtooth.hyperledger.org/docs/core/nightly/master/app_developers_guide/sawtooth-kubernetes-default.yaml
I changed the apiVersion i.e. apiVersion: extensions/v1beta1
to apiVersion: apps/v1
, though I have launched Minikube in Kubernetes v1.17.0 using this command
minikube start --kubernetes-version v1.17.0
After that I can't deploy the server. Command is
kubectl apply -f sawtooth-kubernetes-default.yaml --validate=false
It shows an error with "sawtooth-0" is invalid.
---
apiVersion: v1
kind: List
items:
- apiVersion: apps/v1
kind: Deployment
metadata:
name: sawtooth-0
spec:
replicas: 1
selector:
matchLabels:
name: sawtooth-0
template:
metadata:
labels:
name: sawtooth-0
spec:
containers:
- name: sawtooth-devmode-engine
image: hyperledger/sawtooth-devmode-engine-rust:chime
command:
- bash
args:
- -c
- "devmode-engine-rust -C tcp://$HOSTNAME:5050"
- name: sawtooth-settings-tp
image: hyperledger/sawtooth-settings-tp:chime
command:
- bash
args:
- -c
- "settings-tp -vv -C tcp://$HOSTNAME:4004"
- name: sawtooth-intkey-tp-python
image: hyperledger/sawtooth-intkey-tp-python:chime
command:
- bash
args:
- -c
- "intkey-tp-python -vv -C tcp://$HOSTNAME:4004"
- name: sawtooth-xo-tp-python
image: hyperledger/sawtooth-xo-tp-python:chime
command:
- bash
args:
- -c
- "xo-tp-python -vv -C tcp://$HOSTNAME:4004"
- name: sawtooth-validator
image: hyperledger/sawtooth-validator:chime
ports:
- name: tp
containerPort: 4004
- name: consensus
containerPort: 5050
- name: validators
containerPort: 8800
command:
- bash
args:
- -c
- "sawadm keygen
&& sawtooth keygen my_key
&& sawset genesis -k /root/.sawtooth/keys/my_key.priv
&& sawset proposal create
-k /root/.sawtooth/keys/my_key.priv
sawtooth.consensus.algorithm.name=Devmode
sawtooth.consensus.algorithm.version=0.1
-o config.batch
&& sawadm genesis config-genesis.batch config.batch
&& sawtooth-validator -vv
--endpoint tcp://$SAWTOOTH_0_SERVICE_HOST:8800
--bind component:tcp://eth0:4004
--bind consensus:tcp://eth0:5050
--bind network:tcp://eth0:8800"
- name: sawtooth-rest-api
image: hyperledger/sawtooth-rest-api:chime
ports:
- name: api
containerPort: 8008
command:
- bash
args:
- -c
- "sawtooth-rest-api -C tcp://$HOSTNAME:4004"
- name: sawtooth-shell
image: hyperledger/sawtooth-shell:chime
command:
- bash
args:
- -c
- "sawtooth keygen && tail -f /dev/null"
- apiVersion: apps/v1
kind: Service
metadata:
name: sawtooth-0
spec:
type: ClusterIP
selector:
name: sawtooth-0
ports:
- name: "4004"
protocol: TCP
port: 4004
targetPort: 4004
- name: "5050"
protocol: TCP
port: 5050
targetPort: 5050
- name: "8008"
protocol: TCP
port: 8008
targetPort: 8008
- name: "8800"
protocol: TCP
port: 8800
targetPort: 8800
You need to fix your deployment yaml
file. As you can see from your error message, the Deployment.spec.selector
field can't be empty.
Update the yaml
(i.e. add spec.selector
) as shown in below:
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: sawtooth-0
template:
metadata:
labels:
app.kubernetes.io/name: sawtooth-0
- Why
selector
field is important?
The selector
field defines how the Deployment finds which Pods to manage. In this case, you simply select a label that is defined in the Pod template (app.kubernetes.io/name: sawtooth-0
). However, more sophisticated selection rules are possible, as long as the Pod template itself satisfies the rule.
Update:
The apiVersion
for k8s service is v1
:
- apiVersion: v1 # Update here
kind: Service
metadata:
app.kubernetes.io/name: sawtooth-0
spec:
type: ClusterIP
selector:
app.kubernetes.io/name: sawtooth-0
... ... ...
这篇关于验证错误:缺少必填字段“选择器";在 io.k8s.api.v1.DeploymentSpec的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!