kubectl 用于运行 Kubernetes 集群命令的管理工具。
kubectl [command] [TYPE] [NAME] [flags]
Operation | Description | Syntax | ||||
annotate | 为一个或多个资源添加注释 | kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | ||
api-versions | 列出支持的API版本。 | kubectl api-versions [flags] | ||||
apply | 对文件或stdin的资源进行配置更改。 | kubectl apply -f FILENAME [flags] | ||||
attach | 连接到一个运行的容器,既可以查看output stream,也可以与容器(stdin)进行交互。 | kubectl attach POD -c CONTAINER [-i] [-t] [flags] | ||||
autoscale | 自动扩容/缩容由replication controller管理的一组pod。 | kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] | ||
cluster-info | 显示有关集群中master和services的终端信息。 | kubectl cluster-info [flags] | ||||
config | 修改kubeconfig文件。有关详细信息,请参阅各个子命令。 | kubectl config SUBCOMMAND [flags] | ||||
create | 从file或stdin创建一个或多个资源。 | kubectl create -f FILENAME [flags] | ||||
delete | 从file,stdin或指定label 选择器,names,resource选择器或resources中删除resources。 | kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags] |
describe | 显示一个或多个resources的详细状态。 | kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] | |
edit | 使用默认编辑器编辑和更新服务器上一个或多个定义的资源。 | kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] | ||
exec | 对pod中的容器执行命令。 | kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]] | ||||
explain | 获取各种资源的文档。例如pod,node,services等 | kubectl explain [--include-extended-apis=true] [--recursive=false] [flags] | ||||
expose | 将 replication controller,service或pod作为一个新的Kubernetes service显示。 | kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP | UDP] [--target-port=number-or-name] [--name=name] [----external-ip=external-ip-of-service] [--type=type] [flags] | |
get | 列出一个或多个资源。 | kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags] |
label | 添加或更新一个或多个资源的flags。 | kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | ||
logs | 在pod中打印容器的日志。 | kubectl logs POD [-c CONTAINER] [--follow] [flags] | ||||
patch | 使用strategic merge 补丁程序更新资源的一个或多个字段。 | kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] | ||
port-forward | 将一个或多个本地端口转发到pod。 | kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] | ||||
proxy | 在Kubernetes API服务器运行代理。 | kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags] | ||||
replace | 从file或stdin替换资源。 | kubectl replace -f FILENAME | ||||
rolling-update | 通过逐步替换指定的replication controller及其pod来执行滚动更新。 | kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags] | |||
run | 在集群上运行指定的镜像。 | kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags] | ||||
scale | 更新指定replication controller的大小。 | kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] | ||
stop | 已弃用 | kubectl stop | ||||
version | 显示客户端和服务器上运行的Kubernetes版本。 | kubectl version [--client] [flags] |
( 1 )简单的查询操作
查询节点详细信息
[root@master ~]# kubectl describe node node1
Name: node1
Roles:
Labels: beta.kubernetes.io/arch=amd64
... ...
查看版本
[root@master ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"bb9ffb1654d4a729bb4cec18ff088eacc153c239", GitTreeState:"clean", BuildDate:"2018-08-07T23:17:28Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"clean", BuildDate:"2018-07-17T18:43:26Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
[root@master ~]# kubectl versio
查看集群信息
[root@master ~]# kubectl cluster-info
Kubernetes master is running at https://192.168.10.103:6443
KubeDNS is running at https://192.168.10.103:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
创建并运行一个或多个容器镜像。
$ kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]
( 1 )运行一个 nginx 的 pod
[root@master ~]# kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1
deployment.apps/nginx-deploy created
( 2 )在 master 上查询验证
[root@master ~]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deploy 1 1 1 1 44s
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deploy-5b595999-6kw54 1/1 Running 0 51s
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-deploy-5b595999-6kw54 1/1 Running 0 1m 10.244.2.2 node2
( 3 )在部署的 node 节点上查询
[root@node2 ~]# ifconfig |head -2
cni0: flags=4163 mtu 1450
inet 10.244.2.1 netmask 255.255.255.0 broadcast 0.0.0.0
( 4 )访问 pod 内的 nginx 服务
[root@node1 ~]# curl 10.244.2.2
$ kubectl delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])
删除刚才的 pod ,立刻会生成一个新的 pod ,因为此 pod 是控制器管理的
[root@master ~]# kubectl delete pods nginx-deploy-5b595999-6kw54
pod "nginx-deploy-5b595999-6kw54" deleted
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deploy-5b595999-jf5gm 0/1 ContainerCreating 0 16s
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-deploy-5b595999-jf5gm 1/1 Running 0 47s 10.244.1.2 node1
$ 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]
( 1 )将 nginx-deploy 控制器中相关的 Pod 资源创建一个名为 nginx 的服务
[root@master ~]# kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP
service/nginx exposed
[root@master ~]# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 16h
nginx ClusterIP 10.96.212.79 80/TCP 9s
[root@master ~]# kubectl get svc #简写
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 16h
nginx ClusterIP 10.96.212.79 80/TCP 13s
( 2 )验证,在集群内部节点访问服务
[root@master ~]# curl 10.96.212.79
( 3 )删除 pod ,立即生产新的 pod ,但是 service 还是不变,继续提供服务,只是指定到新的 pod
---删除pod
[root@master ~]# kubectl delete pods nginx-deploy-5b595999-jf5gm
---立即生产新的pod,service继续提供服务
[root@master ~]# curl 10.96.212.79
---指定到新的pod
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-deploy-5b595999-2z769 1/1 Running 0 29m 10.244.1.2 node2
[root@master ~]# kubectl describe svc nginx
Name: nginx
Namespace: default
Labels: run=nginx-deploy
Annotations:
Selector: run=nginx-deploy
Type: ClusterIP
IP: 10.96.212.79
Port: 80/TCP
TargetPort: 80/TCP
Endpoints: 10.244.1.2:80
Session Affinity: None
Events:
$ kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
( 1 )先运行名为 myapp 标签选择器的 2 个 pod ,镜像是我用于测试演示自己构建的
[root@master ~]# kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=2
deployment.apps/myapp created
[root@master ~]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
myapp 2 2 2 2 6s
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
myapp-848b5b879b-58jcr 1/1 Running 0 11s 10.244.2.53 node2
myapp-848b5b879b-wpx9v 1/1 Running 0 11s 10.244.1.56 node1
( 2 )创建 service ,并验证
[root@master ~]# kubectl expose deployment myapp --name=myapp --port=80
service/myapp exposed
[root@master ~]# kubectl get svc myapp
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myapp ClusterIP 10.104.205.158 80/TCP 8s
[root@master ~]# curl 10.104.205.158
Hello MyApp | Version: v1 | Pod Name
---因为有2个pod,所以是随机调度
[root@master ~]# curl 10.104.205.158/hostname.html
myapp-848b5b879b-58jcr
[root@master ~]# curl 10.104.205.158/hostname.html
myapp-848b5b879b-wpx9v
( 3 )使用 scale ,将 pod 扩容到 5 个
[root@master ~]# kubectl scale --replicas=5 deployment myapp
deployment.extensions/myapp scaled
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-848b5b879b-2sj8n 1/1 Running 0 8s
myapp-848b5b879b-58jcr 1/1 Running 0 4m
myapp-848b5b879b-hp7zs 1/1 Running 0 8s
myapp-848b5b879b-sfq8r 1/1 Running 0 8s
myapp-848b5b879b-wpx9v 1/1 Running 0 4m
( 4 )使用 scale ,将 pod 缩容到 3 个
[root@master ~]# kubectl scale --replicas=3 deployment myapp
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-848b5b879b-2sj8n 1/1 Running 0 1m
myapp-848b5b879b-58jcr 1/1 Running 0 6m
myapp-848b5b879b-wpx9v 1/1 Running 0 6m
( 1 ) set
子命令: image 、 resources 、 selector 、 subject
( 2 ) set image
$ kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N
将镜像版本从 v1 升级到 v2 版
[root@master ~]# kubectl set image deployment myapp myapp=ikubernetes/myapp:v2
deployment.extensions/myapp image updated
[root@master ~]# kubectl rollout status deployment myapp #动态显示版本升级过程
---因为版本升级,所以pod都是新建的,名字都改变了
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
client 1/1 Running 0 3h
myapp-74c94dcb8c-d5fgk 1/1 Running 0 55s
myapp-74c94dcb8c-f2ntn 1/1 Running 0 21s
myapp-74c94dcb8c-ht9v7 1/1 Running 0 38s
---验证,版本升级成功
[root@master ~]# curl 10.104.205.158
Hello MyApp | Version: v2 | Pod Name
( 1 ) rollout
子命令: history (查看历史版本) 、 pause (暂停资源) 、 resume (恢复暂停资源) 、 status (查看资源状态) 、 undo (回滚版本)
( 2 ) rollout undo
回滚 pod 到之前的版本。
$ kubectl rollout undo (TYPE NAME | TYPE/NAME) [flags]
[root@master ~]# kubectl rollout undo deployment myapp
deployment.extensions/myapp
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-848b5b879b-gg9lr 1/1 Running 0 15s
myapp-848b5b879b-km4t6 1/1 Running 0 16s
myapp-848b5b879b-nq98c 1/1 Running 0 17s
---验证,回滚成功
[root@master ~]# curl 10.104.205.158
Hello MyApp | Version: v1 | Pod Name
$ kubectl edit (RESOURCE/NAME | -f FILENAME)
( 1 )修改 service ,将类型 type: ClusterIP ,修改为 type: NodePort ;修改后,可以在集群外访问到 pod 中的服务
[root@master ~]# kubectl edit svc myapp
... ...
spec:
... ...
type: NodePort
... ...
service/myapp edited
[root@master ~]# kubectl get svc myapp
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myapp NodePort 10.104.205.158 80:31599/TCP 23m
( 2 )在集群外的主机上访问了
更新(增加、修改或删除)资源上的 label (标签)。
$ kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
( 1 )运行一个标签为 app=nginx 的 pod
[root@master ~]# kubectl run nginx --image=nginx:1.14-alpine --replicas=1 --labels="app=nginx"
deployment.apps/nginx created
( 2 ) -l 指定标签,实现标签过滤
[root@master ~]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
myapp-848b5b879b-5blnx 1/1 Running 0 4m pod-template-hash=4046164356,run=myapp
myapp-848b5b879b-6hgpp 1/1 Running 0 4m pod-template-hash=4046164356,run=myapp
myapp-848b5b879b-hzj5g 1/1 Running 0 4m pod-template-hash=4046164356,run=myapp
nginx-86d5b5ddb6-rwv2z 1/1 Running 0 53s app=nginx,pod-template-hash=4281618862
[root@master ~]# kubectl get pods --show-labels -l app
NAME READY STATUS RESTARTS AGE LABELS
nginx-86d5b5ddb6-rwv2z 1/1 Running 0 1m app=nginx,pod-template-hash=4281618862
( 3 )打一个新的标签
[root@master ~]# kubectl label pods nginx-86d5b5ddb6-rwv2z release=canary
pod/nginx-86d5b5ddb6-rwv2z labeled
[root@master ~]# kubectl get pods --show-labels -l release
NAME READY STATUS RESTARTS AGE LABELS
nginx-86d5b5ddb6-rwv2z 1/1 Running 0 4m app=nginx,pod-template-hash=4281618862,release=canary
( 4 )修改标签
[root@master ~]# kubectl label pods nginx-86d5b5ddb6-rwv2z release=stable --overwrite
pod/nginx-86d5b5ddb6-rwv2z labeled
[root@master ~]# kubectl get pods --show-labels -l release
NAME READY STATUS RESTARTS AGE LABELS
nginx-86d5b5ddb6-rwv2z 1/1 Running 0 5m app=nginx,pod-template-hash=4281618862,release=stable
( 1 )等值关系: = , == , !=
[root@master ~]# kubectl get pods -l release --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-86d5b5ddb6-rwv2z 1/1 Running 0 6m app=nginx,pod-template-hash=4281618862,release=stable
[root@master ~]# kubectl get pods -l release=stable --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-86d5b5ddb6-rwv2z 1/1 Running 0 6m app=nginx,pod-template-hash=4281618862,release=stable
[root@master ~]# kubectl get pods -l release!=stable --show-labels
NAME READY STATUS RESTARTS AGE LABELS
myapp-848b5b879b-5blnx 1/1 Running 0 10m pod-template-hash=4046164356,run=myapp
myapp-848b5b879b-6hgpp 1/1 Running 0 10m pod-template-hash=4046164356,run=myapp
myapp-848b5b879b-hzj5g 1/1 Running 0 10m pod-template-hash=4046164356,run=myapp
( 2 )集合关系
[root@master ~]# kubectl get pods -l "release in (stable,beta,alpha)"
NAME READY STATUS RESTARTS AGE
nginx-86d5b5ddb6-rwv2z 1/1 Running 0 9m
[root@master ~]# kubectl get pods -l "release notin (stable,beta,alpha)"
NAME READY STATUS RESTARTS AGE
myapp-848b5b879b-5blnx 1/1 Running 0 12m
myapp-848b5b879b-6hgpp 1/1 Running 0 12m
myapp-848b5b879b-hzj5g 1/1 Running 0 12m
作者:along阿龙
出处:http://www.cnblogs.com/along21/
简介:每天都在进步,每周都在总结,你的一个点赞,一句留言,就可以让博主开心一笑,充满动力!
版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞2
添加新评论0 条评论