【问题标题】: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 join、kubeadm reset 和kubeadm upgrade 期间读取此配置。查看此 ConfigMap 致电kubeadm config view。

    可以使用kubeadm config print打印默认配置 和kubeadm config migrate 转换您的旧配置文件 到较新的版本。 kubeadm config images list 和 kubeadm 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
    相关资源
    最近更新 更多