首页 > 解决方案 > K8S:将“kubeadm init”命令行参数转换为“--config”YAML

问题描述


背景

我正在尝试通过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

问题一:

如何--pod-network-cidr=10.244.0.0/16通过配置文件传递此设置,即kubeadm init --config my_config.yaml?我在非官方的 K8S 文档 wiki 上找到了一个示例配置文件模板,但我似乎根本找不到任何将这些命令行参数映射kubeadm到它们的kubeadm_config.yaml等价物的文档。

还有一个文档显示了我如何创建基线静态 pod 定义/yaml via kubeadm config print init-defaults > kubeadm_config.yaml,但同样,没有文档显示如何pod-network-cidr通过修改和应用此yaml文件进行设置(即kubeadm upgrade -f kubeadm_config.yaml)。

的样本输出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相关证书的测试。


标签: kubernetesyamlx509certificatekubeadmkube-apiserver

解决方案


1.根据官方文档

可以kubeadm init使用配置文件而不是命令行标志进行配置,并且一些更高级的功能可能仅作为配置文件选项提供。该文件与--config选项一起传递。

可以使用kubeadm config print 命令打印出默认配置。

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

在 期间kubeadm init,kubeadm 在 kube-system 命名空间中名为 kubeadm-config 的 ConfigMap 中将 ClusterConfiguration 对象上传到您的集群。然后在和kubeadm join期间读取此配置。查看此 ConfigMap 调用。kubeadm resetkubeadm upgradekubeadm config view

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

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

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来传递这种配置。

请让我知道这是否有帮助。


推荐阅读