文章目录
- 一、常用命令
- 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命令打包、拉取、上传镜像