Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让Kubernetes物理卷部署到适当的区域?_Kubernetes - Fatal编程技术网

如何让Kubernetes物理卷部署到适当的区域?

如何让Kubernetes物理卷部署到适当的区域?,kubernetes,Kubernetes,我在GKE的不同区域的三个节点上运行kubernetes 1.6.2集群,并尝试部署我的statefulset,其中statefulset中的每个pod都连接一个PV。问题是kubernetes正在我没有节点的一个区域中创建PV $ kubectl describe node gke-multi-consul-default-pool-747c9378-zls3|grep 'zone=us-central1' failure-domain.beta.kubernetes.

我在GKE的不同区域的三个节点上运行kubernetes 1.6.2集群,并尝试部署我的statefulset,其中statefulset中的每个pod都连接一个PV。问题是kubernetes正在我没有节点的一个区域中创建PV

$ kubectl describe node gke-multi-consul-default-pool-747c9378-zls3|grep 'zone=us-central1'
            failure-domain.beta.kubernetes.io/zone=us-central1-a
$ kubectl describe node gke-multi-consul-default-pool-7e987593-qjtt|grep 'zone=us-central1'
            failure-domain.beta.kubernetes.io/zone=us-central1-f
$ kubectl describe node gke-multi-consul-default-pool-8e9199ea-91pj|grep 'zone=us-central1'
            failure-domain.beta.kubernetes.io/zone=us-central1-c

$ kubectl describe pv pvc-3f668058-2c2a-11e7-a7cd-42010a8001e2|grep 'zone=us-central1'
        failure-domain.beta.kubernetes.io/zone=us-central1-b
我使用的是没有默认区域设置的标准storageclass:

$ kubectl describe storageclass standard
Name:       standard
IsDefaultClass: Yes
Annotations:    storageclass.beta.kubernetes.io/is-default-class=true
Provisioner:    kubernetes.io/gce-pd
Parameters: type=pd-standard
Events:     <none>

Kubernetes文档中关于持久卷的回答:

区域:GCE区域。如果未指定,将选择控制器管理器所在区域中的随机区域。
我猜您的控制器管理器位于区域us-central-1,因此可以从该区域中选择任何区域,在您的情况下,我猜唯一未涵盖的区域是us-central-1b,因此您也必须在那里启动一个节点,或者在StorageClass资源中设置该区域。

您可以为每个区域创建,然后PV/PVC可以指定该存储类别。可以通过
nodeSelector
将有状态集/部署设置为针对特定节点,以便始终在特定区域的节点上安排它们(请参阅)

存储类.yml

持久性体积


请注意,您可以在kubernetes 1.6中使用
storageClassName
,否则注释
volume.beta.kubernetes.io/storage class
也应该可以工作(不过将来会被弃用)。

此问题存在漏洞

同时,解决方法是在
StorageClass
中设置
zones
参数,以指定Kubernetes群集具有节点的确切区域。这就是一个例子

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: "{{ template "fullname" . }}"
  labels:
    heritage: {{.Release.Service | quote }}
    release: {{.Release.Name | quote }}
    chart: "{{.Chart.Name}}-{{.Chart.Version}}"
    component: "{{.Release.Name}}-{{.Values.Component}}"
spec:
  serviceName: "{{ template "fullname" . }}"
  replicas: {{default 3 .Values.Replicas}}
  template:
    metadata:
      name: "{{ template "fullname" . }}"
      labels:
        heritage: {{.Release.Service | quote }}
        release: {{.Release.Name | quote }}
        chart: "{{.Chart.Name}}-{{.Chart.Version}}"
        component: "{{.Release.Name}}-{{.Values.Component}}"
        app: "consul"
      annotations:
        pod.alpha.kubernetes.io/initialized: "true"
    spec:
      securityContext:
        fsGroup: 1000
      containers:
      - name: "{{ template "fullname" . }}"
        image: "{{.Values.Image}}:{{.Values.ImageTag}}"
        imagePullPolicy: "{{.Values.ImagePullPolicy}}"
        ports:
        - name: http
          containerPort: {{.Values.HttpPort}}
        - name: rpc
          containerPort: {{.Values.RpcPort}}
        - name: serflan-tcp
          protocol: "TCP"
          containerPort: {{.Values.SerflanPort}}
        - name: serflan-udp
          protocol: "UDP"
          containerPort: {{.Values.SerflanUdpPort}}
        - name: serfwan-tcp
          protocol: "TCP"
          containerPort: {{.Values.SerfwanPort}}
        - name: serfwan-udp
          protocol: "UDP"
          containerPort: {{.Values.SerfwanUdpPort}}
        - name: server
          containerPort: {{.Values.ServerPort}}
        - name: consuldns
          containerPort: {{.Values.ConsulDnsPort}}
        resources:
          requests:
            cpu: "{{.Values.Cpu}}"
            memory: "{{.Values.Memory}}"
        env:
        - name: INITIAL_CLUSTER_SIZE
          value: {{ default 3 .Values.Replicas | quote }}
        - name: STATEFULSET_NAME
          value: "{{ template "fullname" . }}"
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: STATEFULSET_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        volumeMounts:
        - name: datadir
          mountPath: /var/lib/consul
        - name: gossip-key
          mountPath: /etc/secrets
          readOnly: true
        - name: config
          mountPath: /etc/consul
        - name: tls
          mountPath: /etc/tls
        lifecycle:
          preStop:
            exec:
              command:
                - /bin/sh
                - -c
                - consul leave
        livenessProbe:
          exec:
            command:
            - consul
            - members
          initialDelaySeconds: 300
          timeoutSeconds: 5
        command:
          - "/bin/sh"
          - "-ec"
          - "/tmp/consul-start.sh"
      volumes:
      - name: config
        configMap:
          name: consul
      - name: gossip-key
        secret:
          secretName: {{ template "fullname" . }}-gossip-key
      - name: tls
        secret:
          secretName: consul
  volumeClaimTemplates:
  - metadata:
      name: datadir
      annotations:
      {{- if .Values.StorageClass }}
        volume.beta.kubernetes.io/storage-class: {{.Values.StorageClass | quote}}
      {{- else }}
        volume.alpha.kubernetes.io/storage-class: default
      {{- end }}
    spec:
      accessModes:
        - "ReadWriteOnce"
      resources:
        requests:
          # upstream recommended max is 700M
          storage: "{{.Values.Storage}}"
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: us-central-1a
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-standard
  zone: us-central1-a
apiVersion: v1
kind: PersistentVolume
metadata:
  name: some-volume
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  storageClassName: us-central-1a