Kubernetes高级概念和应用

Kubernetes高级概念和应用,第1张

Kubernetes高级概念和应用 一. K8S存储卷抽象Volume

默认情况下:mysql容器启动的时候会使用容器内的临时存储来存储数据文件

如果mysql Pod重启,那么mysql容器也会重启,mysql会重新初始化这个数据文件,原来的数据文件会丢失 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  replicas: 1
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:5.7
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: petclinic
            - name: MYSQL_DATAbase
              value: petclinic
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  selector:
    app: mysql
  ports:
    - name: tcp
      port: 3306
      targetPort: 3306
  type: ClusterIP

apiVersion: apps/v1
kind: Deployment
metadata:
  name: petclinic
spec:
  replicas: 1
  selector:
    matchLabels:
      app: petclinic
  template:
    metadata:
      labels:
        app: petclinic
    spec:
      containers:
      - name: petclinic
        image: spring2go/spring-petclinic:1.0.1.RELEASE
        env:
          - name: SPRING_PROFILES_ACTIVE
            value: mysql
          - name: DATASOURCE_URL
            value: jdbc:mysql://mysql/petclinic
          - name: DATASOURCE_PASSWORD
            value: petclinic
          - name: DATASOURCE_USERNAME
            value: root
          - name: DATASOURCE_INIT_MODE
            value: always
---
apiVersion: v1
kind: Service
metadata:
  name: petclinic
spec:
  ports:
    - name: http
      port: 8080
      targetPort: 8080
      nodePort: 31080
  selector:
    app: petclinic
  type: NodePort

那么mysql运行的时候,将数据文件默认存储在哪里呢?

 从这里看,也就是petclinic Pod起来的时候,会连接到后端的mysql【初始化】

那会有一个问题。现有的mysql Pod如果删除呢?是不是就没有了数据,因为没有初始化数据

如上:相关的数据会丢失

为了解决启动丢失的问题,引入了volume

 

如上:共享的本地路径是/tmp/data01

DirectoryOrCreate: 路径如果不存在就重新创建

请注意:不是所有的路径都可以进行共享【Docker Desktop】

二. K8S的存储解耦PVC和PV

如上:mysqlPod采用了简单的静态绑定的形式 。mysql Pod直接关联了hostPath、path、type 。也就是说mysql 的发布人员需要知道volume的存储细节【有紧密的耦合】。所以这个发布就不能在不同的环境或者公有云之间进行迁移。如果要迁移就必须要修改发布。这个不是我们所期望的

一般在软件中为了解决这种问题,会引入一层抽象。 

PVC:规范了存储的需求,存储的大小和读写模式,但是并不规范存储实现的细节

 

 

三、K8S资源请求和限额(Request和Limit)

计算机应用是需要占用资源的【包括内存和cpu】。

 K8S中的资源是有限制的,通过Request和Limit来管理资源的申请和限制【支持容器级别设置】

Request:表示应用发布时候, 对Cpu或者Memory预估使用量提出的申请。K8S会根据目前集群内节点的空闲情况进行调度

内存超限延时:

 可知:当前节点下最大可分配的内存是2G

调整后:只启动了1个custom。需要3个,有2个是因为资源不足处于Pengding中

如果资源不够,那么会持续重启,持续被kill

四、Java/Spring应用在K8S中的内存配置

kubectl top po/no   可以实时查看对应pod或者node资源使用情况【依赖组件Metrics Server】

【使用top命令或者dashboard都可以达到想要的一个效果,也就是进行查看】

Kubernetes高级概念和应用_哔哩哔哩_bilibili 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5721959.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存