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