kubernetes 集群命令行工具 kubectl

1、kubectl 概述

kubectl 是 Kubernetes 集群的命令行工具,通过 kubectl 能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。

2、kubectl 命令的语法

kubectl  [COMMAND]  [TYPE]  [NAME]  [flags]

(1)COMMAND:指定要对资源执行的操作,例如 create、get、describe 和 delete等

(2)TYPE:指定资源类型,资源类型是大小写敏感的,开发者能够以单数、复数和缩略的 形式。例如:

kubectl get pod
kubectl get pods

(3)NAME:指定资源的名称,名称也大小写敏感的。如果省略名称,则会显示所有的资源, 例如:

kubectl get pods xoa.nginx-74fcfdc9bb-p9g5m

(4)flags:指定可选的参数。例如,可用-s 或者–server 参数指定 Kubernetes API server 的地址和端口。

3、kubectl常用命令

--dry-run 表示测试,不真正执行命令(测试命令是否正确),去掉该参数即真正执行命令

  • create:通过文件名或控制台输入域创建资源
接受JSON和YAML格式的描述文件
kubectl create -f FILENAME
示例: # 使用pod.json文件创建一个pod $ kubectl create
-f ./pod.json # 通过控制台输入的JSON创建一个pod $ cat pod.json | kubectl create -f -

#创建一个名为xoa.nginx的deployment:
kubectl create deployment xoa.nginx --image=nginx
  • expose:输将资源暴露为新的Kubernetes Service

指定deployment、service、replica setreplication controllerpod ,并使用该资源的选择器作为指定端口上新服务的选择器。deployment 或 replica set只有当其选择器可转换为service支持的选择器时,即当选择器仅包含matchLabels组件时才会作为暴露新的Service。

资源包括(不区分大小写):

pod(po),service(svc),replication controller(rc),deployment(deploy),replica set(rs)

expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]
说明:
--port:POD端口,kubernetes中的服务之间访问的端口,集群内其他容器可以通过该端口访问,外部机器不能访问。

--target-port:容器端口,与制作容器时暴露的端口一致(DockerFile中EXPOSE)
示例:
kubectl  expose deployment xoa.nginx  --type=NodePort --port=80 --name=xoa-nginx
  • run:创建并运行一个或多个容器镜像。
语法:
run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]

示例:
启动Tomcat实例:
kubectl run xoa-tomcat --image=tomcat 
启动httpd实例,暴露容器端口80:
kubectl run httpd01 --image=httpd --port=80 --replicas=2
注意:在K8S v1.18.0以后,–-replicas已弃用 ,推荐用 deployment 创建 pods
  • get:获取列出一个或多个资源的信息。
kubectl get namespace(ns)     //列出所有命名空间
kubectl get all //列出默认命名空间所有资源信息,后面可以加-n指定命名空间。
kubectl  get pods -o wide //列出所有pod信息
kubectl  get  deployment(deploy) -o wide //列出
deployment类型的资源
kubectl  get  service -o wide //列出所有类型的service
kubectl get componentstatuses(cs) //查看集群状态信息
kubectl get nodes -o wide //查看集群节点信息
kubectl get replicasets(rs) //查看
replicasets类型的资源
kubectl cluster-info //查看集群信息
  • edit:使用默认编辑器 编辑服务器上定义的资源。

使用命令行工具获取的任何资源都可以使用edit命令编辑。edit命令会打开使用KUBE_EDITOR,GIT_EDITOR 或者EDITOR环境变量定义的编辑器,可以同时编辑多个资源,但所编辑过的资源只会一次性提交。edit除命令参数外还接受文件名形式。

文件默认输出格式为YAML。要以JSON格式编辑,请指定“-o json”选项。

如果在更新资源时报错,将会在磁盘上创建一个临时文件来记录。在更新资源时最常见的错误是几个用户同时使用编辑器更改服务器上资源,发生这种情况,你需要将你的更改应用到最新版本的资源上,或者更新保存的临时副本。

语法:
edit (RESOURCE/NAME | -f FILENAME)
示例:
kubectl edit deployment xoa.nginx
kubectl edit service xoa-nginx
  • delete:通过文件名、控制台输入、资源名或者label selector删除资源

通过配置文件名、stdin、资源名称或label选择器来删除资源。

支持JSON和YAML格式文件。可以只指定一种类型的参数:文件名、资源名称或label选择器。

有些资源,如pod,支持优雅的(graceful)删除,因为这些资源一般是集群中的实体,所以删除不可能会立即生效,这些资源在强制终止之前默认定义了一个周期(宽限期),但是你可以使用--grace-period flag来覆盖该值,或者通过pass --now设置该周期为1。

如果托管Pod的Node节点已经停止或者无法连接API Server,使用delete命令删除Pod需等待时间更长。要强制删除资源,需指定- force flag,且设置周期(宽限期)为0。

如果执行强制删除Pod,则调度程序会在节点释放这些Pod之前将新的Pod放在这些节点上,并使之前Pod立即被逐出。

注意:执行delete命令时不会检查资源版本,如果在执行delete操作时有人进行了更新操作,那么更新操作将连同资源一起被删除。

语法:
delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])
示例:
kubectl delete pod xoa-tomcat

 

  • label:更新(增加、修改或删除)资源上的 label(标签)。

label 必须以字母或数字开头,可以使用字母、数字、连字符、点和下划线,最长63个字符。
如果--overwrite 为 true,则可以覆盖已有的 label,否则尝试覆盖 label 将会报错。
如果指定了--resource-version,则更新将使用此资源版本,否则将使用现有的资源版本。

语法:
label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
示例:
给名为foo的Pod添加label unhealthy=true:
kubectl label pods foo unhealthy=true
给 namespace 中的所有 pod 添加 label:
kubectl label pods --all status=unhealthy
删除名为“bar”的label 。(使用“ - ”减号相连):
kubectl label pods foo bar-

 

  • rollout:对资源进行管理,可用资源包括:deployments、daemonsets
子命令
history(查看历史版本)
pause(暂停资源)
resume(恢复暂停资源)
status(查看资源状态)
undo(回滚版本)

语法:
rollout SUBCOMMAND
示例:
回滚到之前的deployment:
kubectl rollout undo deployment/abc
  • scale:扩容或缩容 Deployment、ReplicaSet、Replication Controller或 Job 中Pod数量。
语法:
scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
示例:
将名为foo中的pod副本数设置为3:
kubectl scale --replicas=3 rs/foo
将由“foo.yaml”配置文件中指定的资源对象和名称标识的Pod资源副本设为3:
kubectl scale --replicas=3 -f foo.yaml
如果当前副本数为2,则将其扩展至3:
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
设置多个RC中Pod副本数量:
kubectl scale --replicas=5 rc/foo rc/bar rc/baz
  •  explain:查看资源类型对应的Apiversion
示例:
kubectl explain deployment
kubectl explain pod

 

 

http://docs.kubernetes.org.cn/  

 

 

posted @ 2021-08-29 19:14  浪淘沙&  阅读(633)  评论(0编辑  收藏  举报