0
votes

k8s s'exécutant dans le conteneur Docker CentOS s'exécutant sur mon hôte macOS - Problèmes d'échange?

Je souhaite exécuter des tests v1.13.5 Kubernetes v1.13.5 dans un conteneur v1.13.5 CentOS s'exécutant sur un hôte macOS. kubeadm erreurs en essayant d'exécuter kubeadm car il n'aime pas que le swap soit activé.

1) J'ai essayé kubeadm init --fail-swap-on=false mais j'obtiens Error: unknown flag: --fail-swap-on . Peut-être uniquement pris en charge dans les k8 plus anciens, mais les documents ne semblent pas clairs.

2) J'ai essayé kubeadm init --config /etc/kubernetes/kubeadm-config.yaml --ignore-preflight-errors=all --skip-token-print avec /etc/kubernetes/kubeadm-config.yaml comme

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

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

3) J'ai essayé de désactiver le swap dans mon conteneur mais j'obtiens ...

docker exécuter -i -t centos
[root @ 2ed611b32f1a /] # swapoff -a
swapoff: pas superutilisateur.

ou en mode privileged , il s'exécutait mais n'affectait pas la configuration

---
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

4) J'ai essayé des drapeaux comme docker run --memory 256M --memory-swap 256M mais ceux-ci ne sont pas honorés à l'intérieur du conteneur malgréhttps://docs.docker.com/config/containers/resource_constraints/ disant ...

ÉVITEZ UN CONTENEUR D'UTILISER SWAP

Si --memory et --memory-swap sont définis sur la même valeur, cela empêche les conteneurs d'utiliser un échange. En effet, --memory-swap est la quantité de mémoire combinée et de swap qui peut être utilisée, tandis que --memory n'est que la quantité de mémoire physique qui peut être utilisée.

5) J'ai essayé dans docker desktop v2.1.0.3 sur mon ordinateur portable en ajustant le paramètre de swap via les préférences de son interface utilisateur, mais cela ne me permettra pas de réduire le swap en dessous de 512,0 MiB.

Pouvez-vous conseiller un moyen d'exécuter k8 dans le conteneur Docker CentOS sur mon hôte macOS ?


0 commentaires

3 Réponses :


0
votes

Ma 6ème tentative (et finalement réussie) était la suivante. Voir les 4 dernières lignes ci-dessous.

kubeadm init --config /etc/kubernetes/kubeadm-config.yaml --ignore-preflight-errors=all --skip-token-printkubeadm-config.yaml ressemble à ...

---
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"
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
failSwapOn: false


0 commentaires

1
votes

Je pense que le problème vient de votre apiVersion pour kubeadm! Vous avez une ancienne version obsolète qui est v1alpha3 Il est fortement recommandé ici de migrer votre ancienne configuration pour utiliser la nouvelle api qui est v1beta1

Dans Kubernetes 1.11 et versions ultérieures, la configuration par défaut peut être imprimée à l'aide de la commande kubeadm config print. Il est recommandé de migrer votre ancienne configuration v1alpha3 vers v1beta1 à l'aide de la commande kubeadm config migrate, car la v1alpha3 sera supprimée dans Kubernetes 1.14.


1 commentaires

Merci (+1). J'ai augmenté mon apiVersion après vos conseils, mais la cause première était différente, j'ai donc ajouté une réponse distincte pour expliquer comment je l'ai fait fonctionner.



0
votes

Si vous avez décidé d'activer le swap, je suppose que vos charges de travail en ont probablement besoin.

Je vais simplement ajouter un avertissement plus petit pour les lecteurs qui choisissent cette option comme solution par défaut, quelles que soient les charges de travail spécifiques.

Il semble que Kubelet n'est pas conçu pour fonctionner correctement avec le swap activé - K8S est très clair sur ce sujet comme vous pouvez le voir dans l' installation de Kubeadm :

Swap désactivé. Vous DEVEZ désactiver le swap pour que le kubelet fonctionne correctement.

Je recommanderais de lire sur l' expulsion des pods de l'utilisateur final et les fonctionnalités pertinentes fournies par K8S pour prioriser la mémoire des pods:

1) Les 3 classes qos - Assurez-vous que vos charges de travail hautement prioritaires s'exécutent avec la classe Guaranteed (ou au moins Burstable ).

2) Priorité et préemption du pod .


0 commentaires