Gestion des ressources Kubernetes native dans le cloud, utilisation de base de l'espace de noms, du pod, de l'étiquette, du déploiement et du service

Introduction à la gestion des ressources

●L'essence de Kubernetes est un système de cluster, et les utilisateurs peuvent déployer divers services dans le cluster. Le soi-disant service de déploiement exécute en fait les conteneurs un par un dans le cluster Kubernetes et exécute le programme spécifié dans le conteneur.
La plus petite unité de gestion de Kubernetes est un pod plutôt qu'un conteneur, de sorte que le conteneur ne peut être placé que dans le pod, et Kubernetes ne gère généralement pas directement le pod, mais gère le pod via le contrôleur de pod.
● Une fois que le pod a fourni des services, vous devez déterminer comment accéder aux services dans le pod. Kubernetes fournit des ressources de service pour implémenter cette fonction.
●Bien sûr, si les données du programme dans le pod doivent être conservées, Kubernetes fournit également divers systèmes de stockage.

Gestion d'objets impérative : ne peut exploiter que des objets actifs, ne peut pas auditer, suivre, utiliser

Configuration d'objet impérative : lorsque le projet est volumineux, les fichiers de configuration sont nombreux et l'opération est gênante

Espace de noms

  • L'espace de noms est une ressource très importante dans le système kubernetes, et sa fonction principale est d'implémenter 多套系统的资源隔离ou 多租户的资源隔离.

  • Par défaut, tous les pods d'un cluster kubernetes sont mutuellement accessibles. Mais en pratique, vous ne voudrez peut-être pas autoriser deux pods à accéder l'un à l'autre, vous pouvez donc diviser les deux pods en différents espaces de noms. Kubernetes peut former des "groupes" logiques en allouant des ressources au sein du cluster à différents espaces de noms pour faciliter l'utilisation et la gestion isolées des ressources dans différents groupes.

  • Différents espaces de noms peuvent être remis à différents locataires pour la gestion via le mécanisme d'autorisation de kubernetes, réalisant ainsi l'isolement des ressources multi-locataires. À ce moment, il peut également combiner le mécanisme de quota de ressources de kubernetes pour limiter les ressources que différents locataires peuvent occuper, telles que l'utilisation du processeur, l'utilisation de la mémoire, etc., pour gérer les ressources disponibles pour les locataires.

 Une fois le cluster démarré, kubernetes créera plusieurs espaces de noms par défaut

kubectl get namespace #View
default : tous les objets avec un espace de noms non spécifié seront alloués dans l'espace de noms par défaut.
kube-node-lease : maintenance des pulsations entre les nœuds du cluster, introduite dans la v1.13.
kube-public : les ressources de cet espace de noms sont accessibles à tous (y compris les utilisateurs non authentifiés).
kube-system : toutes les ressources créées par le système kubernetes se trouvent dans cet espace de noms

Cosse

  • Un pod est la plus petite unité de gestion d'un cluster kubernetes. Pour exécuter un programme, il doit être déployé dans un conteneur, et le conteneur doit exister dans un pod.

  • Un pod peut être considéré comme une encapsulation d'un conteneur, et un ou plusieurs conteneurs peuvent exister dans un pod.

Une fois que kubernetes a démarré le cluster, chaque composant du cluster s'exécute également en mode Pod, qui peut être affiché à l'aide de la commande suivante :

kubectl get pods -n kube-system

Créer et exécuter des pods, principalement via le contrôleur de pod

kubectl run (Pod的名称) [参数]  没有单独运行
# --image 指定Pod的镜像
# --port 指定端口
# --namespace 指定namespace
kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace=dev
查询所有Pod的基本信息
kubectl get pods -n dev
查看Pod的详细信息
kubectl describe pod nginx -n dev
访问Nginx的Pod
kubectl get pods -n dev -o wide
curl 10.244.2.7:80  #ip加端口
删除Nginx的Pod
kubectl delete pod nginx -n dev

Configuration d'objet impératif, créer un nouveau pod-nginx.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev
spec:
  containers:
  - image: nginx:1.17.1
    imagePullPolicy: IfNotPresent
    name: pod
    ports: 
    - name: nginx-port
      containerPort: 80
      protocol: TCP

Exécuter les commandes de création et de suppression

kubectl create -f pod-nginx.yaml
kubectl delete -f pod-nginx.yaml

Étiqueter

Le label est un concept important de kubernetes. Son rôle est d'ajouter des identifiants aux ressources pour les distinguer et les sélectionner.

Caractéristiques de l'étiquette :

  • Une étiquette sera attachée à divers objets sous la forme de paires clé/valeur clé-valeur, telles que Node, Pod, Service, etc.
  • Un objet ressource peut définir n'importe quel nombre d'étiquettes, et la même étiquette peut être ajoutée à n'importe quel nombre d'objets ressource.
  • L'étiquette est généralement déterminée lorsque l'objet ressource est défini, bien sûr, elle peut également être ajoutée ou supprimée dynamiquement après la création de l'objet.
  • Le regroupement multidimensionnel des ressources peut être réalisé via Label, afin de gérer l'allocation des ressources, la planification, la configuration et le déploiement de manière flexible et pratique, comme les étiquettes de version, les étiquettes d'environnement, etc.

ressources de balises

kubectl label pod xxx key=value [-n 命名空间]
为Nginx的Pod打上标签
kubectl label pod nginx version=1.0 -n dev
更新资源的标签
kubectl label pod xxx key=value [-n 命名空间] --overwrite
kubectl label pod nginx version=2.0 -n dev --overwrite
显示Nginx的Pod的标签
kubectl get pod nginx -n dev --show-labels
筛选标签
kubectl get pod -l version=2.0 -n dev --show-labels
删除标签
kubectl label pod nginx version- -n dev

Configuration d'objet impératif

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev
  labels:
    version: "3.0"
    env: "test"        
spec:
  containers:
  - image: nginx:1.17.1
    imagePullPolicy: IfNotPresent
    name: pod
    ports: 
    - name: nginx-port
      containerPort: 80
      protocol: TCP

Exécuter les commandes de création et de suppression

kubectl create -f pod-nginx.yaml
kubectl delete -f pod-nginx.yaml

Déploiement

  • Dans kubernetes, Pod est la plus petite unité de contrôle, mais kubernetes contrôle rarement Pod directement, généralement via le contrôleur Pod .

  • Le contrôleur de pod est utilisé pour la gestion du pod afin de garantir que les ressources du pod répondent à l'état attendu. Lorsque les ressources du pod échouent, il essaie de redémarrer ou de reconstruire le pod, et l'adresse IP nouvellement créée est différente de celle d'origine.

Lorsqu'un déploiement crée un pod, il étiquette le pod et sélectionne le pod à gérer via le sélecteur d'étiquettes.

#创建2个pod管理nginx命名空间为dev
kubectl run nginx --image=nginx:1.17.1 --replicas=2 --port=80 --namespace dev
#查看
kubectl get deployment,pods -n dev
#查看nginx详细描述
kubectl describe deploy nginx -n dev
#查看标签
kubectl get pods -n dev --show-lables
#删除
kubectl delete deploy nginx -n dev

Configuration d'objet impératif, créer un deploy-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: dev
#副本数  选择器
spec:
  replicas: 3
  selector:
    matchLabels:
      run: nginx
  #pod模板    
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - image: nginx:1.17.1
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
#执行创建和删除命令
kubectl create -f deploy-nginx.yaml
kubectl delete -f deploy-nginx.yaml
#查看创建的Pod
kubectl get pods [-n 命名空间]
#查看名称为dev的namespace下通过deployment创建的3个Pod
kubectl get pods -n dev
#查看deployment的信息
kubectl get deployment [-n 命名空间]
kubectl get deployment -n dev
kubectl describe deployment nginx -n dev
#删除deployment
kubectl delete deployment nginx -n dev

Un service

  • Nous avons pu utiliser le déploiement pour créer un groupe de pods afin de fournir des services à haute disponibilité. Bien que chaque pod se verra attribuer une adresse IP de pod distincte, les problèmes suivants se posent :

  • L'adresse IP du pod changera au fur et à mesure que le pod sera reconstruit.
  • L'adresse IP du pod n'est qu'une adresse IP virtuelle visible à l'intérieur du cluster et inaccessible de l'extérieur.

Le service peut être considéré comme un groupe de pods du même type d'interface d'accès externe. Avec l'aide du service, les applications peuvent facilement réaliser la découverte de service et l'équilibrage de charge.

#暴露Service
kubectl expose deployment xxx --name=服务名 --type=ClusterIP --port=暴露的端口 --target-port=指向集群中的Pod的端口 [-n 命名空间]
# 新建时借助pod控制器找到对应的pod
#暴露名为test的namespace下的名为nginx的deployment,并设置服务名为svc-nginx1
kubectl expose deployment nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n test
#查看Service
kubectl get service -n test
#访问
curl 对应集群ip

Recréer le Service accessible en dehors du cluster

kubectl expose deployment xxx --name=服务名 --type=NodePort --port=暴露的端口 --target-port=指向集群中的Pod的端口 [-n 命名空间]
# 会产生一个外部也可以访问的Service
kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n test
#查看名为test的命名空间的所有Service
kubectl get service -n test
#浏览器访问 查出来的ip与端口号
#删除服务
kubectl delete service svc-nginx1 -n test

Méthode de configuration d'objet, créez un nouveau svc-nginx.yaml

apiVersion: v1
kind: Service
metadata:
  name: svc-nginx
  namespace: dev
spec:
  clusterIP: 10.109.179.231
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: ClusterIP
执行创建和删除命令
kubectl  create  -f  svc-nginx.yaml
kubectl  delete  -f  svc-nginx.yaml

Je suppose que tu aimes

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