【问题标题】:Enable Service Topology on k8s在 k8s 上启用服务拓扑
【发布时间】:2020-09-28 23:11:57
【问题描述】:

我正在使用 k8s 和 kubeadm 1.17 版。我正在尝试启用服务拓扑功能门,但我不能。文档说要使用“--feature-gates="ServiceTopology=true,EndpointSlice=true"。我尝试在“kubeadm init”中使用它......但kubeadm说集群不可用。你能帮我吗?这就是我正在关注的文档:https://kubernetes.io/docs/tasks/administer-cluster/enabling-service-topology/

【问题讨论】:

    标签: kubernetes kubeadm


    【解决方案1】:

    就我而言(kubeadm 版本 1.18.2),它适用于以下 kubeadm 配置 .yaml 文件(podSubnet 在那里,因为我使用的是 Flannel CNI)。 kube-proxy 的 key 是 https://godoc.org/k8s.io/kube-proxy/config/v1alpha1#KubeProxyConfiguration 中提到的“featureGates”

    ---
    apiVersion: kubeadm.k8s.io/v1beta2
    kind: ClusterConfiguration
    apiServer:
      extraArgs:
        feature-gates: "ServiceTopology=true,EndpointSlice=true"
    controllerManager:
      extraArgs:
        feature-gates: "ServiceTopology=true,EndpointSlice=true"
    scheduler:
      extraArgs:
        feature-gates: "ServiceTopology=true,EndpointSlice=true"
    networking:
       podSubnet: "10.244.0.0/16"
    
    ---
    apiVersion: kubeproxy.config.k8s.io/v1alpha1
    kind: KubeProxyConfiguration
    featureGates:
      ServiceTopology: true
      EndpointSliceProxying: true
    

    【讨论】:

      【解决方案2】:

      这不是 kubeadm 的标志。您需要为每个 kubernetes 控制平面组件启用它,例如控制器管理器、API Server、调度程序、Kube 代理。需要修改所有主节点上位于 /etc/kubernetes/manifests 位置的每个组件的 yaml 以添加功能标志 - --feature-gates=ServiceTopology=true

      以 API 服务器 yaml 为例

      root@kind-control-plane:/# cat /etc/kubernetes/manifests/kube-apiserver.yaml 
      apiVersion: v1
      kind: Pod
      metadata:
        annotations:
          kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 172.18.0.2:6443
        creationTimestamp: null
        labels:
          component: kube-apiserver
          tier: control-plane
        name: kube-apiserver
        namespace: kube-system
      spec:
        containers:
        - command:
          - kube-apiserver
          - --advertise-address=172.18.0.2
          - --allow-privileged=true
          - --authorization-mode=Node,RBAC
          - --client-ca-file=/etc/kubernetes/pki/ca.crt
          - --enable-admission-plugins=NodeRestriction
          - --enable-bootstrap-token-auth=true
          - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
          - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
          - --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
          - --etcd-servers=https://127.0.0.1:2379
          - --insecure-port=0
          - --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
          - --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
          - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
          - --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
          - --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
          - --requestheader-allowed-names=front-proxy-client
          - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
          - --requestheader-extra-headers-prefix=X-Remote-Extra-
          - --requestheader-group-headers=X-Remote-Group
          - --requestheader-username-headers=X-Remote-User
          - --secure-port=6443
          - --service-account-key-file=/etc/kubernetes/pki/sa.pub
          - --service-cluster-ip-range=10.96.0.0/12
          - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
          - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
          - --feature-gates=ServiceTopology=true 
      

      编辑:

      对于kube proxy,需要创建自定义 kubeadm 配置文件以添加功能标志

      apiVersion: kubeadm.k8s.io/v1beta2
      kind: ClusterConfiguration
      ...
      ---
      apiVersion: kubeproxy.config.k8s.io/v1alpha1
      kind: KubeProxyConfiguration
      FeatureGates:
        ServiceTopology: true
      

      参考here

      【讨论】:

      • 谢谢!那么,更改后,如何在集群上应用这些更改?
      • 它将由 kubelet 自动应用..强制应用只需从该位置删除 yaml 并将其放回
      • 更改后出现以下错误:“与服务器 10.50.11.133:6443 的连接被拒绝 - 您是否指定了正确的主机或端口?”
      • 检查更改后 API Server pod 是否正在运行。 kubectl get pods -n kube-system
      • kubectl get pods 得到同样的错误,但是使用“sudo docker ps”,我可以看到 pod“k8s_POD_kube-apiserver-k8s...”已暂停。
      猜你喜欢
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多