文章目錄
- 一、常用命令
- 1.1 kubectl describe 命令
- 二、kubectl 命令中的簡寫
- 三、Helm
- 3.1 常用命令:
- 3.2 遇到的問題
- 3.2.1 cannot re-use a name that is still in use
- 四、Containerd
一、常用命令
??檢查 k8s 各節點狀態,確保k8s集群各節點狀態正常:
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 130d v1.23.1
k8s-node01 Ready <none> 130d v1.23.1
k8s-node02 Ready <none> 130d v1.23.1
??查看k8s的版本:
[root@k8s-master ~]# kubectl version
Client Version: v1.23.1
Server Version: v1.23.1
??kubectl 進入容器:
kubectl exec -it mysql-master-0 -n mysql -- /bin/bash
# 或者
kubectl exec -itn mysql pod/mysql-master-0 -- mysql -uroot -proot
??檢查 k8s 集群的系統 pod 狀態:
[root@k8s-master ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-7bc6547ffb-2nf66 1/1 Running 1 (8d ago) 130d
calico-node-8c4pn 1/1 Running 1 (8d ago) 130d
calico-node-f28qq 1/1 Running 1 (8d ago) 130d
calico-node-wmc2j 1/1 Running 1 (8d ago) 130d
coredns-6d8c4cb4d-6gm4x 1/1 Running 1 (8d ago) 130d
coredns-6d8c4cb4d-7vxlz 1/1 Running 1 (8d ago) 130d
etcd-k8s-master 1/1 Running 1 (8d ago) 130d
kube-apiserver-k8s-master 1/1 Running 1 (8d ago) 130d
kube-controller-manager-k8s-master 1/1 Running 1 (8d ago) 130d
kube-proxy-8dfw8 1/1 Running 1 (8d ago) 130d
kube-proxy-ghzrv 1/1 Running 1 (8d ago) 130d
kube-proxy-j867z 1/1 Running 1 (8d ago) 130d
kube-scheduler-k8s-master 1/1 Running 1 (8d ago) 130d
??檢查 k8s 集群的服務 servic 狀態:kubectl get svc -A
??檢查 k8s 集群控制器狀態:kubectl get deploy -A
、kubectl get statefulsets -A
、kubectl get daemonsets -A
??StatefulSet、Deployment 和 DaemonSet 是 Kubernetes 中常用的控制器,用于管理不同類型的應用。它們之間有以下幾點區別:
StatefulSet:
- 用于管理有狀態應用程序,如數據庫。
- 每個Pod都有一個唯一的穩定標識符,可以持久化地保留在Pod的整個生命周期中。
- 可以按照指定的順序部署、擴展和終止Pod,以確保有狀態應用程序的穩定性。
- 可以為每個Pod提供獨立的持久化存儲。
Deployment:
- 用于管理無狀態應用程序,如Web服務。
- 負責確保指定數量的Pod副本運行在集群中,無需關注Pod的順序或標識符。
- 可以進行滾動更新,快速部署新版本的應用程序,并確保不中斷服務。
- 適用于需要水平擴展的應用程序,例如負載均衡的Web服務。
DaemonSet:
- 用于在集群中的每個節點上運行一個副本的Pod,通常用于運行后臺任務或監控代理。
- 與Deployment不同,DaemonSet確保每個節點都有一個Pod副本運行,而不管節點的數量如何變化。
- 可以用于部署一些與節點相關的服務,例如日志收集器或網絡代理。
1.1 kubectl describe 命令
??describe 獲得的是 resource 集群相關的信息,如某個 pod 并不是在 running 狀態,這時需要獲取更詳盡的狀態信息時,查相關日志信息,就應該使用 describe 命令。describe 常用的命令如下:
??查看某個 pod 的詳細信息:
kubectl describe pod hadoop-hadoop-yarn-rm-0 -n hadoop
??顯示所有 Node 的詳細信息:
kubectl describe nodes
??顯示所有 Pod 的詳細信息:
kubectl describe pods
??顯示一個 node 的詳細信息:
kubectl describe nodes k8s-minion
??顯示一個pod的詳細信息:
kubectl describe pods/nginx
??顯示 pod.json 中的資源類型和名稱指定的 pod:
kubectl describe -f pod.json
??顯示所有包含 label name=myLabel
的 pod:
kubectl describe po -l name=myLabel
??顯示所有被 replication controller “frontend” 管理的 pod(rc創建的 pod 都以 rc 的名字作為前綴):
kubectl describe pods frontend
注意:不同命令之間的選項都是相通,可以靈活使用。describe 命令同 get 類似,但是 describe 不支持 -o
選項。
參考:Kubernetes(K8s) kubectl describe常用命令
二、kubectl 命令中的簡寫
??kubectl 命令中可以使用的縮寫,具體如下:
certificatesigningrequests (縮寫 csr)
componentstatuses (縮寫 cs)
configmaps (縮寫 cm)
customresourcedefinition (縮寫 crd)
daemonsets (縮寫 ds)
deployments (縮寫 deploy)
endpoints (縮寫 ep)
events (縮寫 ev)
horizontalpodautoscalers (縮寫 hpa)
ingresses (縮寫 ing)
limitranges (縮寫 limits)
namespaces (縮寫 ns)
networkpolicies (縮寫 netpol)
nodes (縮寫 no)
persistentvolumeclaims (縮寫 pvc)
persistentvolumes (縮寫 pv)
poddisruptionbudgets (縮寫 pdb)
pods (縮寫 po)
podsecuritypolicies (縮寫 psp)
replicasets (縮寫 rs)
replicationcontrollers (縮寫 rc)
resourcequotas (縮寫 quota)
serviceaccounts (縮寫 sa)
services (縮寫 svc)
statefulsets (縮寫 sts)
storageclasses (縮寫 sc)
參考:
Kubernetes(K8s) kubectl replace常用命令
三、Helm
3.1 常用命令:
??列舉 chart 倉庫:
$ helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com/
local http://127.0.0.1:8879/charts
??卸載 release:
helm uninstall hbase-hdfs-ha -n hbase-hdfs-ha
??強制刪除 release:
kubectl delete ns hbase-hdfs-ha --force
??語法檢查:
helm lint ./hbase-hdfs-ha
??開始安裝:
helm install hbase-hdfs-ha ./hbase-hdfs-ha -n hbase-hdfs-ha --create-namespace
??上述命令可以寫入一個腳本中:
$ vim reinstall.sh
helm uninstall hbase-hdfs-ha -n hbase-hdfs-ha
# delete ns
kubectl delete ns hbase-hdfs-ha --forcehelm lint ./hbase-hdfs-ha# 開始安裝
helm install hbase-hdfs-ha ./hbase-hdfs-ha -n hbase-hdfs-ha --create-namespace
3.2 遇到的問題
3.2.1 cannot re-use a name that is still in use
root@k8s-bigdata01:/home/xiaoqiang# helm install hadoop ./hadoop -n hadoop --create-namespace
Error: INSTALLATION FAILED: cannot re-use a name that is still in useroot@k8s-bigdata01:/home/xiaoqiang# kubectl get pods -n hadoop
NAMESPACE NAME READY STATUS RESTARTS AGE
hadoop hadoop-hadoop-hdfs-dn-0 0/1 Pending 0 19h
hadoop hadoop-hadoop-hdfs-nn-0 0/1 Pending 0 19h
hadoop hadoop-hadoop-yarn-nm-0 0/1 ImagePullBackOff 0 19h
hadoop hadoop-hadoop-yarn-rm-0 0/1 ImagePullBackOff 0 19h
root@k8s-bigdata01:/home/xiaoqiang# kubectl get svc -n hadoop
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hadoop hadoop-hadoop-hdfs-dn ClusterIP None <none> 9000/TCP 19h
hadoop hadoop-hadoop-hdfs-nn ClusterIP None <none> 9000/TCP,9870/TCP 19h
hadoop hadoop-hadoop-yarn-nm ClusterIP None <none> 8088/TCP,8082/TCP,8042/TCP 19h
hadoop hadoop-hadoop-yarn-rm ClusterIP None <none> 8088/TCP 19hroot@k8s-bigdata01:/home/xiaoqiang# helm -n hadoop ls -a
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
hadoop hadoop 1 2024-07-03 06:11:31.785366015 +0000 UTC failed hadoop-1.2.0 3.3.2
root@k8s-bigdata01:/home/xiaoqiang# helm -n hadoop delete hadoop
release "hadoop" uninstalledroot@k8s-bigdata01:/home/xiaoqiang# kubectl get pods -n hadoop
No resources found in hadoop namespace.
root@k8s-bigdata01:/home/xiaoqiang# kubectl get svc -n hadoop
No resources found in hadoop namespace.
參考:
helm Error: INSTALLATION FAILED: cannot re-use a name that is still in use
四、Containerd
??主流容器運行時:
-
Docker:早期最流行的容器運行時,以其易用性和豐富的生態系統而聞名。Docker Engine實現了完整的容器生命周期管理,并提供了自己的鏡像分發倉庫和工具鏈。雖然Kubernetes已不再直接依賴Docker Engine,但許多集群仍使用Docker作為底層容器運行時。
-
containerd:由Docker公司開發,后成為CNCF項目。containerd專注于容器的生命周期管理,提供了一套輕量級、低層級的API,用于處理鏡像下載、容器運行等核心功能。它通常與cri-containerd(實現了CRI的插件)一起使用,作為Kubernetes的容器運行時。
-
CRI-O:紅帽主導的開源項目,專為Kubernetes設計,僅實現CRI接口,沒有額外的API或CLI工具。CRI-O直接與OCI(Open Container Initiative)兼容的運行時(如runc)交互,管理容器生命周期。相比Docker和containerd,CRI-O更輕量、簡潔。
??查看版本:
$ containerd --version
containerd github.com/containerd/containerd 1.7.12
??ctr 是一個用于管理 containerd 的命令行工具,可以用它來打包、拉取、上傳鏡像。以下是具體操作步驟:
??查看鏡像:
ctr images list
# 或者
crictl images list命令介紹:
ctr:是containerd本身的CLI
crictl:是Kubernetes社區定義的專門CLI工具
??通過 docker 或者其他方式構建好一個鏡像之后,可以使用 ctr 命令來打包該鏡像:
#ctr images import [image_file]
#例如:
ctr images import /path/to/myimage.tar
??刪除鏡像
ctr images rm docker.io/library/ubuntu:latest
??可以使用 ctr 命令來拉取一個鏡像:
#ctr images pull [image_name]
#例如:
ctr images pull docker.io/library/ubuntu:latest
??可以使用 ctr 命令來上傳一個本地鏡像到鏡像倉庫:
#ctr images push [image_name]
#例如:
ctr images push docker.io/myrepo/myimage:latest
??需要注意的是,需要先登錄到倉庫并獲取授權,才能上傳鏡像。可以使用 ctr 命令的 login 子命令來登錄倉庫,例如:
ctr login docker.io -u myusername -p mypassword
參考:containerd容器ctr命令打包、拉取、上傳鏡像