上一节, 我们已经知道kubernetes的常用术语和一些思想, 那接下来, 我们是不是应该来一个简单的例子, 跑起来试试呢?
kubernetes要想进行二次开发, 或者简单的说跑起来, 运行一个小实例, 那就要求我们需要对ta的常用操作相当的熟悉, 那入手了解kubectl, 是非常快速的可以玩起来的一个方式, 下面, 我们就先来看看kubectl的命令行操作的常用方式。
1. kubectl用法详解
1. kubectl语法
kubectl [command] [Type] [NAME] [flags]
-
command: 子命令, 用于操作kubernetes集群资源对象的命令, 例如:create, delete, describe, get, apply等等 -
TYPE: 资源对象的类型, 区分大小写, 能以单数,复数或者简写形式表示。例如以下3中TYPE是等价的。
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
-
NAME:资源对象的名称, 区分大小写。如果不指定名称, 系统则将返回属于TYPE的全部对象的列表,例如:kubectl get pods 将返回所有pod的列表 -
flags: kubectl 子命令的可选参数, 例如使用 -s 指定api server的url地址而不用默认值。
kubectl可操作的资源对象类型以及缩写
资源类型 | 缩写 | 说明 |
---|---|---|
clusters | 集群 | |
componentstatuses | cs | 查看各组件信息 |
configmaps | cm | ConfigMap是用来存储配置文件的kubernetes资源对象 |
daemonsets | ds | DaemonSet只管理Pod对象,通过nodeAffinity和Toleration两个调度器,保证每个节点上只有一个Pod 集群动态加入了新Node,DaemonSet中的Pod也会添加在新加入Node上 删除一个DaemonSet也会级联删除所有其创建的Pod。 |
deployments | deploy | Deployment为pod和ReplicaSet提供了一个声明式定义方法, 用来替代以前的ReplicationController来方便的管理应用 |
endpoints | ep | 节点 |
events | ev | Events 它是Kubelet负责用来记录多个容器运行过程中的事件,命名由被记录的对象和时间戳构成 |
horizontalpodautoscalers | hpa | |
ingresses | ing | |
jobs | ||
limitranges | limits | |
namespaces | ns | |
networkpolicies | ||
statefulsets | ||
persistentvolumeclaims | pvc | |
persistentvolumes | pv | |
pods | po | |
podsecuritypolicies | psp | |
podtemplates | ||
replicasets | rs | |
replicationcontrollers | rc | |
resourcequotas | quota | |
conjob | ||
secrets | ||
serviceaccounts | ||
services | svs | |
storageclasses | sc | |
thirdpartyresources |
在一个命令行中也可以同时对多个资源对象进行操作, 以多个TYPE和NAME的组合表示, 示例如下:
获取多个pod的信息
kubectl get pods pod1 pod2
获取多种对象的信息:
kubectl get pod/pod1 rc/rc1
同时应用多个YAML文件, 以多个-f file参数表示
kubectl get pod -f pod1.yaml -f pod2.yaml
kubectl create -f pod1.yaml -f rc1.yaml -f service1.yaml
2. kubectl 子命令详解
kebectl的子命令非常丰富, 涵盖了对kubernetes集群的主要操作, 包括资源对象的创建, 删除, 查看, 修改, 配置, 运行等, 详细的子命令如表2.10表示:
子命令 | 语法 | 说明 |
---|---|---|
annotate | kubectl annotate (-f Filename | type name | type/name) k1=v1, k2=v2…. |
添加或更新资源对象的annotation信息 |
api-version | kubectl api-version [flags] | 列出当前系统支持的api版本列表, 格式为“group/version” |
apply | kubectl apply -f filename [flags] | 从配置文件或stdin中对资源对象进行配置更新 |
attach | kubectl attach POD -c container [flags] | 附着到一个正在运行的容器上 |
auth | kubectl auth [flags] [optioins] | 检测RBAC权限设置 |
autoscale | kubectl antoscale (-f filename | type name | type/name) | 对deployment, replicaSet或replicationController进行水平自动扩容和缩容的设置 |
cluster-info | kubectl cluster-info [flags] | 显示集群master和内置服务的信息 |
completion | kubectl completion shell [flags] | 输出shell命令的执行结果吗(bash或zsh) |
config | kubectl config subcommand [flags] | 修改kebeconfig文件 |
convert | kubectl convert -f filename [flags] | 转换配置文件为不同的api版本 |
cordon | kubectl cordon node [flags] | 将node标记为unschedulable,即隔离出集群调度范围 |
create | kubectl create -f filename [flags] | 从配置文件或stdin中创建资源对象 |
delete | kubectl delete (-f filename | type name | -l label) [flags] | 从配置文件, stdin, 资源名称或label selector 删除资源对象 |
describe | kubectl describe (-f filename | type name) [flags] | 描述一个或多个资源对象的详细信息 |
diff | kubectl diff -f filename [options] | 查看配置文件与当前系统中正在运行的资源对象的差异 |
drain | kubectl drain node [flags] | 首先将node设置为unschedulable, 然后删除在该node上运行的所有pod, 但不会删除不由api server管理的pod |
edit | kubectl edit (-f filename | type name | type/name) [flags] | 编辑资源对象的属性, 在线更新 |
exec | kubectl exec pod [-c container] [-i] [-t] [flags] [– command [args…]] | 执行一个容器中的命令 |
explain | kubectl explain [–include-extended-apis=true] [–recursive=false] [flags] | 对资源对象属性的详细说明 |
expose | kubectl 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] | 将已经存在的的一个rc, service, deployment 或pod暴露为一个新的service |
get | kubect get (-f filename | type name | -l label) [–watch] [–sort-by-FIELD] [[-o | –output]=OUTPUT_FORMAT] [flags] | 显示一个或者多个资源对象的概要信息 |
label | kubect label (-f filename | type name) k1=v1…kn=vn [–overwrite] [–all] [–resource-version=version] [flags] | 设置或者资源对象的label |
logs | kubectl logs pod [-c container] [–follow] [flags] | 在屏幕上打印一个容器的日志 |
patch | kubectl patch kubectl patch (-f filename | type name) –patch patch [flags] | 以merge形式对资源对象的那部分字段的值进行修改 |
plugin | kubectl plugin [flags] [optioins] | 在kubectl命令行适用用户自定义的插件 |
port-forward | kubectl port-forward pod [local_port:] remote_port […[local_port_n:]remote_port_n] [flags] | 将本机的某个端口映射到到pod的端口号, 通常用于测试 |
porxy | kubectl porxy [–port=port] [–www=static-dir] [–www-prefix=prefix] [–api-prefix=prefix] [flags] | 将本机某个端口号映射到api server |
replace | kubectl replace -f filename [flags] | 从配置文件或stdin替换资源对象 |
rolling-update | kubectl rolling-update old_controller_name ([new_controller_name] –image=new_container_image | -f new_controller_spec) [flags] | 对rc进行滚动升级 |
rollout | kubectl rollout subcommand [flags] | 对deployment进行管理, 可用操作包括:history, pause, resume, undo, status |
run | kubectl run name –image=image [–env=”key=value”] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [flags] | 基于一个镜像在kubernetes集群上启动一个deployment |
scale | kubectl scale (-f filename | type name) –replicas=count [–resource-version=version] [–current-replicas=count] [flags] | 扩容, 缩容一个deployment, replicaset, RC或job中pod的数量 |
set | kubectl set subcommand [flags] | 设置资源对象的某个特定信息, 目前仅支持修改容器的镜像 |
taint | kubect taint node name k1=v1: taint_effect_1…kv=vn:taint_effect_n [flags] | 设置node的taint信息, 用于将特定的pod调度到特定的node的操作, 为alpha版本的功能 |
top | kubectl top node | 查看node或pod的资源使用情况, 需要在集群中运行metics server |
uncordon | kubectl uncordon Node | |
version | kubectl version | 打印系统的版本信息 |
3. kubectl参数列表
Kubectl命令行的公共启动参数如下所示:
4. Kubectl 输出格式
kubectl命令可以用多种格式对结果进行显示, 输出的格式通过-o 参数指定:
5. kubectl操作示例
1、根据yaml配置文件一次性创建service和rc
kubectl create -f my-service.yaml -f my-rc.yaml
2、根据
kubectl create -f <directory>
3、查看所有Pod列表
kubectl get pods
4、查看rc和service列表
kubectl get rc,service
5、显示Node的详细信息
kubectl describe nodes <node-name>
6、显示Pod的详细信息
kubectl describe pods/<pod-name>
7、显示由RC管理的Pod信息
kubectl describe pods <rc-name>
8、删除基于pod.yaml文件定义的Pod
kubectl delete -f pod.yaml
9、删除所有包含某个label的Pod和Service
kubectl delete pods,services -l name=<label-name>
10、删除所有Pod
kubectl delete pods --all
11、在Pod的容器里执行date命令,默认使用Pod中的第1个容器执行
kubectl exec <pod-name> date
12、指定Pod中某个容器执行date命令
kubectl exec <pod-name> -c <container-name> date
13、以bash方式登陆到Pod中的某个容器里
kubectl exec -it <pod-name> -c <container-name> /bin/bash
14、查看容器输出到stdout的日志
kubectl logs <pod-name>
15、跟踪查看容器的日志,相当于tail -f命令的结果
kubectl logs -f <pod-name> -c <container-name>
原文始发于微信公众号(程序员故事凌):kubernetes运维指南
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/42926.html