K8S命令详解汇总

1 kubectl命令工具

kubectl是kubernetes的命令行工具。它允许用户与kubernetes集群交互,并管理kubernetes对象资源。

安装kubernetes集群时一般都会安装kubectl工具,一般安装在master节点上,不过node节点也可以自行安装kubectl工具。

(1)安装kubectl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 下载最新版本:
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节点上配置环境变量

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

检查

1
2
3
4
5
[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

(2)kubectl基本语法

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

command:子命令,用于操作资源对象;如get,create,delete,describe等。

TYPE:资源对象的类型,区分大小写,还能以简写方式表示。如pod,deployment,service等。

NAME:资源对象的名称,区分大小写;如不指定则返回全部资源对象的列表。

:在一个命令行中也可以同时对多个资源对象进行操作,以多个TYPE和NAME的组合表示。

flags:命令行选项,如“-o <format>”用于指定输出格式。

 

2 kubectl命令概述

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

2.1 基本命令 (初级):

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

2.2 基本命令 (中级):

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

get命令的常用输出方式:

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

2.3 部署命令:

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

2.4 群集管理命令:

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

2.5 故障排除和调试命令:

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

2.6 高级命令

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

2.7 设置命令:

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

2.8 其他命令:

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

3 对象资源管理

资源对象缩写一览表 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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 集群管理 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 查看集群信息
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 能够将资源隔离管理,防止命名冲突,并便于访问控制和配额管理。 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 创建命令空间
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
1
2
3
4
# 创建
podkubectl apply -f pod.yaml
 
kubectl run my-pod --image=nginx --port=80
(2)查看pod 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 查看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  
1
2
3
4
5
6
7
8
9
# 进入到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  
1
2
3
4
5
# 删除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网络诊断  
1
2
3
4
5
6
7
8
9
10
11
# 运行网络诊断 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

有两种方式,一种是命令行,一种是写一个资源清单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 命令行创建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  

1
2
3
4
5
6
7
# 查看deployment信息
kubectl get deploy -n <namespace>
kubectl get deploy nginx
 
# 查看某个deploy详细信息
kubectl get deploy nginx -o wide
kubectl describe deploy nignx

(3)更新deployment  

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

(4)伸缩deployment  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 手动伸缩
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)版本回滚  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看滚动更新状态
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  

1
2
3
4
5
6
# 命令行删除
kubectl delete deploy <deploy-name>
kubectl delete deploy mynginx
 
# 基于资源清单删除
kubectl delete -f deploy.yaml

3.5 Service管理  

(1)创建service

 

 

 

 

 

 

 

 

 

——————————————————————————————————————————————————————————————————————————

                                                                                                                         无敌小马爱学习

posted on   马俊南  阅读(482)  评论(0编辑  收藏  举报
努力加载评论中...

点击右上角即可分享
微信分享提示