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>
posted @ 2024-07-11 16:07  little小新  阅读(3)  评论(0编辑  收藏  举报