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
componentstatusescs
configmapscm
daemonsetsds
deploymentsdeploy
endpointsep
eventsev
horizontalpodautoscalershpa
ingressesing
Jobs
limitrangeslimits
nodesno
namespacesns
networkpolicies
statefulsets
persistentvolumeclaimspvc
persistentvolumespv
podspo
podsecuritypoliciespsp
podtemplate
replicasetsrs
replicationcontrollersrc
resourcequotasquota
cronjob
secrets
serviceaccounts
servicessvc
storageclassessc
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
查看,它的子命令,envimageresourcesselectorserviceaccountsubject

语法:

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)jobreplicaset (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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值