当前位置:网站首页>【云原生--Kubernetes】kubectl命令详解
【云原生--Kubernetes】kubectl命令详解
2022-08-03 06:37:00 【Sq夏颜】
文章目录
前言:在k8s集群中,我们使用kubectl命令行工具对集群进行管理
一. 资源管理方式
kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口,kubectl 是官方的 CLI 命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为apiserver 能识别的json信息,进而实现管理 k8s 各种资源的一种有效途径
在使用kubectl管理工具时,主要有两种管理类型:命令式对象管理/配置,声明式对象配置
- 命令式对象管理:直接使用命令去操作kubernetes资源
kubectl run nginx-pod --image=nginx:1.14 --port=80
- 命令式对象配置:通过命令配置和配置文件去操作kubernetes资源
kubectl create/patch -f nginx-pod.yaml
- 声明式对象配置:通过apply命令和配置文件去操作kubernetes资源
kubectl apply -f nginx-pod.yaml
| 类型 | 操作对象 | 使用环境 | 优点 | 缺点 |
|---|---|---|---|---|
| 命令式对象管理 | 对象 | 测试 | 简单 | 只能操作活动对象,无法审计、跟踪 |
| 命令式对象配置 | 文件 | 开发 | 可以审计、跟踪 | 项目大时,配置文件多,操作麻烦 |
| 声明式对象配置 | 目录 | 开发 | 支持目录操作 | 意外情况下难以调试 |
二. 命令式对象管理
在使用kubectl命令时,可以使用kubectl --help进行查看详细操作
命令格式:
kubectl [commond] [type] [name] [flags]
常用commond参数:
| 命令分类 | 命令 | 类型 | 描述 |
|---|---|---|---|
| 基本命令 | create | 创建 | 创建一个资源 |
| get | 获取 | 获取一个资源 | |
| edit | 编辑 | 编辑一个资源 | |
| patch | 更新 | 更新一个资源 | |
| delete | 删除 | 删除一个资源 | |
| explain | 解释 | 展示资源文档 | |
| 运行和调试 | run | 运行 | 在集群中运行一个指定的镜像 |
| expose | 暴露 | 暴露资源为service | |
| describe | 描述 | 显示资源内部详细信息 | |
| logs | 日志 | 输出容器在pod中的日志 | |
| attach | 缠绕 | 进入运行中的容器 | |
| exec | 执行 | 执行容器中的一个命令 | |
| cp | 复制 | 在pod内外复制文件 | |
| rollout | 展示 | 管理资源的发布 | |
| scale | 规模 | 扩(缩)容pod的数量,副本集数 | |
| autoscale | 自动调整 | 自动调整pod的数量 | |
| 高级命令 | apply | 通过文件对资源进行配置 | |
| label | 标签 | 更新资源上的标签 | |
| 其它命令 | cluster-info | 集群信息 | 显示集群信息 |
| version | 版本 | 显示当前server和client的版本 |
常用资源(type)类型:
| 资源分类 | 资源名称 | 缩写 | 描述 |
|---|---|---|---|
| 集群级别资源 | nodes | no | 集群组成部分 |
| namespaces | ns | 隔离pod | |
| pod资源 | pods | po | 装载容器 |
| pod资源控制器 | replicationcontrollers | rc | 控制pod资源 |
| replicasets | rs | 控制pod资源 | |
| deployments | deploy | 控制pod资源 | |
| daemonsets | ds | 控制pod资源 | |
| jobs | 控制pod资源 | ||
| cronjobs | cj | 控制pod资源 | |
| horizontalpodautoscalers | hpa | 控制pod资源 | |
| statefulsets | sts | 控制pod资源 | |
| 服务发现资源 | services | svc | 统一pod对外接口 |
| ingress | ing | 统一pod对外接口 | |
| 存储资源 | volumeattachments | 存储 | |
| persistentvolumes | pv | 存储 | |
| persistentvolumeclaims | pvc | 存储 | |
| 配置资源 | configmaps | cm | 配置 |
| secrets | 配置 |
2.1 系统信息查询
版本查询
kubectl version
节点信息查询
kubectl get nodes
集群信息查询
kubectl cluster-info
资源对象查看
kubectl api-resources
master节点查看
kubectl get componentstatuses
#componentstatues可以缩写成cs
kubectl get cs

- 查看命明空间
kubectl get namespace
#namespace可以缩写成ns
kubectl get ns

2.2 命名空间操作
- 查看default命名空间的所有资源
kubectl get all [-n default]
由于deafult为缺省空间,当不指定命名空间时默认查看default命名空间
- 创建命名空间
kubectl create ns xy

- 删除命名空间
kubectl delete ns xy

2.3 创建
kubectl run
命令格式:
#kubectl run --help
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client]
[--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]
kubectl run nginx --image=nginx:1.14 --port=80
#depoy-nginx为控制器名称
#--image指定镜像文件
#--port指定暴露的端口
#服务暴露
kubectl expose pod nginx --port=80 --type=NodePort

kubectl create
#创建一个控制器
kubectl create deploy nginx --image=nginx:1.14
kubectl get pod
kubectl get svc
#服务暴露
kubectl expose deploy nginx --port=80 --type=NodePort
kubectl get svc

run与create区别
先使用run与create创建并暴露一个pod
#run
kubectl run run-nginx --image=nginx:1.14
kubectl expose pod run-nginx --port=80 --type=NodePort
#create
kubectl create deploy create-nginx --image=nginx:1.14
kubectl expose deploy create-nginx --port=80 --type=NodePort
#删除pod,在删除时可以新打开一个终端使用watch命令查看容器状态
watch -n 1 kubectl get pod -n default
#-n default,-n为名称空间namespace,default为默认的名称空间

run与create区别:
run为一次性的创建运行,删除后不会自动生成,没有pod控制器
create创建的,删除后还会自动生成,有pod控制器,拥有副本集控制
2.4 expose
命令格式:
#kubectl espose --help
kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP]
[--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]
[options]
kubectl expose deploy create-nginx --port=80 --type=NodePort
#kubectl expose +pod管理器类型 +pod名称 +选项参数
上文中其实已经使用expose对服务进行暴露,所以这儿就不过多演示
2.5 更新/回滚
set–更新
使用 kubectl set --help查看set的具体使用信息
[[email protected] ~]# kubectl set --help
Configure application resources
These commands help you make changes to existing application resources.
Available Commands:
env Update environment variables on a pod template
image Update image of a pod template
resources Update resource requests/limits on objects with pod templates
selector Set the selector on a resource
serviceaccount Update ServiceAccount of a resource
subject Update User, Group or ServiceAccount in a RoleBinding/ClusterRoleBinding
Usage:
kubectl set SUBCOMMAND [options]
命令格式:
kubectl set image --help
kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1
比如:
kubectl set image deploy create-nginx nginx=nginx:1.20


rollout–回滚
[[email protected] ~]# kubectl rollout --help
Examples:
# Rollback to the previous deployment
kubectl rollout undo deployment/abc
# Check the rollout status of a daemonset
kubectl rollout status daemonset/foo
Available Commands:
history View rollout history
pause Mark the provided resource as paused
restart Restart a resource
resume Resume a paused resource
status Show the status of the rollout
undo Undo a previous rollout
Usage:
kubectl rollout SUBCOMMAND [options]
###################################################
history 显示 rollout 历史
pause 标记提供的 resource 为中止状态
resume 继续一个停止的 resource
status 显示 rollout 的状态
undo 撤销上一次的 rollout
#查看rollout历史
kubectl rollout history deploy create-nginx
#撤销上一次的rollout
kubectl rollout undo deploy/create-nginx
#查看rollout状态
kubectl rollout status deploy create-nginx

2.6 删除
命令格式:
# kubectl delete --help
kubectl delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)]) [options]
#创建3个nginx副本
kubectl create deploy nginx --image=nginx --replice=3
#暴露端口
kubectl expose deploy nginx --port=80 --type=NodePort
#删除pod
kubectl delete pod nginx-6799fc88d8-dzbjk
#删除svc
kubectl delete svc nginx
#删除控制器



三.声明式对象配置
声明式对象配置与命令式对象配置相似,但是其命令更加的简洁且需要yaml文件
3.1YAML格式说明
Kubernetes支持YAML和JSON格式创建资源对象
YAML格式:
以空格的方式缩进标识层级关系
不支持制表符缩进(tab),使用空格缩进
通常开头缩进两个空格(统一层级对应即可)
字符后缩进一个空格,如冒号,逗号等
“—”表示YAML格式,一个文件的开始
支持以“#”表示注释
apiVersion: v1 #必选,版本号,例如v1
kind: Pod #必选,Pod
metadata: #必选,元数据
name: string #必选,Pod名称
namespace: string #必选,Pod所属的命名空间
labels: #自定义标签
- name: string #自定义标签名字
annotations: #自定义注释列表
- name: string
spec: #必选,Pod中容器的详细定义
containers: #必选,Pod中容器列表
- name: string #必选,容器名称
image: string #必选,容器的镜像名称
imagePullPolicy: [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
command: [string] #容器的启动命令列表,如不指定,使用打包时使用的启动命令
args: [string] #容器的启动命令参数列表
workingDir: string #容器的工作目录
volumeMounts: #挂载到容器内部的存储卷配置
- name: string #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
mountPath: string #存储卷在容器内mount的绝对路径,应少于512字符
readOnly: boolean #是否为只读模式
ports: #需要暴露的端口库号列表
- name: string #端口号名称
containerPort: int #容器需要监听的端口号
hostPort: int #容器所在主机需要监听的端口号,默认与Container相同
protocol: string #端口协议,支持TCP和UDP,默认TCP
env: #容器运行前需设置的环境变量列表
- name: string #环境变量名称
value: string #环境变量的值
resources: #资源限制和请求的设置
limits: #资源限制的设置
cpu: string #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
memory: string #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
requests: #资源请求的设置
cpu: string #Cpu请求,容器启动的初始可用数量
memory: string #内存清楚,容器启动的初始可用数量
livenessProbe: #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
exec: #对Pod容器内检查方式设置为exec方式
command: [string] #exec方式需要制定的命令或脚本
httpGet: #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
tcpSocket: #对Pod内个容器健康检查方式设置为tcpSocket方式
port: number
initialDelaySeconds: 0 #容器启动完成后首次探测的时间,单位为秒
timeoutSeconds: 0 #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
periodSeconds: 0 #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
successThreshold: 0
failureThreshold: 0
securityContext:
privileged:false
restartPolicy: [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
nodeSelector: obeject #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
imagePullSecrets: #Pull镜像时使用的secret名称,以key:secretkey格式指定
- name: string
hostNetwork:false #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
volumes: #在该pod上定义共享存储卷列表
- name: string #共享存储卷名称 (volumes类型有很多种)
emptyDir: {
} #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
hostPath: string #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
path: string #Pod所在宿主机的目录,将被用于同期中mount的目录
secret: #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
scretname: string
items:
- key: string
path: string
configMap: #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
name: string
items:
- key: string
path: string
3.2创建
create
kubectl create -f 加yaml文件路径
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15.4
ports:
- containerPort: 80

apply
以apply创建
kubectl apply -f

create与apply区别
#使用apply进行两次构建
kubectl delete deploy nginx-deployment
kubectl apply -f nginx.yaml
kubectl apply -f nginx.yaml
#使用create进行两次构建
kubectl delete deploy nginx-deployment
kubectl create -f nginx.yaml
kubectl create -f nginx.yaml

apply在进行创建资源时,首先会扫描系统是否存在该资源,若不存在则创建,存在则进行更新
create则是直接进行创建资源,若存在该资源,则提示错误
所以我们可以使用apply进行资源配置更新
3.3 更新
基于yaml文件使用apply进行对pod资源更新
3.4查看/导出资源模板
kubectl create deploy nginx --image=nginx --replicas=3 -o yaml
#-o yaml 生成为yaml格式查看
#-o json 生成为json格式查看
#查看现有的资源的yaml
kubectl get deploy nginx -o yaml
#将模板导出
kubectl get deploy nginx -o yaml >nginx.yaml


四. 总结
在使用kubectl进行操作时,命令式主要是使用命令行的操作方式进行资源配置,而声明式则式基于yaml文件进行资源配置
create与run的区别,run创建的pod可以删除,create创建的需要删除pod控制器才可以完全删除pod
create与apply区别,create为创建,若系统含有该资源则报错,而apply创建时会检测已创建的资源与配置文件是否不一致,若不一致则会进行更新
边栏推荐
猜你喜欢

数据仓库指标体系实践

IEEE RAL投初稿

Autowired注解与Resource注解的区别

伦敦银现货市场如何使用多条均线?

(十五)51单片机——呼吸灯与直流电机调速(PWM)

【图像边缘检测】基于matlab灰度图像的积累加权边缘检测【含Matlab源码 2010期】

【图像去噪】基于matlab稀疏表示KSVD图像去噪【含Matlab源码 2016期】

【图像去雾】基于matlab暗通道和非均值滤波图像去雾【含Matlab源码 2011期】

关于NOI 2022的报到通知

Detailed explanation of cause and effect diagram of test case design method
随机推荐
ISIJ 2022收官,中国初中生再展风采
(十四)51单片机——LCD1602实现滚动效果
Umi 4 快速搭建项目
华为设备配置BFD状态与接口状态联动
戳Web3的神话?戳到铁板。
c现代方法16章基础
Data warehouse buried point system and attribution practice
QT信号与槽
boot-SSE
RHCSA第四天
【playwright】pytest-playwright增加代理服务选项
信息学奥赛一本通T1453:移动玩具
qt学习之旅--MinGW32编译opencv3.0.0
信息学奥赛一本通T1452:Keyboarding
信息学奥赛一本通T1450:Knight Moves
mysql慢查询优化
static数据成员
JS作用对象API技巧
924. 尽量减少恶意软件的传播 前缀和
2022用户画像构建