天天看点

使用kubectl管理k8s集群1.kubectl语法2.声明式资源对象管理3.命令式资源对象管理4.查看资源状态5.容器管理6.集群管理

文章目录

  • 1.kubectl语法
    • 1.1常用命令简要汇总(command)
    • 1.2 资源类型汇总(type)
    • 1.3kubectl输出格式
  • 2.声明式资源对象管理
    • apply
  • 3.命令式资源对象管理
    • 3.1创建资源
      • create
      • expose
      • run
    • 3.2更新资源
      • scale
      • autoscale
      • annotate
      • label
    • 3.3删除资源
      • delete
  • 4.查看资源状态
    • get
    • describe
  • 5.容器管理
    • 5.1日志查看
      • logs
    • 5.2执行命令
      • exec
    • 5.3文件传输
      • cp
  • 6.集群管理
    • 6.1集群信息查看
      • cluster-info、version
    • 6.2节点管理
      • cordon、uncordon、drain

1.kubectl语法

command:子命令,指定要对资源执行的操作

TYPE:指定资源类型

NAME:指定资源名称

flags:指定命令可选的参数

命令帮助文档

kubectl --help
kubectl command --help
           

1.1常用命令简要汇总(command)

kubectl作为kubernetes的命令行工具,主要的职责就是对集群中的资源的对象进行操作,这些操作包括对资源对象的创建、删除和查看等

操作 语法 描述
annotate kubectl annotate (-f FILENAME \| TYPE NAME \| TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [–overwrite] [–all] [–resource-version=version] [flags] 添加或更新一个或多个资源的注释
api-versions kubectl api-versions [flags] 列出可用的API版本
apply kubectl apply -f FILENAME [flags] 将来自于文件或stdin的配置变更应用到主要对象中。
attach kubectl attach POD -c CONTAINER [-i] [-t] [flags] 连接到正在运行的容器上,以查看输出流或与容器交互(stdin)。
autoscale kubectl autoscale (-f FILENAME \| TYPE NAME \| TYPE/NAME) [–min=MINPODS] –max=MAXPODS [–cpu-percent=CPU] [flags] 自动扩宿容由副本控制器管理的Pod。
cluster-info kubectl cluster-info [flags] 显示群集中的主节点和服务的的端点信息。
config kubectl config SUBCOMMAND [flags] 修改kubeconfig文件。
create kubectl create -f FILENAME [flags] 从文件或stdin中创建一个或多个资源对象。
delete kubectl delete (-f FILENAME \| TYPE [NAME \| /NAME \| -l label \| –all]) [flags] 删除资源对象。
describe kubectl describe (-f FILENAME \| TYPE [NAME_PREFIX \| /NAME \| -l label]) [flags] 显示一个或者多个资源对象的详细信息。
edit kubectl edit (-f FILENAME \| TYPE NAME \| TYPE/NAME) [flags] 通过默认编辑器编辑和更新服务器上的一个或多个资源对象。
exec kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [– COMMAND [args…]] 在Pod的容器中执行一个命令。
explain kubectl explain [–include-extended-apis=true] [–recursive=false] [flags] 获取Pod、Node和服务等资源对象的文档。
expose kubectl expose (-f FILENAME \| TYPE NAME \| TYPE/NAME) [–port=port] [–protocol=TCP\|UDP] [–target-port=number-or-name] [–name=name] [—-external-ip=external-ip-of-service] [–type=type] [flags] 为副本控制器、服务或Pod等暴露一个新的服务。
get kubectl get (-f FILENAME \| TYPE [NAME \| /NAME \| -l label]) [–watch] [–sort-by=FIELD] [[-o \| –output]=OUTPUT_FORMAT] [flags] 列出一个或多个资源。
label kubectl label (-f FILENAME \| TYPE NAME \| TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [–overwrite] [–all] [–resource-version=version] [flags] 添加或更新一个或者多个资源对象的标签。
logs kubectl logs POD [-c CONTAINER] [–follow] [flags] 显示Pod中一个容器的日志。
patch kubectl patch (-f FILENAME \| TYPE NAME \| TYPE/NAME) –patch PATCH [flags] 使用策略合并补丁过程更新资源对象中的一个或多个字段。
port-forward kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT […[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] 将一个或多个本地端口转发到Pod。
proxy kubectl proxy [–port=PORT] [–www=static-dir] [–www-prefix=prefix] [–api-prefix=prefix] [flags] 为kubernetes API服务器运行一个代理。
replace kubectl replace -f FILENAME 从文件或stdin中替换资源对象。
rolling-update kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] –image=NEW_CONTAINER_IMAGE \| -f NEW_CONTROLLER_SPEC) [flags] 通过逐步替换指定的副本控制器和Pod来执行滚动更新。
run kubectl run NAME –image=image [–env=”key=value”] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [flags] 在集群上运行一个指定的镜像。
scale kubectl scale (-f FILENAME \| TYPE NAME \| TYPE/NAME) –replicas=COUNT [–resource-version=version] [–current-replicas=count] [flags] 扩宿容副本集的数量。
version kubectl version [–client] [flags] 显示运行在客户端和服务器端的Kubernetes版本。

1.2 资源类型汇总(type)

在kubernetes中,提供了很多的资源对象,开发和运维人员可以通过这些对象对容器进行编排。

资源对象类型 缩略别名
apiservices
certificatesigningrequests csr
clusters
clusterrolebindings
clusterroles
componentstatuses cs
configmaps cm
controllerrevisions
cronjobs
customresourcedefinition crd
daemonsets ds
deployments deploy
endpoints ep
events ev
horizontalpodautoscalers hpa
ingresses ing
jobs
limitranges limits
namespaces ns
networkpolicies netpol
nodes no
persistentvolumeclaims pvc
persistentvolumes pv
poddisruptionbudget pdb
podpreset
pods po
podsecuritypolicies psp
podtemplates
replicasets rs
replicationcontrollers rc
resourcequotas quota
rolebindings
roles
secrets
serviceaccounts sa
services svc
statefulsets
storageclasses

1.3kubectl输出格式

输出格式 说明
-o=custom-columns=<spec> 根据自定义列名进行输出,以逗号分隔
-o=custom-colimns-file=<filename> 从文件中获取自定义列名进行输出
-o=json 以JSON格式显示结果
-o=jsonpath=<template> 输出jsonpath表达式定义的字段信息
-o=jsonpath-file=<filename> 输出jsonpath表达式定义的字段信息,来源于文件
-o=name 仅输出资源对象的名称
-o=wide 输出额外信息。对于Pod,将输出Pod所在的Node名
-o=yaml 以yaml格式显示结果

2.声明式资源对象管理

以声明的形式,创建资源或更新资源,无需指定具体操作

apply

将来自于文件或stdin的配置变更应用到主要对象中

kubernetes建议尽量使用apply命令,kubectl中大多数的创建、更新、删除资源的命令都可以使用apply来代替

kubectl apply (-f FILENAME | -k DIRECTORY) [options]
##-f 参数后跟yaml或json格式的资源配置文件,-k 参数后跟kustomization.yaml配置文件的位置。
           

声明式管理:所有对集群的增改操作,都能apply命令完成,取决于后面的配置文件

  • 如果配置文件中的资源在集群中不存在,则创建这个资源。
  • 如果配置文件中的资源在集群中已存在,则根据配置对资源字段进行更新

例子:

#kubeadm部署集群中根据资源配置文件配置flannel网络
kubectl apply -f kube-flannel.yml
           

apply命令的作用:使集群的实际状态朝用户声明的期望状态变化,而用户不用关心具体要进行怎样的增删改操作才能达到这个期望状态,也即Kubernetes的声明式资源管理。

3.命令式资源对象管理

命令式管理就是直接通过命令执行增删改操作

3.1创建资源

create

用于根据文件或输入流创建集群resource。如果有对应resource的yaml或json文件,直接指定文件创建。也可使用子命令等直接创建响应的resource。从追踪和维护的角度,建议使用yaml或json格式

##通过文件陈述式配置
kubectl create -f FILENAME [flags]
##通过命令
kubectl create [type] [NAME] [flags]
           

示例:

kubectl create -f nginx.yaml

kubectl create deployment nginx --image=nginx

kubectl create serviceaccount dashboard-admin -n kube-system		#创建服务账户

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
           

expose

为副本控制器、服务或Pod等暴露一个新的服务,即将服务暴露出去(创建service)

kubectl expose deployments/deployment_name --type="NodePort" --port=(要暴露的容器端口) --name=(Service对象名字)

kubectl expose rc nginx --port=80 --target-port=8000    # 创建一个svc,暴露nginx这个rc
           

run

类似于docker的run命令,用于在集群上运行一个image实例

kubectl run name --image=(镜像名) --replicas=(备份数) --port=(容器要暴露的端口) --labels=(设定自定义标签)

kubectl run nginx --image=nginx
           

部分参数:

–dry-run:测试命令正确性,不执行创建

-o:输出,指定yaml或json将执行命令生成对应格式文件

kubectl run nginx --image=nginx --dry-run -o yaml > /bak
           

3.2更新资源

scale

扩容或缩容 Deployment、ReplicaSet、Replication Controller或 Job 中Pod数量。

scale用于程序在负载加重或缩小时副本进行扩容或缩小,如创建的nginx有两个副本,可以轻松的使用scale命令对副本数进行扩展或缩小。

kubectl scale --replicas=3 -f nginx.yaml	#将nginx.yaml中描述的对象扩展为3个

kubectl scale rc nginx —replicas=4 	#将nginx的pod副本设为4个,若比当前小,则为缩小

kubectl scale --current-replicas=2 --replicas=3 deployment/mysql	#如果当前副本为2,则扩展到3

kubectl scale --replicas=5 rc/foo rc/bar rc/baz		#设置多个rc中pod副本数量
           

autoscale

给定一个rc指定一个副本数 的范围,实际运行中根据pod运行的程序负载自动在指定的范围内对pod进行扩容或缩容

annotate

添加或更新一个或多个资源的注释/备注

kubectl annotate pods pod_name key=value

kubectl annotate pods foo description='my frontend'        # 增加description='my frontend'备注,已有保留不覆盖
           

label

添加或更新一个或多个资源对象的标签

kubectl label pods/pod_name key=value	#添加标签,如果是修改的话需要后面添加--overwrite

kubectl label nodes node_name key=value
           
kubectl label --overwrite pods foo status=unhealthy        # 增加status=unhealthy 标签,已有则覆盖
           

3.3删除资源

delete

删除资源对象

kubectl delete -f nginx.yaml	#删除nginx.yaml中对应的资源对象

kubectl delete pod,service nginx foo	#删除名为nginx、foo的pod和service

kubectl delete pods,services -l name=mylabel	#删除包含指定标签为mylabel的资源对象

kubectl delete pod foo --grace-period=0 --force # 强制删除一个pod,在各种原因pod一直terminate不掉的时候很有用
           

4.查看资源状态

get

最常用的查看命令,查看一个或多个资源的详细信息

常见示例:

kubectl get services                          # 列出当前NS中所有service资源
kubectl get pod -n kube-systme				  # 列出集群中指定命名空间的pod
kubectl get pods --all-namespaces             # 列出集群所有NS中所有的Pod
kubectl get pods -o wide                      # -o wide也比较常用,可以显示更多资源信息,比如pod的IP等
kubectl get deployment my-dep                 # 可以直接指定资源名查看
kubectl get deployment my-dep --watch         # --watch 参数可以监控资源的状态,在状态变换时输出。在跟踪服务部署情况时很有用
kubectl get pod my-pod -o yaml                # 查看yaml格式的资源配置,这里包括资实际的status,可以用--export排除
kubectl get pod my-pod -l app=nginx           # 查看所有带有标签app: nginx的pod
           

describe

类似get,但get只输出资源本身的信息,describe聚合了相关资源的信息并输出。比如,在describe node信息时,同时会输出该node下的pod的资源利用情况。所以describe命令在排错和调试时非常有用。

示例:

kubectl describe nodes my-node	#查看名为my-node的node节点详细信息
kubectl describe pods my-pod      # 查看pod my-pod的详细信息
           

5.容器管理

5.1日志查看

logs

示例:

kubectl logs my-pod		#查看单容器pod的日志
kubectl logs my-pod -c nginx #查看多容器pod中的某个nginx容器的日志
kubectl logs -l app=nginx 	#查看包含app=nginx标签的pod日志
kubectl logs -f my-pod	#加上-f,类似tail -f,实时更新追踪日志
kubectl logs my-pod  -p  #输出该pod的上一个退出的容器实例日志。在pod容器异常退出时很有用
kubectl logs my-pod  --since-time=2018-11-01T15:00:00Z	# 指定时间戳输出日志
kubectl logs my-pod  --since=1h 	# 指定时间段输出日志,单位s/m/h
           

5.2执行命令

exec

命令和docker exec一致

kubectl exec -it nginx bash
           

5.3文件传输

cp

容器和宿主机之间互相交互文件

kubectl cp /tmp/foo_dir <some-pod>:/tmp/bar_dir                 # 拷贝宿主机本地文件夹到pod
kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar        # 指定namespace的拷贝pod文件到宿主机本地目录
kubectl cp /tmp/foo <some-pod>:/tmp/bar -c <specific-container> # 对于多容器pod,用-c指定容器名
           

6.集群管理

6.1集群信息查看

cluster-info、version

kubectl cluster-info      # 查看master和集群服务的地址
 kubectl cluster-info dump # 查看集群详细日志
 kubectl version           # 查看Kubernetes集群和客户端版本
           

6.2节点管理

cordon、uncordon、drain

kubectl cordon my-node       
# 标记 my-node 为 unschedulable,禁止pod被调度过来。注意这时现有的pod还会继续运行,不会被驱逐。
kubectl uncordon my-node 
# 与cordon相反,标记 my-node 为 允许调度。
kubectl drain  my-node
# drain字面意思为排水,实际就是把my-node的pod平滑切换到其他node,同时标记pod为unschedulable,也就是包含了cordon命令。
# 但是直接使用命令一般不会成功,建议在要维护节点时,加上以下参数:
kubectl drain my-node  --ignore-daemonsets  --force  --delete-local-data  
# --ignore-daemonsets 忽略daemonset部署的pod
# --force 直接删除不由workload对象(Deployment、Job等)管理的pod
# --delete-local-data  直接删除挂载有本地目录(empty-dir方式)的pod
           

继续阅读