美文网首页
K8S资源对象简介

K8S资源对象简介

作者: Walker_7797 | 来源:发表于2022-01-20 14:41 被阅读0次

    一、资源简介

    1.1 Pod

    • pod是k8s中的最小单元。
    • 一个pod中可以运行一个容器,也可以运行多个容器。
    • 运行多个容器,这些容器是一起被调度的。
    • pod的生命周期是短暂的,不会自愈,是用完就销毁的实体。
    • 所以一般使用Controller来创建和管理pod。

    1.2 Pod控制器

    • Replication Controller:简称rc,第一代pod副本控制器。
    • rc对于标签选择只支持"="和"!="。
    • ReplicaSet:简称rs,第二代pod副本控制集。
    • rs和rc的区别是,对标签不仅支持"="和"!=",还支持"in"、"notin"。
    • Deployment:简称deploy,第三代pod控制器,除了有rs的功能之外,还有更多高级的功能,例如:滚动升级、回滚等。

    1.3 Service

    • service解耦了服务和应用。
    • 常用service有两种:集群内部的service,通过selector指定pod,自动创建endpoints;集群外部的service,手动创建endpoints,指定外部服务的ip,端口和协议。
    • kube-proxy监听这k8s-apiserver,一旦service资源发生变化(调k8s-api修改srevice信息),kube-proxy就会生成对应的负载调度的调整,保证service的最新状态。

    1.4 Volume

    • 数据和镜像解耦,容器间的数据共享。
    • k8s抽象出来的一个对象,用来保存数据,做存储用。
    • emptyDir:本地临时卷,当pod被分配给节点时,首先创建emptyDir卷,并且只要该pod在该节点上运行,卷就会存在;正如卷的名字所述,它最初是空的;pod中的容器可以读取和写入emptyDir卷中的相同文件,尽管该卷可以挂载到容器中的相同或不同路径上;无论pod由于任何原因从节点删除时,emptyDir中的数据会被永久删除。
    • hostPath:本地卷,将主机节点的文件系统中的文件或目录挂载到集群中,pod删除的时候,卷不会被删除。
    • nfs:共享卷,允许将现有的nfs(网络文件系统)共享挂载到您的容器中。不像emptyDir,当删除pod时,nfs卷的内容被保留,卷仅仅是被卸载;这意味着nfs卷可以预填充数据,并且可以在pod之间“切换”数据;nfs可以被多个写入者同时挂载。
    • configMap:配置文件,配置信息和镜像解耦,将配置信息放到configMap对象中,然后在pod的对象中导入configmap对象,实现导入配置的操作。

    1.5 PV/PVC

    • PersistentVolume:实现pod和storage的解耦,这样修改storage的时候不需要修改pod,也可以实现存储胡和应用权限的隔离;PV是由管理员设置的存储,是集群中的一部分;就想节点是集群中的资源一样,PV也是集群中的资源。PV是Volume之类的卷插件,但是有独立于使用PV的pod的生命周期;此API对象包含存储实现的细节,即NFS,ISCSI或特定于云供应商的存储系统。
    • PersistentVolumeClaim:PVC是用户存储的请求。它与pod相似;pod消耗节点资源,PVC消耗PV资源;pod可以请求特定级别的资源(CPU和内存),声明可以请求特定的大小和访问模式。

    1.6 StatefulSet

    • 为了解决有状态服务的问题,它管理的pod拥有固定的pod名称,主机名,启停顺序。

    1.7 DaemonSet

    • 在当前集群中每个节点运行同一个pod,当有新的节点加入集群时也会为新的节点配置相同的pod,当节点从集群中移除时,其pod也会被kubernetes回收,但是删除DaemonSet将删除其创建的所有pod。

    二、NodePort和SVC

    2.1 SVC

    • pod控制器只能通过pod的ip去访问,如果pod重建,ip会变换,所以可以用svc的方式,svc会分配一个内部的ClusterIP,也可以通过svc的域名访问,前提是域名能够被解析。

    2.2 NodePort

    • svc默认模式是ClusterIP模式,只能在集群内的pod中访问,如果想要从集群外部访问,需要创建nodeport模式,可以指定端口,不指定端口,会随机分配一个端口,该端口集群内所有节点上都会监听,包括master节点。
    • 集群外部访问时,会先访问节点上的nodeport端口(主机上的端口),然后nodeport端口转发给svc的端口,svc的端口转发给容器的target端口。

    三、NFS

    3.1 安装nfs

    环境:CentOS系统

    • 在服务端安装nfs-server
    yum install -y nfs-server
    
    • 在node端安装nfs-utils
    yum install -y nfs-utils
    
    • 编辑服务端/etc/exports文件,设置共享目录
    # 注:*和()之间不能有空格,设置读写权限
    DIR *(rw,no_root_squash)
    
    • node端使用命令查看分享的目录
    showmount -e SERVER_IP
    
    • 编写yaml文件
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ng-deploy-80
      template:
        metadata:
          labels:
            app: ng-deploy-80
        spec:
          containers:
          - name: ng-deploy-80
            image: nginx
            ports:
            - containerPort: 80
            volumeMounts:
            - mountPath: /usr/share/nginx/html/mysite
              name: my-nfs-volume
          volumes:
          - name: my-nfs-volume
            nfs:
              server: SERVER_IP    # 替换为nfs server端ip
              path: DIR    # 替换为nfs server端共享目录
    

    四、探针

    4.1 探针三种处理方式

    • ExecAction:在容器内执行指定命令,如果命令退出时返回码为0则认为诊断成功。
    • TCPSocketAction:对指定端口上的容器的ip地址进行TCP检查,如果端口打开,则认为诊断成功。
    • HTTPGetAction:对指定的端口与和路径上的ip地址执行HTTPGet请求,如果响应码的状态大于等于200且小于400,则认为诊断成功。

    4.2 LivenessProbe

    • livenessProbe:存活探针
    • 检测容器是否正在运行,如果存活探测失败,则kubelet会杀死容器,并且容器将会受到其重启策略的影响,如果容器不提供存活探针,则默认状态为success,用于控制是否重启pod。

    4.3 ReadinessProbe

    • readinessProbe:就绪探针
    • 如果就绪探测失败,端点控制器将从与pod匹配的所有service的端点中删除该pod的ip地址,初始延迟之前就绪探针默认为Failure(失败),如果容器不提供就绪探针,则默认状态为success,用于控制pod是否添加至service。

    相关文章

      网友评论

          本文标题:K8S资源对象简介

          本文链接:https://www.haomeiwen.com/subject/fbqchrtx.html