airflow v2.6.0 k8s 部署(Rancher)

这篇具有很好参考价值的文章主要介绍了airflow v2.6.0 k8s 部署(Rancher)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

物料准备

  • k8s Rancher, 阿里云的 nas 存储
  • 一台物理机(需要挂载PVC: dags plugins 和 logs)
  • mysql 数据库和redis
  • 包含airflow 以及对应依赖库的基础镜像

这里使用 airflow 的 CeleryExecutor 部署在 k8s 上,并不是使用 KubernetesExecutor.
基础镜像构建
Dockerfile 文件
这里使用的是 airflow 官方的V2.6.0 的 python3.10 的镜像

FROM apache/airflow:slim-latest-python3.10
USER root
EXPOSE 8080 5555 8793
COPY config/airflow.cfg /opt/airflow/airflow.cfg
RUN set -ex \
    && buildDeps=' \
        freetds-dev \
        libkrb5-dev \
        libsasl2-dev \
        libssl-dev \
        libffi-dev \
        libpq-dev \
        git \
        python3-dev \
        gcc \
        sasl2-bin \
        libsasl2-2 \
        libsasl2-dev \
        libsasl2-modules \
    ' \
    && apt-get update -yqq \
    && apt-get upgrade -yqq \
    && apt-get install -yqq --no-install-recommends \
        $buildDeps \
        freetds-bin \
        build-essential \
        default-libmysqlclient-dev \
        apt-utils \
        curl \
        rsync \
        netcat \
        locales \
        procps \
        telnet

USER airflow
RUN pip install celery
RUN pip install flower
RUN pip install pymysql
RUN pip install mysqlclient
RUN pip install redis
RUN pip install livy==0.6.0
RUN pip install apache-airflow-providers-mysql
RUN pip install apache-airflow-providers-apache-hive

RUN airflow db init
# 保证基础镜像安全,执行完数据库初始化后删除相关配置文件
RUN rm -rf /opt/airflow/airflow.cfg

构建基础镜像并推送至镜像仓库:

  • 在构建airflow基础镜像的时候同时会初始化对应的元数据库
    相关部署代码 git 地址:https://github.com/itnoobzzy/EasyAirflow.git
    拉取完代码后进入 EasyAirflow项目 创建 logs 目录并且 sudo -R chmod 777 logs
    image.png
    因为在构建基础镜像的时候需要初始化元数据库,所以需要修改配置文件,这里主要需要修改四个地方:
    • mv config/default_airflow.cfg config/airflow.cfg, 并且修改 airflow.cfg 文件
    • 将 executor 修改为 CeleryExecutor
      image.png
    • 修改 sql_alchemy_conn 使用已有的 mysql 数据库, 这里需要注意连接驱动使用 mysql+pymysql
      image.png
    • 修改 broker_url 和 result_backend, broker 需要使用 redis 通信, result_backend 使用 mysql 存储,这里 result_backend 需要注意使用 db+mysql 连接驱动
      image.png
  • 执行构建命令,并推送至镜像仓库
docker build -t airflow:2.6.0 .
docker tag airflow:2.6.0 itnoobzzy/airflow:v2.6.0-python3.10
docker push itnoobzzy/airflow:v2.6.0-python3.10

部署步骤

  1. 创建 namespace: airflow-v2
    image.png

  2. 创建 PVC
    volumes.yaml文件地址:https://github.com/itnoobzzy/EasyAirflow/blob/main/scripts/k8s/volumes.yaml
    导入 rancher 后将创建三个 PVC 分别存储 dags, logs, plugins如下:
    image.png
    挂载PVC至物理机器上,方便管理 dags, logs 和 plugins, 查看 PVC 详情并执行挂载命令,下边是挂载 airflow-dags-pv 至机器上的例子:
    image.png
    image.png
    挂载完后df -h验证下 dags, logs, plugins 是否都挂载正常:
    image.png

  3. 创建 ConfigMap
    configmap.yaml文件 Git 地址: https://github.com/itnoobzzy/EasyAirflow/blob/main/scripts/k8s/configmap.yaml
    将 yaml 文件导入 rancher 如下:
    image.png

  4. 创建 Secret(可选)
    secret.yaml文件地址:https://github.com/itnoobzzy/EasyAirflow/blob/main/scripts/k8s/secret.yaml
    将 yaml 文件导入 rancher 如下, 需要注意 secret.yaml 文件中的数据库信息需要 base64 加密:
    image.png
    可以将数据库信息使用 k8s 的 secret 存储, 然后再 Deployment yaml 文件中使用环境变量获取 secret 中的配置信息。

  5. 创建 scheduler Deployment
    scheduler-dp.yaml文件地址:https://github.com/itnoobzzy/EasyAirflow/blob/main/scripts/k8s/scheduler-dp.yaml

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      name: airflow-scheduler
      namespace: airflow-v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          tier: airflow
          component: scheduler
          release: v2.6.0
      template:
        metadata:
          labels:
            tier: airflow
            component: scheduler
            release: v2.6.0
          annotations:
            cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
        spec:
          restartPolicy: Always
          terminationGracePeriodSeconds: 10
          containers:
            - name: scheduler
              image: itnoobzzy/airflow:v2.6.0-python3.10
              imagePullPolicy: IfNotPresent
              args: ["airflow", "scheduler"]
              env:
                - name: AIRFLOW__CORE__FERNET_KEY
                  value: cwmLHK76Sp9XclhLzHwCNXNiAr04OSMKQ--6WXRjmss=
                - name: AIRFLOW__CORE__EXECUTOR
                  value: CeleryExecutor
                - name: AIRFLOW__DATABASE__SQL_ALCHEMY_CONN
                  valueFrom:
                    secretKeyRef:
                      name: airflow-secrets
                      key: sql_alchemy_conn
                - name: AIRFLOW__CELERY__BROKER_URL
                  valueFrom:
                    secretKeyRef:
                      name: airflow-secrets
                      key: broker_url
                - name: AIRFLOW__CELERY__RESULT_BACKEND
                  valueFrom:
                    secretKeyRef:
                      name: airflow-secrets
                      key: result_backend
              volumeMounts:
                - name: logs-pv
                  mountPath: "/opt/airflow/logs"
                - name: dags-pv
                  mountPath: "/opt/airflow/dags"
                - name: plugins-pv
                  mountPath: "/opt/airflow/plugins"
                - name: config
                  mountPath: "/opt/airflow/airflow.cfg"
                  subPath: airflow.cfg
          volumes:
            - name: config
              configMap:
                name: airflow-configmap
            - name: logs-pv
              persistentVolumeClaim:
                claimName: airflow-logs-pvc
            - name: dags-pv
              persistentVolumeClaim:
                claimName: airflow-dags-pvc
            - name: plugins-pv
              persistentVolumeClaim:
                claimName: airflow-plugins-pvc
    
  6. 创建 webserver Deployment 和 Service
    webserver.yaml文件地址:https://github.com/itnoobzzy/EasyAirflow/blob/main/scripts/k8s/webserver.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
  name: airflow-webserver
  namespace: airflow-v2
spec:
  replicas: 1
  selector:
    matchLabels:
      tier: airflow
      component: webserver
      release: v2.6.0
  template:
    metadata:
      labels:
        tier: airflow
        component: webserver
        release: v2.6.0
      annotations:
        cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
    spec:
      restartPolicy: Always
      terminationGracePeriodSeconds: 10
      containers:
        - name: webserver
          image: itnoobzzy/airflow:v2.6.0-python3.10
          imagePullPolicy: IfNotPresent
          args: ["airflow", "webserver"]
          env:
            - name: AIRFLOW__CORE__FERNET_KEY
              value: cwmLHK76Sp9XclhLzHwCNXNiAr04OSMKQ--6WXRjmss=
            - name: AIRFLOW__CORE__EXECUTOR
              value: CeleryExecutor
            - name: AIRFLOW__DATABASE__SQL_ALCHEMY_CONN
              valueFrom:
                secretKeyRef:
                  name: airflow-secrets
                  key: sql_alchemy_conn
            - name: AIRFLOW__CELERY__BROKER_URL
              valueFrom:
                secretKeyRef:
                  name: airflow-secrets
                  key: broker_url
            - name: AIRFLOW__CELERY__RESULT_BACKEND
              valueFrom:
                secretKeyRef:
                  name: airflow-secrets
                  key: result_backend
          volumeMounts:
            - name: logs-pv
              mountPath: "/opt/airflow/logs"
            - name: dags-pv
              mountPath: "/opt/airflow/dags"
            - name: plugins-pv
              mountPath: "/opt/airflow/plugins"
            - name: config
              mountPath: "/opt/airflow/airflow.cfg"
              subPath: airflow.cfg
      volumes:
        - name: config
          configMap:
            name: airflow-configmap
        - name: logs-pv
          persistentVolumeClaim:
            claimName: airflow-logs-pvc
        - name: dags-pv
          persistentVolumeClaim:
            claimName: airflow-dags-pvc
        - name: plugins-pv
          persistentVolumeClaim:
            claimName: airflow-plugins-pvc

---

apiVersion: v1
kind: Service
metadata:
  name: airflow-webserver-svc
spec:
  type: ClusterIP
  ports:
    - name: airflow-webserver
      port: 8080
      targetPort: 8080
      protocol: TCP
  selector:
    tier: airflow
    component: webserver
    release: v2.6.0
  1. 创建 flower Deployment 和 Service
    flower.yaml文件地址:https://github.com/itnoobzzy/EasyAirflow/blob/main/scripts/k8s/flower.yaml

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      name: airflow-flower
      namespace: airflow-v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          tier: airflow
          component: flower
          release: v2.6.0
      template:
        metadata:
          labels:
            tier: airflow
            component: flower
            release: v2.6.0
          annotations:
            cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
        spec:
          restartPolicy: Always
          terminationGracePeriodSeconds: 10
          containers:
            - name: flower
              image: itnoobzzy/airflow:v2.6.0-python3.10
              imagePullPolicy: IfNotPresent
              args: ["airflow", "celery", "flower"]
              env:
                - name: AIRFLOW__CORE__FERNET_KEY
                  value: cwmLHK76Sp9XclhLzHwCNXNiAr04OSMKQ--6WXRjmss=
                - name: AIRFLOW__CORE__EXECUTOR
                  value: CeleryExecutor
                - name: AIRFLOW__DATABASE__SQL_ALCHEMY_CONN
                  valueFrom:
                    secretKeyRef:
                      name: airflow-secrets
                      key: sql_alchemy_conn
                - name: AIRFLOW__CELERY__BROKER_URL
                  valueFrom:
                    secretKeyRef:
                      name: airflow-secrets
                      key: broker_url
                - name: AIRFLOW__CELERY__RESULT_BACKEND
                  valueFrom:
                    secretKeyRef:
                      name: airflow-secrets
                      key: result_backend
              volumeMounts:
                - name: logs-pv
                  mountPath: "/opt/airflow/logs"
                - name: dags-pv
                  mountPath: "/opt/airflow/dags"
                - name: plugins-pv
                  mountPath: "/opt/airflow/plugins"
                - name: config
                  mountPath: "/opt/airflow/airflow.cfg"
                  subPath: airflow.cfg
          volumes:
            - name: config
              configMap:
                name: airflow-configmap
            - name: logs-pv
              persistentVolumeClaim:
                claimName: airflow-logs-pvc
            - name: dags-pv
              persistentVolumeClaim:
                claimName: airflow-dags-pvc
            - name: plugins-pv
              persistentVolumeClaim:
                claimName: airflow-plugins-pvc
    
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
      name: airflow-flower-svc
    spec:
      type: ClusterIP
      ports:
        - name: airflow-flower
          port: 5555
          targetPort: 5555
          protocol: TCP
      selector:
        tier: airflow
        component: flower
        release: v2.6.0
    
  2. 创建 worker Deployment
    worker.yaml文件地址:https://github.com/itnoobzzy/EasyAirflow/blob/main/scripts/k8s/worker.yaml

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      name: airflow-worker
      namespace: airflow-v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          tier: airflow
          component: worker
          release: v2.6.0
      template:
        metadata:
          labels:
            tier: airflow
            component: worker
            release: v2.6.0
          annotations:
            cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
        spec:
          restartPolicy: Always
          terminationGracePeriodSeconds: 10
          containers:
            - name: worker
              image: itnoobzzy/airflow:v2.6.0-python3.10
              imagePullPolicy: IfNotPresent
              args: ["airflow", "celery", "worker"]
              env:
                - name: AIRFLOW__CORE__FERNET_KEY
                  value: cwmLHK76Sp9XclhLzHwCNXNiAr04OSMKQ--6WXRjmss=
                - name: AIRFLOW__CORE__EXECUTOR
                  value: CeleryExecutor
                - name: AIRFLOW__DATABASE__SQL_ALCHEMY_CONN
                  valueFrom:
                    secretKeyRef:
                      name: airflow-secrets
                      key: sql_alchemy_conn
                - name: AIRFLOW__CELERY__BROKER_URL
                  valueFrom:
                    secretKeyRef:
                      name: airflow-secrets
                      key: broker_url
                - name: AIRFLOW__CELERY__RESULT_BACKEND
                  valueFrom:
                    secretKeyRef:
                      name: airflow-secrets
                      key: result_backend
              volumeMounts:
                - name: logs-pv
                  mountPath: "/opt/airflow/logs"
                - name: dags-pv
                  mountPath: "/opt/airflow/dags"
                - name: plugins-pv
                  mountPath: "/opt/airflow/plugins"
                - name: config
                  mountPath: "/opt/airflow/airflow.cfg"
                  subPath: airflow.cfg
          volumes:
            - name: config
              configMap:
                name: airflow-configmap
            - name: logs-pv
              persistentVolumeClaim:
                claimName: airflow-logs-pvc
            - name: dags-pv
              persistentVolumeClaim:
                claimName: airflow-dags-pvc
            - name: plugins-pv
              persistentVolumeClaim:
                claimName: airflow-plugins-pvc
    
  3. 创建 webserver 和 flower 的 Ingress
    Ingress.yaml文件地址:https://github.com/itnoobzzy/EasyAirflow/blob/main/scripts/k8s/ingress.yaml

    ---
    
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
       name:  airflow-ingress
    spec:
      rules:
        - host: airflow-webserver.akulaku.com
          http:
            paths:
            - path: /
              backend:
                serviceName: airflow-webserver-svc
                servicePort: 8080
        - host: airflow-flower.akulaku.com
          http:
            paths:
                - path: /
                  backend:
                    serviceName: airflow-flower-svc
                    servicePort: 5555
    

验证

部署完后在浏览器中输入 http://airflow-webserver.akulaku.com/ 访问 webserver 界面(需要注意 /etc/hosts 文件配置了域名解析),webserver 初始化管理员用户名和密码都为 admin:
image.png
在浏览器中输入 http://airflow-flower.akulaku.com/ 访问 flower 界面:
image.png
这里flower worker name 是 worker Pod 的name:
image.png
触发 DAG 运行并且在挂载的机器上查看对应的日志:
image.png

机器上的 /data/app/k8s/EasyAirflow/logs 这个目录就是前边将 k8s 的 PVC 的内容挂载在机器上对应的目录:

(base) [admin@data-landsat-test03 logs]$ view /data/app/k8s/EasyAirflow/logs/dag_id\=tutorial/run_id\=manual__2023-05-15T09\:27\:44.253944+00\:00/task_id\=sleep/attempt\=1.log 
dag_id=tutorial/       dag_processor_manager/ scheduler/             
[2023-05-15T09:27:47.187+0000] {taskinstance.py:1125} INFO - Dependencies all met for dep_context=non-requeueable deps ti=<TaskInstance: tutorial.sleep manual__2023-05-15T09:27:44.253944+00:00 [queued]>
[2023-05-15T09:27:47.195+0000] {taskinstance.py:1125} INFO - Dependencies all met for dep_context=requeueable deps ti=<TaskInstance: tutorial.sleep manual__2023-05-15T09:27:44.253944+00:00 [queued]>
[2023-05-15T09:27:47.195+0000] {taskinstance.py:1331} INFO - Starting attempt 1 of 4
[2023-05-15T09:27:47.206+0000] {taskinstance.py:1350} INFO - Executing <Task(BashOperator): sleep> on 2023-05-15 09:27:44.253944+00:00
[2023-05-15T09:27:47.209+0000] {standard_task_runner.py:57} INFO - Started process 71 to run task
[2023-05-15T09:27:47.213+0000] {standard_task_runner.py:84} INFO - Running: ['airflow', 'tasks', 'run', 'tutorial', 'sleep', 'manual__2023-05-15T09:27:44.253944+00:00', '--job-id', '75', '--raw', '--subdir', 'DAGS_FOLDER/tutorial.py', '--cfg-path', '/tmp/tmpy65q1a3h']
[2023-05-15T09:27:47.213+0000] {standard_task_runner.py:85} INFO - Job 75: Subtask sleep
[2023-05-15T09:27:47.260+0000] {task_command.py:410} INFO - Running <TaskInstance: tutorial.sleep manual__2023-05-15T09:27:44.253944+00:00 [running]> on host airflow-worker-6f9ffb7fb8-t6j9p
[2023-05-15T09:27:47.330+0000] {taskinstance.py:1568} INFO - Exporting env vars: AIRFLOW_CTX_DAG_EMAIL='airflow@example.com' AIRFLOW_CTX_DAG_OWNER='airflow' AIRFLOW_CTX_DAG_ID='tutorial' AIRFLOW_CTX_TASK_ID='sleep' AIRFLOW_CTX_EXECUTION_DATE='2023-05-15T09:27:44.253944+00:00' AIRFLOW_CTX_TRY_NUMBER='1' AIRFLOW_CTX_DAG_RUN_ID='manual__2023-05-15T09:27:44.253944+00:00'
[2023-05-15T09:27:47.331+0000] {subprocess.py:63} INFO - Tmp dir root location:
 /tmp
[2023-05-15T09:27:47.331+0000] {subprocess.py:75} INFO - Running command: ['/bin/bash', '-c', 'sleep 5']
[2023-05-15T09:27:47.355+0000] {subprocess.py:86} INFO - Output:
[2023-05-15T09:27:52.360+0000] {subprocess.py:97} INFO - Command exited with return code 0
[2023-05-15T09:27:52.383+0000] {taskinstance.py:1368} INFO - Marking task as SUCCESS. dag_id=tutorial, task_id=sleep, execution_date=20230515T092744, start_date=20230515T092747, end_date=20230515T092752
[2023-05-15T09:27:52.426+0000] {local_task_job_runner.py:232} INFO - Task exited with return code 0
[2023-05-15T09:27:52.440+0000] {taskinstance.py:2674} INFO - 0 downstream tasks scheduled from follow-on schedule check

总结

这里的将 airflow 部署在 k8s 上,并没有使用 airflow 的 k8s executor ,不能够做到任务执行完后自动停止掉 Pod,缩减成本。
但是 airflow 一般运行的都是批处理任务,集中在一个时间段内运行,目前我们公司使用的场景就是在夜间使用 airflow 跑大量离线处理任务,因此在白天的时候可以将 airflow 的一些 worker 给停掉,晚上再根据实际情况增加对应的 worker Pod。
但是在启停 worker 的 Pod 的时候也有一些注意事项:

  • 启停能否做成自动化的,在白天某个时间点开始停止 worker Pod, 在夜间某个时间点开始启动 Pod。
  • 需要优雅停止,停止前需要等待 worker 中的任务运行完毕(或者说最多等待多久时间杀死任务进程),并且不会再有新任务进入将要停止的 Pod 中。

后边针对上边所说的问题进行研究,一旦发现好的解决方法和步骤,将与大家一起分享~文章来源地址https://www.toymoban.com/news/detail-491342.html

到了这里,关于airflow v2.6.0 k8s 部署(Rancher)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • rancher2.6部署k8s集群示例

    博客主页:https://tomcat.blog.csdn.net 博主昵称:农民工老王 主要领域:Java、Linux、K8S 期待大家的关注💖点赞👍收藏⭐留言💬 rancher 2.6已经发布一段时间,与2.5还是有不少变动,而且目前只有英语文档。为了方便大家顺利使用,在此演示下rancher2.6部署k8s集群。 本文是 如何通过

    2023年04月11日
    浏览(37)
  • 使用docker部署rancher并导入k8s集群

    前言:鉴于我已经部署了k8s集群,那就在部署rancher一台用于管理k8s,这是一台单独的虚拟环境,之前在k8s的master节点上进行部署并未成功,有可能端口冲突了,这个问题我并没有深究,如果非要通过修改端口等操作部署上去后续可能带来的问题我处理不了,也很浪费时间,所

    2024年02月09日
    浏览(46)
  • Rancher-RKE-install 部署k8s集群

    一、为什么用Rancher-RKE-install         1.CNCF认证的k8s安装程序。         2.有中文文档。    二、安装步骤         1.下载Rancher-Rke的二进制包-下面是项目的地址                 GitHub - rancher/rke: Rancher Kubernetes Engine (RKE), an extremely simple, lightning fast Kubernetes distribution

    2024年02月12日
    浏览(39)
  • (十二)K8S可视化工具Rancher部署项目应用实战

    1.进入资源密文 2.进入镜像库凭证列表,点击添加凭证 3.输入凭证名称,选择自定义,填入自己的私有镜像仓库地址,这里使用的是阿里云,输入用户名和密码 1.连接好镜像仓库之后,我们点击资源工作负载部署服务 2.部署工作负载,点击启动 3.启动成功后,等待镜像拉去完

    2024年02月11日
    浏览(42)
  • 使用rancher的rke2部署高可用的k8s集群

    目录 1、linux环境初始化及内核调优 (1)设置主机名、关闭防火墙、配置集群ip映射、关闭selinux (2)禁用linux的透明大页、标准大页 (3)禁用swap分区 (4)配置集群时间同步,同步阿里云服务器时间 (5)linux内核参数调优 (6)配置ipvs 2、rke2安装k8s (1)主节点安装执行

    2023年04月11日
    浏览(78)
  • 安装部署rancher2.7.0,然后导入K8S集群,管理集群

    centos系统请参考博客 ubuntu系统请参考博客 默认用户是admin 浏览器打开:https://IP:443 回车后就出现了如下图 利用刚才查到的密码登录 登录后直接修改密码,点击继续。 上图就是进入后的默认页面 不同版本调整中文的页面不一样,具体请根据自己的版本可以百度或者去官网查

    2024年02月11日
    浏览(41)
  • Rancher部署k8s集群测试安装nginx(节点重新初始化方法,亲测)

    一、安装前准备工作 计算机 机器名 IP地址 部署内容 rancher 172.16.5.221 rancher k8smaster 172.16.5.222 Control Plane, Etcd k8sworker01 172.16.5.223 worker k8sworker02 172.16.5.224 worker k8sworker03 172.16.5.225 worker 需在每个节点都进行操作,可以使用xshell工具分屏进行批量操作。 升级linux内核 时间同步 Hos

    2024年01月20日
    浏览(45)
  • 基于K8S部署ZooKeeper准备知识(StatefulSet)

    使用k8s部署zk时,会部署一个headless service.科普一下headless service: Headless Service(无头服务)是 Kubernetes 中的一种服务类型,它与普通的 ClusterIP 服务有所不同。普通的 ClusterIP 服务会为每个服务分配一个虚拟 IP 地址,并通过负载均衡将流量转发到后端 Pod。而 Headless Service 不分

    2024年02月08日
    浏览(53)
  • k8s集群中部署项目之数据库准备

    同理 同理 同理 同理 同理

    2024年02月07日
    浏览(54)
  • 保姆级 ARM64 CPU架构下安装部署Docker + rancher + K8S 说明文档

    K8S是Kubernetes的简称,是一个开源的容器编排平台,用于自动部署、扩展和管理“容器化(containerized)应用程序”的系统。它可以跨多个主机聚集在一起,控制和自动化应用的部署与更新。 K8S 架构 Kubernetes 主要由以下几个核心组件组成: etcd 保存了整个集群的状态; apiserv

    2024年01月21日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包