K8S核心概念

本文详细介绍了Kubernetes(K8S)的三个核心概念:Deployment负责应用程序实例的创建和更新,提供自我修复机制;Pod作为逻辑主机,承载应用容器和共享资源;Service提供Pod的逻辑集合、外部访问和负载均衡。此外,还阐述了K8S中的资源类型、资源清单yaml的格式以及如何使用yaml文件创建和管理Deployment和Service。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

K8S核心概念

K8S有很多核心概念,我们先看下几个核心概念。
Deployment
Deployment负责创建和更新应用程序的实例。创建Deployment后,Kubernetes Master将应用程序实例调度到集群的各个节点上。如果托管实例的节点关闭或删除,Deployment控制器会将该实例替换为集群中另一个节点上的实例。这提供了一种自我修复机制来解决机器故障维护问题。
在这里插入图片描述

Pod
Pod相当于逻辑主机的概念,负责托管应用实例。包括一个或多个应用程序容器(如Docker),以及这些容器的一些共享资源(共享存储、网络、运行信息等)。
在这里插入图片描述
Service
Service是一个抽象层,它定义了一组Pod的逻辑集,并为这些Pod支持外部流量暴露、负载平衡和服务发现。
尽管每个Pod都有一个唯一的IP地址,但是如果没有Service,这些IP不会暴露在集群外部。Service允许您的程序接收流量。Service也可以用在ServiceSpec标记type的方式暴露,type类型如下:

  • ClusterIP(默认):在集群的内部IP上公开Service。这种类型使得Service只能从集群内访问。

  • NodePort:使用NAT在集群中每个选定Node的相同端口上公开Service。使用**:**从集群外部访问Service。是ClusterIP的超集。

  • LoadBalancer:在当前云中创建一个外部负载均衡器(如果支持的话),并为Service分配一个固定的外部IP。是NodePort的超集。

  • ExternalName:通过返回带有该名称的CNAME记录,使用任意名称(由spec中的externalName指定)公开service。不使用代理。
    在这里插入图片描述
    k8s中的资源
    k8s中所有的内容都抽象为资源,资源实例化之后,叫做对象,上面说的那些核心概念都是k8s中的资源。
    k8s中有哪些资源

  • 工作负载型资源(workload):Pod,ReplicaSet,Deployment,StatefulSet,DeamonSet等等

  • 服务发现及负载均衡型资源(ServiceDiscovery LoadBalance):Service,Ingress得等

  • 配置与存储资源:Volume(存储卷),CSI(容器存储接口,可以扩展各种各样的第三方存储卷)

  • 特殊型的存储卷:ConfigMap(配置中心使用的资源类型),Secret(保存敏感数据),DownwardAPI(把外部环境中信息输出给容器)
    以上这些资源都是配置在名称空间级别。

  • 集群级资源:Namespace,node,Role,ClusterRole,RoleBinding(角色绑定),ClusterRoleBinding(集群角色绑定)

  • 元数据型资源:HPA(Pod水平扩展),PodTemplate(Pod模板,用于让控制器创建Pod时使用的模板),LimitRange(用来定义硬件资源限制的)

资源清单
之前我们直接用命令创建deployment,pod,service这些资源,起始在k8s中,我们一般使用yaml格式的文件来创建符合我们预期期望的资源,这样的yaml文件我们一般称为资源清单。
资源清单yaml的格式

apiVersion: group/apiversion # 如果没有给定group名称,那么默认为croe,可以使用kubectl api-versions 获取当前版本上所有的apiVersion版本信息(每个版本可能不同)
kind: # 资源类别
metadata: #资源元数据
	name
	namespace # k8s自身的namespce
	labels
	annotations # 主要目的是方便用户阅读查找
spec:# 期望的状态(disired state)
status:# 当前状态,本字段由k8s自身维护,用户不能去定义
# 配置清单有五个一级字段,其中status字段用户不能定义,由k8s自身维护  

使用资源清单yaml来创建k8s的资源对象
用yaml创建deployment资源的对象
我们可以用创建deployment的命令加上参数–dry-run -o yaml就可以输出这次部署的资源清单yaml

kubectl create deployment my-tomcat --image=tomcat:7.0.75-alpine --dry-run -o yaml

在这里插入图片描述

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: my-tomcat
  name: my-tomcat-yaml # 修改deployment的名称
spec:
  replicas: 2 # 修改pod副本为两个
  selector:
    matchLabels:
      app: my-tomcat
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: my-tomcat
    spec:
      containers:
      - image: tomcat:7.0.75-alpine
        name: tomcat
        resources: {}
status: {}

然后执行如下命令就可以用yaml文件来创建这次部署

kubectl apply -f deployment‐demo.yaml

在这里插入图片描述
从上图看出我们用yaml生成的部署已经成功。

用yaml创建service资源的对象

kubectl expose deployment my-tomcat --name=tomcat --port=8080 --type=NodePort --dry-run -o yaml

在这里插入图片描述
修改上面yaml内容,保存为文件:service-demo.yaml

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: my-tomcat
  name: tomcat-service-yaml #修改service名称
spec:
  ports:
  - port: 80 # service的虚拟ip对应的端口,在集群内网机器可以访问用service的虚拟ip加端口号访问服务
    protocol: TCP
    targetPort: 8080 # pod暴露的端口,一般与pod内部暴露的端口一致
  selector:
    app: my-tomcat
  type: NodePort
status:
  loadBalancer: {}

然后执行如下命令就可以使用yaml来创建service

kubectl apply -f service-demo.yaml

在这里插入图片描述
从上图看出我们用yaml创建的service已经成功。

针对已有资源输出资源清单yaml
查看pod资源列表
在这里插入图片描述
将资源的配置以yaml的格式输出来

# 使用 -o 参数加yaml,可以将资源的配置以yaml的格式出出出来,也可以使用json,输出为json格式
kubectl get pod nginx-f89759699-t6wgh -o yaml

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

core321

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值