kubectl常用命令

kubectl 是Kubernetes管理员最常用的集群管理命令行工具(CLI)。kubectl 提供了大量的子命令,方便管理 Kubernetes 集群中的各种功能。其最基本的语法格式为 kubectl command <resource> [flags],其中各部分的简要说明如下:

  • command:对资源执行相应操作的子命令,例如get、create、delete、run等;常用的核心子命令见下面。
  • resource:要操作的资源类型和对象名称,格式为:[TYPE] [NAME] 也可以是 TYPE/NAME,其中:
    1. TYPE:要操作的资源类型,例如pods、services等;类型名称大小写敏感,但支持使用单数、复数或简写格式。可以省略。
    2. NAME:要操作的资源对象名称,大小写敏感;省略时,则表示指定TYPE的所有资源对象;同一类型的资源名称可于TYPE后同时给出多个,也可以直接使用TYPE/NAME的格式来为每个资源对象分别指定类型。
  • flags:命令的标志,常用的标志(flags)见下面。

一、常用的标志(flags)

  1. -o <format>:指定输出格式,format常用的有wide、json、yaml,其中wide表示多一点的简约信息(还是一行)、json和yaml表示将详细信息以json和yaml的形式输出(多行);
  2. -f <filename>:根据配置文件或者配置文件的目录来操作,配置
  3. -n <namespace>:指定的命名空间;
  4. --all-namespaces:表示所有命令空间;
  5. --dry-run:表示仅用于测试命令是否正确,并不会真正操作;

二、基础命令

  1. 创建并运行一个或多个容器镜像。
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]
  1. 查看基本信息
kubectl get <resource> [-o wide | json | yaml] [-n namespace]

其中的 resource 可以是 pod、sevice、deployment甚至是namespace等类型,也可以是特定的资源对象名称。

$ kubectl get namespace
NAME              STATUS   AGE
default           Active   4d18h
istio-demo        Active   4d4h
istio-system      Active   27h
kube-node-lease   Active   4d18h
kube-public       Active   4d18h
kube-system       Active   4d18h

$ kubectl get namespace/istio-demo
NAME         STATUS   AGE
istio-demo   Active   4d4h
  1. 查看某个资源的详细信息
kubectl describe <resource> [-o wide | json | yaml] [-n namespace]

每个资源对象都有用户期望的状态(Spec)和现有的实际状态(Status)两种状态信息,get命令可以查看用户期望的状态,而describe命令可以查看某个资源的两种状态信息。

$ kubectl describe namespace/istio-demo
Name:         istio-demo
Labels:       istio-injection=enabled
              kubernetes.io/metadata.name=istio-demo
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.
  1. 打印容器中的日志信息
kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] [options]
$ kubectl logs pod/nginx-deployment-f7dcc7c6f-pwtfr
127.0.0.1 - - [20/Apr/2022:16:48:55 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" "-"
2022/04/20 16:48:55 [error] 8#8: *2 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "127.0.0.1:8080", referrer: "http://127.0.0.1:8080/"
127.0.0.1 - - [20/Apr/2022:16:48:55 +0000] "GET /favicon.ico HTTP/1.1" 404 571 "http://127.0.0.1:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" "-"
127.0.0.1 - - [20/Apr/2022:16:50:02 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" "-"
  1. 在容器中执行命令
kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...] [options]
$ kubectl exec pod/nginx-deployment-f7dcc7c6f-pwtfr -- ls
bin
boot
dev
etc
home
lib
...
  1. 删除资源对象
kubectl delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)]) [options]

三、命令式使用实例

  1. 创建一个名字空间test-namespace,用来测试
kubectl create namespace test-namespace
  1. 在名字空间test-namespace中,运行一个容器镜像dnstool
kubectl run nginx --image=nginx:alpine --port=80 -n test-namespace
  1. 查看容器nginx的基本信息
kubectl get pod -n test-namespace
  1. 查看容器nginx的log日志
kubectl logs nginx -n test-namespace
  1. 在容器nginx中执行命令
kubectl exec nginx -n test-namespace -- ls
  1. 以交互的形式在容器nginx中执行命令(exit命令退出)
kubectl exec -it nginx -n test-namespace -- /bin/sh
  1. 删除容器nginx
>kubectl delete pod dnstool -n test-namespace
  1. 删除名字空间test-namespace
kubectl delete namespace test-namespace

四、声明式使用实例

  1. 将下面的内容保存为nginx-deployment.yaml,我们准备用来创建一个nginx的deployment。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-1
  labels:
    app: nginx-1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-1
  template:
    metadata:
      labels:
        app: nginx-1
    spec:
      containers:
      - name: nginx-1
        image: ccr.ccs.tencentyun.com/qcloud/nginx:1.9
        ports:
        - containerPort: 80
  1. 使用下面的创建一个nginx的deployment:
kubectl create -f k8s/nginx-deployment.yaml -n test-namespace
  1. 将下面的内容保存为nginx-service.yaml,我们准备用来创建一个nginx的service。
apiVersion: v1
kind: Service
metadata:
  name: nginx-1
spec:
  type: NodePort
  selector:
    app: nginx-1
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 32080
  1. 使用下面的创建一个nginx的service:
kubectl create -f k8s/nginx-service.yaml -n test-namespace
  1. 将下面的内容保存为nginx-ingress.yaml,我们准备用来创建一个nginx的ingress。
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
  name: nginx-router
  namespace: game
spec:
  ingressClassName: ingress-nginx-controller
  rules:
    - host: demo.test.com
      http:
        paths:
          - path: /nginx1$
            pathType: Exact
            backend:
              service:
                name: nginx-1
                port:
                  number: 80
          - path: /nginx1/(.*)
            pathType: Prefix
            backend:
              service:
                name: nginx-1
                port:
                  number: 80
  1. 使用下面的创建一个nginx的ingress:
kubectl create -f k8s/nginx-ingress.yaml -n test-namespace
  1. 使用下面的创建一个nginx的ingress:
    找到ingress-nginx-controller的pod名字,使用 kubectl port-forward 命令将本机8000端口转发到pod的nodeport 33080端口。
kubectl port-forward ingress-nginx-controller-ingress-nginx-controller-3cc75bff7psvp 8000:33080  -n ingress-nginx
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容