searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

狭义paas的应用负载

2023-09-01 09:17:17
13
0

一、概述

如droplet之于CloudFoundry,docker容器之于docker-compose,在kubernetes的狭义paas实现中,容器组(POD)是业务逻辑落地的载体。
容器组实现了对应用主程序、初始化处理以及辅助能力的逻辑抽象。

二、容器组的定义

如前文所述,下图为一个典型容器组结构:

在容器组中,各容器角色各司其职:

1、pause容器持有该容器组网络命名空间

2、init容器进行前置准备工作,如准备容器运行中依赖的数据包,安装主进程依赖的工具套件

3、main容器处理主业务逻辑,比如响应外部web请求

4、sidecar容器提供支撑服务,比如采集容器运行日志

 

上述结构的一个容器组定义范例如下:

apiVersion: v1                
kind: Pod                
metadata:               
  name: string             #必选,Pod名称       
  namespace: string       
  labels:             
    - name: string       
  annotations:          
    - name: string
spec:                
  containers:             #必选,Pod中容器列表
  - name: init              #可选,容器组急先锋
    ....
  - name: sidecar           #可选,容器勤务组
    ....
  - name: main
    image: string         #必选,容器的镜像名称
    imagePullPolicy: [Always | Never | IfNotPresent]  
    command: [string]       #容器的启动命令列表
    args: [string]        
    workingDir: string    
    volumeMounts:         #挂载到容器内部的存储卷配置
    - name: string         
      mountPath: string   
      readOnly: boolean  
    ports:               #需要暴露的端口号列表
    - name: string         
      containerPort: int    
      hostPort: int       
      protocol: string      
    env:                
    - name: string       
      value: string      
    resources:            #资源限制和请求的设置
      limits:            
        cpu: string      
        memory: string
      requests:          
       ...
    readnessProbe:          #可读探针,检测失败则将容器从服务摘除
      ...
    livenessProbe:         #存活探针,检测失败重启
      ...
      httpGet:            
        ...
      tcpSocket:       
         ...
      exec:              #对Pod容器内检查方式设置为exec方式
        command: [string] 
    restartPolicy: [Always | Never | OnFailure] #重启策略
    nodeSelector: obeject
    imagePullSecrets:        
    - name: string
    hostNetwork: false     
    volumes:             #定义共享存储卷列表
    - name: string          
      emptyDir: {}          
      hostPath: string        
        path: string        
      secret:           #使用类型为secret的存储卷
        ...
      configMap:         #使用类型为configMap的存储卷
        name: string
        items:
        - key: string
          path: string    

 

三、容器组的实现

1、容器组的隔离与共享

在kubernetes中,容器组代表了一个紧密协作的业务程序集及其上下文,是namespace技术落地实践之一:

通常情况下:

a)相同容器组不同容器共享了相同的net、uts以及ipc命名空间

b)相同容器组不同容器独占了不同的pid、mnt命名空间

 

2、容器组在kubernetes的位置以及与其他资源关系

毋庸置疑,容器组作为业务逻辑的载体在kubernenetes中是C位大咖。

狭义paas的实现围绕容器组展开实现:

容器组与周边资源典型关系如下:

1、容器组使用configmap获取配应用配置

2、容器组使用pvc挂载外部存储

3、容器组使用secret获取加密信息

4、容器组受DaemonSet控制,保障单节点单容器组的部署

5、容器组受StatefulSet控制,实现有状态应用的部署

6、容器组受RelicaSet控制,实现固定数量的容器组保障

7、容器组绑定Node后,将由Node上kubelet负责拉起

 

最后抛出1个讨论题,欢迎交流。

讨论:容器组作为1个逻辑资源对象,它存在的价值与意义是什么?

 

 

0条评论
0 / 1000
lorland
10文章数
0粉丝数
lorland
10 文章 | 0 粉丝
原创

狭义paas的应用负载

2023-09-01 09:17:17
13
0

一、概述

如droplet之于CloudFoundry,docker容器之于docker-compose,在kubernetes的狭义paas实现中,容器组(POD)是业务逻辑落地的载体。
容器组实现了对应用主程序、初始化处理以及辅助能力的逻辑抽象。

二、容器组的定义

如前文所述,下图为一个典型容器组结构:

在容器组中,各容器角色各司其职:

1、pause容器持有该容器组网络命名空间

2、init容器进行前置准备工作,如准备容器运行中依赖的数据包,安装主进程依赖的工具套件

3、main容器处理主业务逻辑,比如响应外部web请求

4、sidecar容器提供支撑服务,比如采集容器运行日志

 

上述结构的一个容器组定义范例如下:

apiVersion: v1                
kind: Pod                
metadata:               
  name: string             #必选,Pod名称       
  namespace: string       
  labels:             
    - name: string       
  annotations:          
    - name: string
spec:                
  containers:             #必选,Pod中容器列表
  - name: init              #可选,容器组急先锋
    ....
  - name: sidecar           #可选,容器勤务组
    ....
  - name: main
    image: string         #必选,容器的镜像名称
    imagePullPolicy: [Always | Never | IfNotPresent]  
    command: [string]       #容器的启动命令列表
    args: [string]        
    workingDir: string    
    volumeMounts:         #挂载到容器内部的存储卷配置
    - name: string         
      mountPath: string   
      readOnly: boolean  
    ports:               #需要暴露的端口号列表
    - name: string         
      containerPort: int    
      hostPort: int       
      protocol: string      
    env:                
    - name: string       
      value: string      
    resources:            #资源限制和请求的设置
      limits:            
        cpu: string      
        memory: string
      requests:          
       ...
    readnessProbe:          #可读探针,检测失败则将容器从服务摘除
      ...
    livenessProbe:         #存活探针,检测失败重启
      ...
      httpGet:            
        ...
      tcpSocket:       
         ...
      exec:              #对Pod容器内检查方式设置为exec方式
        command: [string] 
    restartPolicy: [Always | Never | OnFailure] #重启策略
    nodeSelector: obeject
    imagePullSecrets:        
    - name: string
    hostNetwork: false     
    volumes:             #定义共享存储卷列表
    - name: string          
      emptyDir: {}          
      hostPath: string        
        path: string        
      secret:           #使用类型为secret的存储卷
        ...
      configMap:         #使用类型为configMap的存储卷
        name: string
        items:
        - key: string
          path: string    

 

三、容器组的实现

1、容器组的隔离与共享

在kubernetes中,容器组代表了一个紧密协作的业务程序集及其上下文,是namespace技术落地实践之一:

通常情况下:

a)相同容器组不同容器共享了相同的net、uts以及ipc命名空间

b)相同容器组不同容器独占了不同的pid、mnt命名空间

 

2、容器组在kubernetes的位置以及与其他资源关系

毋庸置疑,容器组作为业务逻辑的载体在kubernenetes中是C位大咖。

狭义paas的实现围绕容器组展开实现:

容器组与周边资源典型关系如下:

1、容器组使用configmap获取配应用配置

2、容器组使用pvc挂载外部存储

3、容器组使用secret获取加密信息

4、容器组受DaemonSet控制,保障单节点单容器组的部署

5、容器组受StatefulSet控制,实现有状态应用的部署

6、容器组受RelicaSet控制,实现固定数量的容器组保障

7、容器组绑定Node后,将由Node上kubelet负责拉起

 

最后抛出1个讨论题,欢迎交流。

讨论:容器组作为1个逻辑资源对象,它存在的价值与意义是什么?

 

 

文章来自个人专栏
kubernetes
10 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0