k8s kubectl常用命令

1 全局命令

1.1 查看k8s的所有资源类型

kubectl api-resources -o wide --namespaced=true

[root@paas-controller1:~]$ kubectl api-resources
NAME                              SHORTNAMES   APIGROUP                       NAMESPACED   KIND
bindings                                                                      true         Binding
componentstatuses                 cs                                          false        ComponentStatus
configmaps                        cm                                          true         ConfigMap
endpoints                         ep                                          true         Endpoints
events                            ev                                          true         Event

 

1.2 查看支持的apiVersion

[root@paas-controller1:~]$ kubectl api-versions
admissionregistration.k8s.io/v1
...
apps/v1
batch/v1
batch/v1beta1
...
storage.k8s.io/v1beta1
v1

 

1.3 kubectl get   # 查看各种已部署的资源

kubectl -n tests get pod
kubectl -n tests get network -o json        # 会将详细信息以json格式输出               # 
kubectl -n tests get mappingpolicy -o yaml  # 会将详细信息以yaml格式输出

1.3.1 jsonpath,可方便的只获取资源其中某个key的值,写shell时非常好用

kubectl get pod example-pod -o jsonpath='{.metadata.name}'

1.3.2 查看一个已部署pod的详细参数

[root@paas-controller1:/home/lynalee]$ kubectl -n default get -o json pod lynalee-test-0
{
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
        "annotations": {
        ...

1.3.3 显示资源模板

[root@paas-controller1:/home/lynalee]$ kubectl get deployments.v1.apps -o json
{
    "apiVersion": "v1",
    "items": [],
    "kind": "List",
    "metadata": {
        "resourceVersion": "",
        "selfLink": ""
    }
}

1.4 kubectl create|delete 

可以通过指定文件创建或删除资源

kubectl -n default get -o yaml pod lynalee-test-0 > test.yaml
kubectl delete -f test.yaml
kubectl create -f test.yaml
cat test.yaml
{
    "apiVersion": "apps/v1",
    "kind": "Deployment",
    "metadata": {
        "name": "lynalee-test"
    },
    "spec": {
        "selector": {
            "matchLabels": {
                "app": "lynalee-test"
            }
        },
        "template": {
            "metadata": {
                "labels": {
                    "app": "lynalee-test"
                }
            },
            "spec": {
                "containers": [
                    {
                        "image": "lynalee-test:v1",
                        "name": "test"
                    }
                ]
            }
        }
    }
}

 1.5 定位pod异常的一般方法

1.5.1 kubectl describe

各种pod的异常问题都可以先通过此命令查看,一般最下面会有报错原因

[root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests describe pod lynalee-test-0
Name:         lynalee-test-0
...
  Normal  Pulled          11m   kubelet            Successfully pulled image "lynalee-test:v1" in 16.040038ms
  Normal  Created         11m   kubelet            Created container lynalee-test
  Normal  Started         11m   kubelet            Started container lynalee-test

除了查看pod,其他各种部署了资源都可以查看,例如:

kubectl -n tests describe network
kubectl -n admin describe physnet

1.5.2 kubectl logs

此命令可以查看具体的pod日志,与docker log差不多

kubectl -n tests logs lynalee-test-0

如果有init Container可以通过-c指定容器名字查看日志具体的容器日志,下面是查看init容器的日志

kubectl -n tests logs lynalee-test-0 -c test-init

1.6 explain工具

此工具可以方便的列出资源的字段

[root@paas-controller1:/home/]$ kubectl explain sts.spec
KIND:     StatefulSet
VERSION:  apps/v1

RESOURCE: spec <Object>

DESCRIPTION:
     Spec defines the desired identities of pods in this set.

     A StatefulSetSpec is the specification of a StatefulSet.

FIELDS:
   podManagementPolicy  <string>
   ...

...

 

2 pod相关

2.1 查看指定pod的描述信息

kubectl -n default describe pod [PodName]

2.1 删除一个pod

方法一:(正统)

2.1.1 查出资源kind

kubectl -n tests describe pod lynalee-test | grep 'Controlled By'

[root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests describe pod lynalee-test | grep 'Controlled By'
Controlled By:  StatefulSet/lynalee-test

 

 

2.1.2 删除对应的kind

kubectl -n tests delete StatefulSets lynalee-test

[root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests delete StatefulSets lynalee-test --force
statefulset.apps "lynalee-test" deleted

 

 

2.1.3 删除指定pod

kubectl -n tests delete pod lynalee-test-0

[root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests delete pods lynalee-test-0 pod "lynalee-test" deleted

 

 

 

作者有话说:

需要先删除对应的kind,再删除pod才有意义,否则pod会被对应的kind重新调度起来

 

方法二:(通过scale,实现类似删除的效果)

kubectl -n tests scale --current-replicas=1 --replicas=0 StatefulSets lynalee-test

[root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests scale --current-replicas=1 --replicas=0 StatefulSets lynalee-test
statefulset.apps/lynalee-test scaled
[root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests get pods | grep lynalee
[root@paas-controller-1-TCF-SRTN-6407002306:~]$
[root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests get StatefulSets
NAME           READY   AGE
lynalee-test   0/0     14m

 

 

可以看到pod确实没有了,不过对应的kind还是存在的,所以是一种模拟效果,删的不干净哈

 

3 资源调度 kubectl scale

http://docs.kubernetes.org.cn/664.html

扩容:

[root@paas-controller-1 ]# kubectl scale --current-replicas=2 --replicas=3 Deployment lynalee-test
deployment.apps/lynalee-test scaled

[root@paas-controller-1 ]# kubectl get pods -o wide | grep lynalee
lynalee-test-7d5ffd89df-9f4b6         2/2     Running   0          58m    192.169.2.76      192.168.111.104   <none>           <none>
lynalee-test-7d5ffd89df-kdc5l         2/2     Running   0          27s    192.169.3.39      192.168.111.101   <none>           <none>
lynalee-test-7d5ffd89df-xwbvr         2/2     Running   1          58m    192.169.1.87      192.168.111.105   <none>           <none>

3.1 节点反亲和

可以看到没有配置反亲和前,副本有可能部署在同一个节点

[root@paas-controller-1 ]# kubectl get pods -o wide | grep lynalee
lynalee-test-7d5ffd89df-64vvf         2/2     Running   0          5m20s   192.169.0.73      192.168.111.103   <none>           <none>
lynalee-test-7d5ffd89df-8mkbd         2/2     Running   0          5m20s   192.169.3.43      192.168.111.101   <none>           <none>
lynalee-test-7d5ffd89df-gvfks         2/2     Running   0          5m20s   192.169.2.152     192.168.111.104   <none>           <none>
lynalee-test-7d5ffd89df-lkvzd         2/2     Running   1          5m38s   192.169.1.88      192.168.111.105   <none>           <none>
lynalee-test-7d5ffd89df-z7mxj         2/2     Running   0          5m38s   192.169.2.111     192.168.111.104   <none>           <none>

3.2 yaml增加反亲配置(可使微服务部署在不同节点)

标签配置:

"template": {
    "metadata": {
        "labels": {
            "name": "test",
            "app": "openpalettestatefulset",
            "key1":"lynalee-test",
            "key2":"${gpu}"

反亲和配置:

"affinity": {
    "podAntiAffinity": {
        "requiredDuringSchedulingIgnoredDuringExecution": [
            {
                "labelSelector": {
                    "matchExpressions": [
                        {
                            "key": "key1",
                            "operator": "In",
                            "values": [
                                "lynalee-test"
                            ]}]
                },
                "topologyKey": "kubernetes.io/hostname"
            }]}
},

 

具体的scale命令:

[root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests get controllerrevisions
NAME                      CONTROLLER                      REVISION   AGE
lynalee-test-5d76c759bc   statefulset.apps/lynalee-test-0   1          40m
[root@paas-controller-1-TCF-SRTN-6407002306:~]$ kubectl -n tests scale  --replicas=5 statefulset.apps/lynalee-test
statefulset.apps/lynalee-test scaled

 

posted @ 2025-06-25 10:33  lynalee  阅读(60)  评论(0)    收藏  举报