Explication détaillée de Kubectl

Table des matières

 

1. Introduction à Kubectl

2. commandes de base de kubectl

3. Afficher les informations de base

1. Afficher les informations sur l'étiquette

2. Vérifiez l'état du nœud maître

3. Vérifiez l'espace de noms

4. Créer et supprimer des applications d'espace de noms

5. Créez un contrôleur de réplique (déploiement) dans l'espace de noms kube-public pour démarrer le pod (nginx-www)

6. Décrire les détails d'une ressource

7. kubectl exec peut se connecter au conteneur sur plusieurs hôtes, tandis que docker exec ne peut se connecter qu'à l'hôte où se trouve le conteneur.

8. Afficher les journaux des conteneurs dans le pod

9. Supprimer (redémarrer) les ressources du pod

10. Augmentez et réduisez le nombre de copies

11. Supprimez le contrôleur de réplique

4. Cycle de vie du projet

1.Créer

2.Publier

2.1 Exposer les ressources en tant que nouveaux services

2.2 Afficher les détails de l'état du réseau du pod et les ports exposés au service

2.3 Afficher les nœuds associés au backend

2.4 Afficher les informations de description du service

2.5 Opérer sur le nœud et vérifier le port d'équilibrage de charge

3.Mise à jour 

3.1 Mise à jour continue

4.Retour en arrière

5.Supprimer

5. Version Canary (version en niveaux de gris)

1. Mettez à jour la version de déploiement et configurez le déploiement suspendu

2. Surveillez le processus de mise à jour. Vous pouvez voir qu'une nouvelle ressource a été ajoutée, mais qu'une ancienne ressource n'est pas supprimée comme prévu. Cela est dû à l'utilisation de la commande pause.

3. Assurez-vous qu'il n'y a aucun problème avec le pod mis à jour et poursuivez la mise à jour.

4. Vérifiez les dernières mises à jour

6. Gestion déclarative des ressources

1. Afficher la liste de configuration des ressources

2.Expliquez la liste d'allocation des ressources

3. Modifiez la liste de configuration des ressources et appliquez-la

3.1 Modification hors ligne

3.2 Modification en ligne

4. Supprimer la liste de configuration des ressources


1. Introduction à Kubectl

Le seul point d'entrée pour qu'un cluster Kubernetes gère les ressources du cluster est d'appeler l'interface apiserver via la méthode correspondante.

kubectl est l'outil officiel de ligne de commande CLI, utilisé pour communiquer avec l'apiserver, organiser et convertir les commandes saisies par l'utilisateur sur la ligne de commande en informations que l'apiserver peut reconnaître, réalisant ainsi un moyen efficace de gérer diverses ressources k8s.

Il est plus pratique d'ajouter, de supprimer et de vérifier des ressources, mais il n'est pas facile de les modifier.

kubectl的使用学习

kubectl --help  或  kubectl -h

2. commandes de base de kubectl

#查看版本信息
kubectl version

#查看资源对象简写
kubectl api-resources

#查看集群信息
kubectl cluster-info

#配置kubectl自动补全
source <(kubectl completion bash)

#node节点查看日志
journalctl -u kubelet -f

3. Afficher les informations de base

kubectl get <resource> [-o wide|json|yaml] [-n namespace]
获取资源的相关信息,-n 指定命令空间,-o 指定输出格式
resource可以是具体资源名称,如pod nginx-xxx;也可以是资源类型,如pod;或者all(仅展示几种核心资源,并不完整)
--all-namespaces 或 -A :表示显示所有命名空间,
--show-labels :显示所有标签
-l app :仅显示标签为app的资源
-l app=nginx :仅显示包含app标签,且值为nginx的资源

#查看指定命名空间的pod资源
kubectl get pods -n <命名空间>  #不指定,默认查看default命名空间

#查看指定命名空间的关键资源
kubectl get -n <命名空间> all

#查看指定资源
kubectl get -n <命名空间> svc

#查看pod资源的详细信息
kubectl get -n kube-flannel pods -o wide
kubectl get -n kube-flannel pods -o=wide
kubectl get -n kube-flannel pods -owide

#以yaml显示资源配置信息
kubectl get -n kube-flannel pods -o yaml

1. Afficher les informations sur l'étiquette

#查看pods的标签信息
kubectl get pods -A --show-labels

#-l 查看包含指定标签的pods
kubectl get pods -A --show-labels -l app=flannel

2. Vérifiez l'état du nœud maître

kubectl get componentstatuses
kubectl get cs

3. Vérifiez l'espace de noms

#命令空间的作用:用于允许不同 命名空间 的 相同类型 的资源 重名
kubectl get namespace
kubectl get ns

4. Créer et supprimer des applications d'espace de noms

#创建命名空间
kubectl create ns app
kubectl get ns

#删除命名空间
kubectl delete namespace app
kubectl get ns

5. Créez un contrôleur de réplique (déploiement) dans l'espace de noms kube-public pour démarrer le pod (nginx-www)

kubectl create deployment nginx-www --image=nginx  -n kube-public --port=80 --replicas=2

--replicas:指定pod副本数

6. Décrire les détails d'une ressource

kubectl describe deployment nginx-www -n kube-public

kubectl describe pod nginx-www-f6d5f85dc-72h85 -n kube-public

7. kubectl exec peut se connecter au conteneur sur plusieurs hôtes, tandis que docker exec ne peut se connecter qu'à l'hôte où se trouve le conteneur.

kubectl exec -it nginx-www-f6d5f85dc-72h85 -n kube-public bash

8. Afficher les journaux des conteneurs dans le pod

kubectl logs nginx-www-f6d5f85dc-28mb4 [-c  <容器名>] -p

-c 容器名:查看指定容器名的日志
-p :查看pod重启前日志

kubectl logs nginx-www-f6d5f85dc-28mb4 -n kube-public 

9. Supprimer (redémarrer) les ressources du pod

删除(重启)pod资源,由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起来
kubectl delete pod nginx-www-f6d5f85dc-72h85 -n kube-public

若pod无法删除,总是处于terminate状态,则要强行删除pod
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
#grace-period表示过渡存活期,默认30s,在删除pod之前允许pod慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod

10. Augmentez et réduisez le nombre de copies

kubectl scale deployment nginx-www --replicas=6 -n kube-public	# 扩容
kubectl scale deployment nginx-www --replicas=3 -n kube-public	# 缩容

11. Supprimez le contrôleur de réplique

kubectl delete deployment nginx-www -n kube-public
kubectl delete deployment/nginx-www -n kube-public

4. Cycle de vie du projet

Créer -> Publier -> Mettre à jour -> Restaurer -> Supprimer

1.Créer

  • Créez et exécutez une ou plusieurs images de conteneur.
  • Créez un déploiement ou une tâche pour gérer les conteneurs.
启动 nginx 实例,暴露容器端口 80,设置副本数 3
kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
 
kubectl get pods
kubectl get all

2.Publier

La raison pour laquelle Kubernetes nécessite Service est que, d'une part, l'adresse IP du Pod n'est pas fixe (le Pod peut être reconstruit), et d'autre part, il est toujours nécessaire d'équilibrer la charge entre un groupe d'instances de Pod. .
Le service implémente l'accès à un ensemble de pods via le sélecteur d'étiquettes.
Pour les applications de conteneur, Kubernetes fournit une méthode de pont basée sur VIP (IP virtuelle) pour accéder au service, puis le service est redirigé vers le pod correspondant.

Type de service:

  • ClusterIP : fournit une adresse IP virtuelle au sein du cluster pour l'accès au Pod (type de service par défaut)
  • NodePort : ouvrez un port sur chaque nœud pour un accès externe. Kubernetes ouvrira un port sur chaque nœud et le port de chaque nœud est le même. Les programmes en dehors du cluster Kubernetes peuvent y accéder via NodeIp : NodePort. Service. Chaque port ne peut être qu'un seul service et la plage de ports par défaut ne peut être que 30 000 à 32 767.
  • LoadBalancer : mappez le LoadBalancer à l'adresse LoadBalancer fournie par le fournisseur de services cloud en le définissant. Cette utilisation n'est utilisée que dans les scénarios où le Service est configuré sur la plateforme cloud d'un fournisseur de services cloud public. Accessible via un équilibreur de charge externe, le déploiement de LoadBalancer sur une plate-forme cloud nécessite généralement des coûts supplémentaires. Une fois le service soumis, Kubernetes appellera CloudProvider pour créer un service d'équilibrage de charge pour vous sur le cloud public et configurera l'adresse IP du pod proxy sur le service d'équilibrage de charge en tant que backend.
  • externalName : mappe le nom du service sur un nom de domaine DNS, qui est équivalent à l'enregistrement CNAME du service DNS. Il est utilisé pour permettre au pod d'accéder aux ressources en dehors du cluster. Il ne lie aucune ressource lui-même.

2.1 Exposer les ressources en tant que nouveaux services

为deployment的nginx创建service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

--name:指定service名称,默认为deployment名称相同
--type:指定service类型

2.2 Afficher les détails de l'état du réseau du pod et les ports exposés au service

kubectl get pods,svc -o wide

2.3 Afficher les nœuds associés au backend

kubectl get endpoints

2.4 Afficher les informations de description du service

kubectl describe svc nginx

2.5 Opérer sur le nœud et vérifier le port d'équilibrage de charge

yum install ipvsadm -y
ipvsadm -Ln

3.Mise à jour 

3.1 Mise à jour continue

kubectl get all

DESIRED:表示期望的状态是 3 个 READY 的副本
CURRENT:表示当前副本的总数
UP_TO-DATE:表示当前已经完成更新的副本数
AVAILABLE:表示当前处于 READY 状态的副本数

kubectl describe deployment/nginx

滚动更新通过参数 maxSurge 和 maxUnavailable 来控制副本替换的数量
max Unavailable:此参数控制滚动更新过程中,不可用的副本相占 DESIRED 的最大比例。maxUnavailable 可以是具体的整数(比如 3),也可以是百分百,向下取整。 maxUnavailable 默认值为 25%。

max Surge:此参数控制滚动更新过程中副本总数的超过 DESIRED 的上限。maxSurge 可以是具体的整数(比如 3),也可以是百分百,向上取整。maxSurge 默认值为 25%。

理想情况下,DESIRED 为 10 的滚动更新的过程应该是这样的:
首先创建 3 个新副本使副本总数达到 13 个。
然后销毁 2 个旧副本使可用的副本数降到 8 个。
当这 2 个旧副本成功销毁后,可再创建 2 个新副本,使副本总数保持为 13 个。
当新副本通过 Readiness 探测后,会使可用副本数增加,超过 8。
进而可以继续销毁更多的旧副本,使可用副本数回到 8。
旧副本的销毁使副本总数低于 13,这样就允许创建更多的新副本。
这个过程会持续进行,最终所有的旧副本都会被新副本替换,滚动更新完成。

#查看当前 nginx 的版本号
curl -I http://192.168.88.70:32587

#将nginx 版本更新为 1.15 版本
kubectl set image deployment/nginx nginx=nginx:1.15

#处于动态监听 pod 状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后依次类推
kubectl get pods -w

#再看更新好后的 Pod 的 ip 会改变
kubectl get pods -o wide

#再看 nginx 的版本号
curl -I http://192.168.88.70:32587

4.Retour en arrière

#查看历史版本
kubectl rollout history deployment/nginx 

#执行回滚到上一个版本
kubectl rollout undo deployment/nginx

#执行回滚到指定版本
kubectl rollout undo deployment/nginx --to-revision=1

#检查回滚状态
kubectl rollout status deployment/nginx

5.Supprimer

#删除副本控制器
kubectl delete deployment/nginx

#删除service
kubectl delete svc/nginx-service

kubectl get all

5. Version Canary (version en niveaux de gris)

Le contrôleur de déploiement prend en charge un contrôle personnalisé du rythme de défilement pendant le processus de mise à jour, tel que les opérations de mise à jour « pause » ou « reprise ». Par exemple, le processus de mise à jour est interrompu immédiatement après la création du premier lot de nouvelles ressources Pod. À l'heure actuelle, seule une partie de la nouvelle version de l'application existe, et la partie principale est toujours l'ancienne version. Ensuite, filtrez une petite partie des demandes des utilisateurs et acheminez-les vers la nouvelle version de l'application Pod, et continuez à observer si elle peut fonctionner de manière stable et de la manière souhaitée. Après avoir confirmé qu'il n'y a pas de problème, continuez à effectuer la mise à jour continue restante des ressources du pod, sinon annulez immédiatement l'opération de mise à jour. C'est ce qu'on appelle une version Canary.

1. Mettez à jour la version de déploiement et configurez le déploiement suspendu

kubectl set image deployment/nginx nginx=nginx:1.14 && kubectl rollout pause deployment/nginx

kubectl rollout status deployment/nginx  #观察更新状态

2. Surveillez le processus de mise à jour. Vous pouvez voir qu'une nouvelle ressource a été ajoutée, mais qu'une ancienne ressource n'est pas supprimée comme prévu. Cela est dû à l'utilisation de la commande pause.

kubectl get pods -owide

curl -I http://10.244.1.19

curl -I http://10.244.1.18

3. Assurez-vous qu'il n'y a aucun problème avec le pod mis à jour et poursuivez la mise à jour.

kubectl rollout resume deployment/nginx

4. Vérifiez les dernières mises à jour

kubectl get pods -w 

curl [-I] 10.0.0.189
curl [-I] 192.168.80.11:44847

6. Gestion déclarative des ressources

  1. Adapté aux opérations de modification sur les ressources
  2. La méthode déclarative de gestion des ressources s'appuie sur des fichiers manifestes de configuration des ressources pour gérer les ressources.
  3. Le fichier de liste de configuration des ressources a deux formats : yaml (humanisé, facile à lire), json (facile à analyser l'interface API)
  4. La gestion des ressources est définie au préalable dans une liste de configuration de ressources unifiée puis appliquée au cluster k8s via des commandes déclaratives.
  5. Format de syntaxe : kubectl create/apply/delete -f xxxx.yaml

1. Afficher la liste de configuration des ressources

kubectl get deployment nginx -o yaml

2.Expliquez la liste d'allocation des ressources

kubectl explain deployment.metadata

kubectl get service nginx -o yaml
kubectl explain service.metadata

3. Modifiez la liste de configuration des ressources et appliquez-la

3.1 Modification hors ligne

修改yaml文件,并用 kubectl apply -f xxxx.yaml 文件使之生效
注意:当apply不生效时,先使用delete清除资源,再apply创建资源

kubectl get service nginx -o yaml > nginx-svc.yaml
vim nginx-svc.yaml				#修改port: 8080
kubectl delete -f nginx-svc.yaml
kubectl apply -f nginx-svc.yaml
kubectl get svc

3.2 Modification en ligne

直接使用 kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port: 888)
PS:此修改方式不会对yaml文件内容修改

4. Supprimer la liste de configuration des ressources

陈述式删除:
kubectl delete service nginx

声明式删除:
kubectl delete -f nginx-svc.yaml

Je suppose que tu aimes

Origine blog.csdn.net/q1y2y3/article/details/132148568
conseillé
Classement