无法运行kubeadm init

时间:2018-11-14 06:16:24

标签: kubernetes kubeadm

参考https://github.com/kubernetes/kubeadm/issues/1239。如何成功配置和启动最新的kubeadm?

kubeadm_new.config由配置迁移生成: kubeadm config migrate --old-config kubeadm_default.config --new-config kubeadm_new.config。 kubeadm_new.config的内容:

apiEndpoint:
  advertiseAddress: 1.2.3.4
  bindPort: 6443
apiVersion: kubeadm.k8s.io/v1alpha3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: khteh-t580
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiVersion: kubeadm.k8s.io/v1alpha3
auditPolicy:
  logDir: /var/log/kubernetes/audit
  logMaxAge: 2
  path: ""
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: ""
etcd:
  local:
    dataDir: /var/lib/etcd
    image: ""
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.12.2
networking:
  dnsDomain: cluster.local
  podSubnet: ""
  serviceSubnet: 10.96.0.0/12
unifiedControlPlaneImage: ""

我在kubeadm_new.config中更改了“ kubernetesVersion:v1.12.2”,它似乎进一步发展,现在停留在以下错误:

failed to run Kubelet: Running with swap on is not supported, please disable swap! or set --fail-swap-on flag to false.

我如何将故障交换设置为FALSE才能进行?

2 个答案:

答案 0 :(得分:2)

Kubeadm附带了一个打印默认配置的命令,因此您可以使用以下命令检查每个分配的默认值: kubeadm config print-default

在这种情况下,如果要在kubelet中禁用交换检查,则必须在当前的kubeadm配置中添加以下几行:

---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
failSwapOn: false

答案 1 :(得分:0)

您没有提到为什么选择禁用交换。

我不会将其视为第一选择-不是因为内存交换是一种不好的做法(这是一种有用且基本的内核机制),而是因为似乎Kubelet并未设计为在启用交换功能的情况下正常工作。

如您在Kubeadm installation中所见,K8S对此主题非常清楚:

禁止交换。您必须禁用交换才能使kubelet正常工作 正确。

我建议阅读有关Evicting end-user Pods以及K8S提供的用于优先安排豆荚内存的相关功能的信息:

1)The 3 qos classes-确保您的高优先级工作负载正在与Guaranteed(或至少Burstable)类一起运行。

2)Pod Priority and Preemption