首先给两个node节点打标签:
[root@k8s-master]# kubectl label nodes k8s-node-1 node=node1
node "k8s-node-1" labeled
[root@k8s-master]# kubectl label nodes k8s-node-2 node=node2
node "k8s-node-2" labeled
[root@k8s-master]# kubectl get node --show-labels=true
NAME STATUS ROLES AGE VERSION LABELS
k8s-master Ready master 22h v1.9.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=k8s-master,node-role.kubernetes.io/master=
k8s-node-1 Ready <none> 22h v1.9.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=k8s-node-1,node=node1
k8s-node-2 Ready <none> 22h v1.9.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=k8s-node-2,node=node2
然后创建测试fabric-orderer.yaml文件:
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-test
spec:
replicas: 2
template:
metadata:
labels:
k8s-app: fabric-orderer
spec:
nodeSelector:
node: node1
containers:
- name: fabric-orderer-select-node1
image: hyperledger/fabric-orderer:1.4.3
imagePullPolicy: Never
ports:
- containerPort: 80
随后创建该deployment:
[root@k8s-master my-test]# kubectl create -f fabric-orderer.yaml
error: error validating "fabric-orderer.yaml": error validating data: [ValidationError(Deployment.spec.template.metadata.labels): invalid type for io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta.labels: got "string", expected "map", ValidationError(Deployment.spec.template.spec.nodeSelector): invalid type for io.k8s.api.core.v1.PodSpec.nodeSelector: got "string", expected "map"]; if you choose to ignore these errors, turn validation off with --validate=false
报错关键在:got "string", expected "map",那应该是yaml文件格式问题,上下对比后发现:
labels:
k8s-app: fabric-orderer //冒号后要有空格
spec:
nodeSelector:
node: node1 //冒号后要有空格
修改后就成功了:
[root@k8s-master my-test]# kubectl create -f fabric-orderer.yaml
deployment "my-test" created