面向 Docker 用户的 kubectl
您可以使用 Kubernetes 命令行工具 kubectl
与 API 服务器交互。如果您熟悉 Docker 命令行工具,则使用 kubectl 非常简单。但是,Docker 命令和 kubectl 命令之间存在一些差异。以下部分显示了一个 Docker 子命令,并描述了等效的 kubectl
命令。
docker run(docker 运行)
要运行 nginx 部署并公开该部署,请参阅 kubectl create deployment(kubectl 创建部署)。
docker
docker run -d --restart=always -e DOMAIN=cluster --name nginx-app -p 80:80 nginx
55c103fa129692154a7652490236fee9be47d70a8dd562281ae7d2f9a339a6db
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55c103fa1296 nginx "nginx -g 'daemon of…" 9 seconds ago Up 9 seconds 0.0.0.0:80->80/tcp nginx-app
kubectl
# start the pod running nginx
kubectl create deployment --image=nginx nginx-app
deployment.apps/nginx-app created
# add env to nginx-app
kubectl set env deployment/nginx-app DOMAIN=cluster
deployment.apps/nginx-app env updated
注意
kubectl
命令会打印创建或修改的资源的类型和名称,然后可以在后续命令中使用这些信息。您可以在创建部署后公开新的服务。# expose a port through with a service
kubectl expose deployment nginx-app --port=80 --name=nginx-http
service "nginx-http" exposed
通过使用 kubectl,您可以创建一个 Deployment(部署) 以确保有 N 个 Pod 正在运行 nginx,其中 N 是规范中声明的副本数量,默认为 1。您还可以创建一个带有与 Pod 标签匹配的选择器的 Service(服务)。有关更多信息,请参阅 使用服务访问集群中的应用程序。
默认情况下,镜像在后台运行,类似于 docker run -d ...
。要在前台运行,请使用 kubectl run
创建 Pod。
kubectl run [-i] [--tty] --attach <name> --image=<image>
与 docker run ...
不同,如果您指定 --attach
,则您将连接 stdin
、stdout
和 stderr
。您无法控制连接哪些流 (docker -a ...
)。要与容器分离,您可以键入转义序列 Ctrl+P,然后键入 Ctrl+Q。
docker ps (docker 进程列表)
要列出当前正在运行的内容,请参阅 kubectl get(kubectl 获取)。
docker
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14636241935f ubuntu:16.04 "echo test" 5 seconds ago Exited (0) 5 seconds ago cocky_fermi
55c103fa1296 nginx "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp nginx-app
kubectl
kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-app-8df569cb7-4gd89 1/1 Running 0 3m
ubuntu 0/1 Completed 0 20s
docker attach(docker 连接)
要连接到已在容器中运行的进程,请参阅 kubectl attach (kubectl 连接)。
docker
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55c103fa1296 nginx "nginx -g 'daemon of…" 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp nginx-app
docker attach 55c103fa1296
...
kubectl
kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app-5jyvm 1/1 Running 0 10m
kubectl attach -it nginx-app-5jyvm
...
要与容器分离,您可以键入转义序列 Ctrl+P,然后键入 Ctrl+Q。
docker exec(docker 执行)
要在容器中执行命令,请参阅 kubectl exec (kubectl 执行)。
docker
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55c103fa1296 nginx "nginx -g 'daemon of…" 6 minutes ago Up 6 minutes 0.0.0.0:80->80/tcp nginx-app
docker exec 55c103fa1296 cat /etc/hostname
55c103fa1296
kubectl
kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-app-5jyvm 1/1 Running 0 10m
kubectl exec nginx-app-5jyvm -- cat /etc/hostname
nginx-app-5jyvm
使用交互式命令。
docker
docker exec -ti 55c103fa1296 /bin/sh
# exit
kubectl
kubectl exec -ti nginx-app-5jyvm -- /bin/sh
# exit
有关更多信息,请参阅 获取运行中容器的 Shell。
docker logs(docker 日志)
要跟踪正在运行的进程的 stdout/stderr,请参阅 kubectl logs (kubectl 日志)。
docker
docker logs -f a9e
192.168.9.1 - - [14/Jul/2015:01:04:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-"
192.168.9.1 - - [14/Jul/2015:01:04:03 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-"
kubectl
kubectl logs -f nginx-app-zibvs
10.240.63.110 - - [14/Jul/2015:01:09:01 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
10.240.63.110 - - [14/Jul/2015:01:09:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
Pod 和容器之间略有不同;默认情况下,如果 Pod 的进程退出,Pod 不会终止。相反,Pod 会重新启动该进程。这类似于 docker run 选项 --restart=always
,但有一个主要区别。在 docker 中,该进程的每次调用的输出都会连接在一起,但对于 Kubernetes,每次调用都是独立的。要查看 Kubernetes 中先前运行的输出,请执行以下操作
kubectl logs --previous nginx-app-zibvs
10.240.63.110 - - [14/Jul/2015:01:09:01 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
10.240.63.110 - - [14/Jul/2015:01:09:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
有关更多信息,请参阅 日志架构。
docker stop 和 docker rm(docker 停止和 docker 删除)
要停止并删除正在运行的进程,请参阅 kubectl delete (kubectl 删除)。
docker
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a9ec34d98787 nginx "nginx -g 'daemon of" 22 hours ago Up 22 hours 0.0.0.0:80->80/tcp, 443/tcp nginx-app
docker stop a9ec34d98787
a9ec34d98787
docker rm a9ec34d98787
a9ec34d98787
kubectl
kubectl get deployment nginx-app
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-app 1/1 1 1 2m
kubectl get po -l app=nginx-app
NAME READY STATUS RESTARTS AGE
nginx-app-2883164633-aklf7 1/1 Running 0 2m
kubectl delete deployment nginx-app
deployment "nginx-app" deleted
kubectl get po -l app=nginx-app
# Return nothing
注意
使用 kubectl 时,您不会直接删除 Pod。您必须先删除拥有该 Pod 的部署。如果您直接删除 Pod,则部署将重新创建该 Pod。docker login (docker 登录)
kubectl 中没有与 docker login
直接对应的命令。如果您有兴趣将 Kubernetes 与私有注册表一起使用,请参阅 使用私有注册表。
docker version (docker 版本)
要获取客户端和服务器的版本,请参阅 kubectl version (kubectl 版本)。
docker
docker version
Client version: 1.7.0
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 0baf609
OS/Arch (client): linux/amd64
Server version: 1.7.0
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 0baf609
OS/Arch (server): linux/amd64
kubectl
kubectl version
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.9+a3d1dfa6f4335", GitCommit:"9b77fed11a9843ce3780f70dd251e92901c43072", GitTreeState:"dirty", BuildDate:"2017-08-29T20:32:58Z", OpenPaasKubernetesVersion:"v1.03.02", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.9+a3d1dfa6f4335", GitCommit:"9b77fed11a9843ce3780f70dd251e92901c43072", GitTreeState:"dirty", BuildDate:"2017-08-29T20:32:58Z", OpenPaasKubernetesVersion:"v1.03.02", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
docker info (docker 信息)
要获取有关环境和配置的各种信息,请参阅 kubectl cluster-info (kubectl 集群信息)。
docker
docker info
Containers: 40
Images: 168
Storage Driver: aufs
Root Dir: /usr/local/google/docker/aufs
Backing Filesystem: extfs
Dirs: 248
Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.13.0-53-generic
Operating System: Ubuntu 14.04.2 LTS
CPUs: 12
Total Memory: 31.32 GiB
Name: k8s-is-fun.mtv.corp.google.com
ID: ADUV:GCYR:B3VJ:HMPO:LNPQ:KD5S:YKFQ:76VN:IANZ:7TFV:ZBF4:BYJO
WARNING: No swap limit support
kubectl
kubectl cluster-info
Kubernetes master is running at https://203.0.113.141
KubeDNS is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/kube-dns/proxy
kubernetes-dashboard is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy
Grafana is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
Heapster is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy
InfluxDB is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy