首页 > 解决方案 > 在我的 macOS 主机上运行的 CentOS docker 容器中运行的 k8s - 交换问题?

问题描述

我想v1.13.5在 macOS 主机上运行的 CentOS docker 容器中运行 Kubernetes 单元测试。我在尝试运行时遇到错误,kubeadm因为它不喜欢启用交换。

1)我试过kubeadm init --fail-swap-on=false但得到Error: unknown flag: --fail-swap-on. 也许仅在较旧的 k8s 中受支持,但文档似乎并不清楚。

2)我试过 kubeadm init --config /etc/kubernetes/kubeadm-config.yaml --ignore-preflight-errors=all --skip-token-print 喜欢/etc/kubernetes/kubeadm-config.yaml

---
apiVersion: kubeadm.k8s.io/v1alpha3
controlPlaneEndpoint: ""
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
networking:
  podSubnet: "10.244.0.0/16"
  serviceSubnet: "10.96.0.0/12"
kubernetesVersion: "v1.13.5"
failSwapOn: false

但这给了...error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster", ... SNIP ... error unmarshaling JSON: while decoding JSON: json: unknown field \"failSwapOn\""

3)我尝试关闭容器内的交换,但我得到......

docker run -i -t centos
[root@2ed611b32f1a /]# swapoff -a
swapoff: 不是超级用户。

或者它在privileged运行模式但不影响设置 时

docker run --privileged -i -t centos 
[root@94f9a0e5e46a /]# swapoff -a
[root@94f9a0e5e46a /]# free -h
              total        used        free      shared  buff/cache   available
Mem:           12Gi       371Mi        11Gi       1.0Mi       1.1Gi        12Gi
Swap:         2.0Gi          0B       2.0Gi

4)我尝试了类似的标志,docker run --memory 256M --memory-swap 256M尽管https://docs.docker.com/config/containers/resource_constraints/...

防止容器使用交换

如果 --memory 和 --memory-swap 设置为相同的值,这会阻止容器使用任何交换。这是因为 --memory-swap 是可以使用的组合内存和交换量,而 --memory 只是可以使用的物理内存量。

5) 我尝试在笔记本电脑上的 docker desktop v2.1.0.3 中通过其 UI 中的首选项调整交换设置,但它不会让我将交换减少到 512.0 MiB 以下。

你能建议一种让 k8s 在我的 macOS 主机上运行的 CentOS docker 容器中运行的方法吗?

标签: dockerkubernetes

解决方案


我认为问题可能出在您apiVersion的 kubeadm 上!您那里有一个旧的不推荐使用的版本在这里强烈v1alpha3建议您迁移旧配置以使用较新的 apiv1beta1

在 Kubernetes 1.11 及更高版本中,可以使用 kubeadm config print 命令打印出默认配置。建议您使用 kubeadm config migrate 命令将旧的 v1alpha3 配置迁移到 v1beta1,因为 v1alpha3 将在 Kubernetes 1.14 中删除。


推荐阅读