【问题标题】:K8S: convert "kubeadm init" command-line arguments to "--config" YAMLK8S:将“kubeadm init”命令行参数转换为“--config”YAML
【发布时间】:2020-02-05 04:29:10
【问题描述】:

背景

我正在尝试通过kubeadm 配置集群。我通常通过以下方式创建(测试)集群:

sudo kubeadm init --pod-network-cidr 10.244.0.0/16

这个参数似乎最终会进入到 controllerManager (/etc/kubernetes/manifests/kube-controller-manager.yaml) 的静态 pod 定义中:

- --cluster-cidr=10.244.0.0/16

sudo vim /etc/kubernetes/manifests/kube-controller-manager.yaml 的较大部分:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    component: kube-controller-manager
    tier: control-plane
  name: kube-controller-manager
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-controller-manager
    - --allocate-node-cidrs=true
    - --authentication-kubeconfig=/etc/kubernetes/controller-manager.conf
    - ...
    - --cluster-cidr=10.244.0.0/16

问题一:

如何通过配置文件(即kubeadm init --config my_config.yaml)传递此设置--pod-network-cidr=10.244.0.0/16?我找到了sample config file template on an unofficial K8S documentation wiki,但我似乎根本找不到任何将这些命令行参数映射到kubeadm 到它们的kubeadm_config.yaml 等效项的文档。

There's also a document showing how I can create a baseline static pod definition/yaml 通过kubeadm config print init-defaults > kubeadm_config.yaml,但同样没有说明如何通过修改和应用此yaml 文件(即kubeadm upgrade -f kubeadm_config.yaml)来设置pod-network-cidr

kubeadm config view 的示例输出:

apiServer:
  extraArgs:
    authorization-mode: Node,RBAC
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.15.4
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
scheduler: {}

问题 2:

我怎样才能做到以上,但传递--experimental-cluster-signing-duration=0h30m0s 之类的东西?我想尝试手动/自动更新所有kubeadm 相关证书的测试。


【问题讨论】:

    标签: kubernetes yaml x509certificate kubeadm kube-apiserver


    【解决方案1】:

    1.根据official documentation

    可以通过配置文件配置kubeadm init 而不是命令行标志,一些更高级的功能可能 只能作为配置文件选项使用。该文件通过 使用--config 选项。

    默认配置可以使用kubeadm config printcommand打印出来。

    建议您使用 kubeadm config migrate command 将旧的 v1beta1 配置迁移到 v1beta2。

    kubeadm init 期间,kubeadm 上传 ClusterConfiguration 对象 在名为 kubeadm-config 的 ConfigMap 中到您的集群 kube-system 命名空间。然后在kubeadm joinkubeadm resetkubeadm upgrade 期间读取此配置。查看此 ConfigMap 致电kubeadm config view

    可以使用kubeadm config print打印默认配置 和kubeadm config migrate 转换您的旧配置文件 到较新的版本。 kubeadm config images listkubeadm config images pull 可用于列出和拉取 kubeadm 的镜像 需要。

    子网由 kubeadm 中的 --pod-network-cidr 参数定义或由配置文件定义,如下例所示:

    apiVersion: kubeadm.k8s.io/v1alpha3
    kind: InitConfiguration
    api:
      advertiseAddress: 0.0.0.0
      bindPort: 6443
    kubernetesVersion: v1.12.1
    ---
    apiVersion: kubeadm.k8s.io/v1alpha3
    kind: ClusterConfiguration
    networking:
      podSubnet: 192.168.0.0/24
    

    2. 我无法在官方文档或其他来源中找到类似的内容。

    您可以改为使用kube-controller-manager 来传递这种配置。

    如果有帮助,请告诉我。

    猜你喜欢
    • 2021-05-06
    • 2021-05-29
    • 2018-08-05
    • 2019-10-31
    • 2023-03-25
    • 2016-04-16
    • 2020-06-27
    相关资源
    最近更新 更多