Kubernetes之kubectl认识
kubectl是k8s集群的命令行工具,通过kubect能够实现对集群本身进行管理维护
-
kubectl是对集群本身进行管理维护的,默认只对master节点开放,如果现在其他node节点上运行
-
将 master 节点中 /etc/kubernetes/admin.conf 拷贝到需要运行的服务器的 /etc/kubernetes 目录中
-
在对应的服务器上配置环境变量
-
- echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile - source ~/.bash_profile
资源操作
创建对象
$ kubectl create -f ./test.yaml # 创建资源 $ kubectl create -f ./test1.yaml -f ./test2.yaml # 使用多个文件创建资源 $ kubectl create -f ./test # 使用目录下的所有清单文件来创建资源 $ kubectl create -f https://test.io/test.yaml # 使用 url 来创建资源 $ kubectl run nginx --image=nginx # 启动一个 nginx 实例 $ kubectl explain pods,svc # 获取 pod 和 svc 的文档
显示和查找资源
$ kubectl get services # 列出所有 namespace 中的所有 service $ kubectl get pods --all-namespaces # 列出所有 namespace 中的所有 pod $ kubectl get pods -o wide # 列出所有 pod 并显示详细信息 $ kubectl get deployment my-dep # 列出指定 deployment $ kubectl get pods --include-uninitialized # 列出该 namespace 中的所有 pod 包括未初始化的 # 使用详细输出来描述命令 $ kubectl describe nodes my-node $ kubectl describe pods my-pod $ kubectl get services --sort-by=.metadata.name # List Services Sorted by Name # 根据重启次数排序列出 pod $ kubectl get pods --sort-by='.status.containerStatuses[0].restartCount' # 列出当前 Pod 中使用的 Secret $ kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
更新资源
$ kubectl rolling-update frontend-v1 -f frontend-v2.json # 滚动更新 pod frontend-v1 $ kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2 # 更新资源名称并更新镜像 $ kubectl rolling-update frontend --image=image:v2 # 更新 frontend pod 中的镜像 $ kubectl rolling-update frontend-v1 frontend-v2 --rollback # 退出已存在的进行中的滚动更新 $ cat pod.json | kubectl replace -f - # 基于 stdin 输入的 JSON 替换 pod # 强制替换,删除后重新创建资源。会导致服务中断。 $ kubectl replace --force -f ./pod.json # 为 nginx RC 创建服务,启用本地 80 端口连接到容器上的 8000 端口 $ kubectl expose rc nginx --port=80 --target-port=8000 # 更新单容器 pod 的镜像版本(tag)到 v4 $ kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f - $ kubectl label pods my-pod new-label=awesome # 添加标签 $ kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq # 添加注解 $ kubectl autoscale deployment foo --min=2 --max=10 # 自动扩展 deployment “foo”
# 部分更新节点 $ kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}' # 更新容器镜像; spec.containers[*].name 是必须的,因为这是合并的关键字 $ kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}' # 使用具有位置数组的 json 补丁更新容器镜像 $ kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]' # 使用具有位置数组的 json 补丁禁用 deployment 的 livenessProbe $ kubectl patch deployment valid-deployment --type json -p='[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]'
$ kubectl edit svc/docker-registry # 编辑名为 docker-registry 的 service $ KUBE_EDITOR="nano" kubectl edit svc/docker-registry # 使用其它编辑器
scale资源
$ kubectl scale --replicas=3 deployment/test # 更到名为test的deployment副本数为3 $ kubectl scale --replicas=3 -f test.yaml # $ kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # $ kubectl scale --replicas=5 rc/foo rc/bar rc/baz #
删除资源
# 删除文件中定义的类型和名称的 pod $ kubectl delete -f ./pod.json # 删除名为“baz”的pod和名为foo的service $ kubectl delete pod,service baz foo # 删除具有name=myLabel标签的pod和serivce $ kubectl delete pods,services -l name=myLabel # 同上,包括尚未初始化的 $ kubectl delete pods,services -l name=myLabel --include-uninitialized # 删除my-ns这个namespace下的所有pod和 serivce,包括尚未初始化的 $ kubectl -n my-ns delete po,svc --all
与运行状态的Pod交互
$ kubectl logs my-pod # dump输出pod的日志(stdout) $ kubectl logs my-pod -c my-container # dump输出pod中容器的日志(stdout,pod中有多个容器的情况下使用) $ kubectl logs -f my-pod # 流式输出pod的日志(stdout) $ kubectl logs -f my-pod -c my-container # 流式输出pod中容器的日志(stdout,pod中有多个容器的情况下使用) $ kubectl run -i --tty busybox --image=busybox -- sh # 交互式shell的方式运行pod $ kubectl attach my-pod -i # 连接到运行中的容器 $ kubectl port-forward my-pod 5000:6000 # 转发pod中的6000端口到本地的5000端口 $ kubectl exec my-pod -- ls / # 在已存在的容器中执行命令(只有一个容器的情况下) $ kubectl exec my-pod -c my-container -- ls / # 在已存在的容器中执行命令(pod 中有多个容器的情况下) $ kubectl top pod POD_NAME --containers # 显示指定pod和容器的指标度量
与集群和节点交互
$ kubectl cordon my-node # 标记 my-node 不可调度 $ kubectl drain my-node # 清空 my-node 以待维护 $ kubectl uncordon my-node # 标记 my-node 可调度 $ kubectl top node my-node # 显示 my-node 的指标度量 $ kubectl cluster-info # 显示 master 和服务的地址 $ kubectl cluster-info dump # 将当前集群状态输出到 stdout $ kubectl cluster-info dump --output-directory=/path/to/cluster-state # 将当前集群状态输出到 /path/to/cluster-state # 如果该键和影响的污点(taint)已存在,则使用指定的值替换 $ kubectl taint nodes foo dedicated=special-user:NoSchedule
格式化输出
$ kubectl ... -o json # 输出Json格式 $ kubectl ... -o name # 仅打印资源名称 $ kubectl ... -o wide # 以纯文本格式输出所有信息 $ kubectl ... -o yaml # 输出yaml格式
kubectl --help
-
键入 kubectl --help:看到如下信息
Basic Commands (Beginner): create Create a resource from a file or from stdin. expose 使用 replication controller, service, deployment 或者 pod 并暴露它作为一个新的 Kubernetes Service run 在集群中运行一个指定的镜像 set 为 objects 设置一个指定的特征 Basic Commands (Intermediate): explain 查看资源的文档 get 显示一个或更多 resources edit 在服务器上编辑一个资源 delete Delete resources by filenames, stdin, resources and names, or by resources and label selector Deploy Commands: rollout Manage the rollout of a resource scale Set a new size for a Deployment, ReplicaSet or Replication Controller autoscale 自动调整一个 Deployment, ReplicaSet, 或者 ReplicationController 的副本数量 Cluster Management Commands: certificate 修改 certificate 资源. cluster-info 显示集群信息 top Display Resource (CPU/Memory/Storage) usage. cordon 标记 node 为 unschedulable uncordon 标记 node 为 schedulable drain Drain node in preparation for maintenance taint 更新一个或者多个 node 上的 taints Troubleshooting and Debugging Commands: describe 显示一个指定 resource 或者 group 的 resources 详情 logs 输出容器在 pod 中的日志 attach Attach 到一个运行中的 container exec 在一个 container 中执行一个命令 port-forward Forward one or more local ports to a pod proxy 运行一个 proxy 到 Kubernetes API server cp 复制 files 和 directories 到 containers 和从容器中复制 files 和 directories. auth Inspect authorization Advanced Commands: diff Diff live version against would-be applied version apply 通过文件名或标准输入流(stdin)对资源进行配置 patch 使用 strategic merge patch 更新一个资源的 field(s) replace 通过 filename 或者 stdin替换一个资源 wait Experimental: Wait for a specific condition on one or many resources. convert 在不同的 API versions 转换配置文件 kustomize Build a kustomization target from a directory or a remote url. Settings Commands: label 更新在这个资源上的 labels annotate 更新一个资源的注解 completion Output shell completion code for the specified shell (bash or zsh) Other Commands: alpha Commands for features in alpha api-resources Print the supported API resources on the server api-versions Print the supported API versions on the server, in the form of "group/version" config 修改 kubeconfig 文件 plugin Provides utilities for interacting with plugins. version 输出 client 和 server 的版本信息 Usage: kubectl [flags] [options]
kubectl 命令分类总结
基础命令
基础命令 | 解释 |
---|---|
create | 通过文件名或标准输入创建资源 |
expose | 将一个资源公开为一个新的Service |
run | 在集群中运行一个特定的镜像 |
get | 显示一个或者多个资源 |
set | 在对象上设置特定的功能 |
explain | 文档参考资料 |
edit | 使用默认的编辑器编辑一个资源 |
delete | 通过文件名、标准输入、资源名称,或标签来删除资源 |
部署命令
部署命令 | 解释 |
---|---|
rollout | 管理资源的发布 |
rolling-update | 对给定的复制控制器滚动更新 |
scale | 扩容或者缩绒pod数量、Deployment、ReplicaSet、RC、Job |
autoscale | 创建一个自动进行扩容和缩容并设置Pod数量 |
集群管理命令
集群管理命令 | 解释 |
---|---|
certificate | 修改证书资源 |
cluster-info | 显示集群信息 |
top | 显示资源使用,需要Heapster运行 |
cordon | 标记节点不可被调度 |
uncordon | 标记几点可被调度 |
drain | 驱逐姐弟啊上的应用,准备下线维护 |
taint | 修改节点taint标记 |
故障和调试命令
故障和调试命令 | 解释 |
---|---|
describe | 显示特定资源胡资源组的详细信息 |
logs | 在一个pod中打印一个容器日志,如果pod只有一个容器,容器名称是可选的 |
attach | 附加到一个运行的容器 |
exex | 执行命令到容器 |
port-forward | 转发一个多或多个本地端口到pod |
proxy | 运行一个proxy到kubenetes API Server |
cp | 拷贝文件或目录到容器中 |
auth | 检查授权 |
其他命令
其他命令 | 解释 |
---|---|
apply | 通过文件名或者标准输入对资源应用配置 |
patch | 使用补丁修改,更新资源字段 |
replace | 通过文件名或标准输入替换一个资源 |
convert | 不同的API版本之间转换配置文件 |
label | 更新资源上的标签 |
annotate | 更新资源上的注释 |
completion | 用于实现kucectl工具自动补全 |
api-versions | 打印受支持的API版本 |
config | 修改kubeconfig文件,用于访问API,比如配置认证信息 |
help | 所有帮助命令 |
plugin | 运行一个命令行插件 |
version | 打印客户端和服务版本信息 |
.