我正在使用此 article 作为指南,在minkube上学习SQL Server BDC。我尝试通过运行以下代码来部署以下yaml文件:kubectl apply -f deployment.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mssql-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: mssql
spec:
terminationGracePeriodSeconds: 10
containers:
- name: mssql
image: microsoft/mssql-server-linux
ports:
- containerPort: 1433
securityContext:
privileged: true
env:
- name: ACCEPT_EULA
value: "Y"
- name: SA_PASSWORD
valueFrom:
secretKeyRef:
name: mssql
key: SA_PASSWORD
volumeMounts:
- name: mssqldb
mountPath: /var/opt/mssql
volumes:
- name: mssqldb
persistentVolumeClaim:
claimName: pvc0001
由于v1beta1 APIVersion导致错误。我通过运行kubectl convert -f deployment.yaml
转换了此yaml文件,并获得了以下脚本:
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
name: mssql-deployment
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector: null
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: mssql
spec:
containers:
- env:
- name: ACCEPT_EULA
value: "Y"
- name: SA_PASSWORD
valueFrom:
secretKeyRef:
key: SA_PASSWORD
name: mssql
image: microsoft/mssql-server-linux
imagePullPolicy: Always
name: mssql
ports:
- containerPort: 1433
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 10
status: {}
但是当我部署上面的脚本时,我得到了:
验证“ deployment.yaml”时出错:验证数据时出错:ValidationError(Deployment.spec):io.k8s.api.apps.v1.DeploymentSpec中缺少必填字段“选择器”;如果您选择忽略这些错误,请使用--validate = false
关闭验证
它与matchlabels / matchexpressions有关,但我无法解决。有人可以指出我正确的方向吗?
答案 0 :(得分:5)
您需要在部署的规范部分中添加一个selector
。这是必填字段。.spec.selector
字段定义部署如何查找要管理的Pod。在这种情况下,您只需选择在Pod模板(应用程序:mssql)中定义的标签。但是,只要Pod模板本身满足该规则,就可以使用更复杂的选择规则。
apiVersion: apps/v1
kindapiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
name: mssql-deployment
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: mssql
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: mssql
spec:
containers:
- env:
- name: ACCEPT_EULA
value: "Y"
- name: SA_PASSWORD
valueFrom:
secretKeyRef:
key: SA_PASSWORD
name: mssql
image: microsoft/mssql-server-linux
imagePullPolicy: Always
name: mssql
ports:
- containerPort: 1433
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 10
status: {}
答案 1 :(得分:0)
缺少io.k8s.api.apps.v1.DeploymentSpec中的必填字段“选择器”
您需要一个选择器来选择将哪些Pod配置为部署规范。
解决方案:
selector:
matchLabels:
app: mssql
template:
metadata:
labels:
app: mssql