k8s常用命令
集群管理
1. 查看集群节点状态:
$kubectl get nodes
2. 查看集群资源使用情况:
$kubectl top nodes
3. 查看集群信息:
$kubectl cluster-info
4. 获取节点详细信息:
$kubectl describe node <node-name>
5. 给节点打标签:
$kubectl label nodes <node-name> key=value
6. 取消节点标签:
$kubectl label nodes <node-name> key-
7. 查看所有命名空间
$kubectl get ns
8. 查看命名空间信息:
$kubectl describe namespace <namespace-name>
Pod管理
k8s中最小的可部署的计算单元,用来封装一个或多个紧密相关的容器应用,共享存储和网络。
1. 列出所有Pod:
$kubectl get pods #无命名空间情况下
$kubectl get pods -n <namespace> #有命名空间情况下
2. 查看特定Pod的日志:
$kubectl logs <pod-name> -n <namespace> #打印当前日志
$kubectl logs -f <pod-name> -n <namespace> #持续打印日志
$kubectl logs -f --tail 200 <pod-name> -n <namespace> #持续打印日志且打印200行
3. 运行一个临时的Pod:
$kubectl run my-pod --image=nginx
4. 进入正在运行的Pod:
$kubectl exec -it <pod-name> -n <namespace> -- /bin/bash
$ kubectl exec -it <pod-name> -n <namespace> -- ls /etc/ #不进入pod,直接执行pod中的命令
5. 查看特定Pod的详细信息:
$kubectl describe pod <pod-name> -n <namespace>
6. 删除Pod:
$kubectl delete pod <pod-name> -n <namespace>
$kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0 #强制删除
7. 查看Pod事件:
$kubectl describe pod <pod-name> -n <namespace> | grep -i events
Deployment管理
用于管理Pod的声明式更新,自动处理Pod的创建、升级、回滚等,保证预期状态。
1. 列出所有Deployments:
$kubectl get deployments
$kubectl get deployments -n <namaspace>
2. 查看特定Deployment的详细信息:
$kubectl describe deployment <deployment-name> -n <namespace>
3. 创建Deployment:
$kubectl create deployment <deployment-name> --image=<container-image>
$kubectl create deployment my-deployment --image=nginx
4. 更新Deployment中的容器镜像:
$kubectl set image deployment/<deployment-name> <container-name>=<new-container-image> -n <namespace>
$kubectl set image deployment/my-deployment nginx=nginx:latest -n <namespace>
5. 回滚Deployment到上一个版本:
$kubectl rollout undo deployment/my-deployment -n <namespace>
6. 查看Deployment的更新历史:
$kubectl rollout history deployment <deployment-name> -n <namespace>
7. 回滚到指定版本的Deployment:
# 假设要回滚到第3次修订版:
$kubectl rollout undo deployment <deployment-name> -n <namespace> --to-revision=3
8. 查看Deployment指定标签下的的Pods状态
$kubectl get pods -l app=<deployment-label> -n <namespace>
9. 查看Deployment的事件:
$kubectl describe deployment <deployment-name> -n <namespace> | grep -i events
10. 监控Deployment的更新进度:
$kubectl rollout status deployment <deployment-name> -n <namespace>
11. 扩大或缩小副本数量:
$kubectl scale deployment <deployment-name> -n <namespace> --replicas=5
12. 删除Deployment:
$kubectl delete deployment <deployment-name> -n <namespace>
Service管理
定义一种访问Pod的策略和抽象层,提供稳定的访问入口,实现服务发现与负载均衡。
1. 列出所有Services:
$kubectl get services <-n> <namespace>
$kubectl get services <-n> <namespace> -o wide
2. 查看特定Service的详细信息:
$kubectl describe service <service-name> -n <namespace>
3. 创建Service:
可以直接通过命令行或者YAML文件创建:
$kubectl create service clusterip my-service --tcp=80:8080
4. 暴露Deployment为Service:
自动创建Service指向Deployment的所有Pods:
$kubectl expose deployment <deployment-name> <-n> <namespace> --type=LoadBalancer --port=80 --target-port=8080
5. 编辑Service配置:
$kubectl edit service <service-name> -n <namespace>
6. 更改Service类型:
$kubectl patch service <service-name> <-n> <namespace> -p '{"spec": {"type": "NodePort"}}'
7. 删除Service:
$kubectl delete service <service-name> -n <namespace>
8. 创建ClusterIP类型的service:
ClusterIP为Service分配一个仅集群内部可访问的IP地址。
# 命令行创建:
$kubectl create service clusterip my-service --tcp=80:8080
基于server.yaml文件创建service
kubectl apply -f server.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
9. 创建NodePort类型的service:
NodePort会在每个节点上开放一个静态端口,供外部访问集群内部的服务。
# 命令行创建:
kubectl expose deployment my-deployment --type=NodePort --port=80 --target-port=8080
# 基于yaml文件创建:
$kubectl apply -f xxx.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service-nodeport
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30080 # 指定节点上的端口
type: NodePort
10. 创建LoadBalancer类型的service:
适用于需要云提供商的负载均衡器来暴露服务的情况。
# 命令行创建:
kubectl expose deployment my-deployment --type=LoadBalancer --port=80 --target-port=8080
# 基于yaml文件创建:
apiVersion: v1
kind: Service
metadata:
name: my-service-loadbalancer
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer
PV/PVC管理
Persistent Volumes (PVs) 提供了持久化的存储资源,PV类型多种多样,支持不同的存储后端,如本地存储、网络存储(如NFS、GlusterFS、Ceph等)。
1. 列出所有PV:
$kubectl get pv -n <namespace>
2. 查看PV详细信息:
$kubectl describe pv <pv-name> -n <namespace>
3. 创建本地PV:
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv-example
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node01 # 指定节点名称
4. 创建NFS PV:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv-example
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
storageClassName: nfs
nfs:
server: <nfs-server-ip> # nfs服务ip
path: "/exports/data" # nfs共享目录
5. 列出所有PVC:
$kubectl get pvc -n <namespace>
6. 查看PVC详细信息:
$kubectl describe pvc <pvc-name> -n <namespace>
7. 创建PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: local-storage # 或 nfs,需与PV的storageClassName匹配
ConfigMap管理
用来存储配置数据,如应用的配置文件,以键值对形式挂载到Pod中,方便应用程序读取和分离配置与代码。
1. 创建ConfigMap:
#文件名当键,文件内容当值
$kubectl create configmap nginx-config --from-file=./www.conf
#指定某个目录为配置文件目录
$kubectl create configmap ops-metrics-config -n ops-system --from-file=configmap/ops-metrics
2. 查看ConfigMap
$kubectl get configmaps -n <namespace>
3. 删除ConfigMap:
$kubectl delete configmap <my-configmap> -n <namespace>