1、kubectl概述
kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。运行kubectl命令的语法如下所示:
$ kubectl [command] [TYPE] [NAME] [flags]
这里的command,TYPE、NAME和flags为:
- comand:指定要对资源执行的操作,例如create、get、describe和delete
- TYPE:指定资源类型,资源类型是大小学敏感的,开发者能够以单数、复数和缩略的形式。例如:
$ kubectl get pod pod1 $ kubectl get pods pod1 $ kubectl get po pod1
- NAME:指定资源的名称,名称也大小写敏感的。如果省略名称,则会显示所有的资源,例如:
$ kubectl get pods
- flags:指定可选的参数。例如,可以使用-s或者–server参数指定Kubernetes API server的地址和端口。
另外,可以通过运行kubectl help命令获取更多的信息。
1.1 kubectl的操作
kubectl作为kubernetes的命令行工具,主要的职责就是对集群中的资源的对象进行操作,这些操作包括对资源对象的创建、删除和查看等。下表中显示了kubectl支持的所有操作,以及这些操作的语法和描述信息:
操作 | 语法 | 描述 |
---|---|---|
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 | kubectl api-versions [flags] | 列出可用的API版本 |
apply | kubectl apply -f FILENAME [flags] | 将来自于文件或stdin的配置变更应用到主要对象中。 |
attach | kubectl attach POD -c CONTAINER [-i] [-t] [flags] | 连接到正在运行的容器上,以查看输出流或与容器交互(stdin)。 |
autoscale | kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [–min=MINPODS] –max=MAXPODS [–cpu-percent=CPU] [flags] | 自动扩宿容由副本控制器管理的Pod。 |
cluster-info | kubectl cluster-info [flags] | 显示群集中的主节点和服务的的端点信息。 |
config | kubectl config SUBCOMMAND [flags] | 修改kubeconfig文件。 |
create | kubectl create -f FILENAME [flags] | 从文件或stdin中创建一个或多个资源对象。 |
delete | kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | –all]) [flags] | 删除资源对象。 |
describe | kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] | 显示一个或者多个资源对象的详细信息。 |
edit | kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] | 通过默认编辑器编辑和更新服务器上的一个或多个资源对象。 |
exec | kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [– COMMAND [args…]] | 在Pod的容器中执行一个命令。 |
explain | kubectl explain [–include-extended-apis=true] [–recursive=false] [flags] | 获取Pod、Node和服务等资源对象的文档。 |
expose | 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] | 为副本控制器、服务或Pod等暴露一个新的服务。 |
get | kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [–watch] [–sort-by=FIELD] [[-o | –output]=OUTPUT_FORMAT] [flags] | 列出一个或多个资源。
|
label | kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [–overwrite] [–all] [–resource-version=version] [flags] | 添加或更新一个或者多个资源对象的标签。 |
logs | kubectl logs POD [-c CONTAINER] [–follow] [flags] | 显示Pod中一个容器的日志。 |
patch | kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) –patch PATCH [flags] | 使用策略合并补丁过程更新资源对象中的一个或多个字段。 |
port-forward | kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT […[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] | 将一个或多个本地端口转发到Pod。 |
proxy | kubectl proxy [–port=PORT] [–www=static-dir] [–www-prefix=prefix] [–api-prefix=prefix] [flags] | 为kubernetes API服务器运行一个代理。 |
replace | kubectl replace -f FILENAME | 从文件或stdin中替换资源对象。 |
rolling-update | kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] –image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags] | 通过逐步替换指定的副本控制器和Pod来执行滚动更新。 |
run | kubectl run NAME –image=image [–env=”key=value”] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [flags] | 在集群上运行一个指定的镜像。 |
scale | kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) –replicas=COUNT [–resource-version=version] [–current-replicas=count] [flags] | 扩宿容副本集的数量。 |
version | kubectl version [–client] [flags] | 显示运行在客户端和服务器端的Kubernetes版本。 |
1.2 资源对象类型
在kubernetes中,提供了很多的资源对象,开发和运维人员可以通过这些对象对容器进行编排。在下表中,是kubectl所支持的资源对象类型,以及它们的缩略别名:
资源对象类型 | 缩略别名 |
---|---|
apiservices | |
certificatesigningrequests | csr |
clusters | |
clusterrolebindings | |
clusterroles | |
componentstatuses | cs |
configmaps | cm |
controllerrevisions | |
cronjobs | |
customresourcedefinition | crd |
daemonsets | ds |
deployments | deploy |
endpoints | ep |
events | ev |
horizontalpodautoscalers | hpa |
ingresses | ing |
jobs | |
limitranges | limits |
namespaces | ns |
networkpolicies | netpol |
nodes | no |
persistentvolumeclaims | pvc |
persistentvolumes | pv |
poddisruptionbudget | pdb |
podpreset | |
pods | po |
podsecuritypolicies | psp |
podtemplates | |
replicasets | rs |
replicationcontrollers | rc |
resourcequotas | quota |
rolebindings | |
roles | |
secrets | |
serviceaccounts | sa |
services | svc |
statefulsets | |
storageclasses |
1.3 输出选项
kubectl默认的输出格式为纯文本格式,可以通过-o或者–output字段指定命令的输出格式。
$ kubectl [command] [TYPE] [NAME] -o=
输出格式 | 描述 |
---|---|
-o=custom-columns= | 使用以逗号分隔的自定义列打印表格。 |
-o=custom-columns-file= | 使用文件中自定义列打印表格。 |
-o=json | 输出JSON格式的API对象 |
-o=jsonpath= | 打印在jsonpath表达式中定义的字段 |
-o=jsonpath-file= | 打印文件中以jsonpath表达式定义的字段 |
-o=name | 仅仅输出资源对象的名称。 |
-o=wide | 输出带有附加信息的纯文本格式。对于Pod对象,将会包含Node名称。 |
-o=yaml | 输出YAML格式的API对象 |
2、kubectl安装部署
2.1 安装kubectl
1)下载kubectl
此处是在windows下安装,因此下载kubectl.exe,下载地址:https://storage.googleapis.com/kubernetes-release/release/v1.9.0/bin/windows/amd64/kubectl.exe。
并将kubectl.exe所在的地址添加至Windows的环境变量的Path中。
其他操作系统下安装kubectl,请参考:https://kubernetes.io/docs/tasks/tools/install-kubectl/#tabset-2
2)配置kubeconfig文件
RKE会在配置文件所在的目录下部署一个本地文件,该文件中包含kube配置信息以连接到新生成的群集。
默认情况下,kube配置文件被称为.kube_config_cluster.yml。将这个文件复制到你的本地~/.kube/config,就可以在本地使用kubectl了。
需要注意的是,部署的本地kube配置名称是和集群配置文件相关的。例如,如果您使用名为mycluster.yml的配置文件,则本地kube配置将被命名为.kube_config_mycluster.yml。
2.2 验证
执行kubectl命令,获取nodes的信息:
$ kubectl get nodes
3、kubectl的常用命令示例
在此部分将提供常用命令的示例,已帮助您快速了解和试用kubectl。
1)kubectl create命令
此命令通过文件或者stdin创建一个资源对象,假设这里存在一个nginx部署的YAML配置文件,可以通过执行下面的命令创建部署对象。
$ kubectl create -f nginx-deployment.yaml
nginx部署的YAML配置文件的示例代码如下:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: nginx spec: replicas: 10 selector: matchLabels: app: nginx revisionHistoryLimit: 2 template: metadata: labels: app: nginx spec: imagePullSecrets: - name: dc-hspfd containers: # 应用的镜像 - image: nginx name: nginx imagePullPolicy: IfNotPresent # 应用的内部端口 ports: - containerPort: 80 name: nginx80 # 持久化挂接位置,在docker中 volumeMounts: - mountPath: /usr/share/nginx/html name: nginx-data - mountPath: /etc/nginx name: nginx-conf volumes: # 宿主机上的目录 - name: nginx-data nfs: path: /k8s-nfs/nginx server: 192.168.8.150 - name: nginx-conf nfs: path: /k8s-nfs/nginx/conf server: 192.168.8.150
2)kubectl get 命令
通过此命令列出一个或多个资源对象,在这里通过kubectl get命令获取default命名空间下的所有部署。
3)kubectl describe命令
此命令用于显示一个或多个资源对象的详细信息,在这里通过获取上述nginx部署的信息。
$ kubectl describe deployments/nginx
4)kubectl exec命令
此命令用于在Pod中的容器上执行一个命令,此处在nginx的一个容器上执行/bin/bash命令。
$ kubectl exec -it nginx-5847748bf9-49k5k /bin/bash
5)kubectl logs命令
此命令用于获取Pod中一个容器的日志信息,此处获取nginx一个容器的日志信息。
$ kubectl logs nginx-5847748bf9-49k5k
6)kubectl delete命令
此命令用于删除集群中已存在的资源对象,可以通过指定名称、标签选择器、资源选择器等。此处删除前面创建的nginx部署。
$ kubectl delete deployments/nginx
参考资料
1.《kubectl Usage Conventions》地址:https://kubernetes.io/docs/reference/kubectl/conventions/
2.《kubectl Commands》地址:https://kubernetes.io/docs/reference/kubectl/kubectl-cmds/
3.《Overview of kubectl》地址:https://kubernetes.io/docs/reference/kubectl/overview/
作者简介:
季向远,北京神舟航天软件技术有限公司产品经理。本文版权归原作者所有。