当前位置: 首页 > article >正文

Kubernetes 的资源管理方式

集群架构

Docker 是每一个节点(包括 Master 节点和 Node 节点)的运行时环境。

        kubelet 负责控制所有容器的启动和停止等,保证每个节点(包括 Master 节点和 Node 节点)正常工作,并且帮助 Node 节点和 Master 节点进行交互。

Master 节点的关键组件

  • kubelet(监工):所有节点必备的。控制当前节点所有 Pod 的生命周期以及与 api-server 交互等工作。
  • kube-api-server:负责接收所有请求。集群内对集群的任何修改都是通过命令行、UI 将请求发给 api-server 才能执行的。api-server 是整个集群操作对内、对外的唯一入口,不包含我们后来部署应用暴露端口的方式。
  • kube-proxy:整个节点的网络流量负责。
  • cri:容器运行时环境(如:Docker 、Podman 等)。

Node 节点的关键组件:

  • kubelet(监工):所有节点必备的。控制当前节点所有 Pod 的生命周期以及与 api-server 交互等工作。
  • kube-proxy:整个节点的网络流量负责。
  • cri:容器运行时环境(如:Docker 、Podman 等)。

 资源管理方式

① 命令式对象管理:直接通过命令去操作 Kubernetes 的资源。

kubectl run nginx-pod --image=nginx:1.17.1 --port=80


② 命令式对象配置:通过命令配置和配置文件去操作 Kubernetes 的资源。

kubectl create/patch/delete -f nginx-pod.yaml


③ 声明式对象配置:通过 apply 命令和配置文件去操作 Kubernetes 的资源。

kubectl apply -f nginx-pod.yaml

类型

操作

适用场景

优点

缺点

命令式对象管理

对象

测试

简单

只能操作活动对象,无法审计、跟踪

命令式对象配置

文件

开发

可以审计、跟踪

项目大的时候,配置文件多,操作麻烦

声明式对象配置

目录

开发

支持目录操作

意外情况下难以调试

命令式对象管理

kubectl 命令

  • kubectl 是 Kubernetes 集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署。

参数:

  • command:指定要对资源执行的操作,如:create、get 、delete 等。
  • type:指定资源的类型,如:deployment 、pod 、service 等。
  • name:指定资源的名称,名称大小写敏感。
  • flags:指定额外的可选参数。
[root@k8s-master ~]# kubectl get pod 
NAME                     READY   STATUS    RESTARTS   AGE
nginx-65c4bffcb6-f9b55   1/1     Running   0          81m
[root@k8s-master ~]# kubectl get pod nginx-65c4bffcb6-f9b55 -o yaml
apiVersion: v1
kind: Pod
metadata:
  annotations:
    cni.projectcalico.org/containerID: c1ccb59bf2b30c580de0ee177f1eb122047ce0b066df816b434c559c0b89c094
    cni.projectcalico.org/podIP: 10.244.169.129/32
    cni.projectcalico.org/podIPs: 10.244.169.129/32
  creationTimestamp: "2024-12-27T10:04:42Z"
  generateName: nginx-65c4bffcb6-
  labels:
    app: nginx
    pod-template-hash: 65c4bffcb6
  name: nginx-65c4bffcb6-f9b55
  namespace: default
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: ReplicaSet
    name: nginx-65c4bffcb6
    uid: c04281de-fdb0-4f23-8309-8c4adb140977
  resourceVersion: "9026"
  uid: 4a282996-80b5-4cc8-85a1-1ccd0c22a090
spec:
  containers:
  - image: nginx:1.14-alpine
    imagePullPolicy: IfNotPresent
    name: nginx
    resources: {}
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: kube-api-access-mz6pk
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  nodeName: k8s-node2
  preemptionPolicy: PreemptLowerPriority
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - name: kube-api-access-mz6pk
    projected:
      defaultMode: 420
      sources:
      - serviceAccountToken:
          expirationSeconds: 3607
          path: token
      - configMap:
          items:
          - key: ca.crt
            path: ca.crt
          name: kube-root-ca.crt
      - downwardAPI:
          items:
          - fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
            path: namespace
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2024-12-27T10:04:42Z"
    status: "True"
    type: Initialized
  - lastProbeTime: null
    lastTransitionTime: "2024-12-27T10:04:58Z"
    status: "True"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: "2024-12-27T10:04:58Z"
    status: "True"
    type: ContainersReady
  - lastProbeTime: null
    lastTransitionTime: "2024-12-27T10:04:42Z"
    status: "True"
    type: PodScheduled
  containerStatuses:
  - containerID: docker://d10a9daced59d3ab91e06aed7456808c727d450fdbb7b21be5180957f37e16ba
    image: nginx:1.14-alpine
    imageID: docker-pullable://nginx@sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7
    lastState: {}
    name: nginx
    ready: true
    restartCount: 0
    started: true
    state:
      running:
        startedAt: "2024-12-27T10:04:57Z"
  hostIP: 192.168.58.233
  phase: Running
  podIP: 10.244.169.129
  podIPs:
  - ip: 10.244.169.129
  qosClass: BestEffort
  startTime: "2024-12-27T10:04:42Z"
  • 基本命令:

命令

翻译

命令作用

create

创建

创建一个资源

edit

编辑

编辑一个资源

get

获取

获取一个资源

patch

更新

更新一个资源

delete

删除

删除一个资源

explain

解释

展示资源文档

  •  运行和调试:

命令

翻译

命令作用

run

运行

在集群中运行一个指定的镜像

expose

暴露

暴露资源为 Service

describe

描述

显示资源内部信息

logs

日志

输出容器在 Pod 中的日志

attach

缠绕

进入运行中的容器

exec

执行

执行容器中的一个命令

cp

复制

在 Pod 内外复制文件

rollout

首次展示

管理资源的发布

scale

规模

扩(缩)容 Pod 的数量

autoscale

自动调整

自动调整 Pod 的数量

  •  高级命令:

命令

翻译

命令作用

apply

应用

通过文件对资源进行配置

label

标签

更新资源上的标签

  •  其他命令:

命令

翻译

命令作用

cluster-info

集群信息

显示集群信息

version

版本

显示当前 Client 和 Server 的版本

资源类型(type)

  • Kubernetes 中所有的内容都抽象为资源,可以通过下面的命令进行查看:
[root@k8s-master ~]# kubectl api-resources
  • 经常使用的资源如下所示:
  •  集群级别资源:

资源名称

缩写

资源作用

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

配置

查看,创建,删除名称空间 

[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   46h
kube-node-lease   Active   46h
kube-public       Active   46h
kube-system       Active   46h
[root@k8s-master ~]# kubectl create ns dev
namespace/dev created
[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   46h
dev               Active   2s
kube-node-lease   Active   46h
kube-public       Active   46h
kube-system       Active   46h
[root@k8s-master ~]# kubectl delete ns dev
namespace "dev" deleted
[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   46h
kube-node-lease   Active   46h
kube-public       Active   46h
kube-system       Active   46h


http://www.kler.cn/a/454798.html

相关文章:

  • LabVIEW应用在工业车间
  • 电子电气架构 --- 什么是自动驾驶技术中的域控制单元(DCU)?
  • vue之axios基本使用
  • K8s DaemonSet的介绍
  • 全面Kafka监控方案:从配置到指标
  • SQL子查询和having实例
  • 【Java 代码审计入门-02】SQL 漏洞原理与实际案例介绍
  • 负载均衡式在线OJ系统测试报告(Jmeter性能测试、Selenium自动化测试脚本)
  • 嵌入式单片机模数转换控制与实现详解
  • JS 设置按钮的loading效果
  • 开源 SOAP over UDP
  • OpenCV相机标定与3D重建(35)计算两幅图像之间本质矩阵(Essential Matrix)的函数findEssentialMat()的使用
  • Django框架:构建高效Web应用的强大工具
  • Bash语言的语法
  • CSS(四)display和float
  • 寻找目标值 (最优解)
  • Vue 3 中父子组件的交互与弹框控制:v-model 和事件传递的实践
  • FreeType矢量字符库的介绍、交叉编译以及安装
  • T7 TensorFlow入门实战——咖啡豆识别
  • Lua语言入门 - Lua常量
  • “日常事务信息化”:个人日常事务管理系统的未来发展
  • Pico “版权校验不通过:签名非法” 处理方法?
  • 4个线程安全的单例模式
  • Python的随机数
  • 关于机器学习当中的决策树算法解析
  • 每日算法一练:剑指offer——动态规划(1)