K8S:将“ kubeadm init”命令行参数转换为“ --config” YAML

时间:2019-10-07 20:51:23

标签: kubernetes yaml x509certificate kubeadm kube-apiserver


背景

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

问题1:

如何通过配置文件--pod-network-cidr=10.244.0.0/16传递此设置kubeadm init --config my_config.yaml?我找到了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,但同样,没有文档显示如何通过修改和应用此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相关证书的测试。


1 个答案:

答案 0 :(得分:1)

1。。根据official documentation

  

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

     

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

     

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

     

kubeadm init期间,kubeadm上传了ClusterConfiguration对象   在名为kubeadm-config的ConfigMap中访问群集   kube系统名称空间。然后在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来进行这种配置。

请告诉我是否有帮助。