0%

通过 kubectl 管理 Kubernetes

声明式方法管理 Kubernetes。

简介

可以使用 Kubectl 命令行工具管理 Kubernetes 集群。

kubectl 在 $HOME/.kube 目录中查找一个名为 config 的配置文件。可以通过设置 KUBECONFIG 环境变量或
设置 –kubeconfig 参数来指定其它 kubeconfig 文件。

参考文档:

命令

基础

1
2
3
4
# 查看命令帮助文档
kubectl <command> --help
# 查看所有命令通用的参数
kubectl options

create

  • 根据文本或者交互式输入创建资源
1
2
3
4
5
6
7
8
9
10
11
# 规则
kubectl create -f Filename # 根据文本内容创建

# 从 json 文本数据中创建一个 pod
kubectl create -f pod.json

# 查看 json 文本重定向至输入然后创建一个 pod
cat pod.json | kubectl create -f -

# 编写yaml文件并且将其转换为json数据,然后创建
kubectl create -f registry.yaml --edit -o json

帮助文档,也可以直接阅读官方文档中的内容。

1
kubectl create --help
  • 创建集群用户

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    # 规则
    kubectl create clusterrole NAME --verb=verb --resource=resource.group [--resource-name=resourcename] \
    [--dry-run=server|client|none]

    # 创建一个集群用户,名称为 pod-reader,并赋予该用户 get/watch/list 的权限管理 pods
    kubectl create clusterrole pod-reader --verb=get,list,watch --resource=pods

    # 创建一个集群用户,名称为 pod-reader,并赋予该用户 get 的权限管理 pods,同时将集群资源命名为 readablepod、anotherpod
    # --resource-name 支持列表数据
    kubectl create clusterrole pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod

    # 创建一个集群用户,名称为 foo,指定 API 组,并赋予该用户 get/watch/list 的权限管理
    kubectl create clusterrole foo --verb=get,list,watch --resource=rs.extesions

    # 创建一个集群用户,名称为 foo ,同时指定子资源
    kubectl create cluseterrole foo --verb=get,list,watch --resource=pods,pods/status

    # 创建一个集群用户,名称为 foo ,同时指定非资源 url
    kubectl create clusterrol "foo" --verb=get --non-resource-url=/logs/*

    # 创建一个集群用户,名称为 monitoring ,同时设定聚合规则
    kubectl create clusterrole monitoring --aggregation-rule="rbac.exampke.com/agreaget-to-monitoring=true"
  • clusterrollebinding

  • configmap

  • cronjob 创建定时任务

    1
    2
    3
    4
    5
    6
    7
    8
    # 规则
    kubectl create cronjob NAME --image=iamge --schedule='0/5 * * * ?' -- [COMMAND] [args...]

    # 创建一个定时任务
    kubectl create crongjob my-job --image=busybox --schedule='*/1 * * * *'

    # 创建一个定时任务指定命令
    kubectl create crongjob my-job --image=busybox --schedule='*/1 * * * *' -- date
  • deployment 创建一个部署任务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 规则
    kubectl create deployment NAME --image=image -- [COMMNAD] [args...]

    # 创建一个部署任务,名称为 my-dep,同时运行在 busybox 镜像中
    kubectl create deployment my-dep --image=busybox

    # 创建一个部署任务,名称为 my-dep,同时运行在 busybox 镜像中,且执行命令
    kubectl create deployment my-dep --image=busybox --date

    # 创建一个部署任务,名称为 my-dep,同时运行在 nginx 镜像中,且同时运行三个
    kubectl create deployment my-dep --image=nginx --replicas=3

    # 创建一个部署任务,名称为 my-dep,同时运行在 busybox 镜像中,且指定端口为 5701
    kubectl create deployment my-dep --image=busybox --port=5701
  • ingress 创建一个入口

    1
    2
    3
    4
    5
    6
    7
    8
    # 规则
    kubectl create ingress NAME --rule=host/path=service:port[,tils[=secret]]

    # 创建一个单通道入口,名称为 simple
    kubectl create ingress simple --rule="foo.com/bar=svc1:8080,tls=my-cert"

    #
    kubectl create ingress catch-all --class=otheringress --rule="/path=svc:port"
  • job 创建一个任务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 规则
    kubectl create job NAME --image=image [--from=crongjob/name] -- [COMMAND] [args..]

    # 创建一个任务
    kubectl create job my-job --image=busybox

    # 创建一个任务,并指定命令
    kubectl create job my-job --image=busybox -- date

    # 从定时任务中获取一个任务
    kubectl create job test-job --from=cronjob/a-cronjob
  • namespace 创建一个命名空间

    1
    2
    3
    4
    5
    # 规则
    kubectl create namespace NAME [--dry-run=server|client|none]

    # 创建一个命名空间
    kubectl create namespace my-namespace # namespace 可简写为 ns

    查看名字空间

    1
    2
    3
    4
    # 获取特定名字空间的摘要
    kubectl get namesapce <name>
    # 获取所有名字空间的摘要
    kubectl get namespace
    1
    2
    3
    4
    5
    NAME                   STATUS   AGE
    default Active 3d22h
    kube-node-lease Active 3d22h
    kube-public Active 3d22h
    kube-system Active 3d22h

    注:

    • default 无名字空间对象的默认名字空间
    • kube-system 由 Kubernetes 系统创建的对象的名字空间
    • kube-public 自动创建且被所有用户可读的名字空间(包括未经身份认证)。此名字空间通常在某些资源在整个集群中可见且可公开读取 时被集群使用。此名字空间的公共方面只是一个约定,而不是一个必要条件。
    1
    2
    # 获取详细信息
    kubectl describe namespace <name>

    同时显示了资源配额(如果存在)以及资源限制区间。

    资源配额跟踪并聚合 Namespace 中资源的使用情况,并允许集群运营者定义 Namespace 可能消耗的 Hard 资源使用限制。

    限制区间定义了单个实体在一个 Namespace 中可使用的最小/最大资源约束。

    名字空间可处于下列两个阶段中的一个:

    • Active 名字空间正在被使用中
    • Terminating 名字空间正在被删除,且不能被用于新对象。
  • poddisrupionbudget

  • priorityclass

  • quota

  • role 创建一个用户

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 规则
    kubectl create role NAME --verb=verb --resource=resource.grou/subresource [--resource-name=resourcename] \
    [--dry-run=server|client|none]

    #
    kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods

    #
    kubectl create role pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod

    #
    kubectl create role foo --verb=get,list,watch --resource=rs.extensions

    #
    kubectl crate role foo --verb=get,list,watch --resource=pod,pods/status
  • rolebinding

  • secret

  • secret docker-registry

  • secret generic

  • secret tls

  • service 创建一个服务

    1
    2
    3
    4
    5
    6
    7
    8
    # 规则
    kubectl create service

    # 创建一个新的集群IP 服务,名称为 my-cs
    kubectl create service clusterip my-cs --tcp=5678:8080

    # 创建一个新的集群IP服务,名称为 my-cs
    kubectl create service clusterip my-cs --clusterip="None"
  • service clusterip

  • service externalname

  • service loadbalancer

  • service nodeport

  • serviceaccount

  • token

get

获取一个或多个资源信息

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
kubectl get [(-o|--output)json|yaml|name|go-template|go-template-file|templatefile|jsonpath|jsonpath-as-json|jsonpath-file\
|custom-columns|custom-columns-file|wide] (TYPE[.VERSION][.GROUP][NAME | -l label) | TYPE(.VERSION) \
(.GROUP)/NAME ...) [flags]

# 显示所有 pods 信息
kubectl get pods

# 显示所有 pods 详细信息
kubectl get pods -o wide

#
kubectl get replicationcontroller web

#
kubectl get deployment.v1.apps -o json

#
kubectl get -o json pod web-pod-13je7

#
kubectl get -f pod.yaml -o json

#
kubectl get -k dir/

#
kubectl get -o tempalte pod/web-pod13je7 --template{{.status.phase}}

#
kubectl get pod test-pod -o custom-colums=CONTAINER:.spec.containers[0].name,IMAGE:.spec.containers[0].image

#
kubectl get rc,service

#
kubectl get rc/web service/frontend pods/web-pod-13je7

#
kubectl get pod web-pod-13je7 --subresource status

#
kubectl get namespace

run

expose

delete

APP 管理

apply

annote

autoscale

debug

diff

eidt

kustomize

label

patch

replace

rollout

scale

set

wait

APP 运行维护

attach

auth

cp

describe

exec

logs

port-forward

proxy

top

集群管理

api-versions

certificate

cluster-info

cordon

drain

taint

uncordon

kubectl 配置和信息

alpha

api-resources

completion

config

explain

options

plugin

version