Kubectl命令指南

一.认识kubectl

kubectl是kubernetes集群的命令行工具。kubectl用于跟apiserver(集群访问的入口)进行通信,将用 户的命令组织并转化为apiserver能识别的信息,进而实现管理k8s的各种资源。

-命令格式

kubectl .command.type.name.flags
-命令说明

comand:指定要对资源执行的操作,例如create、get、delete等等

type:指定资源类型,比如deployment、pod、service,可以指定单数、复数和缩写形式

name:指定资源的名称,名称大小写敏感

flags:指定额外的可选参数
-命令举例:
#查看所有node

kubectl get nodes / kubectl get node / kubectl get no
#查看某个pod
kubectl get pod pod名字

#查看所有pod,以"宽屏"格式展示结果

kubectl get pod -o wide

二.认识kubernetes资源

这一部分,针对kubectl命令的"type"部分展开讲解。kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看:
查看所有资源

kubectl api-resources

结果各个列的含义说明如下

NAME 资源的名称

SHORTNAMES 资源的简写名称

APIVERSION 资源的版本

NAMESPACED 可否用命名空间隔离

KIND 资源的类型
特别说明:用命名空间隔离的资源,操作该资源时需要增加-n参数指定所属的命名空间名字。

三.对资源的操作

这一部分,针对kubectl命令的"comand"部分展开讲解。

Kubectl分为"声明式管理" 和 "命令式管理"
声明式管理:

apply -f yaml文件
命令式管理:

创建: create | expose

更新: scale | annotate | label

删除: delete

资源查看: get | describe

容器管理: logs | exec | cp

集群管理: chuster-info | version | drain

3.1命令式管理

命令式管理,顾名思义即编写命令时直接管理资源,学习时和测试的场景下使用频繁。

3.1.1创建和删除

定义一个Deployment(自动新建pod)来运行Nginx

kubectl create deploy my-nginx --image=nginx:latest

对外暴露Nginx(自动新建service)

kubectl expose deploy my-nginx --port=80 --type=Nodeport

3.1.2资源查看

常用的包括get、describe。get用于查看资源当前的状态,describe用于查看资源的详细信息。
#查看my-nginx的pod状态
kubectl get pod | grep my-nginx
#查看my-nginx的service状态
kubectl get svc my-nginx
#查看my-nginx的pod详细信息
kubectl describe pod my-nginx
#查看my-nginx的service详细信息
kubectl describe svc my-nginx

3.1.3容器管理

常用的包括logs、exec和cp。

logs 查看pod的容器日志,如果pod中仅一个容器,可省略容器名称

kubectl logs -f pod名-c container名
#exec进入nginx-container的容器内
kubectl exec -it pod名-c container名--/bin/bash
#cp用于pod和外部的文件交换,该命令依赖于容器镜像中的"tar"命令
yum update && yum install tar
tar --version
#pod中容器的文件复制到本地(tar默认相对路径,而不是绝对路径;自动创建不存在的目录)
kubectl cp pod名:source local -c container名
#本地的文件复制到pod中容器
上一条命令交换 source和local位置即可

3.2声明式管理
mar kdown

声明式管理,是通过YANL文件直接配置和管理资源。YAML是一种简洁的非标记性语言,实战中多以此方式管理集群。
定义Deployment:
#api的版本,通过"kubectl api-versions"查看当前K85可用的版本列表
apiVersion: apps/v1
#资源类型,通过"kubectl api-resources"可查看
kind: Deployment
#资源的元数据
metadata:
#资源的标签
labels:
app: my-nginx
#资源名
name: my-nginx
#资源所在命名空间(默认default)
namespace: default
#资源的规格(资源详细配置)
spec:
#副本数量(默认1)
replicas: 1
#标签选择器
selector:
#匹配标签,需与上面的标签定义的app保持一致
matchLabels:
app: my-nginx
#模板
temnlate:
#模板元数据
metadata:
#模板的标签
labels
app:my-nginx
#模板详细配置
spec:
#Pod容器列表
containers:
#容器名字
name: nginx-container
#容器镜像
image: nginx: latest
容器暴露的端口列表
ports
containerPort: 80
暴露Nginx服务:
#api的版本,通过"kubectl api-versions"查看当前K8s可用的版本列表
apiVersion:v1
#资源类型,通过"kubectl api-resources"可查看
kind: Service
#资源的元数据
metadata:
#资源名
name:my-nginxl
#资源所在命名空间(默认default)
namespace: default
#资源的规格(资源详细配置)
spec:
#服务类型
type: NodePort
#标签选择器(据此与my-nginx Deployment关联)
selector:
app:my-nginx
#服务的端口列表
ports:
#服务监听的容器端口
port: 80

服务端口

targetPort: 80
节点端口(默认在30000~32767自动分配)
nodePort:30080
使用命令快速生成YAML:
#试运行
kubectl create deploy my-nginx --image=nginx:latest --dry-run=client -b yaml
kubectl expose deploy my-nginx --port=80 --type=NodePort --dry-run=client -o yaml
#导出已运行
kubectl get deploy my-ninx -o yaml > nginx.yaml

相关推荐
AlfredZhao2 小时前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
运维开发故事1 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
戴为沐1 天前
Linux内存扩容指南
linux
zylyehuo2 天前
Linux 彻底且安全地删除文件
linux
用户805533698032 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297912 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
乘云数字DATABUFF2 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
Patrick_Wilson3 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
阿里云云原生3 天前
AI 开发新常态:当 Cursor、Claude、Codex 并行,如何统一管理散落的 Skill 资产?
云原生·ai编程
探索云原生3 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes