Kubernetes集群——工作负载

目录

一.工作负载

二.无状态部署------Deployment

2.1简单介绍

2.2部署Deployment

2.3快速扩缩容

2.3.1使用命令修改

2.3.2修改yml文件

2.4搁置Pod

2.5Deployment更新策略

2.5.1重建更新------Recreate

2.5.2滚动更新------RollingUpdate(默认)

2.6版本升级

2.6.1使用命令方式更新镜像

2.6.2修改yml文件

2.7版本回退

三.有状态部署------StatefulSet

3.1简单介绍

3.2部署StatefulSet

3.2.1部署Pod

3.2.2部署headless

3.2.3定向访问后端Pod

3.2.4StatefulSet结合ConfigMap与Volume

3.3扩缩容

3.4版本升级与回退

3.5StatefulSet管理策略

四.守护进程集------DaemonSet

4.1简单介绍

4.2创建DaemonSet

4.3DaemonSet更新策略

4.4DaemonSet升级和回滚策略

五.一次性任务------Job

5.1简单介绍

5.2创建Job

5.3回收Job

六.定时任务------CronJob

6.1简单介绍

6.2创建CronJob

6.3回收CronJob


一.工作负载

概述 :在 Kubernetes(k8s)中,工作负载(Workloads) 是用于管理 Pod 生命周期的抽象对象,负责定义 Pod 的创建方式、运行数量、更新策略等,是集群中部署和管理应用的核心概念。

主要包含以下五种:Deployment、StatefulSet、Daemonset、Job和CronJob。

二.无状态部署------Deployment

2.1简单介绍

作用 :管理无状态应用(如 Web 服务、API 接口),确保指定数量的 Pod 副本始终运行,并支持滚动更新、回滚等操作。

无状态应用:该应用中不保存业务状态,重启后,不影响功能使用。

特点:

无状态:Pod 之间完全独立,可随意替换, 重启后数据不保留 (依赖外部存储)。
自动扩缩容 :通过 replicas 指定副本数,支持手动或自动扩缩容(HPA)。

滚动更新 :更新时逐步替换旧 Pod,避免服务中断(默认策略)。

版本管理:记录部署历史,支持回滚到之前的版本。
适用场景:

1.前端 Web 应用(Nginx、React 服务)。

2.无状态 API 服务(如微服务中的业务接口)。

3.批处理任务的 worker 节点。

2.2部署Deployment

说明 :一旦你修改 template 模板下的内容,那么Deployment都会触发 Deployment 滚动更新,创建新的 ReplicaSet,并按更新策略替换 Pod ,修改其他部分不会自行触发滚动更新策略。单纯扩缩容,不会触发滚动更新策略(例如:删除旧Pod)。

1.编写yaml文件

bash 复制代码
vim deploy-web.yml

添加以下内容:部署3个web pod

bash 复制代码
apiVersion: "apps/v1"        # 资源的 API 版本
kind: "Deployment"            # 资源的类型
metadata:                        # 资源的元数据信息
  name: "webserver"            # 资源的名称
  annotations:              # 自定义变更信息
    kubernetes.io/change-cause: "部署镜像httpd:dns"
spec:                        # 定义Deployment的详细规格
  replicas: 3                # 定义Pod的副本
  selector:                    # 标签选择器
    matchLabels: # 只有带有指定标签的Pod才会被这个Deployment管理
      app: "web"    # 指定需要管理的Pod的标签
  template:    # 定义 Pod 模板,用于创建 Pod
    metadata:    # Pod元数据
      labels:    # 定义Pod的标签,以供deploy的selector选择
        app: "web"    # Pod的标签
    spec:    # 定义Pod规格,包括容器配置
      containers:    # 定义容器列表
      - name: "apache-frontend"    # Pod名称
        image: "reg.westos.org/library/httpd:dns" # 容器镜像
        ports:    # 指定容器端口
        - containerPort: 80    # 容器的端口

2.运行yml文件

bash 复制代码
kubectl apply -f deploy-web.yml
kubectl get deployments webserver
kubectl get pod -o wide

2.3快速扩缩容

说明 :通过修改副本数,来快速调整部署的Pod个数。

2.3.1使用命令修改

说明:方便快捷,但是没有持久化,重启后,依旧是按文件的副本数部署。

bash 复制代码
kubectl scale deployment webserver --replicas 5    #修改Pod副本数为5

2.3.2修改yml文件

说明:持久化配置,每次重启部署的都是修改后的Pod

1.编辑yml文件

bash 复制代码
vim deploy-web.yml

添加以下内容

bash 复制代码
replicas: 8    #修改副本数

2.运行yml文件

bash 复制代码
kubectl apply -f deploy-web.yml
kubectl get pod 
kubectl describe deployment webserver | grep ReplicaSet    #查看当前副本数

2.4搁置Pod

说明 :删除deploymment定义的Pod标签,该Pod不再接受deployment管理。

原理 :ReplicaSet 通过 selector 匹配 Pod 归属;如果你改的是 selector 用到的标签,ReplicaSet 会认为这个 Pod 不属于自己,从而新建一个 Pod 补副本 ,原 Pod 变成孤儿。

1.设置Pod为搁置

bash 复制代码
kubectl label pod webserver-598d5d6fdc-99cq4 app-    #删除Pod匹配标签
kubectl get pod --show-labels    #查看Pod

2.将该Pod标注成搁浅

说明:为孤儿Pod添加标签,防止被其他资源对象筛选到

bash 复制代码
kubectl label pod webserver-598d5d6fdc-99cq4 shelved=true
kubectl get pod webserver-598d5d6fdc-99cq4 --show-labels

2.5Deployment更新策略

说明:我们知道Deployment在更新时是动态更新的,如果在更新Pod时,所有Pod都被下线,会造成业务中断,因此需要我们设置更新策略。

2.5.1重建更新------Recreate

Recreate:创建新Pod前,删除之前的全部Pod。

bash 复制代码
kubectl describe deployments.apps webserver | grep Recreate

2.5.2滚动更新------RollingUpdate(默认)

说明 :创建Pod时,**有时Pod会处于创建中,deployment会认为他没有创建成功,**会同时创建大于指定副本数的Pod,最终会检测Pod数量,将多余的Pod删除。

bash 复制代码
kubectl describe deployments.apps webserver | grep RollingUpdateStrategy

1.maxSurge (25% by default): 滚动更新期间,Pod 总数相对期望副本数的"超额"上限 。 例如,你要创建100个Pod,那么deployment在创建Pod时,最多会存在125个副本。
2.maxUnaliviable(25% by default):滚动更新期间,最多允许有多少个Pod不可用。超过这个数量后,暂停继续删除旧 Pod、暂停推进滚动更新、直到Pod变为 Ready / 可用 。

2.6版本升级

查看当前镜像版本

bash 复制代码
kubectl rollout history deployment webserver
kubectl rollout history deployment webserver --revision=1

2.6.1使用命令方式更新镜像

bash 复制代码
kubectl set image deployment webserver apache-frontend=reg.westos.org/library/httpd:dnsv2 --record    #设置新镜像
kubectl rollout history deployment webserver    #查看所有的镜像版本历史

测试访问

bash 复制代码
kubectl get pod -o wide
curl 10.244.109.122    #使用的Pod IP,必须在k8s集群内访问

2.6.2修改yml文件

说明 :一修改yml文件的template模板内容后,使用apply后,会自动按照滚动更新策略更新Pod。

1.编辑yml文件

bash 复制代码
vim deploy-web.yml

添加以下内容:

bash 复制代码
kubernetes.io/change-cause: "部署镜像httpd:dnsv2"    #修改镜像版本描述
bash 复制代码
image: "reg.westos.org/library/httpd:dnsv2"    #修改新镜像

2.运行yml文件

bash 复制代码
kubectl apply -f deploy-web.yml
kubectl rollout history deployment webserver

3.测试

bash 复制代码
kubectl get pod -o wide
curl 10.244.109.70

2.7版本回退

说明:deploy管理所有历史镜像版本,根据你的需求,返回到指定版本。回退成功后,会将当前版本加入到当前

1.回退到版本1

bash 复制代码
kubectl rollout history deployment webserver    #查看所有的镜像版本历史
kubectl rollout undo deployment webserver --to-revision=1    #回退到版本1

--to-revision:指定你要回退的版本号

2.测试是否成功回退

bash 复制代码
kubectl rollout history deployment webserver
kubectl get pod -o wide
curl 10.244.219.29

三.有状态部署------StatefulSet

3.1简单介绍

1.说明 :管理有状态应用(如数据库、分布式系统),确保 Pod 具有稳定的网络标识(固定名称、 DNS)和存储。

2.有状态应用 :保存业务状态和状态 (存储,网络),重启Pod后,业务数据状态依然存在。

3.特点:

1.Pod有固定名称 :名称格式为 <statefulset-name>-<序号>,如 mysql-0、mysql-1

2. 稳定存储 :通过Pvc绑定原来存储,Pod重启后依然可以绑定原来的存储。

3.有序操作 :扩缩容或更新时**,pod按序号执行更新顺序**

4.网络标识 :通过headless服务,提供固定的DNS服务记录 (如:mysql-0.mysql-service.default.svc.cluster.local)

4.适用场景:

1.数据库(MySQL 主从、PostgreSQL 集群)。
2.分布式系统(Kafka、ZooKeeper、Elasticsearch)。
3.需要持久化状态的应用(如缓存服务器 Redis Cluster)。

5.与deployment的核心区别 :deployment负责管理无状态数据的Pod部署,StatefulSet负责管理有状态数据的Pod部署。

3.2部署StatefulSet

说明 :运行 3 个 有状态数据的 MySQL 数据库 Pod

3.2.1部署Pod

1.编辑yaml文件

bash 复制代码
apiVersion: "apps/v1"
kind: "StatefulSet"
metadata:
  name: "dbserver"
  annotations:
    kubernetes.io/change-cause: "Initial data added"
spec:
  replicas: 3
  selector:
    matchLabels:    #标签匹配
      app: "db"
  serviceName: "database"     #这个 StatefulSet 关联/引用的 Headless Service   
  template:    #Pod模板,告诉 StatefulSet 控制器"每个 Pod 应该长什么样"
    metadata:
      labels:
        app: "db"
    spec:
      containers:
      - name: "db-backend"    #Pod名
        image: "reg.westos.org/library/mysql:v2"    #镜像
        imagePullPolicy: IfNotPresent
        env:
        - name: MYSQL_ROOT_PASSWORD    #数据库密码变量
          value: "redhat"
        ports:
        - containerPort: 3306

2.运行yaml文件

bash 复制代码
kubectl apply -f sts-db.yml
kubectl get sts    #查看sts
kubectl get pod -o wide | grep dbserver   #查看Pod

3.2.2部署headless

说明 :headless作为Pod的访问入口,客户端通过它解析到 StatefulSet 的各个 Pod(dbserver-0/1/2),再由客户端自己做访问

1.编写yaml文件

bash 复制代码
vim service-db-headless.yml

添加以下内容:

bash 复制代码
apiVersion: "v1"
kind: "Service"
metadata:
  name: "database"
spec:
  clusterIP: None
  ports:
  - protocol: "TCP"
    port: 3306
    name: mysql
  selector:
    app: "db"

2.运行service

bash 复制代码
kubectl apply -f service-db-headless.yml
kubectl get service database
kubectl get endpointslices.discovery.k8s.io  | grep database

3.测试连接后端数据库

bash 复制代码
kubectl get svc  -o wide | grep web 
curl 192.168.7.100/cgi-bin/action

4.测试访问客户端

bash 复制代码
kubectl get pod     #查看webserverPod
kubectl exec -it webserver-5d78984568-44lwl -- bash    #进入webPod内部
telnet database 3306    #测试域名访问情况

3.2.3定向访问后端Pod

1.域名如下:

bash 复制代码
dbserver-0.database.<namespace>.svc.cluster.local    #该域名指向dbserver-0
dbserver-1.database.<namespace>.svc.cluster.local    #该域名指向dbserver-1
dbserver-2.database.<namespace>.svc.cluster.local    #该域名指向dbserver-2

2.测试:

bash 复制代码
kubectl exec -it webserver-598d5d6fdc-qsx7c -- bash    #进入容器内部
vi /etc/yum.repos.d/CentOS-Base.repo    #修改软件镜像源

修改以下内容:改成阿里云源

bash 复制代码
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

下载mysql客户端

bash 复制代码
yum install mariadb -y

测试连接:

bash 复制代码
mysql -h dbserver-0.database.default.svc.cluster.local -uroot -predhat
mysql -h dbserver-1.database.default.svc.cluster.local -uroot -predhat
mysql -h dbserver-2.database.default.svc.cluster.local -uroot -predhat

3.2.4StatefulSet结合ConfigMap与Volume

说明:通过ConfigMap配置数据,将数据放到存储卷中,StatefulSet绑定存储卷,确保重启Pod后数据依然存在

1.编写yaml文件

bash 复制代码
vim sts-db.yml

添加以下内容:

bash 复制代码
apiVersion: "apps/v1"
kind: "StatefulSet"    #资源类型
metadata:
  name: "dbserver"
  annotations:
    kubernetes.io/change-cause: "Initial data added"    #版本描述
spec:
  replicas: 3    #副本数量
  selector:
    matchLabels:
      app: "db"
  serviceName: "database"    
  template:
    metadata:
      labels:
        app: "db"
    spec:
      containers:
      - name: "db-backend"
        image: "reg.westos.org/library/mysql:v2"
        imagePullPolicy: IfNotPresent
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "redhat"
        ports:
        - containerPort: 3306
        volumeMounts:    #定义挂载点
        - name: configvol
          mountPath: /docker-entrypoint-initdb.d/    
      volumes:
        - name: configvol    #定义挂载卷
          configMap:
            name: dbinit

2.创建数据卷

bash 复制代码
kubectl create configmap dbinit --from-file=init.sql    #读取当前目录下的 init.sql 文件,用它创建一个名为 dbinit 的 ConfigMap。
kubectl get cm dbinit
kubectl get configmaps dbinit -o json

3.测试

bash 复制代码
kubectl rollout restart statefulset dbserver    #重启sts的Pod
curl 192.168.7.100/cgi-bin/action

3.3扩缩容

bash 复制代码
kubectl scale sts dbserver --replicas 5    #修改副本数5
kubectl get pod -l app=db

3.4版本升级与回退

bash 复制代码
kubectl apply -f sts-db-cm.yml --record    #记录当前版本
kubectl rollout history statefulset dbserver    

修改模板内容

bash 复制代码
annotations:
    kubernetes.io/change-cause: "mysql v1"    #修改版本注释

image: "reg.westos.org/library/mysql:v1"    #修改镜像

升级版本:

bash 复制代码
kubectl apply -f sts-db.yml
kubectl rollout history statefulset dbserver

回退版本:

bash 复制代码
kubectl rollout undo statefulset dbserver --to-revision=2    #回退之前的版本
kubectl rollout history statefulset dbserver

3.5StatefulSet管理策略

1.说明 :podManagementPolicy: OrderedReady 是 Kubernetes 中 StatefulSet 特有的配置字段,用于定义 Pod****副本的创建、更新和删除顺序,是 StatefulSet 实现有状态应用有序管理的核心机制之一。

2. 核心作用:StatefulSet 管 理 的 Pod 具 有 固 定 序 号 ( 如 web-0 、 web-1 、 web-2 ),podManagementPolicy 控制这些 Pod 的操作顺序:

● 当设置为 OrderedReady(默认值)时,所有操作(创建、更新、删除)会按****Pod 序号从小到大依次执行,前一个 Pod 就绪(Ready )后,才会处理下一个。

● 与之对应的另一个值是 Parallel,表示所有****Pod 并行操作(不按顺序,适合适合无依赖关系的有状态应用)。

3.注意事项

● OrderedReady 会增加操作耗时(需等待等待前一个 Pod 就绪),但能保证集群稳定性。

● 若应用无严格依赖关系,可设置 podManagementPolicy: Parallel 加速快部署/更新速度。

● 该字段仅对 StatefulSet 有效,Deployment、DaemonSet 等工作负载不支持。

四.守护进程集------DaemonSet

4.1简单介绍

1.作用: 确保集群中所有节点上都运行一个相同的 Pod****副本,常用于节点级别的服务

2.特点:

1.节点亲和 :默认在所有节点部署,可通过****nodeSelector 限制在特定节点运行。

2. 自动适配:新节点加入集群时,自动在该节点部署 Pod;节点移除时,自动删除对
应 Pod。
3.无副本数配置 :副本数由节点数量决定(符合条件的节点数 = 副本数)。

3.适用场景:

● 节点监控(如 Prometheus Node Exporter)。

● 网络插件(如 Calico、Flannel 的代理组件)。

● 日志收集(如 Fluentd、Logstash)。

● 存储插件(如 Ceph 客户端)。

4.2创建DaemonSet

1.编写yaml文件

bash 复制代码
vim ds-fluentd-elasticsearch.yml

添加以下内容:

bash 复制代码
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging    #Daemonset标签
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch    #匹配标签
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch    #元数据标签,容器标签
    spec:
      tolerations:    #标签容忍
      - key: node-role.kubernetes.io/control-plane
        operator: Exists
        effect: NoSchedule
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      containers:
      - name: fluentd-elasticsearch
        image: quay.io/fluentd_elasticsearch/fluentd:v5.0.1    #修改镜像地址
        volumeMounts:
        - name: varlog
          mountPath: /var/log
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log

2.运行yaml文件

bash 复制代码
kubectl apply -f ds-fluentd-elasticsearch.yml --record    #运行yaml文件
kubectl -n kube-system rollout history daemonset fluentd-elasticsearch    #查看daemonset
kubectl get -n kube-system pod | grep fluentd-elasticsearch

4.3DaemonSet更新策略

OnDelete:仅当手动删除旧的 DaemonSet Pod 时才会创建新的 DaemonSet Pod
RollingUpdate (default):DaemonSet 模板更新后,旧的 DaemonSet Pod 将被杀死,新的 DaemonSet
Pod 将自动创建:整个更新过程中,每个节点最多运行一个 DaemonSet 的 Pod

4.4DaemonSet升级和回滚策略

1.编写yaml文件

bash 复制代码
vim ds-fluentd-elasticsearch-update.yml

添加以下内容:

bash 复制代码
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      tolerations:
      - key: node-role.kubernetes.io/control-plane
        operator: Exists
        effect: NoSchedule
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      containers:
      - name: fluentd-elasticsearch
        image: quay.io/fluentd_elasticsearch/fluentd:v5.0.1
        resources:    
          limits:    #资源限制,决定运行时最多能用多少
            memory: 200Mi
          requests:    #资源请求,决定 Pod 能不能被调度、能保底拿到多少资源
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log

2.运行yaml文件

bash 复制代码
kubectl apply -f ds-fluentd-elasticsearch-update.yml
kubectl -n kube-system rollout history daemonsets fluentd-elasticsearch
kubectl -n kube-system get controllerrevisions

五.一次性任务------Job

5.1简单介绍

1.核心作用: 运行一次性任务(如数据备份),确保任务成功完成后终止,不保留副本。
2.特点:

1. 一次性:任务完成(Pod 成功退出)后,Job 状态变为 Completed。

2.重试机制:若 Pod 失败,Job 会自动重试(可通过 backoffLimit 限制重试次数)。

3.并行执行:支持 parallelism 配置并行运行的 Pod 数量(如同时启动5个Pod 处理任务)。

3.适用场景:

1. 数据迁移(如从旧数据库迁移数据到新库)。

2.日志分析(一次性处理历史日志)。

3.批处理计算(如生成报表、图片处理)。

5.2创建Job

说明:用 Perl 计算圆周率 π 的 2000 位小数,并把结果打印到日志。

1.编写yaml文件

bash 复制代码
vim job.yml

添加以下内容:

bash 复制代码
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  completions: 6    #总需完成6次任务
  parallelism: 2    #一次并行2个任务
  template:
    spec:
      containers:
      - name: pi
        image: reg.westos.org/library/perl:5.34.0    
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]    #用 Perl 计算圆周率 π 的 2000 位小数,并打印到标准输出
      restartPolicy: Never
  backoffLimit: 4    #总多失败四次

2.运行任务

bash 复制代码
kubectl apply -f job.yml
kubectl get pod -l job-name
kubectl logs pi-zrp99    #查看圆周率结果

5.3回收Job

bash 复制代码
kubectl delete jobs.batch pi    #删除任务
kubectl get pod -l job-name

六.定时任务------CronJob

6.1简单介绍

1.核心作用: 按照时间规则(类似 Linux crontab) 周期性运行任务(如定时备份、日志清理)。
2.特点:

1.定时触发 :通过 schedule 字段定义执行时间(如 0 3 * * * 表示每天凌晨 3 点)。

2.基于Job :每个周期自动创建一个 Job 执行任务,任务完成后 Job 保留(可配置自动清理)。

3.容错机制 :支持 startingDeadlineSeconds 配置任务启动的截止时间,避免错过时间后重复执行。

3. 适用场景:

1.定时备份(如每天凌晨备份数据库)。

2.日志清理(如每周日删除 7 天前的日志)。

3.周期性报表生成(如每小时生成业务统计报表)。

6.2创建CronJob

说明 :每分钟在终端输出时间和指定内容

1.编写yaml文件

bash 复制代码
vim cronjob.yml

添加以下内容:

bash 复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"        # 每分钟运行一次任务
  jobTemplate:
    spec:
      template:    #Pod模板
        spec:
          containers:
          - name: hello
            image: reg.westos.org/library/busybox:1.30.1    #镜像地址
            imagePullPolicy: IfNotPresent
            command:    #设置命令
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure    #重启策略

2.运行CronJob任务

bash 复制代码
kubectl apply -f cronjob.yml
kubectl get cronjob.batch/hello
kubectl get pod -l job-name
kubectl logs hello-29890875-q29b5

6.3回收CronJob

bash 复制代码
kubectl delete cronjob hello
相关推荐
lwx91485219 小时前
Docker-安装SSH服务
docker·容器·ssh
艾伦_耶格宇1 天前
【kubernetes - 1.28版本】-11 K8S核心组件
java·容器·kubernetes
时间售卖铺1 天前
Docker实战:一键部署轻量级容器
运维·docker·云原生
月落汀兰1 天前
拒绝配置写死镜像!K8s 存储卷与配置管理,PV/PVC、ConfigMap、Secret 实战避坑指南
运维·kubernetes
艾伦_耶格宇1 天前
【kubernetes - 1.28版本】-10 K8S命名空间
云原生·容器·kubernetes
tedcloud1231 天前
Docker Compose 部署 Uptime Kuma:配置 HTTPS、QQ 邮箱告警与数据备份
服务器·网络协议·ui·docker·容器·https·开源
syntaxsage1 天前
Dive:Docker 镜像层可视化分析工具
运维·其他·docker·容器
java_logo1 天前
Docker 部署 Samba:轻松搭建局域网文件共享
运维·docker·容器·文件共享·samba·smb·轩辕镜像
草莓熊Lotso1 天前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生