kubernetes - kubeadm/kubectl/kube-apiserver 打开功能门

标签 kubernetes local alpha persistent-volumes

我正在尝试测试 local persistent volume在 kubernetes v1.9.2 中。

根据我收集的信息(我可能是错的!),我无法使用 kubeadm 来添加这些功能门:

$ sudo kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.2", GitCommit:"5fa2db2bd46ac79e5e00a4e6ed24191080aa463b", GitTreeState:"clean", BuildDate:"2018-01-18T09:42:01Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}

$ kubeadm init --help
...
      --feature-gates string                    A set of key=value pairs that describe feature gates for various features. Options are:
        CoreDNS=true|false (ALPHA - default=false)
        DynamicKubeletConfig=true|false (ALPHA - default=false)
        SelfHosting=true|false (ALPHA - default=false)
        StoreCertsInSecrets=true|false (ALPHA - default=false)
...

sooo...我做了一个正常的 kubeadm 初始化,然后继续破解:

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf

Environment="KUBELET_FEATURE_GATES_ARGS=--feature-gates=PersistentLocalVolumes=true,VolumeScheduling=true,MountPropagation=true"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS $KUBELET_FEATURE_GATES_ARGS

并重新加载/重新启动kubelet

好吧...让我们尝试创建 pv:

$ cat local-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-local-pv
  annotations:
    "volume.alpha.kubernetes.io/node-affinity": '{
      "requiredDuringSchedulingIgnoredDuringExecution": {
        "nodeSelectorTerms": [
          { "matchExpressions": [
            { "key": "kubernetes.io/hostname",
              "operator": "In",
              "values": ["dhcp-nebula-129-230"]
            }
          ]}
         ]}
        }'
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /mnt/disks/fs2

$ kubectl create -f local-pv.yaml
The PersistentVolume "example-local-pv" is invalid:
* metadata.annotations: Forbidden: Storage node affinity is disabled by 

功能门 *spec.local:禁止:本地卷被功能门禁用

啊哈!我说...我也必须更改 kube-apiserver!

所以我编辑/etc/kubernetes/manifests/kube-apiserver.yaml并将以下内容附加到命令:

--feature-gates=PersistentLocalVolumes=true,VolumeScheduling=true,MountPropagation=true

并且 api 服务器死掉了,当 kubeapi-server 死掉时,我陷入了没有 kubectl 的困境。 :(

帮忙?

最佳答案

您需要在 kubeadm 配置中设置 api、调度程序和 Controller 上的功能门:

apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration
apiServerExtraArgs:
  service-node-port-range: 80-32767
  feature-gates: "PersistentLocalVolumes=true,VolumeScheduling=true,MountPropagation=true"
controllerManagerExtraArgs:
  feature-gates: "PersistentLocalVolumes=true,VolumeScheduling=true,MountPropagation=true"
schedulerExtraArgs:
  feature-gates: "PersistentLocalVolumes=true,VolumeScheduling=true,MountPropagation=true"

存储类示例:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: mysql-data
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

PVC 示例:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  labels:
    app: mariadb
  name: mysql-mariadb-0
  namespace: mysql
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: mysql-data
  selector:
    matchLabels:
      pod-name: mariadb-0

PV示例:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-mariadb-0
  labels:
    pod-name: mariadb-0
  annotations:
    "volume.alpha.kubernetes.io/node-affinity": '{
      "requiredDuringSchedulingIgnoredDuringExecution": {
        "nodeSelectorTerms": [
          { "matchExpressions": [
              { "key": "kubernetes.io/hostname",
                "operator": "In",
                "values": ["prod-mysql-0"]
              }
          ]}
        ]}}'
spec:
  capacity:
    storage: 2Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: mysql-data
  local:
    path: /mnt/local-storage/mysql-data-0

关于kubernetes - kubeadm/kubectl/kube-apiserver 打开功能门,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48718465/

相关文章:

docker - 标签: while pushing image to local registry在本地不存在图像

ios - OpenGL ES 1.1 中的 GL_ALPHA_TEST 替换(无着色器)

go - 如何从 go 程序获取/更新 Kubernetes 自定义资源?

Kubernetes 测试环境

kubernetes - 无法创建请求超过 2Gi 内存的部署

svn - 在本地机器上临时使用 SVN 离线工作

kubernetes - 如何在 Helm for Kubernetes 中循环不同的模板?

php - 是否可以使用 MySQL - LOAD DATA LOCAL INFILE 仅上传 CSV 文件的前 10 行?

python - 如何使用 PIL 保存超过 3 个 channel 的图像?

ios - iTunes Store 操作失败 ERROR ITMS-90396 : "Invalid Icon.with an alpha channel. Icons should not have an alpha channel."