Kubernetes资源对象解读

Pod

Pod是kubernetes的最小操作单元,一个Pod里面可以包含多个容器(如Docker容器),每个容器共享Pod的网络、Volume等资源。

Pod-配置文件示例

apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    name: pod-demo-redis
spec:
  containers:
    name: pod-demo-redis
    image: kubeguide/redis-master
    port: 6379

Pod-配置文件解读

  • 创建一个name为pod-demo的pod资源对象
  • 命名空间为默认命名空间default
  • 为该pod定义一个标签为 name=pod-demo-redis的标签
  • 根据kubeguide/redis-master镜像创建一个name为pod-demo-redis的容器,且端口为6379。

Deployment

Deployment主要起到管理Pod部署的作用,包括后面的HPA也是通过监控Deployment的目的实现Pod的自动扩缩容。

Deployment-配置文件示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pod-demo-redis
  labels:
    name: pod-demo-redis
spec:
  replicas: 3
  selector:
    matchLabels:
      app: pod-demo-redis
  template:
    metadata:
      labels:
        app: pod-demo-redis
    spec:
      containers:
        name: pod-demo-redis
        image: kubeguide/redis-master
        ports: 
          - containerPort: 6379

Deployment-配置文件解读

  • 创建一个Deployment的资源对象,并且赋值name和labels(标签)为pod-demo-redis。
  • 选择器匹配带有label为pod-demo-redis的pod进行部署管理,并且保证kubernetes集群内这些被管理的pod至少要存在3个运行正常的pod(负载均衡)。
  • 定义标签为pod-demo-redis的pod模板,并且改pod内部运行redis容器,当集群数量少于3的时候,会根据template的模板创建pod知道达到replicas的值。

Service

Kubernetes的实现服发现离开不了Service资源对象,Service自带一种全局唯一的虚拟IP地址-ClusterIP,Kubernetes通过把ClusterIP和Service的name绑定在一起就能简单粗暴地解决了服务发现功能。例如在kubernetes集群内部,不同宿主机的Pod内部都可以使用serviceName:port实现访问,Service的创建往往依赖Pod。

Service-配置文件示例

apiVersion: v1
kind: Service
metadata:
  name: demo-redis-service
spec:
  selector:
    app: demo-boot-redis
  type: NodePort
  ports:
    - port: 8082
      targetPort: 8082
      protocol: TCP
      nodePort: 32088

Service-配置文件解读

创建一个Service类型的资源对象,并且name为demo-redis-service
选择标签(label)为 app: pod-demo-redis 的Pod资源对象进行管理创建服务。
该Service的端口类型为NodePort(可以直接通过宿主机的ip+nodePort访问),targetPort是用来确定提供该服务的容器的端口,Port是该Service的端口,通常设置targetPort和port一样。

Volume

Volume(存储卷)是Kubernetes的存储类资源对象,常用的类型有emptyDir和hostPath,其他类型有iscsi、nfs、glusterfs、rbd、gitRepo、configmap、sercret等。同一个Pod内部共享volume。

Volume-配置文件示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pod-demo-redis
  labels:
    name: pod-demo-redis
spec:
  replicas: 3
  selector:
    matchLabels:
      app: pod-demo-redis
  template:
    metadata:
      labels:
        app: pod-demo-redis
    spec:
      containers:
        name: pod-demo-redis
        image: kubeguide/redis-master
        ports: 
          - containerPort: 6379
        volumeMounts:
          - name: demo-emptydir
            mountPath: /usr/demo-empty
          - name: demo-hostpath
            mountPath: /usr/logs
      volumes:
        - name: demo-emptydir
          emptyDir: {}
        - name: demo-hostpath
          hostPath:
            path: /usr/local/logs

Volume-配置文件解读

  • 在Deployment的示例中添加了2个volumes资源对象,并且类型依次为emptyDir和hostPath(主义hostPath的前提是宿主机存在/user/local/logs等文件路径)。
  • pod-demo-redis的Pod容器内部挂载这两个存储卷,挂载这两个存储卷之后,容器内部对该存储卷的内部修改会影响到对应的Volume资源。

Ingress

Ingress是Kubernetes的网关规则配置资源对象,需要和IngressController、实际的网关服务器(例如Nginx、Apisix等)等结合使用。Ingress负责管理Service的访问路由规则、IngressController用以实时监控资源对象Ingress、Service、Endpoint、Secret、Node、Sercret等变化,自动对Nginx进行对应操作。而实现具体的应用层负载均衡则有类似Nginx的服务器负责。

Ingress的配置比较繁琐复杂、通常使用Helm进行配置,该单元另开文章讲述。

HPA

HPA全称HorizontalPodAutoscaler,是kubernetes里面的一种资源对象,主要作用是可以对Deployment的pod资源配置水平、垂直扩缩容。

HPA-配置文件示例

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: my-web-app-hpa
  namespace: default
spec:
  maxReplicas: 10
  minReplicas: 1
  scaleTargetRef
    kind: Deployment
    name: my-web-app-deploy
  targetCPUUtilizationPercentage: 90

HPA-配置文件解读

  • 当前这个name为 my-web-app-hpa 的HPA资源对象控制的目标对象是一个name为 my-web-app-deploy 的Deployment里的Pod副本。
  • 当这些Pod副本里面的CPU利用率的值都超过90%时,会触发自动动态扩容,限定Pod的数量范围为1~10。

++参考书籍为《Kubernetes零基础快速入门》《Kubernetes权威指南》《Nginx应用与运维实战》++

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

迪八戈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值