Kubernetes之kubectl常⽤命令
Kubernetes之kubectl常⽤命令
删除所有po,svc:删除所有SVC和po
kubectl delete po,svc,statefulset,pv,pvc --all
kubernetes通过kube-apiserver作为整个集管理的⼊⼝。Apiserver是整个集的主管理节点,⽤户通过Apiserver配置和组织集,同时集中各个节点同etcd存储的交互也是通过Apiserver进⾏交互。Apiserver实现了⼀套RESTfull的接⼝,⽤户可以直接使⽤API同Apiserver交互。另外官⽅还提供了⼀个客户端kubectl随⼯具集打包,⽤于可直接通过kubectl以命令⾏的⽅式同集互。
1. Help
类似于所有的命令⾏⼯具⼯具,kubectl也可以直接执⾏或 | 可获得命令的帮助信息。如下图所⽰,kubectl使⽤⽅式为:
Usage:
kubectl[flags]
kubectl[commond]
另外所有的命令选项都可以通过执⾏ --help获得特定命令的帮助信息。
2. get
get命令⽤于获取集的⼀个或⼀些resource信息。使⽤--help查看详细信息。kubectl的帮助信息、⽰例相当详细,⽽且简单易懂。建议⼤家习惯使⽤帮助信息。kubectl可以列出集所有resource的详细。resource包括集节点、运⾏的pod,ReplicationController,service等。
Usage:
kubectl get [(-o|--output=)json|yaml|wide|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...] (TYPE [NAME |-l label]| TYPE/NAME ...) [flags] [flags]
1)例如获取pod信息,可以直接使⽤"kubectl get po“获取当前运⾏的所有pods的信息,或使⽤”kubectl get po -o wide“获取pod运⾏在哪个节点上的信息。注:集中可以创建多个namespace,未显⽰的指定namespace的情况下,所有操作都是针对default namespace。如下图所⽰列出了default 和kube-system的pods:
2)获取namespace信息
# kubectl get namespace
3)类似可以使⽤"kubectl get rc”, “kubectl get svc”, “kubectl get nodes”等获取其他resource信息。
4)获取⼀些更具体的信息,可以通过使⽤选项“-o”。如:
(1)kubectl get po -o yaml 以yawl格式输出pod的详细信息。
(2)kubectl get po -o json 以jison格式输出pod的详细信息。
(3)另外还可以使⽤”-o=custom-columns=“定义直接获取指定内容的值。如前⾯使⽤json和ymal格式的输出中,metadata.labels.app的值可以使⽤如下命令获取。
kubectlgetpo rc-nginx-2-btv4j -o=custom-columns=LABELS:.metadata.labels.app
其中LABELS为显⽰的列标题,”.metadata.labels.app”为查询的域名
(4)其他资源也可以使⽤类似的⽅式。
3. describe
describe类似于get,同样⽤于获取resource的相关信息。不同的是,get获得的是更详细的resource个性的详细信息,describe获得的是resource集相关的信息。describe命令同get类似,但是describe不⽀持-o选项,对于同⼀类型resource,describe输出的信息格式,内容域相同。
注:如果发现是查询某个resource的信息,使⽤get命令能够获取更加详尽的信息。但是如果想要查询某个resource的状态,如某个pod并不是在running状态,这时需要获取更详尽的状态信息时,就应该使⽤describe命令。
kubectldescribepo rc-nginx-2-btv4j
4. create
kubectl命令⽤于根据⽂件或输⼊创建集resource。如果已经定义了相应resource的yaml或son⽂件,直接kubectl create -f filename即可创建⽂件内定义的resource。也可以直接只⽤⼦命令[namespace/secret/configmap/serviceaccount]等直接创建相应的resource。从追踪和维护的⾓度出发,建议使⽤json或yaml的⽅式定义资源。
如,前⾯get中获取的两个nginx pod的replication controller⽂件内容如下。⽂件名为:rc-nginx.yaml
apiVersion: v1
kind: ReplicationController
metadata:nginx停止命令
name: rc-nginx-2
spec:
replicas:2
template:
metadata:
labels:
app: nginx-2
spec:
containers:
-name: nginx-2
image: /nginx
ports:
- containerPort:80
直接使⽤create则可以基于rc-nginx.yaml⽂件创建出ReplicationController(rc),rc会创建两个副本:
kubectlcreate-frc-nginx.yaml
创建后,使⽤“kubectl get rc”可以看到⼀个名为rc-nginx-2的ReplicationController将被创建,同时“kubectl get po”的结果中会多出两个前缀为“rc-nginx-2-”的pod。关于kubernetes集中resource,pod, ReplicationController…等后续会新开博⽂详细介绍。
5. replace
replace命令⽤于对已有资源进⾏更新、替换。如前⾯create中创建的nginx,当我们需要更新resource的⼀些属性的时候,如果修改副本数量,增加、修改label,更改image版本,修改端⼝等。都可以直接修改原yaml⽂件,然后执⾏replace命令。
注:名字不能被更更新。另外,如果是更新label,原有标签的pod将会与更新label后的rc断开联系,有新label的rc将会创建指定副本数的新的pod,但是默认并不会删除原来的pod。所以此时如果使⽤get po将会发现pod数翻倍,进⼀步check会发现原来的pod已经不会被新rc控制,此处只介绍命令不详谈此问题,好奇者可⾃⾏实验。
kubectlreplace-frc-nginx.yaml
6. patch
如果⼀个容器已经在运⾏,这时需要对⼀些容器属性进⾏修改,⼜不想删除容器,或不⽅便通过replace的⽅式进⾏更新。kubernetes还提供了⼀种在容器运⾏时,直接对容器进⾏修改的⽅式,就是patch命令。
如前⾯创建pod的label是app=nginx-2,如果在运⾏过程中,需要把其label改为app=nginx-3,这patch命令如下:
kubectl patch pod rc-nginx-2-kpiqt -p '{"metadata":{"labels":{"app":"nginx-3"}}}'
7. edit
edit提供了另⼀种更新resource源的操作,通过edit能够灵活的在⼀个common的resource基础上,发展出更过的significant resource。例如,使⽤edit直接更新前⾯创建的pod的命令为:
kubectl edit po rc-nginx-btv4j
上⾯命令的效果等效于:
kubectlgetpo rc-nginx-btv4j -o yaml >> /tmp/nginx-tmp.yaml
vim /tmp/nginx-tmp.yaml
/*dosome changes here */
kubectlreplace-f /tmp/nginx-tmp.yaml
8. Delete
根据resource名或label删除resource。
kubectldelete-f rc-nginx.yaml
kubectldeletepo rc-nginx-btv4j
kubectldeletepo -lapp=nginx-2
9. apply
apply命令提供了⽐patch,edit等更严格的更新resource的⽅式。通过apply,⽤户可以将resource的configuration使⽤source control的⽅式维护在版本库中。每次有更新时,将配置⽂件push到server,然后使⽤kubectl apply将更新应⽤到resource。kubernetes会在引⽤更新前将当前配置⽂件中的配置同已经应⽤的配置做⽐较,并只更新更改的部分,⽽不会主动更改任何⽤户未指定的部分。
apply命令的使⽤⽅式同replace相同,不同的是,apply不会删除原有resource,然后创建新的。apply直接在原有resource的基础上进⾏更新。同时kubectl apply还会resource中添加⼀条注释,标记当前的apply。类似于git操作。
10. logs
logs命令⽤于显⽰pod运⾏中,容器内程序输出到标准输出的内容。跟docker的logs命令类似。如果要获得tail -f 的⽅式,也可以使⽤-f选项。
kubectl logs rc-nginx-2-kpiqt
11. rolling-update
rolling-update是⼀个⾮常重要的命令,对于已经部署并且正在运⾏的业务,rolling-update提供了不中断业务的更新⽅式。rolling-update每次起⼀个新的pod,等新pod完全起来后删除⼀个旧的pod,然后再起⼀个新的pod替换旧的pod,直到替换掉所有的pod。
rolling-update需要确保新的版本有不同的name,Version和label,否则会报错 。
kubectlrolling-updaterc-nginx-2-frc-nginx.yaml
如果在升级过程中,发现有问题还可以中途停⽌update,并回滚到前⾯版本
kubectl rolling-updaterc-nginx-2—rollback
rolling-update还有很多其他选项提供丰富的功能,如—update-period指定间隔周期,使⽤时可以使⽤-h查看help信息
12. scale
scale⽤于程序在负载加重或缩⼩时副本进⾏扩容或缩⼩,如前⾯创建的nginx有两个副本,可以轻松的使⽤scale命令对副本数进⾏扩展或缩⼩。
扩展副本数到4:
kubectl scale rc rc-nginx-3 —replicas=4
重新缩减副本数到2:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论