一、創建和管理Pod
創建nginx pod
kubectl run nginx-local --image=nginx
查看Pod
kubectl get pod
描述
kubectl describe pod nginx-local
查看Pod的運行日志
kubectl logs mynginx
顯示pod的IP和運行節點信息
kubectl get pod -owide
使用Pod的ip+pod里面運行容器的端口
curl 10.42.1.3
在容器中執行
kubectl exec nginx-local -it -- /bin/bash
刪除
kubectl delete pod nginx-local
強制刪除
kubectl delete pod nginx-local --force
二、Deployment(部署)與ReplicaSet(副本集)
Deployment是對ReplicaSet和Pod更高級的抽象。它使Pod擁有多副本,自愈,擴縮容、滾動升級等能力。ReplicaSet(副本集)是一個Pod的集合。它可以設置運行Pod的數量,確保任何時間都有指定數量的 Pod 副本在運行。
常見命令
創建deployment,部署3個運行nginx的Pod
kubectl create deployment nginx-deployment --image=nginx:1.22 --replicas=3
查看deployment
kubectl get deploy
查看replicaSet
kubectl get rs
刪除deployment
kubectl delete deploy nginx-deployment
縮放
手動縮放
將副本數量調整為5
kubectl scale deployment/nginx-deployment --replicas=5
kubectl get deploy
自動縮放
自動縮放通過增加和減少副本的數量,以保持所有 Pod 的平均 CPU 利用率不超過 75%。
自動縮放
kubectl autoscale deployment/nginx-auto --min=3 --max=10 --cpu-percent=75
查看自動縮放
kubectl get hpa
刪除自動縮放
kubectl delete hpa nginx-deployment
滾動更新
查看版本和Pod
kubectl get deployment/nginx-deployment -owide
kubectl get pods
更新容器鏡像
kubectl set image deployment/nginx-deployment nginx=nginx:1.23
滾動更新
kubectl rollout status deployment/nginx-deployment
查看過程
kubectl get rs --watch
版本回滾
查看歷史版本
kubectl rollout history deployment/nginx-deployment
查看指定版本的信息
kubectl rollout history deployment/nginx-deployment --revision=2
回滾到歷史版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2
三、Service(服務)
Service將運行在一組 Pods 上的應用程序公開為網絡服務的抽象方法。
Service為一組 Pod 提供相同的 DNS 名,并且在它們之間進行負載均衡。
Kubernetes 為 Pod 提供分配了IP 地址,但IP地址可能會發生變化。
集群內的容器可以通過service名稱訪問服務,而不需要擔心Pod的IP發生變化。
ServiceType 取值
- ClusterIP:將服務公開在集群內部。kubernetes會給服務分配一個集群內部的 IP,集群內的所有主機都可以通過這個Cluster-IP訪問服務。集群內部的Pod可以通過service名稱訪問服務。
- NodePort:通過每個節點的主機IP 和靜態端口(NodePort)暴露服務。 集群的外部主機可以使用節點IP和NodePort訪問服務。
- ExternalName:將集群外部的網絡引入集群內部。
- LoadBalancer:使用云提供商的負載均衡器向外部暴露服務。
kubectl expose deployment/nginx-deployment --name=nginx-service --type=ClusterIP --port=8080 --target-port=80
nginx-service后面的負載
kubectl get endpoints nginx-service
隨機產生主機端口
kubectl expose deployment/nginx-deployment --name=nginx-service2 --type=NodePort --port=8080 --target-port=80
四、Namespace(命名空間)
名空間(Namespace)是一種資源隔離機制,將同一集群中的資源劃分為相互隔離的組。
Kubernetes 會創建四個初始命名空間:
default默認的命名空間,不可刪除,未指定命名空間的對象都會被分配到default中。kube-systemKubernetes 系統對象(控制平面和Node組件)所使用的命名空間。kube-public自動創建的公共命名空間,所有用戶(包括未經過身份驗證的用戶)都可以讀取它。通常我們約定,將整個集群中公用的可見和可讀的資源放在這個空間中。kube-node-lease租約(Lease)對象使用的命名空間。每個節點都有一個關聯的 lease 對象,lease 是一種輕量級資源。lease對象通過發送心跳,檢測集群中的每個節點是否發生故障。
管理命名空間
創建命名空間
kubectl create namespace dev
查看命名空間
kubectl get ns
在命名空間內運行Pod
kubectl run nginx --image=nginx --namespace=dev
kubectl run my-nginx --image=nginx -n=dev
查看命名空間內的Pod
kubectl get pods -n=dev
查看命名空間內所有對象
kubectl get all
刪除命名空間會刪除命名空間下的所有內容
kubectl delete ns dev
切換當前命名空間
查看當前上下文
kubectl config current-context
將dev設為當前命名空間,后續所有操作都在此命名空間下執行。
kubectl config set-context $(kubectl config current-context) --namespace=dev
常用命令縮寫
|
名稱 |
縮寫 |
Kind |
|
namespaces |
ns |
Namespace |
|
nodes |
no |
Node |
|
pods |
po |
Pod |
|
services |
svc |
Service |
|
deployments |
deploy |
Deployment |
|
replicasets |
rs |
ReplicaSet |
|
statefulsets |
sts |
StatefulSet |