Kubernetes集群管理工具kubectl命令技巧大全
一. kubectl概述
Kubectl是用于控制Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。
kubectl命令的语法如下所示:
kubectl [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命令获取更多的信息。
二. kubectl操作的简短说明和常规语法
Basic Commands (Beginner):
create 从文件或标准输入创建一个或多个资源
expose 使用 replication controller, service, deployment 或者 pod 并暴露它作为一个 新的
Kubernetes Service
run 在集群中运行一个指定的镜像
set 为 objects 设置一个指定的特征
Basic Commands (Intermediate):
explain 查看资源的文档
get 显示一个或更多 resources
edit 使用默认编辑器编辑和更新服务器上一个或多个资源的定义
delete 从文件,stdin或指定标签选择器,名称,资源选择器或资源中删除资源
Deploy Commands:
rollout 通过逐渐替换指定的复制控制器及其容器来执行滚动更新
scale 为 Deployment, ReplicaSet, Replication Controller 或者 Job 设置一个新的副本数量
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:
apply 通过文件名或标准输入流(stdin)对资源进行配置
patch 使用 strategic merge patch 更新一个资源的 field(s)
replace 通过 filename 或者 stdin替换一个资源
wait Experimental: Wait for one condition on one or many resources
convert 在不同的 API versions 转换配置文件
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 Runs a command-line plugin
version 输出 client 和 server 的版本信息
有关命令操作的更多信息,请参见kubectl官方参考文档。
三. kubectl常用命令
kubectl作为kubernetes的命令行工具,主要的职责就是对集群中的资源的对象进行操作,这些操作包括对资源对象的创建、删除和查看等。
四. kubectl输出选项
所有kubectl命令的默认输出格式是人类可读的纯文本格式。要以特定格式将详细信息输出到终端窗口,可以将-o或--output标志添加到受支持的kubectl命令中,例:
kubectl [command] [TYPE] [NAME] -o=<output_format>
根据kubectl操作,支持以下输出格式
| 输出格式 | 描述 |
|---|---|
| -o custom-columns= spec | 使用逗号分隔的自定义列列表打印表。 |
| -o custom-columns-file=filename | 使用文件中的自定义列模板打印表。 |
| -o json | 输出JSON格式的API对象。 |
| -o jsonpath=template | 打印在jsonpath表达式中定义的字段。 |
| -o jsonpath-file=filename | 打印文件中jsonpath表达式定义的字段。 |
| -o name | 仅打印资源名称,而不打印其他任何内容。 |
| -o wide | 以纯文本格式输出,并带有任何其他信息。对于Pod,包含节点名称。 |
| -o yaml | 输出YAML格式的API对象。 |
示例:
以下命令将单个pod的详细信息输出为YAML格式的对象
kubectl get pod web-pod-13je7 -o yaml
五. 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: /nfs/nginx
server: 192.168.1.10
- name: nginx-conf
nfs:
path: /k8s-nfs/nginx/conf
server: 192.168.1.10
Kubernetes 清单可以用 json 或 yaml 来定义。使用的文件扩展名包括 .yaml, .yml 和 .json。
kubectl create -f ./my-manifest.yaml # 创建资源
kubectl create -f ./my1.yaml -f ./my2.yaml # 从多个文件创建资源
kubectl create -f ./dir # 通过目录下的所有清单文件创建资源
kubectl create -f https://git.io/vPieo # 使用 url 获取清单创建资源
kubectl run nginx --image=nginx # 开启一个 nginx 实例
kubectl explain pods,svc # 获取 pod 和服务清单的描述文档
- 通过标准输入创建多个 YAML 对象
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- "1000000"
---
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep-less
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- "1000"
EOF
2、kubectl get 命令
通过此命令列出一个或多个资源对象,在这里通过kubectl get命令获取default命名空间下的所有部署。
kubectl get deployment
# 具有基本输出的 get 命令
kubectl get services # 列出命名空间下的所有 service
kubectl get pods --all-namespaces # 列出所有命名空间下的 pod
kubectl get pods -o wide # 列出命名空间下所有 pod,带有更详细的信息
kubectl get deployment my-dep # 列出特定的 deployment
kubectl get pods --include-uninitialized # 列出命名空间下所有的 pod,包括未初始化的对象
# 有详细输出的 describe 命令
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'
# 查询带有标签 app=cassandra 的所有 pod,获取它们的 version 标签值
kubectl get pods --selector=app=cassandra rc -o \
jsonpath='{.items[*].metadata.labels.version}'
# 获取命名空间下所有运行中的 pod
kubectl get pods --field-selector=status.phase=Running
# 所有所有节点的 ExternalIP
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
3、kubectl describe命令
此命令用于显示一个或多个资源对象的详细信息,在这里通过获取上述nginx部署的信息。
kubectl describe deployments/nginx
4、kubectl exec命令
此命令用于在Pod中的容器上执行一个命令,此处在nginx的一个容器上执行/bin/bash命令。
kubectl exec -it nginx-c5cff9dcc-dr88w /bin/bash
5、kubectl logs命令
此命令用于获取Pod中一个容器的日志信息,此处获取nginx一个容器的日志信息。
kubectl logs nginx-c5cff9dcc-dr88w
6、kubectl delete命令
此命令用于删除集群中已存在的资源对象,可以通过指定名称、标签选择器、资源选择器等。
kubectl delete -f ./pod.json # 使用 pod.json 中指定的类型和名称删除 pod
kubectl delete pod,service baz foo # 删除名称为 "baz" 和 "foo" 的 pod 和 service
kubectl delete pods,services -l name=myLabel # 删除带有标签 name=myLabel 的 pod 和 service
kubectl delete pods,services -l name=myLabel --include-uninitialized # 删除带有标签 name=myLabel 的 pod 和 service,包括未初始化的对象
kubectl -n my-ns delete po,svc --all # 删除命名空间 my-ns 下所有的 pod 和 service,包括未初始化的对象
7、kubectl edit 命令
使用默认编辑器 编辑服务器上定义的资源。
使用命令行工具获取的任何资源都可以使用edit命令编辑。edit命令会打开使用KUBE_EDITOR,GIT_EDITOR 或者EDITOR环境变量定义的编辑器,可以同时编辑多个资源,但所编辑过的资源只会一次性提交。edit除命令参数外还接受文件名形式。
文件默认输出格式为YAML。要以JSON格式编辑,请指定“-o json”选项。
语法:
kubectl edit (RESOURCE/NAME | -f FILENAME)
示例:
# 编辑名为“docker-registry”的service
kubectl edit svc/docker-registry
# 使用一个不同的编辑器
KUBE_EDITOR="nano" kubectl edit svc/docker-registry
# 编辑名为“docker-registry”的service,使用JSON格式、v1 API版本
kubectl edit svc/docker-registry --output-version=v1 -o json
选项:
-f, --filename=[]: 用来指定待编辑资源的文件名,目录名或者URL。
-o, --output="yaml": 输出格式,可选yaml或者json中的一种。
--output-version="": 输出资源使用的API版本(默认使用api-version)。
8、kubectl rolling-update 命令
此命令用于滚动更新,对镜像、端口等的更新
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 # 更新 pod 的镜像
kubectl rolling-update frontend-v1 frontend-v2 --rollback # 中止进行中的过程
at pod.json | kubectl replace -f - # 根据传入标准输入的 JSON 替换一个 pod
9、node 和集群管理
kubectl cordon my-node # #标记节点 my-node 为不可调度
kubectl drain my-node # #准备维护时,排除节点 my-node
kubectl uncordon my-node # #标记节点 my-node 为可调度
kubectl top node my-node # #显示给定节点的度量值
kubectl cluster-info # #显示 master 和 service 的地址
kubectl cluster-info dump # #将集群的当前状态转储到标准输出
kubectl cluster-info dump --output-directory=/path/to/cluster-state # #将集群的当前状态转储到目录 /path/to/cluster-state
# 如果带有该键和效果的污点已经存在,则将按指定的方式替换其值
kubectl taint nodes foo dedicated=special-user:NoSchedule
参考资料
1.《kubectl概述》:https://kubernetes.io/docs/reference/kubectl/overview/#syntax
2.《kubectl命令概述》:https://kubernetes.io/docs/reference/kubectl/overview/#syntax
Kubernetes集群管理工具kubectl命令技巧大全的更多相关文章
- Docker集群管理工具 - Kubernetes 部署记录 (运维小结)
一. Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...
- 整理全网最全K8S集群管理工具、平台
整理常见的整理全网最全K8S集群管理工具.平台解决方案. 1 Rancher Rancher中文官网:https://docs.rancher.cn/ 2 KubeSphere 官网:https:// ...
- 译:Google的大规模集群管理工具Borg(一)------ 用户视角的Borg特性
概述 Google的Borg系统是一个集群管理工具,在它上面运行着成千上万的job,这些job来自许许多多不同的应用,并且跨越多个集群,而每个集群又由大量的机器构成. Borg通过组合准入控制,高效的 ...
- 大规模集群管理工具Borg
Google的大规模集群管理工具Borg 概述 Google的Borg系统是一个集群管理工具,在它上面运行着成千上万的job,这些job来自许许多多不同的应用,并且跨越多个集群,而每个集群又由大量的机 ...
- 集群管理工具Salt
集群管理工具Salt 简介 系统管理员(SA)通常需要管理和维护数以百计的服务器,如果没有自动化的配置管理和命令执行工具,那么SA的工作将会变得很繁重.例如,要给集群中的每个服务器添加一个系统用户,那 ...
- Kafka集群管理工具kafka-manager的安装使用
一.kafka-manager简介 kafka-manager是目前最受欢迎的kafka集群管理工具,最早由雅虎开源,用户可以在Web界面执行一些简单的集群管理操作.具体支持以下内容: 管理多个集群 ...
- Linux Kafka集群管理工具kafka-manager的安装使用
一.kafka-manager简介 kafka-manager是目前最受欢迎的kafka集群管理工具,最早由雅虎开源,用户可以在Web界面执行一些简单的集群管理操作.具体支持以下内容: 管理多个集群 ...
- 安装memcache集群管理工具
安装memcache集群管理工具magent 一.安装libevent tar xf libevent--stable.tar.gz cd libevent- ./configure --prefix ...
- 大数据领域两大最主流集群管理工具Ambari和Cloudera Manger
不多说,直接上干货! 目前啊,都知道,大数据集群管理方式分为手工方式(Apache hadoop)和工具方式(Ambari + hdp 和Cloudera Manger + CDH). 手工部署呢, ...
随机推荐
- WP | BUGKU 论剑
题目:bugku Misc论剑 第一步:在winhex里分析 发现文件头有两个 两个jpg文件中间还有一段二进制码 在kali里分离出两个一样jpg图片,但是没有什么发现 二进制码解出来也没有flag ...
- 小白都能理解的Python多继承
本文主要做科普用,在真实编程中不建议使用多重继承,或者少用多重继承,避免使代码难以理解. 方法解析顺序(MRO) 关于多重继承,比较重要的是它的方法解析顺序(可以理解为类的搜索顺序),即MRO.这个跟 ...
- http详解笔记
http详解笔记 http,(HyperText Transfer Protocol),超文本传输协议,亦成为超文本转移协议 通常使用的网络是在TCP/IP协议族的基础上运作的,HTTP属于它的一 ...
- Spring Cloud正式移除Hystrix、Zuul等Netflix OSS组件
1. 前言 2020-12-22日Spring官方博客宣布,Spring Cloud 2020.0.0正式发布.2020.0.0是第一个使用新的版本号命名方案的Spring Cloud发行版本.在此之 ...
- 【进程/作业管理】篇章二:Linux系统作业控制(jobs)
作业:jobs 分类: 前台作业(foregroud):通过终端启动,且启动后会一直占据终端 后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端) 如何让作业运行于后台 ...
- Selenium Web元素操作
我们定位到Web页面元素之后,可以对元素进行一系列的操作,实现跟页面的交互.包括点击.文本输入.元素属性获取等.常用的方法列举如下: 方法 描述 click() 点击元素 send_keys(**va ...
- 还在使用Future轮询获取结果吗?CompletionService快来了解下吧。
背景 二胖上次写完参数校验(<二胖写参数校验的坎坷之路>)之后,领导一直不给他安排其他开发任务,就一直让他看看代码熟悉业务.二胖每天上班除了偶尔跟坐在隔壁的前端小姐姐聊聊天,就是看看这些 ...
- C语言实现汉诺塔
汉诺塔 要把A柱子上的盘子移动到C柱子上,在移动过程中可以借助B柱子,但是要求小的盘子在上大的盘子在下. 解题思路: 1.把A柱子上的前N-1个盘子借助C柱子,全部移动到B柱子上(过程暂不考虑),再把 ...
- wildfly 21的配置文件和资源管理
目录 简介 wildfly的配置文件 extensions profile path interface socket-binding management 资源管理 总结 简介 在上一篇文章我们介绍 ...
- 【转载】Vue.nextTick 的原理和用途
对于 Vue.nextTick 方法,自己有些疑惑.在查询了各种资料后,总结了一下其原理和用途,如有错误,请不吝赐教. 概览 官方文档说明: 用法: 在下次 DOM 更新循环结束之后执行延迟回调.在修 ...