一、kubectl 客户端命令
(一)命令帮助与分类
-
获取帮助:
kubectl -h查看所有命令概览,kubectl <command> --help查看具体命令详情 -
命令分类
命令类别 包含命令 核心作用 基础命令(入门) create、expose、run、set 资源创建、服务暴露、镜像运行、特性设置 基础命令(中级) explain、get、edit、delete 文档查询、资源查看、资源编辑、资源删除 部署命令 rollout、scale、autoscale 发布管理、副本扩缩容、自动扩缩容 集群管理命令 certificate、cluster-info、top、cordon、uncordon、drain、taint 证书修改、集群信息查看、资源监控、节点调度控制 故障诊断命令 describe、logs、attach、exec、port-forward、proxy、cp、auth 资源详情查看、日志打印、容器交互、端口转发、文件拷贝 高级命令 apply、patch、replace 配置应用、资源补丁更新、资源替换 设置命令 label、annotate、completion 标签更新、注解更新、命令自动补全 其他命令 api-resources、api-versions、config、version API 资源查看、API 版本查看、配置修改、版本查询
(二)核心命令详解
-
资源查看与操作
-
查看资源:
kubectl get <资源类型>(如kubectl get pods),加-o wide显示详细信息,-n <命名空间>指定命名空间 -
查看资源详情:
kubectl describe <资源类型> <资源名>(如kubectl describe pod metrics-server-xxx -n kube-system) -
删除资源:
kubectl delete <资源类型> <资源名>,强制删除:kubectl delete <资源类型> <资源名> --grace-period=0 --force
-
-
资源监控(需 metrics-server)
-
部署 metrics-server:
-
下载配置文件:
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metrics-server-components.yaml -
修改镜像源与配置:
sed -i 's/registry.k8s.io\/metrics-server/registry.cn-hangzhou.aliyuncs.com\/google_containers/g' metrics-server-components.yaml,并在容器 args 中添加--kubelet-insecure-tls -
应用配置:
kubectl apply -f metrics-server-components.yaml
-
-
查看资源使用:
kubectl top pod <pod名> -n <命名空间>(Pod 资源)、kubectl top node <节点名>(节点资源)
-
-
集群信息查看
-
集群地址与组件信息:
kubectl cluster-info -
API 版本查看:
kubectl api-versions -
客户端与服务端版本:
kubectl version
-
二、集群 Node 管理
(一)节点信息查看
-
查看节点列表:
kubectl get nodes -
查看节点详细信息(IP、系统、容器运行时等):
kubectl get nodes -o wide -
查看节点详细描述(资源、条件、事件等):
kubectl describe node <节点名>(如kubectl describe node master)
(二)Node 节点实现 kubectl 管理(解决连接拒绝问题)
-
在 Node 节点创建.kube 目录:
mkdir /root/.kube -
从 Master 节点复制配置文件:
scp /etc/kubernetes/admin.conf node1:/root/.kube/config(node1 为目标 Node 节点) -
验证:在 Node 节点执行
kubectl get nodes,成功显示节点列表即配置完成
三、Dashboard 界面部署与访问
(一)部署步骤
-
下载配置文件:
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml -
修改配置(添加 NodePort 暴露端口):
spec: ports: - port: 443 targetPort: 8443 nodePort: 30001 # 新增 selector: k8s-app: kubernetes-dashboard type: NodePort # 新增
-
应用配置:
kubectl apply -f recommended.yaml -
查看部署状态:
kubectl get pods -n kubernetes-dashboard、kubectl get svc -n kubernetes-dashboard
(二)访问与登录
-
访问地址:浏览器输入
https://<节点IP>:30001(需用 https 协议,忽略证书警告) -
创建管理员令牌:
-
编写 rbac.yaml:
apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: dashboard-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kube-system
-
应用配置:
kubectl apply -f rbac.yaml -
获取令牌:
kubectl create token dashboard-admin --namespace kube-system(k8s 1.22 + 版本,令牌有效期 1 小时)
-
-
登录:在 Dashboard 登录页粘贴令牌,完成登录
四、节点标签(Label)管理
(一)标签操作
-
查看标签:
kubectl get nodes --show-labels(查看所有节点标签)、kubectl get nodes -L <标签键>(查看指定标签值) -
设置标签:
kubectl label node <节点名> <标签键>=<标签值>(如kubectl label node node2 region=nanjing) -
修改标签:
kubectl label node <节点名> <标签键>=<新标签值> --overwrite=true -
删除标签:
kubectl label node <节点名> <标签键>-(如kubectl label node node1 env-)
(二)标签选择器
| 选择器类型 | 语法示例 | 作用 |
|---|---|---|
| 等值匹配 | kubectl get nodes -l env=test1、kubectl get nodes -l env!=test1 | 匹配指定值、排除指定值 |
| 集合匹配 | kubectl get nodes -l "env in(test1,test2)"、kubectl get nodes -l "env notin(test1)" | 匹配集合内值、排除集合内值 |
五、YAML 声明式文件
(一)YAML 基础语法
-
缩进规则:低版本(1.0/2.0)仅允许空格,不允许 Tab,相同层级左对齐
-
注释:
#开头,直至行尾 -
数据结构
结构类型 语法示例 对象(键值对) name: Tom或hash: {name: Tom, age: 20}数组(列表) - blue- red或color: [blue, red]纯量(单个值) 字符串: str: 'hello world';布尔值:isSet: true;null:parent: ~;时间:iso8601: 2025-7-11T20:00:00.10-05:00
(二)k8s 资源清单核心字段
| 字段层级 | 字段名 | 类型 | 说明 |
|---|---|---|---|
| 顶层 | apiVersion | String | k8s API 版本(如 v1、apps/v1),用 kubectl api-versions 查询 |
| 顶层 | kind | String | 资源类型(如 Pod、Deployment、Service、Namespace) |
| 顶层 | metadata | Object | 元数据,包含 name(资源名)、namespace(命名空间)等 |
| 顶层 | spec | Object | 资源详细配置 |
| spec 下 | containers[] | List | 容器列表,每个容器包含 name(容器名)、image(镜像名)等 |
| containers [] 下 | imagePullPolicy | String | 镜像拉取策略:Always(每次拉取)、Never(仅本地)、IfNotPresent(本地无则拉取) |
| containers [] 下 | ports[] | List | 端口配置,含 containerPort(容器端口)、hostPort(主机端口)、protocol(协议,默认 TCP) |
| spec 下 | restartPolicy | String | 重启策略:Always(始终重启)、OnFailure(非零退出码重启)、Never(不重启) |
| spec 下 | nodeSelector | Object | 节点标签选择器,如 nodeSelector: {region: nanjing} |
(三)案例:创建 Tomcat 资源(Deployment+Service)
# 1. 配置文件(tomcat.yaml) # ConfigMap:存储静态页面 apiVersion: v1 kind: ConfigMap metadata: name: tomcat-web-content data: index.html: | <html><body>Hello Tomcat</body></html> --- # Deployment:创建2个Tomcat副本 apiVersion: apps/v1 kind: Deployment metadata: name: tomcat-test spec: replicas: 2 selector: matchLabels: app: tomcat template: metadata: labels: app: tomcat spec: securityContext: runAsUser: 1000 fsGroup: 1000 containers: - name: tomcat image: tomcat:9.0.85-jdk11 ports: - containerPort: 8080 volumeMounts: - name: web-content mountPath: /usr/local/tomcat/webapps/ROOT/index.html subPath: index.html volumes: - name: web-content configMap: name: tomcat-web-content --- # Service:NodePort类型暴露端口 apiVersion: v1 kind: Service metadata: name: tomcat-service spec: type: NodePort selector: app: tomcat ports: - port: 80 targetPort: 8080 nodePort: 30080 # 2. 应用配置:kubectl apply -f tomcat.yaml # 3. 访问:http://<节点IP>:30080/index.html(如http://192.168.100.128:30080/index.html)
六、命名空间(Namespace)管理
(一)命名空间作用
-
对资源进行逻辑分组,隔离不同环境(如开发、测试、生产)
-
并非所有资源都属于命名空间:nodes、persistent volume、namespace 本身不属于任何命名空间;pod、service、deployment 等属于指定命名空间(默认 default)
(二)命名空间操作
-
查看命名空间
-
查看所有:
kubectl get namespaces(可简写为kubectl get ns) -
查看指定命名空间资源:
kubectl get all --namespace=<命名空间名>(如kubectl get all -n kube-system) -
查看所有命名空间 Pod:
kubectl get pods -A
-
-
创建命名空间
-
命令创建:
kubectl create namespace <命名空间名>(如kubectl create namespace web1) -
YAML 创建:编写 YAML 文件(如 create_web2.yaml),再执行
kubectl apply -f <文件>
apiVersion: v1 kind: Namespace metadata: name: web2
-
-
删除命名空间
-
注意:删除命名空间会自动删除其下所有资源;default、kube-system、kube-public 不可删除
-
命令删除:
kubectl delete namespaces <命名空间名>(如kubectl delete ns web1) -
YAML 删除:
kubectl delete -f <创建时的YAML文件>(如kubectl delete -f create_web2.yaml)
-
2377

被折叠的 条评论
为什么被折叠?



