侧边栏壁纸
博主头像
lance

不为失败找借口,只为成功找方法。

  • 累计撰写 28 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

K8S命令详解汇总

lance
2025-06-17 / 0 评论 / 0 点赞 / 90 阅读 / 5,679 字
温馨提示:
本文最后更新于 2025-06-18,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1 kubectl命令工具

kubectl是kubernetes的命令行工具。它允许用户与kubernetes集群交互,并管理kubernetes对象资源。
安装kubernetes集群时一般都会安装kubectl工具,一般安装在master节点上,不过node节点也可以自行安装kubectl工具。

1.1安装kubectl

# 下载最新版本:
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

# 下载特定版本:
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.7.0/bin/linux/amd64/kubectl

# 下载到本地后,对kubectl二进制添加可执行权限:
chmod +x ./kubectl

# 将二进制文件移动到PATH中:
mv ./kubectl /usr/local/bin/kubectl

# 将master节点中/etc/kubernetes/admin.conf文件拷贝到node节点
scp /etc/kubernetes/admin.conf root@10.0.0.106:/etc/kubernetes

在node节点上配置环境变量

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile 
source ~/.bash_profile

检查

[root@k8s-node1 ~]# kubectl get node
NAME         STATUS   ROLES           AGE     VERSION
k8s-master   Ready    control-plane   4d19h   v1.28.2
k8s-node1    Ready    worker          4d19h   v1.28.2
k8s-node2    Ready    worker          4d19h   v1.28.2

1.2kubectl基本语法

kubectl [command] [TYPE] [NAME] [flags]

command:子命令,用于操作资源对象;如get,create,delete,describe等。
TYPE:资源对象的类型,区分大小写,还能以简写方式表示。如pod deployment,service等。
NAME:资源对象的名称,区分大小写;如不指定则返回全部资源对象的列表。

注:在一个命令行中也可以同时对多个资源对象进行操作,以多个TYPE和NAME的组合表示。
flags:命令行选项,如“-o ”用于指定输出格式。

2 kubectl命令概述

可以使用kubectl --help来打印出kubectl的子命令,工作中经常需要用到–help来帮忙

2.1 基本命令 (初级):

create     从文件或标准输入创建资源,一般使用-f来指定文件创建资源
expose     基于rc,service,deploy或pod创建Service资源
run        创建并运行特定的镜像, 创建使用 deployment 或 job 管理的容器
set        设置指定资源的特定属性, 例如发布, 每次去set 不用image tag

2.2 基本命令 (中级):

explain     文档或者资源, 可以用来查看资源清单写法
get         显示一个或多个资源
edit        编辑服务器上的资源
delete      按文件名, 标准输入, 资源和名称或资源和标签选择器删除资源

get命令的常用输出方式:

输出格式 格式说明
-o wide 显示资源的额外信息
-o yaml YAML格式化输出API对象信息
-o json JSON格式化输出API对象信息

2.3 部署命令:

rollout     管理资源的关东更新
scale       伸缩RS, RC, Job,deploment等资源的规模
autoscale   自动调整资源对象规模, 如:RS, RC, Job,deploment

2.4 群集管理命令:

certificate   修改证书资源
cluster-info  显示群集信息
top           显示资源(CPU / 内存/ 存储)使用情况, 需要安装metrics-server
cordon        将节点标记为不可调度(unschedulable)
uncordon      将节点标记为可调度(schedulable
drain         设定 node 进入维护模式
taint         更新一个或多个节点上的污点

2.5 故障排除和调试命令:

describe       显示特定资源或资源组的详细信息
logs           在容器中打印容器的日志
attach         附加到正在运行的容器
exec           在容器中执行命令
port-forward   将一个或多个本地端口转发到指定的 pod
proxy          运行代理到 Kubernetes API 服务器
cp             将文件和目录复制到容器, 和从容器复制, 跨容器复制文件
auth           检查授权

2.6 高级命令

apply         通过文件名或标准输入将配置应用于资源
patch         使用策略合并补丁更新资源的字段
replace       用文件名或标准输入替换资源
convert       在不同的API版本之间转换配置文件

2.7 设置命令:

label         设置或更新资源上的标签
annotate      更新资源上的注释
completion    命令补全相关功能

2.8 其他命令:

api-resources  在服务器上打印支持的API资源
api-versions   以 "group/version" 的形式在服务器上打印支持的API版本
config         修改 kubeconfig 文件
plugin         提供与插件交互的实用程序
version        打印客户端和服务器版本信息

3 对象资源管理

资源对象缩写一览表

NAME                              SHORTNAMES   APIGROUP                       NAMESPACED   KIND
bindings                                                                      true         Binding
componentstatuses                 cs                                          false        ComponentStatus
configmaps                        cm                                          true         ConfigMap
endpoints                         ep                                          true         Endpoints
events                            ev                                          true         Event
limitranges                       limits                                      true         LimitRange
namespaces                        ns                                          false        Namespace
nodes                             no                                          false        Node
persistentvolumeclaims            pvc                                         true         PersistentVolumeClaim
persistentvolumes                 pv                                          false        PersistentVolume
pods                              po                                          true         Pod
podtemplates                                                                  true         PodTemplate
replicationcontrollers            rc                                          true         ReplicationController
resourcequotas                    quota                                       true         ResourceQuota
secrets                                                                       true         Secret
serviceaccounts                   sa                                          true         ServiceAccount
services                          svc                                         true         Service
mutatingwebhookconfigurations                  admissionregistration.k8s.io   false        MutatingWebhookConfiguration
validatingwebhookconfigurations                admissionregistration.k8s.io   false        ValidatingWebhookConfiguration
customresourcedefinitions         crd,crds     apiextensions.k8s.io           false        CustomResourceDefinition
apiservices                                    apiregistration.k8s.io         false        APIService
controllerrevisions                            apps                           true         ControllerRevision
daemonsets                        ds           apps                           true         DaemonSet
deployments                       deploy       apps                           true         Deployment
replicasets                       rs           apps                           true         ReplicaSet
statefulsets                      sts          apps                           true         StatefulSet
tokenreviews                                   authentication.k8s.io          false        TokenReview
localsubjectaccessreviews                      authorization.k8s.io           true         LocalSubjectAccessReview
selfsubjectaccessreviews                       authorization.k8s.io           false        SelfSubjectAccessReview
selfsubjectrulesreviews                        authorization.k8s.io           false        SelfSubjectRulesReview
subjectaccessreviews                           authorization.k8s.io           false        SubjectAccessReview
horizontalpodautoscalers          hpa          autoscaling                    true         HorizontalPodAutoscaler
cronjobs                          cj           batch                          true         CronJob
jobs                                           batch                          true         Job
certificatesigningrequests        csr          certificates.k8s.io            false        CertificateSigningRequest
leases                                         coordination.k8s.io            true         Lease
bgpconfigurations                              crd.projectcalico.org          false        BGPConfiguration
clusterinformations                            crd.projectcalico.org          false        ClusterInformation
felixconfigurations                            crd.projectcalico.org          false        FelixConfiguration
globalnetworkpolicies                          crd.projectcalico.org          false        GlobalNetworkPolicy
globalnetworksets                              crd.projectcalico.org          false        GlobalNetworkSet
hostendpoints                                  crd.projectcalico.org          false        HostEndpoint
ippools                                        crd.projectcalico.org          false        IPPool
networkpolicies                                crd.projectcalico.org          true         NetworkPolicy
events                            ev           events.k8s.io                  true         Event
daemonsets                        ds           extensions                     true         DaemonSet
deployments                       deploy       extensions                     true         Deployment
ingresses                         ing          extensions                     true         Ingress
networkpolicies                   netpol       extensions                     true         NetworkPolicy
podsecuritypolicies               psp          extensions                     false        PodSecurityPolicy
replicasets                       rs           extensions                     true         ReplicaSet
nodes                                          metrics.k8s.io                 false        NodeMetrics
pods                                           metrics.k8s.io                 true         PodMetrics
networkpolicies                   netpol       networking.k8s.io              true         NetworkPolicy
poddisruptionbudgets              pdb          policy                         true         PodDisruptionBudget
podsecuritypolicies               psp          policy                         false        PodSecurityPolicy
clusterrolebindings                            rbac.authorization.k8s.io      false        ClusterRoleBinding
clusterroles                                   rbac.authorization.k8s.io      false        ClusterRole
rolebindings                                   rbac.authorization.k8s.io      true         RoleBinding
roles                                          rbac.authorization.k8s.io      true         Role
storageclasses                    sc           storage.k8s.io                 false        StorageClass
volumeattachments                              storage.k8s.io                 false        VolumeAttachment

在日常运维管理中,经常使用资源对象的名称缩写来操作

3.1 集群管理

# 查看集群信息
kubectl cluster-info

# 查看节点状态
kubectl get node

# 查看更详细的节点信息
kubectl get node -o wide 

# 查看节点详细情况
kubectl describe node k8s-master 
  
# 查看节点使用情况,需要安装metrics
kubectl top nodes

# 查看最近的集群事件
kubectl get events --sort-by=.metadata.creationTimestamp
kubectl get events -n prod

# 给节点打标签
kubectl label nodes <node-name> key=value
kubectl label nodes k8s-node1 node-role.kubernetes.io/worker=worker
  
# 取消节点标签
kubectl label nodes <node-name> key-

3.2 Namespace管理

Namespace(命名空间) 用于在同一个集群中逻辑地划分资源,以支持不同的环境、团队或项目。Namespace 能够将资源隔离管理,防止命名冲突,并便于访问控制和配额管理。

# 创建命令空间
kubectl create namespace liyb
  
# 查看命名空间
kubectl get ns
  
# 查看命令空间详细信息
kubectl get ns -o yaml
kubectl describe get ns prod
  
# 删除命令空间
kubectl delete ns liyb

#查看命名空间下所有deployment
kubectl get deploy -o wide -n prod
  
#查看指定deployment的详细信息
kubectl get deploy nginx -o yaml -n prod

kubectl get deployment nginx -o json -n prod

如果不指定命名空间,创建的资源对象默认存放在default命名空间。

在生产环境中,一般是一个项目放在一个命名空间中,在处理对象资源时,需要使用 -n 命名空间来对资源进行操作

3.3 Pod管理

Pod 是最小的可部署单元。它是运行应用容器的集合,通常包含一个或多个容器,负责应用的运行、管理和监控。管理 Pods 是 Kubernetes 日常运维的重要部分,常用命令可以帮助用户高效地创建、查看、更新和删除 Pods
(1)创建pod

# 创建pod
kubectl apply -f pod.yaml
kubectl run my-pod --image=nginx --port=80

(2)查看pod

# 查看pod资源使用情况
kubectl top pod 

# 查看所有的pod
kubectl get pod -A
  
# 查看命名空间下所有pod
kubectl get pod -o wide -n prod
  
# 查看指定pod的详细信息
kubectl get pod <pod-name> -o yaml -n <namespace>
kubectl get pod nginx -o yaml -n prod
  
# 查看pod日志
kubectl logs nginx-f49c8d898-njgzk -n prod
kubectl logs -f nginx-f49c8d898-njgzk -n prod

# 查看pod详细信息
kubectl describe pod nginx-f49c8d898-njgzk -n prod
  
 # 显示所有pod的标签
 kubectl get pods --show-labels -A
  
# 列出 Pods,按重启次数排序
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'

# 列出pod的亲和性规则
kubectl get pod nginx-f49c8d898-njgzk  -o=jsonpath='{.spec.affinity}'

# 列出pod的反亲和性规则
kubectl get pod nginx-f49c8d898-njgzk  -o=jsonpath='{.spec.affinity.podAntiAffinity}'

(3)修改pod

# 进入到pod容器内,使用exit退出容器
kubectl exec -it <pod-name> -n <namespace> -- <command>
kubectl exec -it nginx-f49c8d898-njgzk -- bash -n prod
  
# 将文件或文件夹拷入pod
kubectl cp /etc/nginx/nginx.conf nginx-f49c8d898-njgzk:/etc/nginx/conf.d/nginx.conf -n prod

# 将文件或文件夹从pod拷出
kubectl cp nginx-f49c8d898-njgzk:etc/nginx/conf.d/nginx.conf /opt -n prod

(4)删除pod

# 删除pod(如果是deploy部署,相当于重启)
kubectl delete pod nginx-f49c8d898-njgzk -n prod

# 强制删除pod
kubectl delete pod nginx-f49c8d898-njgzk --grace-period=0 --force -n app

(5)Pod网络诊断

# 运行网络诊断 Pod进行调试
kubectl run -it --rm --restart=Never --image=docker.m.daocloud.io/busybox  debug-pod -- /bin/sh

# 测试从 Pod 到特定端点的连接
kubectl exec -it <pod-name> -n <namespace> -- curl <endpoint-url>

# 跟踪从一个 Pod 到另一个 Pod 的网络路径
kubectl exec -it <source-pod-name> -n <namespace> -- traceroute <destination-pod-ip>

# 检查 Pod 的 DNS 解析
kubectl exec -it <pod-name> -n <namespace> -- nslookup <domain-name>

3.4 deployment管理

Deployment 是一种用于管理 Pod 副本的控制器,提供滚动更新、扩缩容、回滚等功能

(1)创建deployment
有两种方式,一种是命令行,一种是写一个资源清单

# 命令行创建deployment
kubectl create deployment <deployment-name> --image=<container-image>

kubectl create deploy mynginx --image=nginx:1.25

# 基于yaml方式创建
# 创建资源清单
vi deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80

kubectl apply -f deployment.yaml

(2)查看deployment

# 查看deployment信息
kubectl get deploy -n <namespace>
kubectl get deploy nginx

# 查看某个deploy详细信息
kubectl get deploy nginx -o wide
kubectl describe deploy nignx

3)更新deployment

kubectl set image <deploy-name> my-container=my-image:newtag
  
kubectl set image mynginx nginx=nginx:1.26

(4)伸缩deployment

# 手动伸缩
kubectl scale deployment <deployment-name> --replicas=<replica-count> -n <namespace>

# 指定伸缩数量
kubectl scale deploy nginx --replicas=3

# 设置自动伸缩
kubectl autoscale deployment <deployment-name> --min=<min-pods> --max=<max-pods> --cpu-percent=<cpu-percent> -n <namespace>

# CPU超过70%就进行伸缩
kubectl autoscale deploy nginx --min=1 --max=3 --cpu-percent=70 

# 检查自动伸缩器状态
kubectl get hpa

(5)版本回滚

# 查看滚动更新状态
kubectl rollout status deployment/<deployment-name> -n <namespace>
kubectl rollout status deployment/nginx 
  
# 查看deployment所有历史版本
kubectl rollout history deployment/nginx 
  
# 查看deployment某个历史版本的详细信息
kubectl rollout history deployment/nginx --revision=1 
  
# 回滚到上一个版本
kubectl rollout undo deployment nginx 

# 指定版本回滚
kubectl rollout undo 资源类型/资源名称 --to-revision=版本号
  
kubectl rollout undo deployment/nginx --to-revision=3

(6)删除deployment

# 命令行删除
kubectl delete deploy <deploy-name>
kubectl delete deploy mynginx

# 基于资源清单删除
kubectl delete -f deploy.yaml

3.5 Service管理

(1)创建service

# 命令行创建,通过暴露deployment创建Service
kubectl expose deployment <deployment-name> --type=<service-type> --port=<port> --target-port=<target-port>
  
kubectl expose deploy nginx  --port=80 --target-port=80  --type=NodePort

# 基于yaml文件创建
# 创建Service资源清单
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30080  # 指定节点上的端口
  type: type: NodePort

# 创建
kubectl apply -f service.yaml

Service类型:
ClusterIP:默认类型,服务只能在集群内部访问。
 NodePort: 在每个节点上开放一个端口,允许外部访问。
 LoadBalancer: 为 Service 创建一个外部负载均衡器(在支持的云提供商上)。

(2)查看service

# 查看所有service信息
kubectl get svc
kubectl get svc -o wide -n prod

# 查看指定service的详细信息
kubectl get svc nginx -o yaml -n prod
kubectl describe svc nginx -n prod

# 查看Service的endpoint信息
kubectl get endpoints <service-name>
kubectl get ep nginx

(3)编辑更新Service
注意:修改后,service会立即重启

kubectl edit service <service-name> 
  
kubectl edit svc nginx -n prod

# 更新端口
kubectl patch service my-service -p '{"spec":{"ports":[{"port":80,"targetPort":8081}]}}'

(4)删除Service

# 命令行删除
kubectl delete svc <service-name>

kubectl delete svc nginx

# 基于yaml文件删除
kubectl delete -f service.yaml

3.6 Statefulset管理

StatefulSet 是一种用于管理有状态应用的控制器,适用于需要稳定网络标识、持久存储以及有序部署、更新和删除的场景,如数据库、分布式系统等。StatefulSet 与 Deployment 的主要区别在于,它能够确保 Pod 的顺序性和持久性。
(1)查看statefulset

# 查看statefulset状态
kubectl get statefulsets -n <namespace>
kubectl get sts 

# 查看某个sts详细信息
kubectl describe sts mysql

(2)伸缩statefulset
注意:statefulset的扩缩容都是有序进行的,扩容:新增的 Pod 会按顺序启动,缩容:序号最大的先停止

kubectl scale statefulset <statefulset-name> --replicas=<number>

kubectl scale statefulset web --replicas=5

(3)StatefulSet滚动更新

# 查看滚动更新状态
kubectl rollout status statefulset web
  
# 暂停滚动更新
kubectl rollout pause statefulset web

# 恢复滚动更新
kubectl rollout resume statefulset web
 
# 回滚StatefulSet
kubectl rollout undo statefulset web 

(4)删除statefulset

# 删除 web StatefulSet,但其持久化卷(Persistent Volumes)不会被删除。
kubectl delete statefulset web
  
# 强制删除 StatefulSet 及其 Pods
kubectl delete statefulset web --cascade=false
  
# 删除 StatefulSet 及其相关资源(Pod、PVC)
kubectl delete statefulset <statefulset-name> --cascade=orphan

deployment和statefulset的区别:

特性 StatefulSet Deployment
Pod 保持稳定 例如weg-0,web-1 每个Pod名称随即分配
网络标识 Pod拥有稳定的网络标识 Pod重建时网络标识会变化
存储 每个Pod使用独立的PVC Pod共享PVC(一般不适合有状态应用)
启动顺序 按顺序启动和删除Pod 无固定顺序
使用场景 数据库、分布式系统、有状态应用 无状态应用,Web应用,批处理任务

3.7 存储卷管理

Persistent Volumes (PVs) 提供了持久化的存储资源,PV类型多种多样,支持不同的存储后端,如本地存储、网络存储(如NFS、GlusterFS、Ceph等)。
(1)创建PV/PVC

# 创建一个nfs的PV
vi nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  nfs:
    path: /data/nfs   # nfs挂载目录
    server: 10.0.0.100 # 该服务器已经安装好NFS
  persistentVolumeReclaimPolicy: Retain

# 创建一个NFS的PV
# 创建一个本地pv 
kubectl apply -f local-pv.yaml


# 编写PVC的资源清单
vi pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: nfs-storage

# 创建PVC
kubectl apply -f pvc.yaml

(2)查看PV/PVC

# 列举所有 PV 持久卷
kubectl get pv -A

# 查看持久卷(PV)信息
kubectl get pv

# 查看某个PV详细信息
kubectl describe pv <pv-name>

# 查看持久卷声明(PVC)信息
kubectl get pvc
kubectl get pvc -n <namespace>

# 查看所有存储类别
kubectl get storageclasses

# 查看storageclasses的详细信息
kubectl describe storageclass <storageclass-name>

(3)删除PV/PVC

# 删除PV
kubectl delete pv <pv-name>
kubectl delete pv my-pv

# 删除PVC
kubectl delete pvc <pvc-name>
kubectl delete pvc my-pvc

3.8 配置管理

1、ConfigMap管理

(1)创建ConfigMap

# 从命令行创建
kubectl create configmap <configmap-name> --from-literal=<key>=<value>

kubectl create configmap my-config --from-literal=APP_ENV=prod

# 从文件中创建
kubectl create configmap <configmap-name> --from-file=<file-path>

kubectl create configmap my-config --from-file=config.properties

# 从目录中创建
kubectl create configmap <configmap-name> --from-file=<directory-path>

kubectl create configmap my-config --from-file=./config-directory

(2)查看ConfigMap

# 查看configMaps信息
kubectl get configmaps -A
kubectl get configmaps -n prod

# 查看某个configmaps详细信息
kubectl describe configmaps <configmap-name>
kubectl describe configmap my-config

(3)更新ConfigMap

# 打开编辑器编辑
kubectl edit configmap <configmap-name>
kubectl edit configmap my-config

# 使用命令更新
kubectl patch configmap <configmap-name> -p '{"data":{"<key>":"<new-value>"}}'

kubectl patch configmap my-config -p '{"data":{"APP_ENV":"staging"}}'
# 说明:更新 ConfigMap 中 APP_ENV 的值为 staging

(4)删除ConfigMap

kubectl delete configmap <configmap-name>

kubectl delete configmap my-config

(5)在pod中使用configmap

# 通过环境变量使用 ConfigMap
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: nginx
      env:
        - name: APP_ENV
          valueFrom:
            configMapKeyRef:
              name: my-config
              key: APP_ENV

# 通过挂载卷使用 ConfigMap
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: nginx
      volumeMounts:
        - mountPath: /etc/config
          name: config-volume
  volumes:
    - name: config-volume
      configMap:
        name: my-config

2.Secret 管理

(1)创建 Secret

# 从命令行创建
kubectl create secret generic <secret-name> --from-literal=<key>=<value>

kubectl create secret generic my-secret --from-literal=password=123456

# 从文件中创建
kubectl create secret generic <secret-name> --from-file=<file-path>

kubectl create secret generic my-secret --from-file=ssh-private-key

(2)查看Secret

 # 查看secret信息
kubectl get secrets -n <namespace>

# 查看某个secrets详细信息
kubectl describe secret <secret-name> -n <namespace>

kubectl describe secret my-secret

(3)更新 Secret

# 编辑Secret
kubectl edit secret <secret-name>
  
kubectl edit secret my-secret

# 使用命令更新
kubectl patch secret <secret-name> -p '{"data":{"<key>":"<base64-encoded-value>"}}'

kubectl patch secret my-secret -p '{"data":{"password":"bXktc2VjcmV0LXBhc3N3b3Jk"}}'kubectl patch secret my-secret -p '{"data":{"password":"bXktc2VjcmV0LXBhc3N3b3Jk"}}'

(4)删除Secret

kubectl delete secret <secret-name>

3.9 RBAC管理

(1)查看角色和角色绑定

# 查看角色和角色绑定
kubectl get roles  -A 
kubectl get rolebindings -A 
  
# 查看某个角色具体信息
kubectl describe role kube-proxy -n kube-system

# 查看集群角色
kubectl get clusterroles
  
# 查看集群角色绑定
kubectl get clusterrolebindings
kubectl describe clusterrole my-cluster-role

# 查看服务账号信息
kubectl get serviceaccount -A 
kubectl get sa -A 

# 查看服务账号详情
ubectl get serviceaccounts -n <namespace>

# 查看某个服务账号的详情
kubectl describe serviceaccount <serviceaccount-name> -n <namespace>

(2)删除角色和绑定

# 删除角色
kubectl delete role my-role
# 删除集群角色 
kubectl delete clusterrole my-cluster-role
#  删除角色绑定 
kubectl delete rolebinding my-rolebinding

# 删除集群角色绑定
kubectl delete clusterrolebinding my-cluster-rolebinding

3.10 调度管理

(1)污点taint

如果设置了污点,一般需要配置容忍度才能进行调度

# 给某个节点设置污点
kubectl taint node <node-name> <key>=<value>:<effect>

# 示例:将节点1设置为不可调度,已经存在的pod不受影响
kubectl taint node k8s-node1 node-type=prod:NoSchedule

# 查看节点的污点
kubectl describe node <node-name> | grep Taints

# 删除某污点
kubectl taint node <node-name> <key>=<value>[:<effect>]-

# 删除节点1的污点
kubectl taint node k8s-node1 node-type=prod:NoSchedule-
  
kubectl taint node k8s-node1 node-type-

(2)cordon和drain管理

# 将node1节点标记为不可调度
kubectl cordon k8s-node1              

# 此时查看节点为:SchedulingDisabled
kubectl get node

# 对在node1节点的资源进行驱逐
kubectl drain k8s-node1  --ignore-daemonsets                               
# 再次查看pod情况,你会发现除了daemonset部署的pod,其他pod都被驱逐了

# 将node1节点恢复为可调度
kubectl uncordon my-node    
# 又可以重新调度了,注意:被驱逐的节点不会自动调度回来原节点 

3.11 资源配额和限制管理

1、资源配额(Resource Quotas)

资源配额用于限制某个命名空间中可以使用的资源总量。

(1)创建资源配额

# 创建资源清单文件
vi resource-quota.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: resource-quota
  namespace: prod
spec:
  hard:
    requests.cpu: "1"
    requests.memory: "1Gi"
    limits.cpu: "2"
    limits.memory: "4Gi"

# 创建资源配额命令
kubectl apply -f resource-quota.yaml

(2)查看资源配额

# 查看资源配额信息
kubectl get resourcequota -n prod
kubectl get resourcequota -A
  
# 查看资源配额详细信息
kubectl describe resourcequota resource-quota -n prod

(3)删除资源配额

kubectl delete resourcequota resource-quota -n prod

2. 资源限制(LimitRanges)

资源限制用于为某个命名空间内的 Pod 和容器定义默认的资源请求和限制。

# 创建资源限制资源清单
apiVersion: v1
kind: LimitRange
metadata:
  name: my-limit-range
  namespace: prod
spec:
  limits:
    - default:
        cpu: "1"
        memory: "1Gi"
      defaultRequest:
        cpu: "500m"
        memory: "512Mi"
      type: Container

# 创建资源限制命令
kubectl apply -f limit-range.yaml

(2)查看资源限制

# 查看资源限制信息
kubectl get limitranges -n prod

# 查看资源限制详细信息
kubectl describe limitrange my-limit-range -n prod

(3)删除资源限制

kubectl delete limitrange my-limit-range -n prod

3. 创建 Pod 使用资源限制

vi my-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  namespace: my-namespace
spec:
  containers:
    - name: my-container
      image: nginx
      resources:
        requests:
          cpu: "200m"
          memory: "256Mi"
        limits:
          cpu: "500m"
          memory: "512Mi"
  
# 创建 Pod 命令

kubectl apply -f my-pod.yaml

3.12 标签管理

Kubernetes 中的标签(Labels)是一种用于标识、组织和选择对象的关键工具。标签是键值对,附加到资源(如 Pod、Service、ConfigMap 等)上,用于过滤和操作对象。

(1)为现有资源添加标签

# 使用命令为现有资源添加标签
kubectl label pod nginx app=mynginx

# 使用 YAML 文件为资源添加标签
在资源定义的 metadata 部分中添加 labels 字段

(2)查看资源的标签

# 查看所有资源及其标签
kubectl get <resource-type> --show-labels

# <resource-type>可以是pod,deployment,svc,statefulset等多种资源对象

(3)根据标签选择资源

# 列出所有带有 app=nginx 标签的 Pods
kubectl get pods -l app=nginx

# 可以使用多个标签进行匹配
kubectl get pods -l app=nginx,tier=frontend

(4)修改标签

# 将 my-pod 的 app 标签修改为 nginx-v2
kubectl label pod my-pod app=nginx-v2 --overwrite

(5)删除标签

# 删除 my-pod 的 app 标签
kubectl label pod my-pod app-
0

评论区