Detaillierte Erklärung von kubectl

Inhaltsverzeichnis

 

1. Einführung in kubectl

2. Grundbefehle von kubectl

3. Grundlegende Informationen anzeigen

1. Etiketteninformationen anzeigen

2. Überprüfen Sie den Status des Masterknotens

3. Überprüfen Sie den Namensraum

4. Namespace-Apps erstellen und löschen

5. Erstellen Sie einen Replikat-Controller (Bereitstellung) im Namespace kube-public, um den Pod (nginx-www) zu starten.

6. Beschreiben Sie die Details einer Ressource

7. kubectl exec kann sich hostübergreifend bei Containern anmelden, Docker exec kann sich jedoch nur auf dem Host anmelden, auf dem sich der Container befindet

8. Sehen Sie sich die Protokolle der Container im Pod an

9. Pod-Ressourcen löschen (neu starten).

10. Erweitern und reduzieren Sie die Anzahl der Kopien

11. Löschen Sie den Replikat-Controller

4. Projektlebenszyklus

1. erstellen

2. Veröffentlichung

2.1 Ressourcen als neue Dienste verfügbar machen

2.2 Überprüfen Sie die Statusdetails des Pod-Netzwerks und die vom Dienst bereitgestellten Ports

2.3 Zeigen Sie die mit dem Backend verknüpften Knoten an

2.4 Sehen Sie sich die Beschreibungsinformationen des Dienstes an

2.5 Arbeiten Sie am Knotenknoten und überprüfen Sie den Lastausgleichsport

3.Aktualisieren 

3.1 Fortlaufendes Update

4. Rollback

5.Löschen

5. Canary-Release (Graustufen-Release)

1. Aktualisieren Sie die Version der Bereitstellung und konfigurieren Sie sie so, dass die Bereitstellung angehalten wird

2. Überwachen Sie den Aktualisierungsprozess. Sie können sehen, dass eine neue Ressource hinzugefügt wurde, eine alte Ressource jedoch nicht gemäß dem erwarteten Status gelöscht wurde, da der Pause-Befehl verwendet wurde

3. Stellen Sie sicher, dass es keine Probleme mit dem aktualisierten Pod gibt, und fahren Sie mit der Aktualisierung fort.

4. Überprüfen Sie die neuesten Updates

6. Deklaratives Ressourcenmanagement

1. Sehen Sie sich die Ressourcenkonfigurationsliste an

2.Erklären Sie die Ressourcenzuteilungsliste

3. Ändern Sie die Ressourcenkonfigurationsliste und wenden Sie sie an

3.1 Offline-Änderung

3.2 Online-Änderung

4. Ressourcenkonfigurationsliste löschen


1. Einführung in kubectl

Der einzige Einstiegspunkt für den Kubernetes-Cluster zur Verwaltung von Clusterressourcen besteht darin, die Apiserver-Schnittstelle über die entsprechende Methode aufzurufen

kubectl ist ein offizielles CLI-Befehlszeilentool, das zur Kommunikation mit Apiserver, zum Organisieren und Konvertieren der von Benutzern in der Befehlszeile eingegebenen Befehle in Informationen verwendet wird, die Apiserver erkennen kann, und dann zu einer effektiven Methode zur Verwaltung verschiedener Ressourcen von k8s.

Es ist bequemer, Ressourcen hinzuzufügen, zu löschen und zu überprüfen, aber es ist nicht einfach, sie zu ändern.

kubectl的使用学习

kubectl --help  或  kubectl -h

2. Grundbefehle von kubectl

#查看版本信息
kubectl version

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

#查看集群信息
kubectl cluster-info

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

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

3. Grundlegende Informationen anzeigen

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. Etiketteninformationen anzeigen

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

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

2. Überprüfen Sie den Status des Masterknotens

kubectl get componentstatuses
kubectl get cs

3. Überprüfen Sie den Namensraum

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

4. Namespace-Apps erstellen und löschen

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

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

5. Erstellen Sie einen Replikat-Controller (Bereitstellung) im Namespace kube-public, um den Pod (nginx-www) zu starten.

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

--replicas:指定pod副本数

6. Beschreiben Sie die Details einer Ressource

kubectl describe deployment nginx-www -n kube-public

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

7. kubectl exec kann sich hostübergreifend bei Containern anmelden, Docker exec kann sich jedoch nur auf dem Host anmelden, auf dem sich der Container befindet

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

8. Sehen Sie sich die Protokolle der Container im Pod an

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

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

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

9. Pod-Ressourcen löschen (neu starten).

删除(重启)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. Erweitern und reduzieren Sie die Anzahl der Kopien

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

11. Löschen Sie den Replikat-Controller

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

4. Projektlebenszyklus

Erstellen -> Veröffentlichen -> Aktualisieren -> Rollback -> Löschen

1. erstellen

  • Erstellen Sie ein oder mehrere Container-Images und führen Sie sie aus.
  • Erstellen Sie eine Bereitstellung oder einen Job, um Container zu verwalten.
启动 nginx 实例,暴露容器端口 80,设置副本数 3
kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
 
kubectl get pods
kubectl get all

2. Veröffentlichung

Kubernetes benötigt einen Dienst, einerseits, weil die IP des Pods nicht festgelegt ist (Pod kann neu erstellt werden), andererseits, weil immer ein Lastausgleich zwischen einer Gruppe von Pod-Instanzen erforderlich ist.
Der Dienst implementiert den Zugriff auf eine Reihe von Pods über den Label Selector.
Für Containeranwendungen stellt Kubernetes eine VIP-basierte (virtuelle IP) Brücke für den Zugriff auf den Dienst bereit, und der Dienst leitet dann zum entsprechenden Pod weiter.

Art der Leistung:

  • ClusterIP: Stellen Sie eine virtuelle IP innerhalb des Clusters für den Pod-Zugriff bereit (Standardtyp des Dienstes).
  • NodePort: Öffnen Sie auf jedem Knoten einen Port für den externen Zugriff. Kubernetes öffnet auf jedem Knoten einen Port. Der Port jedes Knotens ist derselbe. Auf Programme außerhalb des Kubernetes-Clusters kann über den NodeIp:NodePort-Dienst zugegriffen werden. Jeder Port kann nur ein Dienst sein und der Standard-Portbereich kann nur 30000-32767 sein.
  • LoadBalancer: Ordnen Sie der vom Cloud-Dienstanbieter bereitgestellten LoadBalancer-Adresse zu, indem Sie den LoadBalancer festlegen. Diese Nutzung wird nur im Szenario der Einrichtung eines Dienstes auf der Cloud-Plattform eines öffentlichen Cloud-Dienstanbieters verwendet. Für den Zugriff über einen externen Load Balancer sind in der Regel zusätzliche Gebühren für die Bereitstellung von LoadBalancer auf der Cloud-Plattform erforderlich. Nachdem der Dienst übermittelt wurde, ruft Kubernetes CloudProvider auf, um einen Lastausgleichsdienst für Sie in der öffentlichen Cloud zu erstellen und die IP-Adresse des Proxy-Pods für den Lastausgleichsdienst als Backend zu konfigurieren.
  • externalName: Ordnet den Dienstnamen einem DNS-Domänennamen zu, der dem CNAME-Eintrag des DNS-Dienstes entspricht. Er wird verwendet, um dem Pod den Zugriff auf Ressourcen außerhalb des Clusters zu ermöglichen. Er bindet selbst keine Ressourcen.

2.1 Ressourcen als neue Dienste verfügbar machen

为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 Überprüfen Sie die Statusdetails des Pod-Netzwerks und die vom Dienst bereitgestellten Ports

kubectl get pods,svc -o wide

2.3 Zeigen Sie die mit dem Backend verknüpften Knoten an

kubectl get endpoints

2.4 Sehen Sie sich die Beschreibungsinformationen des Dienstes an

kubectl describe svc nginx

2.5 Arbeiten Sie am Knotenknoten und überprüfen Sie den Lastausgleichsport

yum install ipvsadm -y
ipvsadm -Ln

3.Aktualisieren 

3.1 Fortlaufendes Update

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

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

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

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

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

5.Löschen

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

#删除service
kubectl delete svc/nginx-service

kubectl get all

5. Canary-Release (Graustufen-Release)

Der Deployment Controller unterstützt die benutzerdefinierte Steuerung des Bildlaufrhythmus während des Aktualisierungsvorgangs, z. B. „Pause“ oder „Fortsetzen“ des Aktualisierungsvorgangs. Warten Sie beispielsweise, bis der erste Stapel neuer Pod-Ressourcen erstellt wurde, und unterbrechen Sie den Aktualisierungsvorgang sofort. Zu diesem Zeitpunkt ist nur ein Teil der neuen Version der Anwendung vorhanden, und der Hauptteil ist immer noch die alte Version. Filtern Sie dann eine kleine Anzahl von Benutzeranforderungen, leiten Sie sie an die neue Version der Pod-Anwendung weiter und beobachten Sie weiterhin, ob sie stabil und wie erwartet ausgeführt werden kann. Nachdem Sie sich vergewissert haben, dass kein Problem vorliegt, fahren Sie mit der fortlaufenden Aktualisierung der verbleibenden Pod-Ressourcen fort, andernfalls setzen Sie den Aktualisierungsvorgang sofort zurück. Dies wird als kanarische Freisetzung bezeichnet.

1. Aktualisieren Sie die Version der Bereitstellung und konfigurieren Sie sie so, dass die Bereitstellung angehalten wird

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

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

2. Überwachen Sie den Aktualisierungsprozess. Sie können sehen, dass eine neue Ressource hinzugefügt wurde, eine alte Ressource jedoch nicht gemäß dem erwarteten Status gelöscht wurde, da der Pause-Befehl verwendet wurde

kubectl get pods -owide

curl -I http://10.244.1.19

curl -I http://10.244.1.18

3. Stellen Sie sicher, dass es keine Probleme mit dem aktualisierten Pod gibt, und fahren Sie mit der Aktualisierung fort.

kubectl rollout resume deployment/nginx

4. Überprüfen Sie die neuesten Updates

kubectl get pods -w 

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

6. Deklaratives Ressourcenmanagement

  1. Geeignet für Änderungsvorgänge an Ressourcen
  2. Die deklarative Ressourcenverwaltungsmethode basiert auf Ressourcenkonfigurationsmanifestdateien, um Ressourcen zu verwalten
  3. Die Ressourcenkonfigurationslistendatei hat zwei Formate: Yaml (humanisiert, leicht lesbar), JSON (einfach zu analysierende API-Schnittstelle).
  4. Die Ressourcenverwaltung wird vorab in der einheitlichen Ressourcenkonfigurationsliste definiert und dann über deklarative Befehle auf den k8s-Cluster angewendet
  5. Syntaxformat: kubectl create/apply/delete -f xxxx.yaml

1. Sehen Sie sich die Ressourcenkonfigurationsliste an

kubectl get deployment nginx -o yaml

2.Erklären Sie die Ressourcenzuteilungsliste

kubectl explain deployment.metadata

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

3. Ändern Sie die Ressourcenkonfigurationsliste und wenden Sie sie an

3.1 Offline-Änderung

修改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 Online-Änderung

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

4. Ressourcenkonfigurationsliste löschen

陈述式删除:
kubectl delete service nginx

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

Ich denke du magst

Origin blog.csdn.net/q1y2y3/article/details/132148568
Empfohlen
Rangfolge