Kubernetes(k8s)管理核心笔记

一、kubectl 客户端命令

(一)命令帮助与分类

  1. 获取帮助kubectl -h 查看所有命令概览,kubectl <command> --help 查看具体命令详情

  2. 命令分类

    命令类别包含命令核心作用
    基础命令(入门)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、versionAPI 资源查看、API 版本查看、配置修改、版本查询

(二)核心命令详解

  1. 资源查看与操作

    • 查看资源: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

  2. 资源监控(需 metrics-server)

    • 部署 metrics-server:

      1. 下载配置文件:wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metrics-server-components.yaml

      2. 修改镜像源与配置:sed -i 's/registry.k8s.io\/metrics-server/registry.cn-hangzhou.aliyuncs.com\/google_containers/g' metrics-server-components.yaml,并在容器 args 中添加 --kubelet-insecure-tls

      3. 应用配置:kubectl apply -f metrics-server-components.yaml

    • 查看资源使用:kubectl top pod <pod名> -n <命名空间>(Pod 资源)、kubectl top node <节点名>(节点资源)

  3. 集群信息查看

    • 集群地址与组件信息:kubectl cluster-info

    • API 版本查看:kubectl api-versions

    • 客户端与服务端版本:kubectl version

二、集群 Node 管理

(一)节点信息查看

  1. 查看节点列表:kubectl get nodes

  2. 查看节点详细信息(IP、系统、容器运行时等):kubectl get nodes -o wide

  3. 查看节点详细描述(资源、条件、事件等):kubectl describe node <节点名>(如 kubectl describe node master

(二)Node 节点实现 kubectl 管理(解决连接拒绝问题)

  1. 在 Node 节点创建.kube 目录:mkdir /root/.kube

  2. 从 Master 节点复制配置文件:scp /etc/kubernetes/admin.conf node1:/root/.kube/config(node1 为目标 Node 节点)

  3. 验证:在 Node 节点执行 kubectl get nodes,成功显示节点列表即配置完成

三、Dashboard 界面部署与访问

(一)部署步骤

  1. 下载配置文件:wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml

  2. 修改配置(添加 NodePort 暴露端口):

     spec:
       ports:
       - port: 443
         targetPort: 8443
         nodePort: 30001  # 新增
       selector:
         k8s-app: kubernetes-dashboard
       type: NodePort  # 新增
  3. 应用配置:kubectl apply -f recommended.yaml

  4. 查看部署状态:kubectl get pods -n kubernetes-dashboardkubectl get svc -n kubernetes-dashboard

(二)访问与登录

  1. 访问地址:浏览器输入 https://<节点IP>:30001(需用 https 协议,忽略证书警告)

  2. 创建管理员令牌:

    • 编写 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 小时)

  3. 登录:在 Dashboard 登录页粘贴令牌,完成登录

四、节点标签(Label)管理

(一)标签操作

  1. 查看标签:kubectl get nodes --show-labels(查看所有节点标签)、kubectl get nodes -L <标签键>(查看指定标签值)

  2. 设置标签:kubectl label node <节点名> <标签键>=<标签值>(如 kubectl label node node2 region=nanjing

  3. 修改标签:kubectl label node <节点名> <标签键>=<新标签值> --overwrite=true

  4. 删除标签:kubectl label node <节点名> <标签键>-(如 kubectl label node node1 env-

(二)标签选择器

选择器类型语法示例作用
等值匹配kubectl get nodes -l env=test1kubectl get nodes -l env!=test1匹配指定值、排除指定值
集合匹配kubectl get nodes -l "env in(test1,test2)"kubectl get nodes -l "env notin(test1)"匹配集合内值、排除集合内值

五、YAML 声明式文件

(一)YAML 基础语法

  1. 缩进规则:低版本(1.0/2.0)仅允许空格,不允许 Tab,相同层级左对齐

  2. 注释# 开头,直至行尾

  3. 数据结构

    结构类型语法示例
    对象(键值对)name: Tomhash: {name: Tom, age: 20}
    数组(列表)- blue - redcolor: [blue, red]
    纯量(单个值)字符串:str: 'hello world';布尔值:isSet: true;null:parent: ~;时间:iso8601: 2025-7-11T20:00:00.10-05:00

(二)k8s 资源清单核心字段

字段层级字段名类型说明
顶层apiVersionStringk8s API 版本(如 v1、apps/v1),用 kubectl api-versions 查询
顶层kindString资源类型(如 Pod、Deployment、Service、Namespace)
顶层metadataObject元数据,包含 name(资源名)、namespace(命名空间)等
顶层specObject资源详细配置
spec 下containers[]List容器列表,每个容器包含 name(容器名)、image(镜像名)等
containers [] 下imagePullPolicyString镜像拉取策略:Always(每次拉取)、Never(仅本地)、IfNotPresent(本地无则拉取)
containers [] 下ports[]List端口配置,含 containerPort(容器端口)、hostPort(主机端口)、protocol(协议,默认 TCP)
spec 下restartPolicyString重启策略:Always(始终重启)、OnFailure(非零退出码重启)、Never(不重启)
spec 下nodeSelectorObject节点标签选择器,如 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)

(二)命名空间操作

  1. 查看命名空间

    • 查看所有:kubectl get namespaces(可简写为 kubectl get ns

    • 查看指定命名空间资源:kubectl get all --namespace=<命名空间名>(如 kubectl get all -n kube-system

    • 查看所有命名空间 Pod:kubectl get pods -A

  2. 创建命名空间

    • 命令创建:kubectl create namespace <命名空间名>(如 kubectl create namespace web1

    • YAML 创建:编写 YAML 文件(如 create_web2.yaml),再执行

       kubectl apply -f <文件>
       apiVersion: v1
       kind: Namespace
       metadata:
         name: web2
  3. 删除命名空间

    • 注意:删除命名空间会自动删除其下所有资源;default、kube-system、kube-public 不可删除

    • 命令删除:kubectl delete namespaces <命名空间名>(如 kubectl delete ns web1

    • YAML 删除:kubectl delete -f <创建时的YAML文件>(如 kubectl delete -f create_web2.yaml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值