kubernetes - 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
相关证书的测试。
解决方案
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 reset
kubeadm upgrade
kubeadm config view
您可以使用
kubeadm config print
打印默认配置kubeadm config migrate
并将旧配置文件转换为新版本。kubeadm config images list
并可kubeadm config images pull
用于列出和拉取 kubeadm 所需的镜像。
子网由--pod-network-cidr
kubeadm 中的参数或配置文件定义,如下例所示:
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来传递这种配置。
请让我知道这是否有帮助。
推荐阅读
- gstreamer - 如何在 Yocto 的目标映像上安装已编译的 gstreamer-plugins
- android - Android 在 Android 中设置 Spinner 值
- python - 字符串具有指定长度的Python数据帧
- c - Process Forks Shell,然后整个程序停止?
- html - 如何缩小引导卡?(水平滚动条出现)
- python - 我应该如何导入 XML 以在 Flask 中显示?
- google-cloud-platform - servereless vpc 连接器每次都针对特定网络失败,但适用于“默认”
- postgresql - Postgres 安装程序错误:运行安装后步骤时出现问题。安装可能无法正确完成
- flutter - StreamProvider.value 多次返回相同的值:Flutter
- reactjs - 反应不在 node_modules 中加载资产