kubeadm-config说明

本文详细介绍了如何配置kubeadm-config.yaml文件来初始化和添加Kubernetes集群的master及node节点。首先,通过kubeadm命令生成默认配置文件,然后修改apiServerEndpoint、token和node名称等关键参数。接着,使用修改后的配置文件初始化master节点,并生成加入节点的配置文件。最后,调整join配置并添加node节点到集群中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://www.cnblogs.com/breezey/p/11770780.html

配置kubeadm-config.yaml
通过如下指令创建默认的kubeadm-config.yaml文件:

kubeadm config print init-defaults  > kubeadm-config.yaml
#生成KubeletConfiguration示例文件 
kubeadm config print init-defaults --component-configs KubeletConfiguration

#生成KubeProxyConfiguration示例文件 
kubeadm config print init-defaults --component-configs KubeProxyConfiguration

安装master节点:

kubeadm init --config kubeadm-config.yaml

生成用于添加节点的kubeadm-config.yaml文件

kubeadm config print join-defaults > kubeadm-config.yaml

修改三个地方:

  • apiServerEndpoint:连接apiserver的地址,即master的api地址,这里可以改为192.168.0.1:6443,如果master集群部署的话,这里需要改为集群vip地址
  • token及tlsBootstrapToken:连接master使用的token,这里需要与master上的InitConfiguration中的token配置一致
  • name:node节点的名称,如果使用主机名,需要确保master节点可以解析该主机名。否则的话可直接使用ip地址

添加节点:

kubeadm join --config kubeadm-config.yaml

cat kubeadm-config.yaml

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.200.3     # 本机IP
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: master1        # 本主机名
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "192.168.200.16:16443"    # 虚拟IP和haproxy端口
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io    # 镜像仓库源要根据自己实际情况修改
kind: ClusterConfiguration
kubernetesVersion: v1.18.2     # k8s版本
networking:
  dnsDomain: cluster.local
  podSubnet: "10.244.0.0/16"
  serviceSubnet: 10.96.0.0/12
scheduler: {}

---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
  SupportIPVSProxyMode: true
mode: ipvs
sudo kubeadm reset --force [reset] Reading configuration from the cluster... [reset] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml' W0707 17:14:07.794660 20205 reset.go:99] [reset] Unable to fetch the kubeadm-config ConfigMap from cluster: failed to get config map: Get https://192.168.136.148:6443/api/v1/namespaces/kube-system/configmaps/kubeadm-config?timeout=10s: dial tcp 192.168.136.148:6443: connect: connection refused [preflight] Running pre-flight checks W0707 17:14:07.794808 20205 removeetcdmember.go:79] [reset] No kubeadm config, using etcd pod spec to get data directory [reset] No etcd config found. Assuming external etcd [reset] Please, manually reset etcd to prevent further issues [reset] Stopping the kubelet service [reset] Unmounting mounted directories in "/var/lib/kubelet" [reset] Deleting contents of config directories: [/etc/kubernetes/manifests /etc/kubernetes/pki] [reset] Deleting files: [/etc/kubernetes/admin.conf /etc/kubernetes/kubelet.conf /etc/kubernetes/bootstrap-kubelet.conf /etc/kubernetes/controller-manager.conf /etc/kubernetes/scheduler.conf] [reset] Deleting contents of stateful directories: [/var/lib/kubelet /var/lib/dockershim /var/run/kubernetes /var/lib/cni] The reset process does not clean CNI configuration. To do so, you must remove /etc/cni/net.d The reset process does not reset or clean up iptables rules or IPVS tables. If you wish to reset iptables, you must do so manually by using the "iptables" command. If your cluster was setup to utilize IPVS, run ipvsadm --clear (or similar) to reset your system's IPVS tables. The reset process does not clean your kubeconfig files and you must remove them manually. Please, check the contents of the $HOME/.kube/config file.
最新发布
07-08
<think>我们收到了一个关于kubeadm reset执行后的输出信息,用户可能想知道这个输出说明了什么,或者接下来该怎么做。 根据输出,reset命令执行了一部分清理工作,但提示了一些需要手动清理的项目,如CNI配置、iptables规则、IPVS表、kubeconfig文件等。 此外,还提到无法获取kubeadm-config ConfigMap,因为连接apiserver被拒绝(可能因为集群已经部分拆除),以及需要手动重置etcd(因为检测到外部etcd?或者没有etcd配置)。 因此,我们的回答应该包括: 1. 解释reset命令的输出含义。 2. 提供完整的手动清理步骤,覆盖reset未清理的部分。 3. 针对外部etcd的注意事项(如果需要)。 注意:用户之前的问题是关于master节点初始化报错后重新初始化,而这里展示的是reset命令的输出,所以我们需要指导用户完成reset后的手动清理,以便重新初始化。 根据reset的输出,我们需要补充以下手动步骤: - 清理CNI配置 - 重置iptables和IPVS - 删除kubeconfig文件 - 清理残留的etcd数据(如果是外部etcd,则不需要?但这里输出说没有etcd配置,所以可能etcd数据在本地?) 但注意输出中有一句:“[reset] No etcd config found. Assuming external etcd”,所以etcd是外部的,因此不需要清理本地etcd?但是后面又说“Please, manually reset etcd to prevent further issues”,所以用户需要手动清理外部etcd。 因此,回答结构如下: 1. 解释reset命令的输出。 2. 列出需要手动清理的步骤(包括CNI、iptables、IPVS、kubeconfig等)。 3. 针对外部etcd,给出重置建议(但需要用户根据外部etcd的部署方式操作,无法具体,只能给一般步骤)。 4. 然后就可以重新进行初始化了。 注意:用户之前初始化失败,所以reset后需要清理这些残留才能重新初始化。 另外,根据之前用户初始化命令,他们使用的是本地etcd吗?因为初始化命令中并没有指定外部etcd。所以这里可能存在矛盾:reset检测不到etcd配置,就假设是外部etcd,但实际上可能是之前初始化失败导致etcd配置丢失?所以稳妥起见,我们也要考虑清理本地etcd数据目录。 因此,我们建议: - 如果是外部etcd,则按照外部etcd的文档重置。 - 如果是本地etcd,则删除/var/lib/etcd目录(虽然reset没有删,但根据之前错误,可能是必要的)。 由于用户没有明确说明etcd类型,我们给出两种情况下的建议。 步骤总结: 1. 清理CNI配置 2. 重置iptables和IPVS 3. 删除kubeconfig文件 4. 清理etcd数据(分情况) 5. 清理其他可能残留 然后重新初始化。 注意:在重新初始化之前,确保所有服务停止,端口释放。 最后,按照要求,在末尾提出3-5个相关问题。</think>### Kubernetes Master节点重置后的完整清理指南 #### 解读kubeadm reset输出信息 输出显示kubeadm reset已完成基础清理,但仍有重要残留需要手动处理: 1. **CNI配置未清理**:`/etc/cni/net.d`需要手动删除 2. **网络规则未重置**:iptables规则和IPVS表保留 3. **认证文件残留**:用户目录的kubeconfig文件未删除 4. **etcd未完全清理**:外部etcd需要单独重置 5. **服务未完全停止**:kubelet可能仍在运行 #### 必须执行的手动清理步骤 1. **清理CNI网络配置** ```bash sudo rm -rf /etc/cni/net.d/* ``` 2. **重置网络规则** ```bash # 清除iptables规则 sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F # 清除IPVS表(如使用) sudo ipvsadm --clear ``` 3. **删除认证文件** ```bash # 系统级配置文件 sudo rm -f /etc/kubernetes/*.conf # 用户级kubeconfig rm -rf $HOME/.kube/config ``` 4. **清理etcd数据(分两种情况)** ```bash # 如果是嵌入式etcd sudo rm -rf /var/lib/etcd # 如果是外部etcd(需登录etcd节点操作) etcdctl del --prefix "" ``` 5. **停止并禁用kubelet服务** ```bash sudo systemctl stop kubelet sudo systemctl disable kubelet ``` #### 验证完全清理状态 ```bash # 检查端口占用情况 sudo netstat -tulnp | grep -E '6443|10250|2379|2380' # 检查残留进程 ps aux | grep -E 'kube|etcd' # 检查残留目录 ls -ld /etc/kubernetes/ /var/lib/kubelet/ /var/lib/etcd/ ``` #### 重新初始化前的关键检查 1. **确认所有端口释放**:6443(API Server), 10250(kubelet), 2379/2380(etcd) 2. **验证网络配置重置**:`sudo iptables -L -n`应无K8s相关规则 3. **检查cgroup驱动一致性**:确保Docker和kubelet都使用systemd 4. **确认镜像仓库可访问**:测试`docker pull registry.aliyuncs.com/google_containers/pause:3.2` #### 安全重新初始化建议 ```bash # 先执行预检 sudo kubeadm init phase preflight --config=kubeadm-config.yaml # 使用配置文件初始化 sudo kubeadm init --config=kubeadm-config.yaml ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuxingge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值