Kubectl 是一个命令行接口,用于对 Kubernetes 集群运行命令。kubectl 在 $HOME/.kube 目录中寻找一个名为 config 的文件。

kubectl安装方法详见:https://www.cnblogs.com/shadow-yin/p/14843099.html

1. 基本语法

使用以下语法 kubectl 从终端窗口运行命令:

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

其中 commandTYPENAMEflags 分别是:

  • command:指定要对一个或多个资源执行的操作,例如 creategetdescribedelete
  • TYPE:指定资源类型。资源类型不区分大小写,可以指定单数、复数或缩写形式。例如,以下命令输出相同的结果:
```shell
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
```
  • NAME:指定资源的名称。名称区分大小写。如果省略名称,则显示所有资源的详细信息 kubectl get pods
    在对多个资源执行操作时,您可以按类型和名称指定每个资源,或指定一个或多个文件:
  • 要按类型和名称指定资源:
  • 要对所有类型相同的资源进行分组,请执行以下操作:TYPE1 name1 name2 name<#>
    例子:kubectl get pod example-pod1 example-pod2
  • 分别指定多个资源类型:TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>
    例子:kubectl get pod/example-pod1 replicationcontroller/example-rc1
  • 用一个或多个文件指定资源:-f file1 -f file2 -f file<#>
  • flags: 指定可选的参数。例如,可以使用 -s-server 参数指定 Kubernetes API 服务器的地址和端口。

注意:

从命令行指定的参数会覆盖默认值和任何相应的环境变量。

如果您需要帮助,只需从终端窗口运行 kubectl help 即可。

注:以上内容摘自https://kubernetes.io/zh/docs/reference/kubectl/overview/

2. 查看型命令

指定命名空间(namespace)查看集群内的pod:

kubectl get pods -n test-namespace

(-n test-namespace表示指定test-namespace这个命名空间)

显示pod的更多信息:

kubectl get pods -n test-namespace -o wide

(比上一条命令能显示更多的pod信息)

以yaml格式显示pod详细信息:

kubectl get pods -n test-namespace -o yaml

(能显示pod的详细信息,以yaml格式输出在屏幕上)

以json格式显示pod详细信息:

kubectl get pods -n test-namespace -o json

(能显示pod的详细信息,以json格式输出在屏幕上)

指定pod名称显示其信息

kubectl get pods -n test-namespace xxx

(xxx为pod名称,后跟-o wide 或者 -o yaml则显示该pod的详细信息。一般用法是先用kubectl get pods -n test-namespace查看所有pod名称,然后使用指定名称的方式来查看特定pod的详细信息)

查看pod详细信息:

kubectl describe pods -n test-namespace xxx

(xxx是pod名称。该命令与之前几条命令不同之处在于它会显示pod的所有配置信息,显示运行状态,甚至还包括pod运行产生的事件,可用于产生故障时定位问题。不跟pod名称会显示命名空间下所有的pod信息,一般都需要后跟pod名称,以单独显示指定pod的信息)

注:以上命令是查看pod类型资源的命令,将pods替换成其他资源类型则可以查看相应资源的信息。Kubernetes的所有资源信息可以通过命如下查看:

kubectl api-resources

查看pod的log日志:

kubectl logs xxx -n test-namespace
(xxx为pod名称)

查看所有具有某一标签的pod:

kubectl get pods -n test-namespace -l alibabacloud.com/rd-app=cdn-bind

(-l选项用于指定标签,alibabacloud.com/rd-app=cdn-bind表示alibabacloud.com/rd-app这个标签的值为“cdn-bind”)

查看所有命名空间下的pod:

kubectl get pods --all-namespaces

(--all-namespaces集群内所有的已创建的命名空间)

3. 创建型命令

要使用创建型的命令,一般都是先使用yaml格式的文件定义一个资源,然后在命令中指定yaml文件名称来创建相应的资源。yaml文件可以保存在本地(运行kubectl工具的机器)的任意位置,如果不是在当前目录,命令中需要指定yaml文件所在位置。

yaml文件示例:

apiVersion: v1
kind: Service
metadata:
labels:
XXXX.com/rd-tenant: CDN
name: test-cdn-svc-cm-agent-1XXX
namespace: test-namespace
spec:
ports:
- name: test-cdn-cm-agent-1
port: 3400
protocol: TCP
targetPort: 3400
selector:
alibabacloud.com/rd-app: cdn-cdncm-agent
alibabacloud.com/rd-app-cluster: test-node
alibabacloud.com/rd-tenant: CDN
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}

以上yaml文件定义了一个类型(kind)为Service的资源。在metadata中为其打上了一系列的标签,指定了其名称(该名称在命名空间内唯一),指定其所属的命名空间。然后在spec中指定了该服务的名称,端口。selector的作用是为了提供该服务需要选择具有什么标签的pod(pod是提供服务的实体)。将该yaml格式文件保存为文件名svc.yaml。则创建该资源可以用如下的命令:

kubectl apply -f svc.yaml

或者:

kubectl create -f svc.yaml

两条命令的区别如下表:

序号

kubectl apply

kubectl create

1

根据yaml文件中包含的字段(yaml文件可以只写需要改动的字段),直接升级集群中的现有资源对象

首先删除集群中现有的所有资源,然后重新根据yaml文件(必须是完整的配置信息)生成新的资源对象

2

yaml文件可以不完整,只写需要的字段

yaml文件必须是完整的配置字段内容

3

kubectl apply只工作在yaml文件中的某些改动过的字段

kubectl create工作在yaml文件中的所有字段

4

在只改动了yaml文件中的某些声明时,而不是全部改动,你可以使用kubectl apply

在没有改动yaml文件时,使用同一个yaml文件执行命令kubectl replace,将不会成功(fail掉),因为缺少相关改动信息

建议使用apply,这种方法如果资源部存在就会创建,如果存在,则比较已经存在的资源与新定义的资源的不同点,将不同点替换。该命令可用于修改已有资源除资源名称外(因为资源名称是命名空间中同类型资源的唯一标识)的一些属性。

4. 更新型命令

上一节提到apply命令同样可用于更新资源的属性。但是也还有其他命令用于更新资源的属性。

在线编辑资源属性:

kubectl edit pods xxx -n test-namespace

(xxx表示pod名称。执行该命令后会弹出当前pod的属性编辑界面,在上面直接修改资源属性,然后保存退出,即完成资源更新操作)

给pod添加标签:

kubectl label pods -n test-namespace xxx alibabacloud.com/rd-app=cdn-bind

(xxx表示pod名称。该命令表示给pod添加alibabacloud.com/rd-app标签,标签的值为“cdn-bind”。该命令执行时,pod的原有标签必须不存在alibabacloud.com/rd-app这个标签,否则添加失败)

修改pod标签:

kubectl label pods -n test-namespace xxx alibabacloud.com/rd-app=cdn-bind --overwrite=true

(如果pod已经存在alibabacloud.com/rd-app这个标签,需要修改为其他值,则需要在后面添加--overwrite=true )

5. 删除型命令

使用定义资源是的yaml文件删除资源:

kubectl delete -f svc.yaml

(svc.yaml文件是前述用于定义service的文件,将apply或者create换成delete即是删除该资源(service),使用该命令是,不需要指定命名空间,因为在yaml文件中已经指定了命名空间)

使用资源名称删除资源:

kubectl delete services test-cdn-svc-cm-agent-1 -n test-namespace

(test-cdn-svc-cm-agent-1是已经创建的service名称。该命令必须指定命名空间。该命令的用法一般是先用get命令获取到资源的名称,然后在指定名称删除资源)
 

最新文章

  1. nginx + lua +redis环境搭建
  2. java并发:线程同步机制之计数器&amp;Exechanger
  3. iOS9 beta 请求出现App Transport Security has blocked a cleartext HTTP (http://)
  4. 【JAVA集合框架之List】
  5. Information
  6. iframe自适应高度(兼容IE 火狐 谷歌)
  7. mysql:键缓存
  8. hdu 4666 Hyperspace(多维度最远曼哈顿距离)
  9. [翻译][MVC 5 + EF 6] 10:处理并发
  10. android 通过代码设置drawableLeft
  11. Swift学习 --- 2.3和字符串
  12. 集群通信组件tribes之集群的平行通信
  13. 怎样写一个与Win8 IE11兼容的标准BHO?
  14. BZOJ_3872_[Poi2014]Ant colony_dfs
  15. [WC2019] 数树
  16. Python实现正则表达式匹配任意的邮箱
  17. 常用gcc选项
  18. 设计模式(15)--Interpreter(解释器模式)--行为型
  19. maven 引入jar包
  20. windows自带的netsh 端口转发

热门文章

  1. Django项目创建应用(二)
  2. ubuntu-wireshark打开出现错误的问题
  3. sudo apt update 没有 Release 文件
  4. Vulnhub 靶机 CONTAINME: 1
  5. fix: because the volume group on the selected device also consist of physical volumes on other devices
  6. Centos+django+uwsgi+python 环境搭建
  7. Grafana + Prometheus + Mysqld_exporter 监控 Mysql
  8. DELL品牌电脑开机显示supportASsiSt丨pre-Boot SyStem Proforman?
  9. Oracle 会话锁死
  10. CSS之小知识