Introduction du composant Kubernetes, construction du cluster de la version domestique de k8s

Avantages du déploiement conteneurisé : Auparavant, les projets étaient déployés de manière commune et ils ne pouvaient pas être isolés les uns des autres. Si la mémoire d'un projet fuyait, le serveur serait indisponible. La gestion conteneurisée Docker évite cette situation, et k8s est équivalent à la gestion docker conteneurisée. L'écosystème orchestre tous les conteneurs et gère automatiquement les services de conteneurs

La fonction principale :

Découverte de serveurs et équilibrage de charge

Arrangement de stockage (lorsque la mémoire de l'application de service est gérée par k8s, lorsque le serveur n'est pas utilisé, il sera automatiquement nettoyé)

Déploiement et restauration automatiques, calcul automatique de l'emballage : en cas de problème avec l'application, revenir à la version précédente et contrôler la mémoire et la taille du processeur occupées par chaque application

Auto-guérison : L'application dans le serveur peut être surveillée. Si un serveur est raccroché, il sera automatiquement placé sur d'autres machines.

Présentation des composants Kubernetes

  • Un cluster kubernetes est principalement composé de nœuds de contrôle (maître) et de nœuds de travail (nœuds), et différents composants sont installés sur chaque nœud.

  • Nœud de contrôle (maître) : Le plan de contrôle du cluster, responsable de la prise de décision du cluster.

    • Serveur d'API : seul point d'entrée pour les opérations de cluster, il reçoit les commandes saisies par les utilisateurs et fournit des mécanismes tels que l'authentification, l'autorisation, l'enregistrement d'API et la découverte.

    • Planificateur : responsable de la planification des ressources du cluster et de la planification des pods sur les nœuds correspondants conformément à une politique de planification prédéterminée.

    • ControllerManager : responsable de la maintenance de l'état du cluster, tel que les modalités de déploiement du programme, la détection des pannes, la mise à l'échelle automatique et les mises à jour continues.

    • Etcd : responsable du stockage des informations sur divers objets de ressource dans le cluster.

  • Nœud de travail (nœud) : le plan de données du cluster, chargé de fournir l'environnement d'exécution du conteneur.

    • Kubelet : responsable de la maintenance du cycle de vie des conteneurs, c'est-à-dire en contrôlant Docker, pour créer, mettre à jour et détruire les conteneurs.

    • KubeProxy : chargé de fournir la découverte de services et l'équilibrage de charge au sein du cluster.

    • Docker : responsable de diverses opérations du conteneur sur le nœud.

Flux de travail des composants

  • Déployez un service Nginx pour illustrer la relation d'appel de chaque composant du système Kubernetes :

  • ① Tout d'abord, il doit être clair qu'une fois l'environnement Kubernetes démarré, le maître et le nœud stockeront leurs propres informations dans la base de données etcd.

  • ② Une demande d'installation d'un service Nginx sera d'abord envoyée au composant API Server sur le nœud maître.

  • ③ Le composant API Server appellera le composant Scheduler pour décider sur quel nœud le service doit être installé. À ce stade, il lira les informations de chaque nœud à partir d'etcd, puis le sélectionnera selon un certain algorithme et informera le serveur API du résultat.

  • ④ API Server appelle Controller-Manager pour appeler le nœud Node afin d'installer le service Nginx.

  • ⑤ Une fois que Kubelet aura reçu l'instruction, il notifiera Docker, puis Docker démarrera un pod Nginx. Un pod est la plus petite unité opérationnelle de Kubernetes, et un conteneur doit s'exécuter dans un pod.

  • ⑥ Un service Nginx est en cours d'exécution. Si vous devez accéder à Nginx, vous devez utiliser kube-proxy pour accéder au pod, afin que les utilisateurs externes puissent accéder au service Nginx dans le cluster.

autres nœuds

  • Maître : nœud de contrôle du cluster. Chaque cluster nécessite au moins un nœud maître responsable de la gestion et du contrôle du cluster.

  • Nœud : nœud de charge de travail. Le maître affecte des conteneurs à ces nœuds de travail de nœud, puis le Docker sur le nœud de nœud est responsable de l'exécution du conteneur.

  • Pod : la plus petite unité de contrôle de Kubernetes. Les conteneurs s'exécutent dans des pods. Un pod peut avoir un ou plusieurs conteneurs.

  • Contrôleur : Le contrôleur, à travers lequel la gestion des pods est réalisée, comme le démarrage des pods, l'arrêt des pods, la mise à l'échelle du nombre de pods, etc.

  • Service : Une entrée unifiée pour les services externes du Pod, sous laquelle plusieurs Pods de la même classe peuvent être maintenus.

  • Label : Label, utilisé pour classer les Pods, un même type de Pod aura le même label.

  • NameSpace : espace de noms utilisé pour isoler l'environnement d'exécution du pod.

Construire un environnement de cluster

Vérifiez la version de la machine virtuelle, de préférence 7.5 ou supérieure

chat /etc/redhat-release 

Configurez la résolution du nom d'hôte pour une référence facile

vim /etc/hosts

Ajouter l'analyse
192.168.6.100 maître
192.168.6.101 nœud1
192.168.6.102 nœud2

ping pour voir si vous pouvez ping

Synchronisation de l'heure : kubernetes exige que l'heure du nœud dans le cluster soit précise et cohérente, ajoutez donc une synchronisation de l'heure sur chaque nœud

systemctl start chronyd
systemctl enable chronyd #boot
date de démarrage automatique #view time

Le démarrage de Docker générera des règles iptables pour éviter toute confusion du système et devra être fermé, et le système n'aura pas besoin d'être traité.

#Fermez le pare-feu
systemctl stop firewalld
systemctl disable firewalld #Fermez
le service iptables
systemctl stop iptables
systemctl disable iptables #Désactivez
les services de sécurité Linux pour voir si selinux est activé
getenforce #Fermez définitivement
selinux, vous devez redémarrer
vim /etc/selinux/config 
SELINUX =désactivé #Fermer temporairement
selinux , après le redémarrage,
setenforce invalide 0

Fermer la partition d'échange : partition de mémoire virtuelle, une fois la mémoire physique épuisée, allumez le disque et utilisez-le comme mémoire virtuelle

vim /etc/fstab #Commentez 
la dernière ligne
#/dev/mapper/centos-swap swap swap defaults

Modifier les paramètres du noyau Linux et créer des fichiers de configuration

vim /etc/sysctl.d/kubernetes.conf

# Passer le trafic IPv4 ponté à la chaîne iptables
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1

recharger la configuration

sysctl-p

Charger le module de filtre de pont

modprobe br_netfilter

 Vérifiez s'il est chargé

lsmod | poignée br_netfilter

Configurer la fonction ipvs

Il existe deux modèles de proxy pour le service dans k8s, l'un est iptables et l'autre est ipvs, et ipvs a des performances plus élevées.

Charger manuellement le module ipvs

miam -y installer ipset ipvsadm

Ajoutez le fichier de script correspondant et écrivez le contenu correspondant

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

Ajouter une autorisation d'exécution

chmod +x /etc/sysconfig/modules/ipvs.modules

Exécutez le fichier, chargez le module

/bin/bash /etc/sysconfig/modules/ipvs.modules

Vérifier le succès

lsmod | grep -e ipvs -e nf_conntrack_ipv4

À ce stade, l'environnement est configuré, redémarrez le redémarrage

Installez Docker, kubeadm, kubelet et kubectl par nœud

installer le menu fixe

#Switch miroir
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo #Install yum -y install
docker
-ce-18.06.3.ce-3.el7

Ajoutez des fichiers de configuration, docker utilise cgroupfs par défaut, k8s recommande d'utiliser systemd

mkdir /etc/docker
vim daemon.json #Entrez 
ce qui suit
{   "exec-opts":["native.cgroupdriver=systemd"],   "registry-mirrors":["https://kn0t2bca.mirror.aliyuncs.com" ] }


désinstaller le menu fixe

yum list installed|grep docker Afficher la liste d'installation de docker
yum -y remove xxx Désinstaller le nom détecté
systemctl enable docker auto-start

Installer les composants k8s

changer la source du miroir

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck =0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key. gpg
EOF

Installer

yum install -y --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
卸载
rpm -e kubelet-1.18.0 kubelet-1.18.0 kubelet- 1.18.0 --nodeps

Afin de rendre le pilote de groupe de contrôle utilisé par Docker cohérent avec le pilote de groupe de contrôle utilisé par kubelet, le contenu du fichier "/etc/sysconfig/kubelet"

# Passez à
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

Démarrage automatique

systemctl activer kubelet

Configuration du cluster

Parce que k8s est un site Web étranger, le téléchargement doit configurer le miroir et spécifier la version de téléchargement

Afficher l'image souhaitée

liste des images de configuration kubeadm

Spécifiez une version fixe

images = (
    apiserver : v1.17.4
    vers controller-manager : v1.17.4
    vers scheduler : v1.17.4
    vers proxy : v1.17.4
    pause : 3.1
    etcd : 3.4.3-0
    coredns : 1.6.5
)

boucler les téléchargements

pour imageName dans ${images[@]} ; faire Docker Pull Registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName Docker     Tag Registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    k8s.gcr.io/$imageName Docker RMI     Registry.cn-hangzhou.aliyuncs .com/google_containers/$imageName terminé


Vérifiez si l'image a été téléchargée avec succès images docker

Déployez uniquement le nœud maître de k8s

kubeadm init \
  --kubernetes-version v1.17.4 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=192.168.6.100

La ligne de commande vous demandera

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.6.101:6443 --token sv5epz.4f8hvj7ukjlrv857 \
    --discovery-token-ca-cert-hash sha256:56bc77d7c4c95cc7aca777185e14274e4f99bc8d3b21da65d89ff19987e83554 

Entrez ensuite

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

Entrez sur un autre serveur

kubeadm join 192.168.6.101:6443 --token sv5epz.4f8hvj7ukjlrv857 \
    --discovery-token-ca-cert-hash sha256:56bc77d7c4c95cc7aca777185e14274e4f99bc8d3b21da65d89ff199547e835 

Afficher les nœuds

kubectl obtenir des nœuds

Ensuite, le nœud nœud n'est pas connecté après l'entrée, et la raison en est que le nœud nœud ne peut pas être démarré automatiquement. Vous devez copier le fichier /etc/kubernetes/admin.conf du nœud maître sur le serveur du nœud nœud.

Installez le plugin réseau sur le nœud maître

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Démarrer la flanelle avec le fichier de configuration

kubectl appliquer -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Consultez la progression du déploiement du plug-in réseau CNI :

kubectl get pods -n kube-system

Vérifiez l'état du cluster :

kubectl obtenir cs

Je suppose que tu aimes

Origine blog.csdn.net/weixin_52210557/article/details/123618568
conseillé
Classement