对象的创建与修改命令

kubectl apply # 声明对象

通过文件或 STDIN(标准输入)声明配置到一个资源中,如果该资源不存在,则会根据所声明的内容自动创建。

有时候我们在使用 apply 应用一个对象时,会遇上类似如下的提示:

The CustomResourceDefinition "XXXXX" is invalid: metadata.annotations: Too long: must have at most 262144 bytes

一个 Manifests 文件太大导致无法 apply,才是就需要使用 replace 来修改对象。或者为 apply 子命令添加 --server-side 标志。

Syntax(语法)

kubectl apply -f FILENAME [OPTIONS]

OPTIONS

  • –record # 在资源注释中记录当前 kubectl 命令。 如果设置为 false,请不要记录该命令。 如果设置为 true,则记录该命令。 如果未设置,则默认仅在已存在的情况下更新现有注释值。
  • –server-side #

kubectl edit # 修改对象

kubectl edit (RESOURCE/NAME | -f FILENAME) [OPTIONS]

OPTIONS:

  • –save-config=false|true #

EXAMPLE

  • kubectl edit -n service kube-system kubernetes-dashboard

kubectl replace # 替换。使用文件或标准输入替换一个资源

Syntax(语法)

kubectl replace -f FILENAME [options]

EXAMPLE

  • 重启指定的容器
    • kubectl get pod {podname} -n {namespace} -o yaml | kubectl replace –force -f -

kubectl create # 从一个文件或者标准输入中创建一个对象

参考:

注意:并不是所有资源都可以通过命令行在标准输入中创建,但是所有资源都可以通过文件来创建一个对象。

kubectl create [COMMAND] [OPTIONS] Command:

  • clusterrole
  • clusterrolebinding
  • configmap
  • cronjob
  • deployment
  • ingress
  • job
  • namespace
  • poddisruptionbudget
  • priorityclass
  • quota
  • role
  • rolebinding
  • secret
  • service
  • serviceaccount

configmap

通过文件、目录或者指定的 literal 值创建一个 configmap(配置中心)

kubectl create configmap NAME [–from-file=[key=]source] [–from-literal=key1=value1] [–dry-run] [OPTIONS]

OPTIONS

  • –from-env-file=’’ # Specify the path to a file to read lines of key=val pairs to create a configmap (i.e. a Docker .env file).
  • –from-file=[KEY=]/PATH/FILE # 键(KEY)文件可以使用文件路径指定,在这种情况下,文件名将作为 configmap 中的键值;或者可以指定键值和文件路径,这时候 configmap 中的键值,是指定的 KEY 的值,效果如 EXAMPLE 图
  • –from-literal=[] # Specify a key and literal value to insert in configmap (i.e. mykey=somevalue)

EXAMPLE

  • 浅蓝色框为键/值对的键,红框文件中内容为键/值对的值,如果使用命令的时候不指定 KEY,则 yaml 格式的 configmap 的 data 下面字段的 KEY 为 www.conf
    • kubectl create configmap nginx-www –from-file=www=./www.conf

RBAC 相关资源 # 创建角色对象的相关命令

通用 OPTIONS:

  • –dry-run# 干跑一遍,意思是仅把结果打印到屏幕上而不真的创建这个对象,默认为关。常与 -o 连用,用来测试命令执行结果
  • -o <json|yaml|name|templatefile|template|go-template|go-template-file|jsonpath-file|jsonpath># 选择输出信息的输出格式
  • –serviceaccount=[]# 服务帐户绑定到角色, in the format <namespace>:<name>

role

kubectl create role NAME –verb=VERB –resource=RESOURCE[.GROUP/SubResource] [–resource-name=RESOURCE] [OPTIONS] VERB 是指明该 role 可以执行的动作(命令)且多个动作以逗号间隔,GROUP 省略时,则默认核心组,apiGroups 字段值为 “"。

OPTIONS

  • –allow-missing-template-keys=true: If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
  • –resource=<RESOURCE> # 指定该 role 的规则,作用于哪些资源。RESOURCE 以 资源名.API组 的方式命名,多个资源以逗号分隔。如果想要指定所有资源,则 RESOURCE 为 .
  • –resource-name=[] # Resource in the white list that the rule applies to, repeat this flag for multiple items
  • –save-config=false # 如果为 true,则当前对象的配置将保存在其注释中。 否则,注释将保持不变。 当您将来希望对这个对象执行 kubectl 应用时,此标志很有用。
  • –template=’’: Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
  • –validate=true: If true, use a schema to validate the input before sending it
  • –verb=<VERB> # 指明该 role 可以执行的动作(命令),多个动作以逗号间隔

EXAMPLE

  • kubectl create role lch -n lch –verb=–resource=.* # 在 lch 名称空间中创建一个名为 lch 的角色,可以对所有 API 组下的所有资源,执行任何操作。
  • kubectl create role pods-reader –verb=get,list,watch –resource=pods –dry-run -o yaml # 创建一个名为 pods-reader 的角色,只能对核心 API 组下的 pods 资源,执行 get、list、watch 操作。仅运行不真正创建,并输出 yaml 格式的信息。

rolebinding

kubectl create rolebinding NAME –clusterrole=NAME|–role=NAME [–user=username] [–group=groupname][–serviceaccount=namespace:serviceaccountname] [OPTIONS] # 绑定 role 或者 clusterrole 其中之一并指明 rolebinding 资源的名称

EXAMPLE

  • 在 lch 名称空间中创建一个名为 lch 的角色绑定,将 lch 角色与 lch 用户绑定。
    • kubectl create rolebinding lch -n lch –role=lch –user=lch
    • kubectl create rolebinding lch -n test –role=lch –serviceaccount=test:lch
  • 创建一个 rolebinding 资源并把 pods-reader 这个 role 与 lch 这个用户绑定起来
    • kubectl create rolebinding bind-lch-read –role=pods-reader –user=lch

clusterrole

kubectl create clusterrole NAME –verb=VERB –resource=RESOURCE.GROUP [–resource-name=resourcename]

EXAMPLE

  • kubectl create clusterrole cluster-reader –verb=get,list,watch –resource=pods

clusterrolebinding

kubectl create clusterrolebinding NAME –clusterrole=NAME [–user=username] [–group=groupname][–serviceaccount=namespace:serviceaccountname] [OPTIONS] # 只能绑定 clusterrole 并指定 clusterrolebinding 资源的名称

EXAMPLE

  • kubectl create clusterrolebinding bind-lch-allreader –clusterrole=cluster=reader –user=lch
  • kubectl create clusterrolebinding dashboard-cluster-admin –clusterrole=cluster-admin –serviceaccount=kube-system:dashboard-admin

secret # 使用指定的子命令创建 secret 对象

SubCommand:

  • docker-registry # Create a secret for use with a Docker registry
  • generic # 从本地文件、目录或文字值创建一个秘密
  • tls # Create a TLS secret

kubectl create secret docker-registry NAME –docker-username=user –docker-password=password –docker-email=email [–docker-server=string] [–from-literal=key1=value1] [–dry-run] [options]

kubectl create secret generic NAME [–type=string] [–from-file=[key=]source] [–from-literal=key1=value1] [–dry-run] [options]

EXAMPLE

  • 无用,创建 serviceaccount 时会自动创建,仅作语句格式参考
    • kubectl create secret generic dashboard-cert -n kube-system –from-file=dashboard.crt=dashboard.crt –from-file=dashboard.key=dashboard.key

kubectl create secret tls NAME –cert=path/to/cert/file –key=path/to/key/file [–dry-run] [options]

serviceaccount # 使用指定的名字创建一个 ServiceAccount(服务账户)对象

kubectl create serviceaccount NAME [–dry-run] [OPTIONS]

EXAMPLE

  • 在 kube-system 名称空间中创建一个名为 dashboard-dashboard 的 serviceaccount
    • kubectl create serviceaccount dashboard-dashboard -n kube-system

最后修改 June 12, 2024: data type (a103a962)