kubectl应用
kubectl用法概述
kubectl命令语法
# kubectl [command] [TYPE] [NAME] [flags]
其中,command、TYPE、NAME、flags的含义如下。
(1)command:子命令,用于操作Kubernetes集群资源对象的命令,例如create、delete、describe、get、apply等。
(2)TYPE:资源对象的类型,区分大小写,能以单数形式、复数形式或者简写形式表示。例如以下3种TYPE是等价的。
# kubectl get pod pod1
# kubectl get pods pod1
# kubectl get po pod1
(3)NAME:资源对象的名称,区分大小写。如果不指定名称,则系统将返回属于TYPE的全部对象的列表,例如$ kubectl get pods将返回所有Pod的列表。
(4)flags:kubectl子命令的可选参数,例如使用“-s”指定apiserver的URL地址而不用默认值。
资源对象的名称 | 缩写 |
---|---|
cluster | |
componentstatuses | cs |
configmaps | cm |
daemonsets | ds |
deployments | deploy |
endpoints | ep |
events | ev |
horizontalpodautoscalers | hpa |
ingresses | ing |
Jobs | |
limitranges | limits |
nodes | no |
namespaces | ns |
networkpolicies | |
statefulsets | |
persistentvolumeclaims | pvc |
persistentvolumes | pv |
pods | po |
podsecuritypolicies | psp |
podtemplate | |
replicasets | rs |
replicationcontrollers | rc |
resourcequotas | quota |
cronjob | |
secrets | |
serviceaccounts | |
services | svc |
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
kubectl输出格式
kubectl 命令可以用多种格式对结果进行显示,输出的格式通过-o参数指定:
# kubectl [command] [TYPE] [NAME] -o=<output_format>
根据不同子命令的输出结果,可选的输出格式如下表所示
输出格式 | 说明 |
---|---|
-o=custom-columns= | 根据自定义列名进行输出,以逗号分隔 |
-o=custom-colimns-file= | 从文件中获取自定义列名进行输出 |
-o=json | 以JSON格式显示结果 |
-o=jsonpath= | 输出jsonpath表达式定义的字段信息 |
-o=jsonpath-file= | 输出jsonpath表达式定义的字段信息,来源于文件 |
-o=name | 仅输出资源对象的名称 |
-o=wide | 输出额外信息。对于Pod,将输出Pod所在的Node名 |
-o=yaml | 以yaml格式显示结果 |
常用的输出格式如下:
(1)显示Pod更多信息
# kubectl get pod <pod-name> -o wide
(2)以yaml格式显示Pod的详细信息
# kubectl get pod <pod-name> -o yaml
(3)以自定义列名显示Pod的信息
# kubectl get pod <pod-name> -o=custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
(4)基于文件的自定义列名输出
# kubectl get pods <pod-name> -o=custom-columns-file=template.txt
template.txt文件的内容为
NAME RSRC
metadata.name metadata.resourceVersion
输出结果
# kubectl get pods chaosfomoney-deployment-64ccd59bdc-h72gh -o=custom-columns-file=template.txt
NAME RSRC
chaosfomoney-deployment-64ccd59bdc-h72gh 101119
将输出结果按某个字段排序,通过–sort-by参数以jsonpath表达式进行指定
kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
例如按照名字进行排序
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
apache-594d8494b4-s6dfd 0/1 ImagePullBackOff 0 9m1s
nginx-6799fc88d8-nbgc2 1/1 Running 0 35h
# kubectl get pods --sort-by=.metadata.name
NAME READY STATUS RESTARTS AGE
chaosfomoney-deployment-64ccd59bdc-h72gh 1/1 Running 0 1d
chaosfomoney-deployment-64ccd59bdc-spnpj 1/1 Running 0 1d
chaosfomoney-deployment-64ccd59bdc-xhnjr 1/1 Running 0 1d
kubectl操作示例
查看所有node详细信息
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 36h v1.20.0
node1 Ready <none> 35h v1.20.0
node2 Ready <none> 35h v1.20.0
查看 运行详细信息
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
apache-594d8494b4-s6dfd 0/1 ImagePullBackOff 0 19m 10.244.1.3 node1 <none> <none>
nginx-6799fc88d8-nbgc2 1/1 Running 0 35h 10.244.1.2 node1 <none> <none>
创建一个deployment类型的资源
[root@master ~]# kubectl create deployment deploy-web --image=itlang11:v0.1 --replicas=3
deployment.apps/deploy-web created
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
apache-594d8494b4-s6dfd 0/1 ImagePullBackOff 0 26m
deploy-web-79df5694b9-2sh6d 0/1 ImagePullBackOff 0 64s
deploy-web-79df5694b9-5lvqk 0/1 ImagePullBackOff 0 64s
deploy-web-79df5694b9-bqxpb 0/1 ContainerCreating 0 64s
删除
[root@master ~]# kubectl delete deployment deploy-web
deployment.apps "deploy-web" deleted
正在删除的显示
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
apache-594d8494b4-s6dfd 0/1 ImagePullBackOff 0 29m
deploy-web-79df5694b9-2sh6d 0/1 Terminating 0 3m25s
deploy-web-79df5694b9-5lvqk 0/1 Terminating 0 3m25s
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
apache-594d8494b4-s6dfd 0/1 ImagePullBackOff 0 29m
nginx-6799fc88d8-nbgc2 1/1 Running 0 35h
实时监控拉取镜像的状态
[root@master ~]# kubectl get pods -w
暴露一个项目。让外部可以访问
[root@master ~]# kubectl expose deployment deploy-web --port=80 --protocol=TCP
service/deploy-web exposed
[root@master ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
deploy-web ClusterIP 10.110.221.73 <none> 80/TCP 12s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 36h
nginx NodePort 10.110.131.88 <none> 80:32287/TCP 35h
// 查看所有的资源信息
# kubectl get all
# kubectl get --all-namespaces
// 查看pod列表
# kubectl get pod
// 显示pod节点的标签信息
# kubectl get pod --show-labels
// 根据指定标签匹配到具体的pod
# kubectl get pods -l app=example
// 查看node节点列表
# kubectl get node
// 显示node节点的标签信息
# kubectl get node --show-labels
// 查看pod详细信息,也就是可以查看pod具体运行在哪个节点上(ip地址信息)
# kubectl get pod -o wide
// 查看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息
# kubectl get svc
# kubectl get svc -n kube-system
// 查看命名空间
# kubectl get ns
# kubectl get namespaces
// 查看所有pod所属的命名空间
# kubectl get pod --all-namespaces
// 查看所有pod所属的命名空间并且查看都在哪些节点上运行
# kubectl get pod --all-namespaces -o wide
// 查看目前所有的replica set,显示了所有的pod的副本数,以及他们的可用数量以及状态等信息
# kubectl get rs
// 查看已经部署了的所有应用,可以看到容器,以及容器所用的镜像,标签等信息
# kubectl get deploy -o wide
# kubectl get deployments -o wide
run命令
语法:
run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]
// 示例,运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例
# kubectl run nginx --replicas=3 --labels="app=example" --image=nginx:1.10 --port=80
// 示例,运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例,并绑定到k8s-node1上
# kubectl run nginx --image=nginx:1.10 --replicas=3 --labels="app=example" --port=80 --overrides='{"apiVersion":"apps/v1","spec":{"template":{"spec":{"nodeSelector":{"kubernetes.io/hostname":"k8s-node1"}}}}}'
set命令
配置应用的一些特定资源,也可以修改应用已有的资源
可以使用kubectl set --help
查看,它的子命令,env
,image
,resources
,selector
,serviceaccount
, subject
。
语法:
resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]
kubectl set resources 命令
这个命令用于设置资源的一些范围限制。
资源对象中的Pod可以指定计算资源需求(CPU-单位m、内存-单位Mi),即使用的最小资源请求(Requests),限制(Limits)的最大资源需求,Pod将保证使用在设置的资源数量范围。
对于每个Pod资源,如果指定了Limits(限制)值,并省略了Requests(请求),则Requests默认为Limits的值。
// 将deployment的nginx容器cpu限制为“200m”,将内存设置为“512Mi”
# kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi
// 设置所有nginx容器中 Requests和Limits
# kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi
// 删除nginx中容器的计算资源值
# kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0
kubectl set selector 命令
设置资源的 selector(选择器)。如果在调用"set selector"命令之前已经存在选择器,则新创建的选择器将覆盖原来的选择器。
selector必须以字母或数字开头,最多包含63个字符,可使用:字母、数字、连字符" - " 、点".“和下划线” _ "。如果指定了–resource-version,则更新将使用此资源版本,否则将使用现有的资源版本。
注意:
目前的selector
命令 只能用于 service
对象
语法:
selector (-f FILENAME | TYPE NAME) EXPRESSIONS [--resource-version=version]
kubectl set image 命令
用于更新现有资源的容器镜像。
可用资源对象包括:pod (po)
、replicationcontroller (rc)
、deployment (deploy)
、daemonset (ds)
、job
、replicaset (rs)
语法:
image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N
示例:
// 将deployment中的nginx容器镜像设置为“nginx:1.9.1”
# kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1
// 所有deployment和rc的nginx容器镜像更新为“nginx:1.9.1”
# kubectl set image deployments,rc nginx=nginx:1.9.1 --all
// 将daemonset abc的所有容器镜像更新为“nginx:1.9.1”
# kubectl set image daemonset abc *=nginx:1.9.1
// 从本地文件中更新nginx容器镜像
# kubectl set image -f path/to/file.yaml nginx=nginx:1.9.1 --local -o yaml
explain 命令:用于显示资源文档信息
# kubectl explain rs
edit 命令: 用于编辑资源信息
// 编辑Deployment nginx的一些信息
# kubectl edit deployment nginx
// 编辑service类型的nginx的一些信息
# kubectl edit service/nginx