kubernetes-handbook/practice/storage-for-containers-usin...

2047 lines
110 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE HTML>
<html lang="zh-cn" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>4.4.1.2 在OpenShift中使用GlusterFS做持久化存储 · Kubernetes Handbook</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="">
<meta name="generator" content="GitBook 3.2.2">
<meta name="author" content="Jimmy Song">
<link rel="stylesheet" href="../gitbook/style.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-page-toc-button/plugin.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-image-captions/image-captions.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-page-footer-ex/style/plugin.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-search-plus/search.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-fontsettings/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="../gitbook/images/apple-touch-icon-precomposed-152.png">
<link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">
<link rel="next" href="../usecases/" />
<link rel="prev" href="using-glusterfs-for-persistent-storage.html" />
</head>
<body>
<div class="book">
<div class="book-summary">
<div id="book-search-input" role="search">
<input type="text" placeholder="輸入並搜尋" />
</div>
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="../">
<a href="../">
1. 前言
</a>
</li>
<li class="chapter " data-level="1.2" data-path="../concepts/">
<a href="../concepts/">
2. 概念原理
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="../concepts/concepts.html">
<a href="../concepts/concepts.html">
2.1 设计理念
</a>
</li>
<li class="chapter " data-level="1.2.2" data-path="../concepts/objects.html">
<a href="../concepts/objects.html">
2.2 主要概念
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.2.1" data-path="../concepts/pod-overview.html">
<a href="../concepts/pod-overview.html">
2.2.1 Pod
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.2.1.1" data-path="../concepts/pod.html">
<a href="../concepts/pod.html">
2.2.1.1 Pod解析
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.2.2" data-path="../concepts/node.html">
<a href="../concepts/node.html">
2.2.2 Node
</a>
</li>
<li class="chapter " data-level="1.2.2.3" data-path="../concepts/namespace.html">
<a href="../concepts/namespace.html">
2.2.3 Namespace
</a>
</li>
<li class="chapter " data-level="1.2.2.4" data-path="../concepts/service.html">
<a href="../concepts/service.html">
2.2.4 Service
</a>
</li>
<li class="chapter " data-level="1.2.2.5" data-path="../concepts/volume.html">
<a href="../concepts/volume.html">
2.2.5 Volume和Persistent Volume
</a>
</li>
<li class="chapter " data-level="1.2.2.6" data-path="../concepts/deployment.html">
<a href="../concepts/deployment.html">
2.2.6 Deployment
</a>
</li>
<li class="chapter " data-level="1.2.2.7" data-path="../concepts/secret.html">
<a href="../concepts/secret.html">
2.2.7 Secret
</a>
</li>
<li class="chapter " data-level="1.2.2.8" data-path="../concepts/statefulset.html">
<a href="../concepts/statefulset.html">
2.2.8 StatefulSet
</a>
</li>
<li class="chapter " data-level="1.2.2.9" data-path="../concepts/daemonset.html">
<a href="../concepts/daemonset.html">
2.2.9 DaemonSet
</a>
</li>
<li class="chapter " data-level="1.2.2.10" data-path="../concepts/serviceaccount.html">
<a href="../concepts/serviceaccount.html">
2.2.10 ServiceAccount
</a>
</li>
<li class="chapter " data-level="1.2.2.11" data-path="../concepts/replicaset.html">
<a href="../concepts/replicaset.html">
2.2.11 ReplicationController和ReplicaSet
</a>
</li>
<li class="chapter " data-level="1.2.2.12" data-path="../concepts/job.html">
<a href="../concepts/job.html">
2.2.12 Job
</a>
</li>
<li class="chapter " data-level="1.2.2.13" data-path="../concepts/cronjob.html">
<a href="../concepts/cronjob.html">
2.2.13 CronJob
</a>
</li>
<li class="chapter " data-level="1.2.2.14" data-path="../concepts/ingress.html">
<a href="../concepts/ingress.html">
2.2.14 Ingress
</a>
</li>
<li class="chapter " data-level="1.2.2.15" data-path="../concepts/configmap.html">
<a href="../concepts/configmap.html">
2.2.15 ConfigMap
</a>
</li>
<li class="chapter " data-level="1.2.2.16" data-path="../concepts/horizontal-pod-autoscaling.html">
<a href="../concepts/horizontal-pod-autoscaling.html">
2.2.16 Horizontal Pod Autoscaling
</a>
</li>
<li class="chapter " data-level="1.2.2.17" data-path="../concepts/label.html">
<a href="../concepts/label.html">
2.2.17 Label
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3" data-path="../guide/">
<a href="../guide/">
3. 用户指南
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="../guide/resource-configuration.html">
<a href="../guide/resource-configuration.html">
3.1 资源配置
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.1.1" data-path="../guide/configure-liveness-readiness-probes.html">
<a href="../guide/configure-liveness-readiness-probes.html">
3.1.1 配置Pod的liveness和readiness探针
</a>
</li>
<li class="chapter " data-level="1.3.1.2" data-path="../guide/configure-pod-service-account.html">
<a href="../guide/configure-pod-service-account.html">
3.1.2 配置Pod的Service Account
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3.2" data-path="../guide/command-usage.html">
<a href="../guide/command-usage.html">
3.2 命令使用
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.2.1" data-path="../guide/using-kubectl.html">
<a href="../guide/using-kubectl.html">
3.2.1 使用kubectl
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3.3" data-path="../guide/cluster-management.html">
<a href="../guide/cluster-management.html">
3.3 集群管理
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.3.1" data-path="../guide/managing-tls-in-a-cluster.html">
<a href="../guide/managing-tls-in-a-cluster.html">
3.3.1 管理集群中的TLS
</a>
</li>
<li class="chapter " data-level="1.3.3.2" data-path="../guide/kubelet-authentication-authorization.html">
<a href="../guide/kubelet-authentication-authorization.html">
3.3.2 kubelet的认证授权
</a>
</li>
<li class="chapter " data-level="1.3.3.3" data-path="../guide/tls-bootstrapping.html">
<a href="../guide/tls-bootstrapping.html">
3.3.3 TLS bootstrap
</a>
</li>
<li class="chapter " data-level="1.3.3.4" data-path="../guide/kubectl-user-authentication-authorization.html">
<a href="../guide/kubectl-user-authentication-authorization.html">
3.3.4 kubectl的用户认证授权
</a>
</li>
<li class="chapter " data-level="1.3.3.5" data-path="../guide/rbac.html">
<a href="../guide/rbac.html">
3.3.5 RBAC——基于角色的访问控制
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3.4" data-path="../guide/access-kubernetes-cluster.html">
<a href="../guide/access-kubernetes-cluster.html">
3.4 访问 Kubernetes 集群
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.4.1" data-path="../guide/access-cluster.html">
<a href="../guide/access-cluster.html">
3.4.1 访问集群
</a>
</li>
<li class="chapter " data-level="1.3.4.2" data-path="../guide/authenticate-across-clusters-kubeconfig.html">
<a href="../guide/authenticate-across-clusters-kubeconfig.html">
3.4.2 使用 kubeconfig 文件配置跨集群认证
</a>
</li>
<li class="chapter " data-level="1.3.4.3" data-path="../guide/connecting-to-applications-port-forward.html">
<a href="../guide/connecting-to-applications-port-forward.html">
3.4.3 通过端口转发访问集群中的应用程序
</a>
</li>
<li class="chapter " data-level="1.3.4.4" data-path="../guide/service-access-application-cluster.html">
<a href="../guide/service-access-application-cluster.html">
3.4.4 使用 service 访问群集中的应用程序
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3.5" data-path="../guide/application-development-deployment-flow.html">
<a href="../guide/application-development-deployment-flow.html">
3.5 在kubernetes中开发部署应用
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.5.1" data-path="../guide/deploy-applications-in-kubernetes.html">
<a href="../guide/deploy-applications-in-kubernetes.html">
3.5.1 适用于kubernetes的应用开发部署流程
</a>
</li>
<li class="chapter " data-level="1.3.5.2" data-path="../guide/migrating-hadoop-yarn-to-kubernetes.html">
<a href="../guide/migrating-hadoop-yarn-to-kubernetes.html">
3.5.2 迁移传统应用到kubernetes中——以Hadoop YARN为例
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" data-path="./">
<a href="./">
4. 最佳实践
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.1" data-path="install-kbernetes1.6-on-centos.html">
<a href="install-kbernetes1.6-on-centos.html">
4.1 在CentOS上部署kubernetes1.6集群
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.1.1" data-path="create-tls-and-secret-key.html">
<a href="create-tls-and-secret-key.html">
4.1.1 创建TLS证书和秘钥
</a>
</li>
<li class="chapter " data-level="1.4.1.2" data-path="create-kubeconfig.html">
<a href="create-kubeconfig.html">
4.1.2 创建kubeconfig文件
</a>
</li>
<li class="chapter " data-level="1.4.1.3" data-path="etcd-cluster-installation.html">
<a href="etcd-cluster-installation.html">
4.1.3 创建高可用etcd集群
</a>
</li>
<li class="chapter " data-level="1.4.1.4" data-path="kubectl-installation.html">
<a href="kubectl-installation.html">
4.1.4 安装kubectl命令行工具
</a>
</li>
<li class="chapter " data-level="1.4.1.5" data-path="master-installation.html">
<a href="master-installation.html">
4.1.5 部署master节点
</a>
</li>
<li class="chapter " data-level="1.4.1.6" data-path="node-installation.html">
<a href="node-installation.html">
4.1.6 部署node节点
</a>
</li>
<li class="chapter " data-level="1.4.1.7" data-path="kubedns-addon-installation.html">
<a href="kubedns-addon-installation.html">
4.1.7 安装kubedns插件
</a>
</li>
<li class="chapter " data-level="1.4.1.8" data-path="dashboard-addon-installation.html">
<a href="dashboard-addon-installation.html">
4.1.8 安装dashboard插件
</a>
</li>
<li class="chapter " data-level="1.4.1.9" data-path="heapster-addon-installation.html">
<a href="heapster-addon-installation.html">
4.1.9 安装heapster插件
</a>
</li>
<li class="chapter " data-level="1.4.1.10" data-path="efk-addon-installation.html">
<a href="efk-addon-installation.html">
4.1.10 安装EFK插件
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4.2" data-path="service-discovery-and-loadbalancing.html">
<a href="service-discovery-and-loadbalancing.html">
4.2 服务发现与负载均衡
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.2.1" data-path="traefik-ingress-installation.html">
<a href="traefik-ingress-installation.html">
4.2.1 安装Traefik ingress
</a>
</li>
<li class="chapter " data-level="1.4.2.2" data-path="distributed-load-test.html">
<a href="distributed-load-test.html">
4.2.2 分布式负载测试
</a>
</li>
<li class="chapter " data-level="1.4.2.3" data-path="network-and-cluster-perfermance-test.html">
<a href="network-and-cluster-perfermance-test.html">
4.2.3 网络和集群性能测试
</a>
</li>
<li class="chapter " data-level="1.4.2.4" data-path="edge-node-configuration.html">
<a href="edge-node-configuration.html">
4.2.4 边缘节点配置
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4.3" data-path="operation.html">
<a href="operation.html">
4.3 运维管理
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.3.1" data-path="service-rolling-update.html">
<a href="service-rolling-update.html">
4.3.1 服务滚动升级
</a>
</li>
<li class="chapter " data-level="1.4.3.2" data-path="app-log-collection.html">
<a href="app-log-collection.html">
4.3.2 应用日志收集
</a>
</li>
<li class="chapter " data-level="1.4.3.3" data-path="configuration-best-practice.html">
<a href="configuration-best-practice.html">
4.3.3 配置最佳实践
</a>
</li>
<li class="chapter " data-level="1.4.3.4" data-path="monitor.html">
<a href="monitor.html">
4.3.4 集群及应用监控
</a>
</li>
<li class="chapter " data-level="1.4.3.5" data-path="jenkins-ci-cd.html">
<a href="jenkins-ci-cd.html">
4.3.5 使用Jenkins进行持续构建与发布
</a>
</li>
<li class="chapter " data-level="1.4.3.6" data-path="data-persistence-problem.html">
<a href="data-persistence-problem.html">
4.3.6 数据持久化问题
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4.4" data-path="storage.html">
<a href="storage.html">
4.4 存储管理
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.4.1" data-path="glusterfs.html">
<a href="glusterfs.html">
4.4.1 GlusterFS
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.4.1.1" data-path="using-glusterfs-for-persistent-storage.html">
<a href="using-glusterfs-for-persistent-storage.html">
4.4.1.1 使用GlusterFS做持久化存储
</a>
</li>
<li class="chapter active" data-level="1.4.4.1.2" data-path="storage-for-containers-using-glusterfs-with-openshift.html">
<a href="storage-for-containers-using-glusterfs-with-openshift.html">
4.4.1.2 在OpenShift中使用GlusterFS做持久化存储
</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5" data-path="../usecases/">
<a href="../usecases/">
5. 领域应用
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.1" data-path="../usecases/microservices.html">
<a href="../usecases/microservices.html">
5.1 微服务架构
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.1.1" data-path="../usecases/istio.html">
<a href="../usecases/istio.html">
5.1.1 Istio
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.1.1.1" data-path="../usecases/istio-installation.html">
<a href="../usecases/istio-installation.html">
5.1.1.1 安装istio
</a>
</li>
<li class="chapter " data-level="1.5.1.1.2" data-path="../usecases/configuring-request-routing.html">
<a href="../usecases/configuring-request-routing.html">
5.1.1.2 配置请求的路由规则
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5.1.2" data-path="../usecases/linkerd.html">
<a href="../usecases/linkerd.html">
5.1.2 Linkerd
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.1.2.1" data-path="../usecases/linkerd-user-guide.html">
<a href="../usecases/linkerd-user-guide.html">
5.1.2.1 Linkerd 使用指南
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5.1.3" data-path="../usecases/service-discovery-in-microservices.html">
<a href="../usecases/service-discovery-in-microservices.html">
5.1.3 微服务中的服务发现
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5.2" data-path="../usecases/big-data.html">
<a href="../usecases/big-data.html">
5.2 大数据
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.2.1" data-path="../usecases/spark-standalone-on-kubernetes.html">
<a href="../usecases/spark-standalone-on-kubernetes.html">
5.2.1 Spark standalone on Kubernetes
</a>
</li>
<li class="chapter " data-level="1.5.2.2" data-path="../usecases/support-spark-natively-in-kubernetes.html">
<a href="../usecases/support-spark-natively-in-kubernetes.html">
5.2.2 运行支持kubernetes原生调度的Spark程序
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5.3" data-path="../usecases/serverless.html">
<a href="../usecases/serverless.html">
5.3 Serverless架构
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.6" data-path="../develop/">
<a href="../develop/">
6. 开发指南
</a>
<ul class="articles">
<li class="chapter " data-level="1.6.1" data-path="../develop/developing-environment.html">
<a href="../develop/developing-environment.html">
6.1 开发环境搭建
</a>
</li>
<li class="chapter " data-level="1.6.2" data-path="../develop/testing.html">
<a href="../develop/testing.html">
6.2 单元测试和集成测试
</a>
</li>
<li class="chapter " data-level="1.6.3" data-path="../develop/client-go-sample.html">
<a href="../develop/client-go-sample.html">
6.3 client-go示例
</a>
</li>
<li class="chapter " data-level="1.6.4" data-path="../develop/contribute.html">
<a href="../develop/contribute.html">
6.4 社区贡献
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.7" data-path="../appendix/">
<a href="../appendix/">
7. 附录
</a>
<ul class="articles">
<li class="chapter " data-level="1.7.1" data-path="../appendix/docker-best-practice.html">
<a href="../appendix/docker-best-practice.html">
7.1 Docker最佳实践
</a>
</li>
<li class="chapter " data-level="1.7.2" data-path="../appendix/issues.html">
<a href="../appendix/issues.html">
7.2 问题记录
</a>
</li>
<li class="chapter " data-level="1.7.3" data-path="../appendix/tricks.html">
<a href="../appendix/tricks.html">
7.3 使用技巧
</a>
</li>
</ul>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本書使用 GitBook 釋出
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href=".." >4.4.1.2 在OpenShift中使用GlusterFS做持久化存储</a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<div class="search-plus" id="book-search-results">
<div class="search-noresults">
<section class="normal markdown-section">
<h1 id="storage-for-containers-using-gluster-&#x2013;-part-ii">Storage for Containers using Gluster &#x2013; Part II</h1>
<h3 id="&#x6982;&#x8FF0;">&#x6982;&#x8FF0;</h3>
<p>&#x672C;&#x6587;&#x7531;Daniel Messer&#xFF08;Technical Marketing Manager Storage @RedHat&#xFF09;&#x548C;Keith Tenzer&#xFF08;Solutions Architect @RedHat&#xFF09;&#x5171;&#x540C;&#x64B0;&#x5199;&#x3002;</p>
<ul>
<li><a href="https://keithtenzer.com/2017/03/07/storage-for-containers-overview-part-i/" target="_blank">Storage for Containers Overview &#x2013; Part I</a></li>
<li><a href="https://keithtenzer.com/2017/03/24/storage-for-containers-using-gluster-part-ii/" target="_blank">Storage for Containers using Gluster &#x2013; Part II</a></li>
<li><a href="https://keithtenzer.com/2017/03/29/storage-for-containers-using-container-native-storage-part-iii/" target="_blank">Storage for Containers using Container Native Storage &#x2013; Part III</a></li>
<li><a href="https://keithtenzer.com/2017/04/07/storage-for-containers-using-ceph-rbd-part-iv/" target="_blank">Storage for Containers using Ceph &#x2013; Part IV</a></li>
<li><a href="https://keithtenzer.com/2017/04/05/storage-for-containers-using-netapp-ontap-nas-part-v/" target="_blank">Storage for Containers using NetApp ONTAP NAS &#x2013; Part V</a></li>
<li><a href="https://keithtenzer.com/2017/04/05/storage-for-containers-using-netapp-solidfire-part-vi/" target="_blank">Storage for Containers using NetApp SolidFire &#x2013; Part VI</a></li>
</ul>
<h3 id="gluster&#x4F5C;&#x4E3A;container-ready-storagecrs">Gluster&#x4F5C;&#x4E3A;Container-Ready Storage(CRS)</h3>
<p>&#x5728;&#x672C;&#x6587;&#x4E2D;&#xFF0C;&#x6211;&#x4EEC;&#x5C06;&#x4ECB;&#x7ECD;&#x5BB9;&#x5668;&#x5B58;&#x50A8;&#x7684;&#x9996;&#x9009;&#x4EE5;&#x53CA;&#x5982;&#x4F55;&#x90E8;&#x7F72;&#x5B83;&#x3002; Kusternet&#x548C;OpenShift&#x652F;&#x6301;GlusterFS&#x5DF2;&#x7ECF;&#x6709;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x4E86;&#x3002; GlusterFS&#x7684;&#x9002;&#x7528;&#x6027;&#x5F88;&#x597D;&#xFF0C;&#x53EF;&#x7528;&#x4E8E;&#x6240;&#x6709;&#x7684;&#x90E8;&#x7F72;&#x573A;&#x666F;&#xFF1A;&#x88F8;&#x673A;&#x3001;&#x865A;&#x62DF;&#x673A;&#x3001;&#x5185;&#x90E8;&#x90E8;&#x7F72;&#x548C;&#x516C;&#x5171;&#x4E91;&#x3002; &#x5728;&#x5BB9;&#x5668;&#x4E2D;&#x8FD0;&#x884C;GlusterFS&#x7684;&#x65B0;&#x7279;&#x6027;&#x5C06;&#x5728;&#x672C;&#x7CFB;&#x5217;&#x540E;&#x9762;&#x8BA8;&#x8BBA;&#x3002;</p>
<p>GlusterFS&#x662F;&#x4E00;&#x4E2A;&#x5206;&#x5E03;&#x5F0F;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#xFF0C;&#x5185;&#x7F6E;&#x4E86;&#x539F;&#x751F;&#x534F;&#x8BAE;&#xFF08;GlusterFS&#xFF09;&#x548C;&#x5404;&#x79CD;&#x5176;&#x4ED6;&#x534F;&#x8BAE;&#xFF08;NFS&#xFF0C;SMB&#xFF0C;...&#xFF09;&#x3002; &#x4E3A;&#x4E86;&#x4E0E;OpenShift&#x96C6;&#x6210;&#xFF0C;&#x8282;&#x70B9;&#x5C06;&#x901A;&#x8FC7;FUSE&#x4F7F;&#x7528;&#x539F;&#x751F;&#x534F;&#x8BAE;&#xFF0C;&#x5C06;GlusterFS&#x5377;&#x6302;&#x5728;&#x5230;&#x8282;&#x70B9;&#x672C;&#x8EAB;&#x4E0A;&#xFF0C;&#x7136;&#x540E;&#x5C06;&#x5B83;&#x4EEC;&#x7ED1;&#x5B9A;&#x5230;&#x76EE;&#x6807;&#x5BB9;&#x5668;&#x4E2D;&#x3002; OpenShift / Kubernetes&#x5177;&#x6709;&#x5B9E;&#x73B0;&#x8BF7;&#x6C42;&#x3001;&#x91CA;&#x653E;&#x548C;&#x6302;&#x8F7D;&#x3001;&#x5378;&#x8F7D;GlusterFS&#x5377;&#x7684;&#x539F;&#x751F;&#x7A0B;&#x5E8F;&#x3002;</p>
<h3 id="crs&#x6982;&#x8FF0;">CRS&#x6982;&#x8FF0;</h3>
<p>&#x5728;&#x5B58;&#x50A8;&#x65B9;&#x9762;&#xFF0C;&#x6839;&#x636E;OpenShift / Kubernetes&#x7684;&#x8981;&#x6C42;&#xFF0C;&#x8FD8;&#x6709;&#x4E00;&#x4E2A;&#x989D;&#x5916;&#x7684;&#x7EC4;&#x4EF6;&#x7BA1;&#x7406;&#x96C6;&#x7FA4;&#xFF0C;&#x79F0;&#x4E3A;&#x201C;heketi&#x201D;&#x3002; &#x8FD9;&#x5B9E;&#x9645;&#x4E0A;&#x662F;&#x4E00;&#x4E2A;&#x7528;&#x4E8E;GlusterFS&#x7684;REST API&#xFF0C;&#x5B83;&#x8FD8;&#x63D0;&#x4F9B;CLI&#x7248;&#x672C;&#x3002; &#x5728;&#x4EE5;&#x4E0B;&#x6B65;&#x9AA4;&#x4E2D;&#xFF0C;&#x6211;&#x4EEC;&#x5C06;&#x5728;3&#x4E2A;GlusterFS&#x8282;&#x70B9;&#x4E2D;&#x90E8;&#x7F72;heketi&#xFF0C;&#x4F7F;&#x7528;&#x5B83;&#x6765;&#x90E8;&#x7F72;GlusterFS&#x5B58;&#x50A8;&#x6C60;&#xFF0C;&#x5C06;&#x5176;&#x8FDE;&#x63A5;&#x5230;OpenShift&#xFF0C;&#x5E76;&#x4F7F;&#x7528;&#x5B83;&#x6765;&#x901A;&#x8FC7;PersistentVolumeClaims&#x4E3A;&#x5BB9;&#x5668;&#x914D;&#x7F6E;&#x5B58;&#x50A8;&#x3002; &#x6211;&#x4EEC;&#x5C06;&#x603B;&#x5171;&#x90E8;&#x7F72;4&#x53F0;&#x865A;&#x62DF;&#x673A;&#x3002; &#x4E00;&#x4E2A;&#x7528;&#x4E8E;OpenShift&#xFF08;&#x5B9E;&#x9A8C;&#x5BA4;&#x8BBE;&#x7F6E;&#xFF09;&#xFF0C;&#x53E6;&#x4E00;&#x4E2A;&#x7528;&#x4E8E;GlusterFS&#x3002;</p>
<p>&#x6CE8;&#x610F;&#xFF1A;&#x60A8;&#x7684;&#x7CFB;&#x7EDF;&#x5E94;&#x81F3;&#x5C11;&#x9700;&#x8981;&#x6709;&#x56DB;&#x6838;CPU&#xFF0C;16GB RAM&#x548C;20 GB&#x53EF;&#x7528;&#x78C1;&#x76D8;&#x7A7A;&#x95F4;&#x3002;</p>
<h3 id="&#x90E8;&#x7F72;openshift">&#x90E8;&#x7F72;OpenShift</h3>
<p>&#x9996;&#x5148;&#x4F60;&#x9700;&#x8981;&#x5148;&#x90E8;&#x7F72;OpenShift&#x3002;&#x6700;&#x6709;&#x6548;&#x7387;&#x7684;&#x65B9;&#x5F0F;&#x662F;&#x76F4;&#x63A5;&#x5728;&#x865A;&#x62DF;&#x673A;&#x4E2D;&#x90E8;&#x7F72;&#x4E00;&#x4E2A;All-in-One&#x73AF;&#x5883;&#xFF0C;&#x90E8;&#x7F72;&#x6307;&#x5357;&#x89C1; <a href="https://keithtenzer.com/2017/03/13/openshift-enterprise-3-4-all-in-one-lab-environment/" target="_blank">the &#x201C;OpenShift Enterprise 3.4 all-in-one Lab Environment&#x201D; article.</a>&#x3002;</p>
<p>&#x786E;&#x4FDD;&#x4F60;&#x7684;OpenShift&#x865A;&#x62DF;&#x673A;&#x53EF;&#x4EE5;&#x89E3;&#x6790;&#x5916;&#x90E8;&#x57DF;&#x540D;&#x3002;&#x7F16;&#x8F91;<code>/etc/dnsmasq.conf</code>&#x6587;&#x4EF6;&#xFF0C;&#x589E;&#x52A0;&#x4E0B;&#x9762;&#x7684;Google DNS&#xFF1A;</p>
<pre><code>server=8.8.8.8
</code></pre><p>&#x91CD;&#x542F;&#xFF1A;</p>
<pre><code># systemctl restart dnsmasq
# ping -c1 google.com
</code></pre><h3 id="&#x90E8;&#x7F72;gluster">&#x90E8;&#x7F72;Gluster</h3>
<p>GlusterFS&#x81F3;&#x5C11;&#x9700;&#x8981;&#x6709;&#x4EE5;&#x4E0B;&#x914D;&#x7F6E;&#x7684;3&#x53F0;&#x865A;&#x62DF;&#x673A;&#xFF1A;</p>
<ul>
<li>RHEL 7.3</li>
<li>2 CPUs</li>
<li>2 GB&#x5185;&#x5B58;</li>
<li>30 GB&#x78C1;&#x76D8;&#x5B58;&#x50A8;&#x7ED9;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;</li>
<li>10 GB&#x78C1;&#x76D8;&#x5B58;&#x50A8;&#x7ED9;GlusterFS bricks</li>
</ul>
<p>&#x4FEE;&#x6539;/etc/hosts&#x6587;&#x4EF6;&#xFF0C;&#x5B9A;&#x4E49;&#x4E09;&#x53F0;&#x865A;&#x62DF;&#x673A;&#x7684;&#x4E3B;&#x673A;&#x540D;&#x3002;</p>
<p>&#x4F8B;&#x5982;&#xFF08;&#x4E3B;&#x673A;&#x540D;&#x53EF;&#x4EE5;&#x6839;&#x636E;&#x4F60;&#x81EA;&#x5DF1;&#x7684;&#x73AF;&#x5883;&#x81EA;&#x7531;&#x8C03;&#x6574;&#xFF09;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># cat /etc/hosts</span>
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.99.144 ocp-master.lab ocp-master
172.16.128.7 crs-node1.lab crs-node1
172.16.128.8 crs-node2.lab crs-node2
172.16.128.9 crs-node3.lab crs-node3
</code></pre>
<p><strong>&#x5728;3&#x53F0;GlusterFS&#x865A;&#x62DF;&#x673A;&#x4E0A;&#x90FD;&#x6267;&#x884C;&#x4EE5;&#x4E0B;&#x6B65;&#x9AA4;</strong>&#xFF1A;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># subscription-manager repos --disable=&quot;*&quot;</span>
<span class="hljs-comment"># subscription-manager repos --enable=rhel-7-server-rpms</span>
</code></pre>
<p>&#x5982;&#x679C;&#x4F60;&#x5DF2;&#x7ECF;&#x8BA2;&#x9605;&#x4E86;GlusterFS&#x90A3;&#x4E48;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x4F7F;&#x7528;&#xFF0C;&#x5F00;&#x542F;<code>rh-gluster-3-for-rhel-7-server-rpms</code>&#x7684;yum&#x6E90;&#x3002;</p>
<p>&#x5982;&#x679C;&#x4F60;&#x6CA1;&#x6709;&#x7684;&#x8BDD;&#xFF0C;&#x90A3;&#x4E48;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;EPEL&#x4F7F;&#x7528;&#x975E;&#x5B98;&#x65B9;&#x652F;&#x6301;&#x7684;GlusterFS&#x7684;&#x793E;&#x533A;&#x6E90;&#x3002;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># yum -y install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm</span>
<span class="hljs-comment"># rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7</span>
</code></pre>
<p>&#x5728;<code>/etc/yum.repos.d/</code>&#x76EE;&#x5F55;&#x4E0B;&#x521B;&#x5EFA;<code>glusterfs-3.10.repo</code>&#x6587;&#x4EF6;&#xFF1A;</p>
<pre><code class="lang-ini"><span class="hljs-section">[glusterfs-3.10]</span>
<span class="hljs-attr">name</span>=glusterfs-<span class="hljs-number">3.10</span>
<span class="hljs-attr">description</span>=<span class="hljs-string">&quot;GlusterFS 3.10 Community Version&quot;</span>
<span class="hljs-attr">baseurl</span>=https://buildlogs.centos.org/centos/<span class="hljs-number">7</span>/storage/x<span class="hljs-number">86_64</span>/gluster-<span class="hljs-number">3.10</span>/
<span class="hljs-attr">gpgcheck</span>=<span class="hljs-number">0</span>
<span class="hljs-attr">enabled</span>=<span class="hljs-number">1</span>
</code></pre>
<p>&#x9A8C;&#x8BC1;&#x6E90;&#x5DF2;&#x7ECF;&#x88AB;&#x6FC0;&#x6D3B;&#x3002;</p>
<pre><code class="lang-Bash"><span class="hljs-comment"># yum repolist</span>
</code></pre>
<p>&#x73B0;&#x5728;&#x53EF;&#x4EE5;&#x5F00;&#x59CB;&#x5B89;&#x88C5;GlusterFS&#x4E86;&#x3002;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># yum -y install glusterfs-server</span>
</code></pre>
<p>&#x9700;&#x8981;&#x4E3A;GlusterFS peers&#x6253;&#x5F00;&#x51E0;&#x4E2A;&#x57FA;&#x672C;TCP&#x7AEF;&#x53E3;&#xFF0C;&#x4EE5;&#x4FBF;&#x4E0E;OpenShift&#x8FDB;&#x884C;&#x901A;&#x4FE1;&#x5E76;&#x63D0;&#x4F9B;&#x5B58;&#x50A8;&#xFF1A;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># firewall-cmd --add-port=24007-24008/tcp --add-port=49152-49664/tcp --add-port=2222/tcp</span>
<span class="hljs-comment"># firewall-cmd --runtime-to-permanent</span>
</code></pre>
<p>&#x73B0;&#x5728;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x542F;&#x52A8;GlusterFS&#x7684;daemon&#x8FDB;&#x7A0B;&#x4E86;&#xFF1A;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># systemctl enable glusterd</span>
<span class="hljs-comment"># systemctl start glusterd</span>
</code></pre>
<p>&#x5B8C;&#x6210;&#x3002;GlusterFS&#x5DF2;&#x7ECF;&#x542F;&#x52A8;&#x5E76;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x3002;&#x5176;&#x4ED6;&#x914D;&#x7F6E;&#x5C06;&#x901A;&#x8FC7;heketi&#x5B8C;&#x6210;&#x3002;</p>
<p><strong>&#x5728;GlusterFS&#x7684;&#x4E00;&#x53F0;&#x865A;&#x62DF;&#x673A;&#x4E0A;&#x5B89;&#x88C5;heketi</strong></p>
<pre><code class="lang-bash">[root@crs-node1 ~]<span class="hljs-comment"># yum -y install heketi heketi-client</span>
</code></pre>
<h3 id="&#x66F4;&#x65B0;epel">&#x66F4;&#x65B0;EPEL</h3>
<p>&#x5982;&#x679C;&#x4F60;&#x6CA1;&#x6709;Red Hat Gluster Storage&#x8BA2;&#x9605;&#x7684;&#x8BDD;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x4ECE;EPEL&#x4E2D;&#x83B7;&#x53D6;heketi&#x3002; &#x5728;&#x64B0;&#x5199;&#x672C;&#x6587;&#x65F6;&#xFF0C;2016&#x5E74;10&#x6708;&#x90A3;&#x65F6;&#x5019;&#x8FD8;&#x662F;3.0.0-1.el7&#x7248;&#x672C;&#xFF0C;&#x5B83;&#x4E0D;&#x9002;&#x7528;&#x4E8E;OpenShift 3.4&#x3002; &#x4F60;&#x5C06;&#x9700;&#x8981;&#x66F4;&#x65B0;&#x5230;&#x66F4;&#x65B0;&#x7684;&#x7248;&#x672C;&#xFF1A;</p>
<pre><code class="lang-bash">[root@crs-node1 ~]<span class="hljs-comment"># yum -y install wget</span>
[root@crs-node1 ~]<span class="hljs-comment"># wget https://github.com/heketi/heketi/releases/download/v4.0.0/heketi-v4.0.0.linux.amd64.tar.gz</span>
[root@crs-node1 ~]<span class="hljs-comment"># tar -xzf heketi-v4.0.0.linux.amd64.tar.gz</span>
[root@crs-node1 ~]<span class="hljs-comment"># systemctl stop heketi</span>
[root@crs-node1 ~]<span class="hljs-comment"># cp heketi/heketi* /usr/bin/</span>
[root@crs-node1 ~]<span class="hljs-comment"># chown heketi:heketi /usr/bin/heketi*</span>
</code></pre>
<p>&#x5728;<code>/etc/systemd/system/heketi.service</code>&#x4E2D;&#x521B;&#x5EFA;v4&#x7248;&#x672C;&#x7684;heketi&#x4E8C;&#x8FDB;&#x5236;&#x6587;&#x4EF6;&#x7684;&#x66F4;&#x65B0;&#x8BED;&#x6CD5;&#x6587;&#x4EF6;&#xFF1A;</p>
<pre><code class="lang-ini"><span class="hljs-section">[Unit]</span>
<span class="hljs-attr">Description</span>=Heketi Server
<span class="hljs-section">
[Service]</span>
<span class="hljs-attr">Type</span>=simple
<span class="hljs-attr">WorkingDirectory</span>=/var/lib/heketi
<span class="hljs-attr">EnvironmentFile</span>=-/etc/heketi/heketi.json
<span class="hljs-attr">User</span>=heketi
<span class="hljs-attr">ExecStart</span>=/usr/bin/heketi --config=/etc/heketi/heketi.json
<span class="hljs-attr">Restart</span>=<span class="hljs-literal">on</span>-failure
<span class="hljs-attr">StandardOutput</span>=syslog
<span class="hljs-attr">StandardError</span>=syslog
<span class="hljs-section">
[Install]</span>
<span class="hljs-attr">WantedBy</span>=multi-user.target
</code></pre>
<pre><code class="lang-bash">[root@crs-node1 ~]<span class="hljs-comment"># systemctl daemon-reload</span>
[root@crs-node1 ~]<span class="hljs-comment"># systemctl start heketi</span>
</code></pre>
<p>Heketi&#x4F7F;&#x7528;SSH&#x6765;&#x914D;&#x7F6E;GlusterFS&#x7684;&#x6240;&#x6709;&#x8282;&#x70B9;&#x3002;&#x521B;&#x5EFA;SSH&#x5BC6;&#x94A5;&#x5BF9;&#xFF0C;&#x5C06;&#x516C;&#x94A5;&#x62F7;&#x8D1D;&#x5230;&#x6240;&#x6709;3&#x4E2A;&#x8282;&#x70B9;&#x4E0A;&#xFF08;&#x5305;&#x62EC;&#x4F60;&#x767B;&#x9646;&#x7684;&#x7B2C;&#x4E00;&#x4E2A;&#x8282;&#x70B9;&#xFF09;&#xFF1A;</p>
<pre><code>[root@crs-node1 ~]# ssh-keygen -f /etc/heketi/heketi_key -t rsa -N &apos;&apos;
[root@crs-node1 ~]# ssh-copy-id -i /etc/heketi/heketi_key.pub root@crs-node1.lab
[root@crs-node1 ~]# ssh-copy-id -i /etc/heketi/heketi_key.pub root@crs-node2.lab
[root@crs-node1 ~]# ssh-copy-id -i /etc/heketi/heketi_key.pub root@crs-node3.lab
[root@crs-node1 ~]# chown heketi:heketi /etc/heketi/heketi_key*
</code></pre><p>&#x5269;&#x4E0B;&#x552F;&#x4E00;&#x8981;&#x505A;&#x7684;&#x4E8B;&#x60C5;&#x5C31;&#x662F;&#x914D;&#x7F6E;heketi&#x6765;&#x4F7F;&#x7528;SSH&#x3002; &#x7F16;&#x8F91;<code>/etc/heketi/heketi.json</code>&#x6587;&#x4EF6;&#x4F7F;&#x5B83;&#x770B;&#x8D77;&#x6765;&#x50CF;&#x4E0B;&#x9762;&#x8FD9;&#x4E2A;&#x6837;&#x5B50;&#xFF08;&#x6539;&#x53D8;&#x7684;&#x90E8;&#x5206;&#x7A81;&#x51FA;&#x663E;&#x793A;&#x4E0B;&#x5212;&#x7EBF;&#xFF09;&#xFF1A;</p>
<pre><code>{
&quot;_port_comment&quot;:&quot;Heketi Server Port Number&quot;,
&quot;port&quot;:&quot;8080&quot;,
&quot;_use_auth&quot;:&quot;Enable JWT authorization. Please enable for deployment&quot;,
&quot;use_auth&quot;:false,
&quot;_jwt&quot;:&quot;Private keys for access&quot;,
&quot;jwt&quot;:{
&quot;_admin&quot;:&quot;Admin has access to all APIs&quot;,
&quot;admin&quot;:{
&quot;key&quot;:&quot;My Secret&quot;
},
&quot;_user&quot;:&quot;User only has access to /volumes endpoint&quot;,
&quot;user&quot;:{
&quot;key&quot;:&quot;My Secret&quot;
}
},
&quot;_glusterfs_comment&quot;:&quot;GlusterFS Configuration&quot;,
&quot;glusterfs&quot;:{
&quot;_executor_comment&quot;:[
&quot;Execute plugin. Possible choices: mock, ssh&quot;,
&quot;mock: This setting is used for testing and development.&quot;,
&quot; It will not send commands to any node.&quot;,
&quot;ssh: This setting will notify Heketi to ssh to the nodes.&quot;,
&quot; It will need the values in sshexec to be configured.&quot;,
&quot;kubernetes: Communicate with GlusterFS containers over&quot;,
&quot; Kubernetes exec api.&quot;
],
&quot;executor&quot;:&quot;ssh&quot;,
&quot;_sshexec_comment&quot;:&quot;SSH username and private key file information&quot;,
&quot;sshexec&quot;:{
&quot;keyfile&quot;:&quot;/etc/heketi/heketi_key&quot;,
&quot;user&quot;:&quot;root&quot;,
&quot;port&quot;:&quot;22&quot;,
&quot;fstab&quot;:&quot;/etc/fstab&quot;
},
&quot;_kubeexec_comment&quot;:&quot;Kubernetes configuration&quot;,
&quot;kubeexec&quot;:{
&quot;host&quot;:&quot;https://kubernetes.host:8443&quot;,
&quot;cert&quot;:&quot;/path/to/crt.file&quot;,
&quot;insecure&quot;:false,
&quot;user&quot;:&quot;kubernetes username&quot;,
&quot;password&quot;:&quot;password for kubernetes user&quot;,
&quot;namespace&quot;:&quot;OpenShift project or Kubernetes namespace&quot;,
&quot;fstab&quot;:&quot;Optional: Specify fstab file on node. Default is /etc/fstab&quot;
},
&quot;_db_comment&quot;:&quot;Database file name&quot;,
&quot;db&quot;:&quot;/var/lib/heketi/heketi.db&quot;,
&quot;_loglevel_comment&quot;:[
&quot;Set log level. Choices are:&quot;,
&quot; none, critical, error, warning, info, debug&quot;,
&quot;Default is warning&quot;
],
&quot;loglevel&quot;:&quot;debug&quot;
}
}
</code></pre><p>&#x5B8C;&#x6210;&#x3002;heketi&#x5C06;&#x76D1;&#x542C;8080&#x7AEF;&#x53E3;&#xFF0C;&#x6211;&#x4EEC;&#x6765;&#x786E;&#x8BA4;&#x4E0B;&#x9632;&#x706B;&#x5899;&#x89C4;&#x5219;&#x5141;&#x8BB8;&#x5B83;&#x76D1;&#x542C;&#x8BE5;&#x7AEF;&#x53E3;&#xFF1A;</p>
<pre><code># firewall-cmd --add-port=8080/tcp
# firewall-cmd --runtime-to-permanent
</code></pre><p>&#x91CD;&#x542F;heketi&#xFF1A;</p>
<pre><code># systemctl enable heketi
# systemctl restart heketi
</code></pre><p>&#x6D4B;&#x8BD5;&#x5B83;&#x662F;&#x5426;&#x5728;&#x8FD0;&#x884C;&#xFF1A;</p>
<pre><code># curl http://crs-node1.lab:8080/hello
Hello from Heketi
</code></pre><p>&#x5F88;&#x597D;&#x3002;heketi&#x4E0A;&#x573A;&#x7684;&#x65F6;&#x5019;&#x5230;&#x4E86;&#x3002; &#x6211;&#x4EEC;&#x5C06;&#x4F7F;&#x7528;&#x5B83;&#x6765;&#x914D;&#x7F6E;&#x6211;&#x4EEC;&#x7684;GlusterFS&#x5B58;&#x50A8;&#x6C60;&#x3002; &#x8BE5;&#x8F6F;&#x4EF6;&#x5DF2;&#x7ECF;&#x5728;&#x6211;&#x4EEC;&#x6240;&#x6709;&#x7684;&#x865A;&#x62DF;&#x673A;&#x4E0A;&#x8FD0;&#x884C;&#xFF0C;&#x4F46;&#x5E76;&#x672A;&#x88AB;&#x914D;&#x7F6E;&#x3002; &#x8981;&#x5C06;&#x5176;&#x6539;&#x9020;&#x4E3A;&#x6EE1;&#x8DB3;&#x6211;&#x4EEC;&#x9700;&#x6C42;&#x7684;&#x5B58;&#x50A8;&#x7CFB;&#x7EDF;&#xFF0C;&#x9700;&#x8981;&#x5728;&#x62D3;&#x6251;&#x6587;&#x4EF6;&#x4E2D;&#x63CF;&#x8FF0;&#x6211;&#x4EEC;&#x6240;&#x9700;&#x7684;GlusterFS&#x5B58;&#x50A8;&#x6C60;&#xFF0C;&#x5982;&#x4E0B;&#x6240;&#x793A;&#xFF1A;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># vi topology.json</span>
{
<span class="hljs-string">&quot;clusters&quot;</span>: [
{
<span class="hljs-string">&quot;nodes&quot;</span>: [
{
<span class="hljs-string">&quot;node&quot;</span>: {
<span class="hljs-string">&quot;hostnames&quot;</span>: {
<span class="hljs-string">&quot;manage&quot;</span>: [
<span class="hljs-string">&quot;crs-node1.lab&quot;</span>
],
<span class="hljs-string">&quot;storage&quot;</span>: [
<span class="hljs-string">&quot;172.16.128.7&quot;</span>
]
},
<span class="hljs-string">&quot;zone&quot;</span>: 1
},
<span class="hljs-string">&quot;devices&quot;</span>: [
<span class="hljs-string">&quot;/dev/sdb&quot;</span>
]
},
{
<span class="hljs-string">&quot;node&quot;</span>: {
<span class="hljs-string">&quot;hostnames&quot;</span>: {
<span class="hljs-string">&quot;manage&quot;</span>: [
<span class="hljs-string">&quot;crs-node2.lab&quot;</span>
],
<span class="hljs-string">&quot;storage&quot;</span>: [
<span class="hljs-string">&quot;172.16.128.8&quot;</span>
]
},
<span class="hljs-string">&quot;zone&quot;</span>: 1
},
<span class="hljs-string">&quot;devices&quot;</span>: [
<span class="hljs-string">&quot;/dev/sdb&quot;</span>
]
},
{
<span class="hljs-string">&quot;node&quot;</span>: {
<span class="hljs-string">&quot;hostnames&quot;</span>: {
<span class="hljs-string">&quot;manage&quot;</span>: [
<span class="hljs-string">&quot;crs-node3.lab&quot;</span>
],
<span class="hljs-string">&quot;storage&quot;</span>: [
<span class="hljs-string">&quot;172.16.128.9&quot;</span>
]
},
<span class="hljs-string">&quot;zone&quot;</span>: 1
},
<span class="hljs-string">&quot;devices&quot;</span>: [
<span class="hljs-string">&quot;/dev/sdb&quot;</span>
]
}
]
}
]
}
</code></pre>
<p>&#x8BE5;&#x6587;&#x4EF6;&#x683C;&#x5F0F;&#x6BD4;&#x8F83;&#x7B80;&#x5355;&#xFF0C;&#x57FA;&#x672C;&#x4E0A;&#x662F;&#x544A;&#x8BC9;heketi&#x8981;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;3&#x8282;&#x70B9;&#x7684;&#x96C6;&#x7FA4;&#xFF0C;&#x5176;&#x4E2D;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x5305;&#x542B;&#x7684;&#x914D;&#x7F6E;&#x6709;FQDN&#xFF0C;IP&#x5730;&#x5740;&#x4EE5;&#x53CA;&#x81F3;&#x5C11;&#x4E00;&#x4E2A;&#x5C06;&#x7528;&#x4F5C;GlusterFS&#x5757;&#x7684;&#x5907;&#x7528;&#x5757;&#x8BBE;&#x5907;&#x3002;</p>
<p>&#x73B0;&#x5728;&#x5C06;&#x8BE5;&#x6587;&#x4EF6;&#x53D1;&#x9001;&#x7ED9;heketi&#xFF1A;</p>
<pre><code># export HEKETI_CLI_SERVER=http://crs-node1.lab:8080
# heketi-cli topology load --json=topology.json
Creating cluster ... ID: 78cdb57aa362f5284bc95b2549bc7e7d
Creating node crs-node1.lab ... ID: ffd7671c0083d88aeda9fd1cb40b339b
Adding device /dev/sdb ... OK
Creating node crs-node2.lab ... ID: 8220975c0a4479792e684584153050a9
Adding device /dev/sdb ... OK
Creating node crs-node3.lab ... ID: b94f14c4dbd8850f6ac589ac3b39cc8e
Adding device /dev/sdb ... OK
</code></pre><p>&#x73B0;&#x5728;heketi&#x5DF2;&#x7ECF;&#x914D;&#x7F6E;&#x4E86;3&#x4E2A;&#x8282;&#x70B9;&#x7684;GlusterFS&#x5B58;&#x50A8;&#x6C60;&#x3002;&#x5F88;&#x7B80;&#x5355;&#xFF01;&#x4F60;&#x73B0;&#x5728;&#x53EF;&#x4EE5;&#x770B;&#x5230;3&#x4E2A;&#x865A;&#x62DF;&#x673A;&#x90FD;&#x5DF2;&#x7ECF;&#x6210;&#x529F;&#x6784;&#x6210;&#x4E86;GlusterFS&#x4E2D;&#x7684;&#x53EF;&#x4FE1;&#x5B58;&#x50A8;&#x6C60;&#xFF08;Trusted Stroage Pool&#xFF09;&#x3002;</p>
<pre><code class="lang-bash">[root@crs-node1 ~]<span class="hljs-comment"># gluster peer status</span>
Number of Peers: 2
Hostname: crs-node2.lab
Uuid: 93b34946-9571-46a8-983c-c9f128557c0e
State: Peer <span class="hljs-keyword">in</span> Cluster (Connected)
Other names:
crs-node2.lab
Hostname: 172.16.128.9
Uuid: e3c1f9b0-be97-42e5-beda<span class="hljs-_">-f</span>70<span class="hljs-built_in">fc</span>05f47ea
State: Peer <span class="hljs-keyword">in</span> Cluster (Connected)
</code></pre>
<p>&#x73B0;&#x5728;&#x56DE;&#x5230;OpenShift&#xFF01;</p>
<h3 id="&#x5C06;gluster&#x4E0E;openshift&#x96C6;&#x6210;">&#x5C06;Gluster&#x4E0E;OpenShift&#x96C6;&#x6210;</h3>
<p>&#x4E3A;&#x4E86;&#x96C6;&#x6210;OpenShift&#xFF0C;&#x9700;&#x8981;&#x4E24;&#x6837;&#x4E1C;&#x897F;&#xFF1A;&#x4E00;&#x4E2A;&#x52A8;&#x6001;&#x7684;Kubernetes Storage Provisioner&#x548C;&#x4E00;&#x4E2A;StorageClass&#x3002; Provisioner&#x5728;OpenShift&#x4E2D;&#x5F00;&#x7BB1;&#x5373;&#x7528;&#x3002; &#x5B9E;&#x9645;&#x4E0A;&#x5173;&#x952E;&#x7684;&#x662F;&#x5982;&#x4F55;&#x5C06;&#x5B58;&#x50A8;&#x6302;&#x8F7D;&#x5230;&#x5BB9;&#x5668;&#x4E0A;&#x3002; StorageClass&#x662F;OpenShift&#x4E2D;&#x7684;&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x7528;&#x6765;&#x5B9E;&#x73B0;&#x7684;PersistentVolumeClaims&#x7684;&#x5B9E;&#x4F53;&#xFF0C;&#x5B83;&#x53CD;&#x8FC7;&#x6765;&#x80FD;&#x591F;&#x89E6;&#x53D1;&#x4E00;&#x4E2A;Provisioner&#x5B9E;&#x73B0;&#x5B9E;&#x9645;&#x7684;&#x914D;&#x7F6E;&#xFF0C;&#x5E76;&#x5C06;&#x7ED3;&#x679C;&#x8868;&#x793A;&#x4E3A;Kubernetes PersistentVolume&#xFF08;PV&#xFF09;&#x3002;</p>
<p>&#x5C31;&#x50CF;OpenShift&#x4E2D;&#x7684;&#x5176;&#x4ED6;&#x7EC4;&#x4EF6;&#x4E00;&#x6837;&#xFF0C;StorageClass&#x4E5F;&#x7B80;&#x5355;&#x7684;&#x7528;YAML&#x6587;&#x4EF6;&#x5B9A;&#x4E49;&#xFF1A;</p>
<pre><code class="lang-Bash"><span class="hljs-comment"># cat crs-storageclass.yaml</span>
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: container-ready-storage
annotations:
storageclass.beta.kubernetes.io/is-default-class: <span class="hljs-string">&quot;true&quot;</span>
provisioner: kubernetes.io/glusterfs
parameters:
resturl: <span class="hljs-string">&quot;http://crs-node1.lab:8080&quot;</span>
restauthenabled: <span class="hljs-string">&quot;false&quot;</span>
</code></pre>
<p>&#x6211;&#x4EEC;&#x7684;provisioner&#x662F;kubernetes.io/glusterfs&#xFF0C;&#x5C06;&#x5B83;&#x6307;&#x5411;&#x6211;&#x4EEC;&#x7684;heketi&#x5B9E;&#x4F8B;&#x3002; &#x6211;&#x4EEC;&#x5C06;&#x7C7B;&#x547D;&#x540D;&#x4E3A;&#x201C;container-ready-storage&#x201D;&#xFF0C;&#x540C;&#x65F6;&#x4F7F;&#x5176;&#x6210;&#x4E3A;&#x6240;&#x6709;&#x6CA1;&#x6709;&#x663E;&#x793A;&#x6307;&#x5B9A;StorageClass&#x7684;PersistentVolumeClaim&#x7684;&#x9ED8;&#x8BA4;StorageClass&#x3002;</p>
<p>&#x4E3A;&#x4F60;&#x7684;GlusterFS&#x6C60;&#x521B;&#x5EFA;StorageClass&#xFF1A;</p>
<pre><code># oc create -f crs-storageclass.yaml
</code></pre><h3 id="&#x5728;openshift&#x4E2D;&#x4F7F;&#x7528;gluster">&#x5728;OpenShift&#x4E2D;&#x4F7F;&#x7528;Gluster</h3>
<p>&#x6211;&#x4EEC;&#x6765;&#x770B;&#x4E0B;&#x5982;&#x4F55;&#x5728;OpenShift&#x4E2D;&#x4F7F;&#x7528;GlusterFS&#x3002;&#x9996;&#x5148;&#x5728;OpenShift&#x865A;&#x62DF;&#x673A;&#x4E2D;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x6D4B;&#x8BD5;&#x9879;&#x76EE;&#x3002;</p>
<pre><code># oc new-project crs-storage --display-name=&quot;Container-Ready Storage&quot;
</code></pre><p>&#x8FD9;&#x4F1A;&#x5411;Kubernetes/OpenShift&#x53D1;&#x51FA;storage&#x8BF7;&#x6C42;&#xFF0C;&#x8BF7;&#x6C42;&#x4E00;&#x4E2A;PersistentVolumeClaim&#xFF08;PVC&#xFF09;&#x3002; &#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x7B80;&#x5355;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x5B83;&#x63CF;&#x8FF0;&#x6700;&#x5C11;&#x9700;&#x8981;&#x591A;&#x5C11;&#x5BB9;&#x91CF;&#x548C;&#x5E94;&#x8BE5;&#x63D0;&#x4F9B;&#x54EA;&#x79CD;&#x8BBF;&#x95EE;&#x6A21;&#x5F0F;&#xFF08;&#x975E;&#x5171;&#x4EAB;&#xFF0C;&#x5171;&#x4EAB;&#xFF0C;&#x53EA;&#x8BFB;&#xFF09;&#x3002; &#x5B83;&#x901A;&#x5E38;&#x662F;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x6A21;&#x677F;&#x7684;&#x4E00;&#x90E8;&#x5206;&#xFF0C;&#x4F46;&#x6211;&#x4EEC;&#x53EA;&#x9700;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x72EC;&#x7ACB;&#x7684;PVC&#xFF1A;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># cat crs-claim.yaml</span>
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-crs-storage
namespace: crs-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
</code></pre>
<p>&#x53D1;&#x9001;&#x8BE5;&#x8BF7;&#x6C42;&#xFF1A;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># oc create -f crs-claim.yaml</span>
</code></pre>
<p>&#x89C2;&#x5BDF;&#x5728;OpenShfit&#x4E2D;&#xFF0C;PVC&#x6B63;&#x5728;&#x4EE5;&#x52A8;&#x6001;&#x521B;&#x5EFA;volume&#x7684;&#x65B9;&#x5F0F;&#x5B9E;&#x73B0;&#xFF1A;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># oc get pvc</span>
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
my-crs-storage Bound pvc-41ad5adb-107c-11e7-afae-000c2949cce7 1Gi RWO 58s
</code></pre>
<p>&#x592A;&#x68D2;&#x4E86;&#xFF01; &#x4F60;&#x73B0;&#x5728;&#x53EF;&#x4EE5;&#x5728;OpenShift&#x4E2D;&#x4F7F;&#x7528;&#x5B58;&#x50A8;&#x5BB9;&#x91CF;&#xFF0C;&#x800C;&#x4E0D;&#x9700;&#x8981;&#x76F4;&#x63A5;&#x4E0E;&#x5B58;&#x50A8;&#x7CFB;&#x7EDF;&#x8FDB;&#x884C;&#x4EFB;&#x4F55;&#x4EA4;&#x4E92;&#x3002; &#x6211;&#x4EEC;&#x6765;&#x770B;&#x770B;&#x521B;&#x5EFA;&#x7684;volume&#xFF1A;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># oc get pv/pvc-41ad5adb-107c-11e7-afae-000c2949cce7</span>
Name: pvc-41ad5adb-107c-11e7-afae-000c2949cce7
Labels:
StorageClass: container-ready-storage
Status: Bound
Claim: crs-storage/my-crs-storage
Reclaim Policy: Delete
Access Modes: RWO
Capacity: 1Gi
Message:
Source:
Type: Glusterfs (a Glusterfs mount on the host that shares a pod<span class="hljs-string">&apos;s lifetime)
EndpointsName: gluster-dynamic-my-crs-storage
Path: vol_85e444ee3bc154de084976a9aef16025
ReadOnly: false
</span></code></pre>
<p>What happened in the background was that when the PVC reached the system, our default StorageClass reached out to the GlusterFS Provisioner with the volume specs from the PVC. The provisioner in turn communicates with our heketi instance which facilitates the creation of the GlusterFS volume, which we can trace in it&#x2019;s log messages:</p>
<p>&#x8BE5;volume&#x662F;&#x6839;&#x636E;PVC&#x4E2D;&#x7684;&#x5B9A;&#x4E49;&#x7279;&#x522B;&#x521B;&#x5EFA;&#x7684;&#x3002; &#x5728;PVC&#x4E2D;&#xFF0C;&#x6211;&#x4EEC;&#x6CA1;&#x6709;&#x660E;&#x786E;&#x6307;&#x5B9A;&#x8981;&#x4F7F;&#x7528;&#x54EA;&#x4E2A;StorageClass&#xFF0C;&#x56E0;&#x4E3A;heketi&#x7684;GlusterFS StorageClass&#x5DF2;&#x7ECF;&#x88AB;&#x5B9A;&#x4E49;&#x4E3A;&#x7CFB;&#x7EDF;&#x8303;&#x56F4;&#x7684;&#x9ED8;&#x8BA4;&#x503C;&#x3002;</p>
<p>&#x5728;&#x540E;&#x53F0;&#x53D1;&#x751F;&#x7684;&#x60C5;&#x51B5;&#x662F;&#xFF0C;&#x5F53;PVC&#x5230;&#x8FBE;&#x7CFB;&#x7EDF;&#x65F6;&#xFF0C;&#x9ED8;&#x8BA4;&#x7684;StorageClass&#x8BF7;&#x6C42;&#x5177;&#x6709;&#x8BE5;PVC&#x4E2D;volume&#x58F0;&#x660E;&#x89C4;&#x683C;&#x7684;GlusterFS Provisioner&#x3002; Provisioner&#x53C8;&#x4E0E;&#x6211;&#x4EEC;&#x7684;heketi&#x5B9E;&#x4F8B;&#x901A;&#x4FE1;&#xFF0C;&#x8FD9;&#x6709;&#x52A9;&#x4E8E;&#x521B;&#x5EFA;GlusterFS volume&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5728;&#x5176;&#x65E5;&#x5FD7;&#x6D88;&#x606F;&#x4E2D;&#x8FFD;&#x8E2A;&#xFF1A;</p>
<pre><code class="lang-bash">[root@crs-node1 ~]<span class="hljs-comment"># journalctl -l -u heketi.service</span>
...
Mar 24 11:25:52 crs-node1.lab heketi[2598]: [heketi] DEBUG 2017/03/24 11:25:52 /src/github.com/heketi/heketi/apps/glusterfs/volume_entry.go:298: Volume to be created on cluster e
Mar 24 11:25:52 crs-node1.lab heketi[2598]: [heketi] INFO 2017/03/24 11:25:52 Creating brick 9e791b1daa12af783c9195941fe63103
Mar 24 11:25:52 crs-node1.lab heketi[2598]: [heketi] INFO 2017/03/24 11:25:52 Creating brick 3e06af2f855bef521a95ada91680d14b
Mar 24 11:25:52 crs-node1.lab heketi[2598]: [heketi] INFO 2017/03/24 11:25:52 Creating brick e4daa240f1359071e3f7ea22618cfbab
...
Mar 24 11:25:52 crs-node1.lab heketi[2598]: [sshexec] INFO 2017/03/24 11:25:52 Creating volume vol_85e444ee3bc154de084976a9aef16025 replica 3
...
Mar 24 11:25:53 crs-node1.lab heketi[2598]: Result: volume create: vol_85e444ee3bc154de084976a9aef16025: success: please start the volume to access data
...
Mar 24 11:25:55 crs-node1.lab heketi[2598]: Result: volume start: vol_85e444ee3bc154de084976a9aef16025: success
...
Mar 24 11:25:55 crs-node1.lab heketi[2598]: [asynchttp] INFO 2017/03/24 11:25:55 Completed job c3d6c4f9<span class="hljs-built_in">fc</span>74796f4a5262647dc790fe <span class="hljs-keyword">in</span> 3.176522702s
...
</code></pre>
<p>&#x6210;&#x529F;&#xFF01; &#x5927;&#x7EA6;&#x7528;&#x4E86;3&#x79D2;&#x949F;&#xFF0C;GlusterFS&#x6C60;&#x5C31;&#x914D;&#x7F6E;&#x5B8C;&#x6210;&#x4E86;&#xFF0C;&#x5E76;&#x914D;&#x7F6E;&#x4E86;&#x4E00;&#x4E2A;volume&#x3002; &#x9ED8;&#x8BA4;&#x503C;&#x662F;replica 3&#xFF0C;&#x8FD9;&#x610F;&#x5473;&#x7740;&#x6570;&#x636E;&#x5C06;&#x88AB;&#x590D;&#x5236;&#x5230;3&#x4E2A;&#x4E0D;&#x540C;&#x8282;&#x70B9;&#x7684;3&#x4E2A;&#x5757;&#x4E0A;&#xFF08;&#x7528;GlusterFS&#x4F5C;&#x4E3A;&#x540E;&#x7AEF;&#x5B58;&#x50A8;&#xFF09;&#x3002; &#x8BE5;&#x8FC7;&#x7A0B;&#x662F;&#x901A;&#x8FC7;Heketi&#x5728;OpenShift&#x8FDB;&#x884C;&#x7F16;&#x6392;&#x7684;&#x3002;</p>
<p>&#x4F60;&#x4E5F;&#x53EF;&#x4EE5;&#x4ECE;GlusterFS&#x7684;&#x89D2;&#x5EA6;&#x770B;&#x5230;&#x6709;&#x5173;volume&#x7684;&#x4FE1;&#x606F;&#xFF1A;</p>
<pre><code class="lang-bash">[root@crs-node1 ~]<span class="hljs-comment"># gluster volume list</span>
vol_85e444ee3bc154de084976a9aef16025
[root@crs-node1 ~]<span class="hljs-comment"># gluster volume info vol_85e444ee3bc154de084976a9aef16025</span>
Volume Name: vol_85e444ee3bc154de084976a9aef16025
Type: Replicate
Volume ID: a32168c8-858e-472a-b145-08c20192082b
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: 172.16.128.8:/var/lib/heketi/mounts/vg_147b43f6f6903be8b23209903b7172ae/brick_9e791b1daa12af783c9195941fe63103/brick
Brick2: 172.16.128.9:/var/lib/heketi/mounts/vg_72c0f520b0c57d807be21e9c90312f85/brick_3e06af2f855bef521a95ada91680d14b/brick
Brick3: 172.16.128.7:/var/lib/heketi/mounts/vg_67314f879686de975f9b8936ae43c5c5/brick_e4daa240f1359071e3f7ea22618cfbab/brick
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
</code></pre>
<p>&#x8BF7;&#x6CE8;&#x610F;&#xFF0C;GlusterFS&#x4E2D;&#x7684;&#x5377;&#x540D;&#x79F0;&#x5982;&#x4F55;&#x5BF9;&#x5E94;&#x4E8E;OpenShift&#x4E2D;Kubernetes Persistent Volume&#x7684;&#x201C;&#x8DEF;&#x5F84;&#x201D;&#x3002;</p>
<p>&#x6216;&#x8005;&#xFF0C;&#x4F60;&#x4E5F;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;OpenShift UI&#x6765;&#x914D;&#x7F6E;&#x5B58;&#x50A8;&#xFF0C;&#x8FD9;&#x6837;&#x53EF;&#x4EE5;&#x5F88;&#x65B9;&#x4FBF;&#x5730;&#x5728;&#x7CFB;&#x7EDF;&#x4E2D;&#x7684;&#x6240;&#x6709;&#x5DF2;&#x77E5;&#x7684;StorageClasses&#x4E2D;&#x8FDB;&#x884C;&#x9009;&#x62E9;&#xFF1A;</p>
<figure id="fig1.4.4.1.2.1"><img src="https://keithtenzer.files.wordpress.com/2017/03/screen-shot-2017-03-23-at-21-50-34.png?w=440" alt="Screen Shot 2017-03-23 at 21.50.34"><figcaption>Figure: Screen Shot 2017-03-23 at 21.50.34</figcaption></figure>
<figure id="fig1.4.4.1.2.2"><img src="https://keithtenzer.files.wordpress.com/2017/03/screen-shot-2017-03-24-at-11-09-341.png?w=440" alt="Screen Shot 2017-03-24 at 11.09.34.png"><figcaption>Figure: Screen Shot 2017-03-24 at 11.09.34.png</figcaption></figure>
<p>&#x8BA9;&#x6211;&#x4EEC;&#x505A;&#x70B9;&#x66F4;&#x6709;&#x8DA3;&#x7684;&#x4E8B;&#x60C5;&#xFF0C;&#x5728;OpenShift&#x4E2D;&#x8FD0;&#x884C;&#x5DE5;&#x4F5C;&#x8D1F;&#x8F7D;&#x3002;</p>
<p>&#x5728;&#x4ECD;&#x8FD0;&#x884C;&#x7740;crs-storage&#x9879;&#x76EE;&#x7684;OpenShift&#x865A;&#x62DF;&#x673A;&#x4E2D;&#x6267;&#x884C;&#xFF1A;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># oc get templates -n openshift</span>
</code></pre>
<p>&#x4F60;&#x5E94;&#x8BE5;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x4E00;&#x4E2A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x548C;&#x6570;&#x636E;&#x5E93;&#x6A21;&#x677F;&#x5217;&#x8868;&#xFF0C;&#x8FD9;&#x4E2A;&#x5217;&#x8868;&#x5C06;&#x65B9;&#x4FBF;&#x4F60;&#x66F4;&#x8F7B;&#x677E;&#x7684;&#x4F7F;&#x7528;OpenShift&#x6765;&#x90E8;&#x7F72;&#x4F60;&#x7684;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x9879;&#x76EE;&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x5C06;&#x4F7F;&#x7528;MySQL&#x6765;&#x6F14;&#x793A;&#x5982;&#x4F55;&#x5728;OpenShift&#x4E0A;&#x90E8;&#x7F72;&#x5177;&#x6709;&#x6301;&#x4E45;&#x5316;&#x548C;&#x5F39;&#x6027;&#x5B58;&#x50A8;&#x7684;&#x6709;&#x72B6;&#x6001;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x3002; Mysql-persistent&#x6A21;&#x677F;&#x5305;&#x542B;&#x4E00;&#x4E2A;&#x7528;&#x4E8E;MySQL&#x6570;&#x636E;&#x5E93;&#x76EE;&#x5F55;&#x7684;1G&#x7A7A;&#x95F4;&#x7684;PVC&#x3002; &#x4E3A;&#x4E86;&#x6F14;&#x793A;&#x76EE;&#x7684;&#xFF0C;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x4F7F;&#x7528;&#x9ED8;&#x8BA4;&#x503C;&#x3002;</p>
<pre><code># oc process mysql-persistent -n openshift | oc create -f -
</code></pre><p>&#x7B49;&#x5F85;&#x90E8;&#x7F72;&#x5B8C;&#x6210;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;UI&#x6216;&#x8005;&#x547D;&#x4EE4;&#x884C;&#x89C2;&#x5BDF;&#x90E8;&#x7F72;&#x8FDB;&#x5EA6;&#xFF1A;</p>
<pre><code># oc get pods
NAME READY STATUS RESTARTS AGE
mysql-1-h4afb 1/1 Running 0 2m
</code></pre><p>&#x597D;&#x4E86;&#x3002;&#x6211;&#x4EEC;&#x5DF2;&#x7ECF;&#x4F7F;&#x7528;&#x8FD9;&#x4E2A;&#x6A21;&#x677F;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;service&#xFF0C;secrets&#x3001;PVC&#x548C;pod&#x3002;&#x6211;&#x4EEC;&#x6765;&#x4F7F;&#x7528;&#x5B83;&#xFF08;&#x4F60;&#x7684;pod&#x540D;&#x5B57;&#x5C06;&#x8DDF;&#x6211;&#x7684;&#x4E0D;&#x540C;&#xFF09;&#xFF1A;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># oc rsh mysql-1-h4afb</span>
</code></pre>
<p>&#x4F60;&#x5DF2;&#x7ECF;&#x6210;&#x529F;&#x7684;&#x5C06;&#x5B83;&#x6302;&#x8F7D;&#x5230;MySQL&#x7684;pod&#x4E0A;&#x3002;&#x6211;&#x4EEC;&#x8FDE;&#x63A5;&#x4E00;&#x4E0B;&#x6570;&#x636E;&#x5E93;&#x8BD5;&#x8BD5;&#xFF1A;</p>
<pre><code class="lang-bash">sh-4.2$ mysql -u <span class="hljs-variable">$MYSQL_USER</span> -p<span class="hljs-variable">$MYSQL_PASSWORD</span> -h <span class="hljs-variable">$HOSTNAME</span> <span class="hljs-variable">$MYSQL_DATABASE</span>
</code></pre>
<p>&#x8FD9;&#x70B9;&#x5F88;&#x65B9;&#x4FBF;&#xFF0C;&#x6240;&#x6709;&#x91CD;&#x8981;&#x7684;&#x914D;&#x7F6E;&#xFF0C;&#x5982;MySQL&#x51ED;&#x636E;&#xFF0C;&#x6570;&#x636E;&#x5E93;&#x540D;&#x79F0;&#x7B49;&#x90FD;&#x662F;pod&#x6A21;&#x677F;&#x4E2D;&#x7684;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x7684;&#x4E00;&#x90E8;&#x5206;&#xFF0C;&#x56E0;&#x6B64;&#x53EF;&#x4EE5;&#x5728;pod&#x4E2D;&#x4F5C;&#x4E3A;shell&#x7684;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x3002; &#x6211;&#x4EEC;&#x6765;&#x521B;&#x5EFA;&#x4E00;&#x4E9B;&#x6570;&#x636E;&#xFF1A;</p>
<pre><code class="lang-Bash">mysql&gt; show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| sampledb |
+--------------------+
2 rows <span class="hljs-keyword">in</span> <span class="hljs-built_in">set</span> (0.02 sec)
mysql&gt; \u sampledb
Database changed
mysql&gt; CREATE TABLE IF NOT EXISTS equipment (
-&gt; equip_id int(5) NOT NULL AUTO_INCREMENT,
-&gt; <span class="hljs-built_in">type</span> varchar(50) DEFAULT NULL,
-&gt; install_date DATE DEFAULT NULL,
-&gt; color varchar(20) DEFAULT NULL,
-&gt; working bool DEFAULT NULL,
-&gt; location varchar(250) DEFAULT NULL,
-&gt; PRIMARY KEY(equip_id)
-&gt; );
Query OK, 0 rows affected (0.13 sec)
mysql&gt; INSERT INTO equipment (<span class="hljs-built_in">type</span>, install_date, color, working, location)
-&gt; VALUES
-&gt; (<span class="hljs-string">&quot;Slide&quot;</span>, Now(), <span class="hljs-string">&quot;blue&quot;</span>, 1, <span class="hljs-string">&quot;Southwest Corner&quot;</span>);
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql&gt; SELECT * FROM equipment;
+----------+-------+--------------+-------+---------+------------------+
| equip_id | <span class="hljs-built_in">type</span> | install_date | color | working | location |
+----------+-------+--------------+-------+---------+------------------+
| 1 | Slide | 2017-03-24 | blue | 1 | Southwest Corner |
+----------+-------+--------------+-------+---------+------------------+
1 row <span class="hljs-keyword">in</span> <span class="hljs-built_in">set</span> (0.00 sec)
</code></pre>
<p>&#x5F88;&#x597D;&#xFF0C;&#x6570;&#x636E;&#x5E93;&#x8FD0;&#x884C;&#x6B63;&#x5E38;&#x3002;</p>
<p>&#x4F60;&#x60F3;&#x770B;&#x4E0B;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x5728;&#x54EA;&#x91CC;&#x5417;&#xFF1F;&#x5F88;&#x7B80;&#x5355;&#xFF01;&#x67E5;&#x770B;&#x521A;&#x4F7F;&#x7528;&#x6A21;&#x677F;&#x521B;&#x5EFA;&#x7684;mysql volume&#xFF1A;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># oc get pvc/mysql</span>
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
mysql Bound pvc<span class="hljs-_">-a</span>678b583-1082-11e7-afae-000c2949cce7 1Gi RWO 11m
<span class="hljs-comment"># oc describe pv/pvc-a678b583-1082-11e7-afae-000c2949cce7</span>
Name: pvc<span class="hljs-_">-a</span>678b583-1082-11e7-afae-000c2949cce7
Labels:
StorageClass: container-ready-storage
Status: Bound
Claim: crs-storage/mysql
Reclaim Policy: Delete
Access Modes: RWO
Capacity: 1Gi
Message:
Source:
Type: Glusterfs (a Glusterfs mount on the host that shares a pod<span class="hljs-string">&apos;s lifetime)
EndpointsName: gluster-dynamic-mysql
Path: vol_6299fc74eee513119dafd43f8a438db1
ReadOnly: false
</span></code></pre>
<p>GlusterFS&#x7684;volume&#x540D;&#x5B57;&#x662F;vol_6299fc74eee513119dafd43f8a438db1&#x3002;&#x56DE;&#x5230;&#x4F60;&#x7684;GlusterFS&#x865A;&#x62DF;&#x673A;&#x4E2D;&#xFF0C;&#x8F93;&#x5165;&#xFF1A;</p>
<pre><code class="lang-bash"><span class="hljs-comment"># gluster volume info vol_6299fc74eee513119dafd43f8a438db</span>
Volume Name: vol_6299<span class="hljs-built_in">fc</span>74eee513119dafd43f8a438db1
Type: Replicate
Volume ID: 4115918f-28f7-4d4a-b3f5-4b9afe5b391f
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: 172.16.128.7:/var/lib/heketi/mounts/vg_67314f879686de975f9b8936ae43c5c5/brick_f264a47aa32be5d595f83477572becf8/brick
Brick2: 172.16.128.8:/var/lib/heketi/mounts/vg_147b43f6f6903be8b23209903b7172ae/brick_f5731fe7175cbe6e6567e013c2591343/brick
Brick3: 172.16.128.9:/var/lib/heketi/mounts/vg_72c0f520b0c57d807be21e9c90312f85/brick_ac6add804a6a467<span class="hljs-built_in">cd</span>81<span class="hljs-built_in">cd</span>1404841bbf1/brick
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
</code></pre>
<p>&#x4F60;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x6570;&#x636E;&#x662F;&#x5982;&#x4F55;&#x88AB;&#x590D;&#x5236;&#x5230;3&#x4E2A;GlusterFS&#x5757;&#x7684;&#x3002;&#x6211;&#x4EEC;&#x4ECE;&#x4E2D;&#x6311;&#x4E00;&#x4E2A;&#xFF08;&#x6700;&#x597D;&#x6311;&#x9009;&#x4F60;&#x521A;&#x767B;&#x9646;&#x7684;&#x90A3;&#x53F0;&#x865A;&#x62DF;&#x673A;&#x5E76;&#x67E5;&#x770B;&#x76EE;&#x5F55;&#xFF09;&#xFF1A;</p>
<pre><code># ll /var/lib/heketi/mounts/vg_67314f879686de975f9b8936ae43c5c5/brick_f264a47aa32be5d595f83477572becf8/brick
total 180300
-rw-r-----. 2 1000070000 2001 56 Mar 24 12:11 auto.cnf
-rw-------. 2 1000070000 2001 1676 Mar 24 12:11 ca-key.pem
-rw-r--r--. 2 1000070000 2001 1075 Mar 24 12:11 ca.pem
-rw-r--r--. 2 1000070000 2001 1079 Mar 24 12:12 client-cert.pem
-rw-------. 2 1000070000 2001 1680 Mar 24 12:12 client-key.pem
-rw-r-----. 2 1000070000 2001 352 Mar 24 12:12 ib_buffer_pool
-rw-r-----. 2 1000070000 2001 12582912 Mar 24 12:20 ibdata1
-rw-r-----. 2 1000070000 2001 79691776 Mar 24 12:20 ib_logfile0
-rw-r-----. 2 1000070000 2001 79691776 Mar 24 12:11 ib_logfile1
-rw-r-----. 2 1000070000 2001 12582912 Mar 24 12:12 ibtmp1
drwxr-s---. 2 1000070000 2001 8192 Mar 24 12:12 mysql
-rw-r-----. 2 1000070000 2001 2 Mar 24 12:12 mysql-1-h4afb.pid
drwxr-s---. 2 1000070000 2001 8192 Mar 24 12:12 performance_schema
-rw-------. 2 1000070000 2001 1676 Mar 24 12:12 private_key.pem
-rw-r--r--. 2 1000070000 2001 452 Mar 24 12:12 public_key.pem
drwxr-s---. 2 1000070000 2001 62 Mar 24 12:20 sampledb
-rw-r--r--. 2 1000070000 2001 1079 Mar 24 12:11 server-cert.pem
-rw-------. 2 1000070000 2001 1676 Mar 24 12:11 server-key.pem
drwxr-s---. 2 1000070000 2001 8192 Mar 24 12:12 sys
</code></pre><p>&#x4F60;&#x53EF;&#x4EE5;&#x5728;&#x8FD9;&#x91CC;&#x770B;&#x5230;MySQL&#x6570;&#x636E;&#x5E93;&#x76EE;&#x5F55;&#x3002; &#x5B83;&#x4F7F;&#x7528;GlusterFS&#x4F5C;&#x4E3A;&#x540E;&#x7AEF;&#x5B58;&#x50A8;&#xFF0C;&#x5E76;&#x4F5C;&#x4E3A;&#x7ED1;&#x5B9A;&#x6302;&#x8F7D;&#x7ED9;MySQL&#x5BB9;&#x5668;&#x4F7F;&#x7528;&#x3002; &#x5982;&#x679C;&#x4F60;&#x68C0;&#x67E5;OpenShift VM&#x4E0A;&#x7684;mount&#x8868;&#xFF0C;&#x4F60;&#x5C06;&#x4F1A;&#x770B;&#x5230;GlusterFS&#x7684;mount&#x3002;</p>
<h3 id="&#x603B;&#x7ED3;">&#x603B;&#x7ED3;</h3>
<p>&#x5728;&#x8FD9;&#x91CC;&#x6211;&#x4EEC;&#x662F;&#x5728;OpenShift&#x4E4B;&#x5916;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;&#x7B80;&#x5355;&#x4F46;&#x529F;&#x80FD;&#x5F3A;&#x5927;&#x7684;GlusterFS&#x5B58;&#x50A8;&#x6C60;&#x3002; &#x8BE5;&#x6C60;&#x53EF;&#x4EE5;&#x72EC;&#x7ACB;&#x4E8E;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x6269;&#x5C55;&#x548C;&#x6536;&#x7F29;&#x3002; &#x8BE5;&#x6C60;&#x7684;&#x6574;&#x4E2A;&#x751F;&#x547D;&#x5468;&#x671F;&#x7531;&#x4E00;&#x4E2A;&#x7B80;&#x5355;&#x7684;&#x79F0;&#x4E3A;heketi&#x7684;&#x524D;&#x7AEF;&#x7BA1;&#x7406;&#xFF0C;&#x4F60;&#x53EA;&#x9700;&#x8981;&#x5728;&#x90E8;&#x7F72;&#x589E;&#x957F;&#x65F6;&#x8FDB;&#x884C;&#x624B;&#x52A8;&#x5E72;&#x9884;&#x3002; &#x5BF9;&#x4E8E;&#x65E5;&#x5E38;&#x914D;&#x7F6E;&#x64CD;&#x4F5C;&#xFF0C;&#x4F7F;&#x7528;&#x5B83;&#x7684;API&#x4E0E;OpenShifts&#x52A8;&#x6001;&#x914D;&#x7F6E;&#x5668;&#x4EA4;&#x4E92;&#xFF0C;&#x65E0;&#x9700;&#x5F00;&#x53D1;&#x4EBA;&#x5458;&#x76F4;&#x63A5;&#x4E0E;&#x57FA;&#x7840;&#x67B6;&#x6784;&#x56E2;&#x961F;&#x8FDB;&#x884C;&#x4EA4;&#x4E92;&#x3002;</p>
<p>&#x8FD9;&#x5C31;&#x662F;&#x6211;&#x4EEC;&#x5982;&#x4F55;&#x5C06;&#x5B58;&#x50A8;&#x5E26;&#x5165;DevOps&#x4E16;&#x754C; - &#x65E0;&#x75DB;&#x82E6;&#xFF0C;&#x5E76;&#x5728;OpenShift PaaS&#x7CFB;&#x7EDF;&#x7684;&#x5F00;&#x53D1;&#x4EBA;&#x5458;&#x5DE5;&#x5177;&#x4E2D;&#x76F4;&#x63A5;&#x63D0;&#x4F9B;&#x3002;</p>
<p>GlusterFS&#x548C;OpenShift&#x53EF;&#x8DE8;&#x8D8A;&#x6240;&#x6709;&#x73AF;&#x5883;&#xFF1A;&#x88F8;&#x673A;&#xFF0C;&#x865A;&#x62DF;&#x673A;&#xFF0C;&#x79C1;&#x6709;&#x548C;&#x516C;&#x5171;&#x4E91;&#xFF08;Azure&#xFF0C;Google Cloud&#xFF0C;AWS ...&#xFF09;&#xFF0C;&#x786E;&#x4FDD;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x53EF;&#x79FB;&#x690D;&#x6027;&#xFF0C;&#x5E76;&#x907F;&#x514D;&#x4E91;&#x4F9B;&#x5E94;&#x5546;&#x9501;&#x5B9A;&#x3002;</p>
<p>&#x795D;&#x4F60;&#x6109;&#x5FEB;&#x5728;&#x5BB9;&#x5668;&#x4E2D;&#x4F7F;&#x7528;GlusterFS&#xFF01;</p>
<p>(c) 2017 Keith Tenzer</p>
<p>&#x539F;&#x6587;&#x94FE;&#x63A5;&#xFF1A;<a href="https://keithtenzer.com/2017/03/24/storage-for-containers-using-gluster-part-ii/" target="_blank">https://keithtenzer.com/2017/03/24/storage-for-containers-using-gluster-part-ii/</a></p>
<footer class="page-footer-ex"> <span class="page-footer-ex-copyright">for GitBook</span>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span class="page-footer-ex-footer-update">update
2017-08-21 18:23:35
</span></footer>
</section>
</div>
<div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
</div>
</div>
</div>
<a href="using-glusterfs-for-persistent-storage.html" class="navigation navigation-prev " aria-label="Previous page: 4.4.1.1 使用GlusterFS做持久化存储">
<i class="fa fa-angle-left"></i>
</a>
<a href="../usecases/" class="navigation navigation-next " aria-label="Next page: 5. 领域应用">
<i class="fa fa-angle-right"></i>
</a>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"4.4.1.2 在OpenShift中使用GlusterFS做持久化存储","level":"1.4.4.1.2","depth":4,"next":{"title":"5. 领域应用","level":"1.5","depth":1,"path":"usecases/index.md","ref":"usecases/index.md","articles":[{"title":"5.1 微服务架构","level":"1.5.1","depth":2,"path":"usecases/microservices.md","ref":"usecases/microservices.md","articles":[{"title":"5.1.1 Istio","level":"1.5.1.1","depth":3,"path":"usecases/istio.md","ref":"usecases/istio.md","articles":[{"title":"5.1.1.1 安装istio","level":"1.5.1.1.1","depth":4,"path":"usecases/istio-installation.md","ref":"usecases/istio-installation.md","articles":[]},{"title":"5.1.1.2 配置请求的路由规则","level":"1.5.1.1.2","depth":4,"path":"usecases/configuring-request-routing.md","ref":"usecases/configuring-request-routing.md","articles":[]}]},{"title":"5.1.2 Linkerd","level":"1.5.1.2","depth":3,"path":"usecases/linkerd.md","ref":"usecases/linkerd.md","articles":[{"title":"5.1.2.1 Linkerd 使用指南","level":"1.5.1.2.1","depth":4,"path":"usecases/linkerd-user-guide.md","ref":"usecases/linkerd-user-guide.md","articles":[]}]},{"title":"5.1.3 微服务中的服务发现","level":"1.5.1.3","depth":3,"path":"usecases/service-discovery-in-microservices.md","ref":"usecases/service-discovery-in-microservices.md","articles":[]}]},{"title":"5.2 大数据","level":"1.5.2","depth":2,"path":"usecases/big-data.md","ref":"usecases/big-data.md","articles":[{"title":"5.2.1 Spark standalone on Kubernetes","level":"1.5.2.1","depth":3,"path":"usecases/spark-standalone-on-kubernetes.md","ref":"usecases/spark-standalone-on-kubernetes.md","articles":[]},{"title":"5.2.2 运行支持kubernetes原生调度的Spark程序","level":"1.5.2.2","depth":3,"path":"usecases/support-spark-natively-in-kubernetes.md","ref":"usecases/support-spark-natively-in-kubernetes.md","articles":[]}]},{"title":"5.3 Serverless架构","level":"1.5.3","depth":2,"path":"usecases/serverless.md","ref":"usecases/serverless.md","articles":[]}]},"previous":{"title":"4.4.1.1 使用GlusterFS做持久化存储","level":"1.4.4.1.1","depth":4,"path":"practice/using-glusterfs-for-persistent-storage.md","ref":"practice/using-glusterfs-for-persistent-storage.md","articles":[]},"dir":"ltr"},"config":{"plugins":["github","codesnippet","splitter","page-toc-button","image-captions","page-footer-ex","editlink","-lunr","-search","search-plus"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"github":{"url":"https://github.com/rootsongjc/kubernetes-handbook"},"editlink":{"label":"编辑本页","multilingual":false,"base":"https://github.com/rootsongjc/kubernetes-handbook/blob/master/"},"page-footer-ex":{"copyright":"for GitBook","update_format":"YYYY-MM-DD HH:mm:ss","update_label":"update"},"splitter":{},"codesnippet":{},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"page-toc-button":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"search-plus":{},"image-captions":{"variable_name":"_pictures"}},"page-footer-ex":{"copyright":"Jimmy Song","update_label":"最后更新:","update_format":"YYYY-MM-DD HH:mm:ss"},"theme":"default","author":"Jimmy Song","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{"_pictures":[{"backlink":"index.html#fig1.1.1","level":"1.1","list_caption":"Figure: wercker status","alt":"wercker status","nro":1,"url":"https://app.wercker.com/status/b8b69e593784e17ddcfd1286adfd8f3c/s/master","index":1,"caption_template":"Figure: _CAPTION_","label":"wercker status","attributes":{},"title":"wercker status","skip":false,"key":"1.1.1"},{"backlink":"concepts/index.html#fig1.2.1","level":"1.2","list_caption":"Figure: Borg架构","alt":"Borg架构","nro":2,"url":"../images/borg.png","index":1,"caption_template":"Figure: _CAPTION_","label":"Borg架构","attributes":{},"skip":false,"key":"1.2.1"},{"backlink":"concepts/index.html#fig1.2.2","level":"1.2","list_caption":"Figure: Kubernetes架构","alt":"Kubernetes架构","nro":3,"url":"../images/architecture.png","index":2,"caption_template":"Figure: _CAPTION_","label":"Kubernetes架构","attributes":{},"skip":false,"key":"1.2.2"},{"backlink":"concepts/index.html#fig1.2.3","level":"1.2","list_caption":"Figure: kubernetes整体架构示意图","alt":"kubernetes整体架构示意图","nro":4,"url":"../images/kubernetes-whole-arch.png","index":3,"caption_template":"Figure: _CAPTION_","label":"kubernetes整体架构示意图","attributes":{},"skip":false,"key":"1.2.3"},{"backlink":"concepts/index.html#fig1.2.4","level":"1.2","list_caption":"Figure: Kubernetes master架构示意图","alt":"Kubernetes master架构示意图","nro":5,"url":"../images/kubernetes-master-arch.png","index":4,"caption_template":"Figure: _CAPTION_","label":"Kubernetes master架构示意图","attributes":{},"skip":false,"key":"1.2.4"},{"backlink":"concepts/index.html#fig1.2.5","level":"1.2","list_caption":"Figure: kubernetes node架构示意图","alt":"kubernetes node架构示意图","nro":6,"url":"../images/kubernetes-node-arch.png","index":5,"caption_template":"Figure: _CAPTION_","label":"kubernetes node架构示意图","attributes":{},"skip":false,"key":"1.2.5"},{"backlink":"concepts/index.html#fig1.2.6","level":"1.2","list_caption":"Figure: Kubernetes分层架构示意图","alt":"Kubernetes分层架构示意图","nro":7,"url":"../images/kubernetes-layers-arch.jpg","index":6,"caption_template":"Figure: _CAPTION_","label":"Kubernetes分层架构示意图","attributes":{},"skip":false,"key":"1.2.6"},{"backlink":"concepts/concepts.html#fig1.2.1.1","level":"1.2.1","list_caption":"Figure: 分层架构示意图","alt":"分层架构示意图","nro":8,"url":"../images/kubernetes-layers-arch.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"分层架构示意图","attributes":{},"skip":false,"key":"1.2.1.1"},{"backlink":"concepts/pod-overview.html#fig1.2.2.1.1","level":"1.2.2.1","list_caption":"Figure: pod diagram","alt":"pod diagram","nro":9,"url":"../images/pod-overview.png","index":1,"caption_template":"Figure: _CAPTION_","label":"pod diagram","attributes":{},"skip":false,"key":"1.2.2.1.1"},{"backlink":"concepts/pod.html#fig1.2.2.1.1.1","level":"1.2.2.1.1","list_caption":"Figure: Pod示意图","alt":"Pod示意图","nro":10,"url":"../images/pod-overview.png","index":1,"caption_template":"Figure: _CAPTION_","label":"Pod示意图","attributes":{},"skip":false,"key":"1.2.2.1.1.1"},{"backlink":"concepts/pod.html#fig1.2.2.1.1.2","level":"1.2.2.1.1","list_caption":"Figure: Pod Cheatsheet","alt":"Pod Cheatsheet","nro":11,"url":"../images/kubernetes-pod-cheatsheet.png","index":2,"caption_template":"Figure: _CAPTION_","label":"Pod Cheatsheet","attributes":{},"skip":false,"key":"1.2.2.1.1.2"},{"backlink":"concepts/service.html#fig1.2.2.4.1","level":"1.2.2.4","list_caption":"Figure: userspace代理模式下Service概览图","alt":"userspace代理模式下Service概览图","nro":12,"url":"https://d33wubrfki0l68.cloudfront.net/b8e1022c2dd815d8dd36b1bc4f0cc3ad870a924f/1dd12/images/docs/services-userspace-overview.svg","index":1,"caption_template":"Figure: _CAPTION_","label":"userspace代理模式下Service概览图","attributes":{},"skip":false,"key":"1.2.2.4.1"},{"backlink":"concepts/service.html#fig1.2.2.4.2","level":"1.2.2.4","list_caption":"Figure: iptables代理模式下Service概览图","alt":"iptables代理模式下Service概览图","nro":13,"url":"https://d33wubrfki0l68.cloudfront.net/837afa5715eb31fb9ca6516ec6863e810f437264/42951/images/docs/services-iptables-overview.svg","index":2,"caption_template":"Figure: _CAPTION_","label":"iptables代理模式下Service概览图","attributes":{},"skip":false,"key":"1.2.2.4.2"},{"backlink":"concepts/deployment.html#fig1.2.2.6.1","level":"1.2.2.6","list_caption":"Figure: kubernetes deployment cheatsheet","alt":"kubernetes deployment cheatsheet","nro":14,"url":"../images/deployment-cheatsheet.png","index":1,"caption_template":"Figure: _CAPTION_","label":"kubernetes deployment cheatsheet","attributes":{},"skip":false,"key":"1.2.2.6.1"},{"backlink":"concepts/horizontal-pod-autoscaling.html#fig1.2.2.16.1","level":"1.2.2.16","list_caption":"Figure: horizontal-pod-autoscaler","alt":"horizontal-pod-autoscaler","nro":15,"url":"../images/horizontal-pod-autoscaler.png","index":1,"caption_template":"Figure: _CAPTION_","label":"horizontal-pod-autoscaler","attributes":{},"skip":false,"key":"1.2.2.16.1"},{"backlink":"concepts/label.html#fig1.2.2.17.1","level":"1.2.2.17","list_caption":"Figure: label示意图","alt":"label示意图","nro":16,"url":"../images/labels.png","index":1,"caption_template":"Figure: _CAPTION_","label":"label示意图","attributes":{},"skip":false,"key":"1.2.2.17.1"},{"backlink":"guide/using-kubectl.html#fig1.3.2.1.1","level":"1.3.2.1","list_caption":"Figure: kubectl cheatsheet","alt":"kubectl cheatsheet","nro":17,"url":"../images/kubernetes-kubectl-cheatsheet.png","index":1,"caption_template":"Figure: _CAPTION_","label":"kubectl cheatsheet","attributes":{},"skip":false,"key":"1.3.2.1.1"},{"backlink":"guide/using-kubectl.html#fig1.3.2.1.2","level":"1.3.2.1","list_caption":"Figure: kube-shell页面","alt":"kube-shell页面","nro":18,"url":"../images/kube-shell.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"kube-shell页面","attributes":{},"skip":false,"key":"1.3.2.1.2"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig1.3.5.1.1","level":"1.3.5.1","list_caption":"Figure: API","alt":"API","nro":19,"url":"../images/k8s-app-monitor-test-api-doc.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"API","attributes":{},"skip":false,"key":"1.3.5.1.1"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig1.3.5.1.2","level":"1.3.5.1","list_caption":"Figure: wercker","alt":"wercker","nro":20,"url":"../images/k8s-app-monitor-agent-wercker.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"wercker","attributes":{},"skip":false,"key":"1.3.5.1.2"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig1.3.5.1.3","level":"1.3.5.1","list_caption":"Figure: 图表","alt":"图表","nro":21,"url":"../images/k8s-app-monitor-agent.jpg","index":3,"caption_template":"Figure: _CAPTION_","label":"图表","attributes":{},"skip":false,"key":"1.3.5.1.3"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig1.3.5.2.1","level":"1.3.5.2","list_caption":"Figure: spark on yarn with kubernetes","alt":"spark on yarn with kubernetes","nro":22,"url":"../images/spark-on-yarn-with-kubernetes.png","index":1,"caption_template":"Figure: _CAPTION_","label":"spark on yarn with kubernetes","attributes":{},"skip":false,"key":"1.3.5.2.1"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig1.3.5.2.2","level":"1.3.5.2","list_caption":"Figure: Terms","alt":"Terms","nro":23,"url":"../images/terms-in-kubernetes-app-deployment.png","index":2,"caption_template":"Figure: _CAPTION_","label":"Terms","attributes":{},"skip":false,"key":"1.3.5.2.2"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig1.3.5.2.3","level":"1.3.5.2","list_caption":"Figure: 分解步骤解析","alt":"分解步骤解析","nro":24,"url":"../images/migrating-hadoop-yarn-to-kubernetes.png","index":3,"caption_template":"Figure: _CAPTION_","label":"分解步骤解析","attributes":{},"skip":false,"key":"1.3.5.2.3"},{"backlink":"practice/node-installation.html#fig1.4.1.6.1","level":"1.4.1.6","list_caption":"Figure: welcome-nginx","alt":"welcome-nginx","nro":25,"url":"http://olz1di9xf.bkt.clouddn.com/kubernetes-installation-test-nginx.png","index":1,"caption_template":"Figure: _CAPTION_","label":"welcome-nginx","attributes":{},"skip":false,"key":"1.4.1.6.1"},{"backlink":"practice/dashboard-addon-installation.html#fig1.4.1.8.1","level":"1.4.1.8","list_caption":"Figure: kubernetes-dashboard","alt":"kubernetes-dashboard","nro":26,"url":"http://olz1di9xf.bkt.clouddn.com/kubernetes-dashboard-raw.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"kubernetes-dashboard","attributes":{},"skip":false,"key":"1.4.1.8.1"},{"backlink":"practice/heapster-addon-installation.html#fig1.4.1.9.1","level":"1.4.1.9","list_caption":"Figure: dashboard-heapster","alt":"dashboard-heapster","nro":27,"url":"../images/kubernetes-dashboard-with-heapster.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"dashboard-heapster","attributes":{},"skip":false,"key":"1.4.1.9.1"},{"backlink":"practice/heapster-addon-installation.html#fig1.4.1.9.2","level":"1.4.1.9","list_caption":"Figure: grafana","alt":"grafana","nro":28,"url":"../images/kubernetes-heapster-grafana.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"grafana","attributes":{},"skip":false,"key":"1.4.1.9.2"},{"backlink":"practice/heapster-addon-installation.html#fig1.4.1.9.3","level":"1.4.1.9","list_caption":"Figure: kubernetes-influxdb-heapster","alt":"kubernetes-influxdb-heapster","nro":29,"url":"../images/kubernetes-influxdb-heapster.jpg","index":3,"caption_template":"Figure: _CAPTION_","label":"kubernetes-influxdb-heapster","attributes":{},"skip":false,"key":"1.4.1.9.3"},{"backlink":"practice/efk-addon-installation.html#fig1.4.1.10.1","level":"1.4.1.10","list_caption":"Figure: es-setting","alt":"es-setting","nro":30,"url":"../images/es-setting.png","index":1,"caption_template":"Figure: _CAPTION_","label":"es-setting","attributes":{},"skip":false,"key":"1.4.1.10.1"},{"backlink":"practice/efk-addon-installation.html#fig1.4.1.10.2","level":"1.4.1.10","list_caption":"Figure: es-home","alt":"es-home","nro":31,"url":"../images/kubernetes-efk-kibana.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"es-home","attributes":{},"skip":false,"key":"1.4.1.10.2"},{"backlink":"practice/traefik-ingress-installation.html#fig1.4.2.1.1","level":"1.4.2.1","list_caption":"Figure: kubernetes-dashboard","alt":"kubernetes-dashboard","nro":32,"url":"../images/traefik-dashboard.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"kubernetes-dashboard","attributes":{},"skip":false,"key":"1.4.2.1.1"},{"backlink":"practice/traefik-ingress-installation.html#fig1.4.2.1.2","level":"1.4.2.1","list_caption":"Figure: traefik-nginx","alt":"traefik-nginx","nro":33,"url":"../images/traefik-nginx.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"traefik-nginx","attributes":{},"skip":false,"key":"1.4.2.1.2"},{"backlink":"practice/traefik-ingress-installation.html#fig1.4.2.1.3","level":"1.4.2.1","list_caption":"Figure: traefik-guestbook","alt":"traefik-guestbook","nro":34,"url":"../images/traefik-guestbook.jpg","index":3,"caption_template":"Figure: _CAPTION_","label":"traefik-guestbook","attributes":{},"skip":false,"key":"1.4.2.1.3"},{"backlink":"practice/distributed-load-test.html#fig1.4.2.2.1","level":"1.4.2.2","list_caption":"Figure: traefik-dashboard-locust","alt":"traefik-dashboard-locust","nro":35,"url":"../images/traefik-dashboard-locust.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"traefik-dashboard-locust","attributes":{},"skip":false,"key":"1.4.2.2.1"},{"backlink":"practice/distributed-load-test.html#fig1.4.2.2.2","level":"1.4.2.2","list_caption":"Figure: locust-start-swarming","alt":"locust-start-swarming","nro":36,"url":"../images/locust-start-swarming.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"locust-start-swarming","attributes":{},"skip":false,"key":"1.4.2.2.2"},{"backlink":"practice/distributed-load-test.html#fig1.4.2.2.3","level":"1.4.2.2","list_caption":"Figure: sample-webapp-rc","alt":"sample-webapp-rc","nro":37,"url":"../images/sample-webapp-rc.jpg","index":3,"caption_template":"Figure: _CAPTION_","label":"sample-webapp-rc","attributes":{},"skip":false,"key":"1.4.2.2.3"},{"backlink":"practice/distributed-load-test.html#fig1.4.2.2.4","level":"1.4.2.2","list_caption":"Figure: locust-dashboard","alt":"locust-dashboard","nro":38,"url":"../images/locust-dashboard.jpg","index":4,"caption_template":"Figure: _CAPTION_","label":"locust-dashboard","attributes":{},"skip":false,"key":"1.4.2.2.4"},{"backlink":"practice/network-and-cluster-perfermance-test.html#fig1.4.2.3.1","level":"1.4.2.3","list_caption":"Figure: kubernetes-dashboard","alt":"kubernetes-dashboard","nro":39,"url":"http://olz1di9xf.bkt.clouddn.com/kubenetes-e2e-test.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"kubernetes-dashboard","attributes":{},"skip":false,"key":"1.4.2.3.1"},{"backlink":"practice/network-and-cluster-perfermance-test.html#fig1.4.2.3.2","level":"1.4.2.3","list_caption":"Figure: locust-test","alt":"locust-test","nro":40,"url":"http://olz1di9xf.bkt.clouddn.com/kubernetes-locust-test.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"locust-test","attributes":{},"skip":false,"key":"1.4.2.3.2"},{"backlink":"practice/edge-node-configuration.html#fig1.4.2.4.1","level":"1.4.2.4","list_caption":"Figure: 边缘节点架构","alt":"边缘节点架构","nro":41,"url":"../images/kubernetes-edge-node-architecture.png","index":1,"caption_template":"Figure: _CAPTION_","label":"边缘节点架构","attributes":{},"skip":false,"key":"1.4.2.4.1"},{"backlink":"practice/app-log-collection.html#fig1.4.3.2.1","level":"1.4.3.2","list_caption":"Figure: logstash日志收集架构图","alt":"logstash日志收集架构图","nro":42,"url":"../images/filebeat-log-collector.png","index":1,"caption_template":"Figure: _CAPTION_","label":"logstash日志收集架构图","attributes":{},"skip":false,"key":"1.4.3.2.1"},{"backlink":"practice/app-log-collection.html#fig1.4.3.2.2","level":"1.4.3.2","list_caption":"Figure: Kibana页面","alt":"Kibana页面","nro":43,"url":"../images/filebeat-docker-test.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"Kibana页面","attributes":{},"skip":false,"key":"1.4.3.2.2"},{"backlink":"practice/app-log-collection.html#fig1.4.3.2.3","level":"1.4.3.2","list_caption":"Figure: filebeat收集的日志详细信息","alt":"filebeat收集的日志详细信息","nro":44,"url":"../images/kubernetes-filebeat-detail.png","index":3,"caption_template":"Figure: _CAPTION_","label":"filebeat收集的日志详细信息","attributes":{},"skip":false,"key":"1.4.3.2.3"},{"backlink":"practice/monitor.html#fig1.4.3.4.1","level":"1.4.3.4","list_caption":"Figure: Kubernetes集群中的监控","alt":"Kubernetes集群中的监控","nro":45,"url":"../images/monitoring-in-kubernetes.png","index":1,"caption_template":"Figure: _CAPTION_","label":"Kubernetes集群中的监控","attributes":{},"skip":false,"key":"1.4.3.4.1"},{"backlink":"practice/monitor.html#fig1.4.3.4.2","level":"1.4.3.4","list_caption":"Figure: kubernetes的容器命名规则示意图","alt":"kubernetes的容器命名规则示意图","nro":46,"url":"../images/kubernetes-container-naming-rule.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"kubernetes的容器命名规则示意图","attributes":{},"skip":false,"key":"1.4.3.4.2"},{"backlink":"practice/monitor.html#fig1.4.3.4.3","level":"1.4.3.4","list_caption":"Figure: Heapster架构图改进版","alt":"Heapster架构图改进版","nro":47,"url":"../images/kubernetes-heapster-monitoring.png","index":3,"caption_template":"Figure: _CAPTION_","label":"Heapster架构图改进版","attributes":{},"skip":false,"key":"1.4.3.4.3"},{"backlink":"practice/monitor.html#fig1.4.3.4.4","level":"1.4.3.4","list_caption":"Figure: 应用监控架构图","alt":"应用监控架构图","nro":48,"url":"../images/kubernetes-app-monitoring.png","index":4,"caption_template":"Figure: _CAPTION_","label":"应用监控架构图","attributes":{},"skip":false,"key":"1.4.3.4.4"},{"backlink":"practice/monitor.html#fig1.4.3.4.5","level":"1.4.3.4","list_caption":"Figure: 应用拓扑图","alt":"应用拓扑图","nro":49,"url":"../images/weave-scope-service-topology.jpg","index":5,"caption_template":"Figure: _CAPTION_","label":"应用拓扑图","attributes":{},"skip":false,"key":"1.4.3.4.5"},{"backlink":"practice/jenkins-ci-cd.html#fig1.4.3.5.1","level":"1.4.3.5","list_caption":"Figure: 基于Jenkins的持续集成与发布","alt":"基于Jenkins的持续集成与发布","nro":50,"url":"../images/kubernetes-jenkins-ci-cd.png","index":1,"caption_template":"Figure: _CAPTION_","label":"基于Jenkins的持续集成与发布","attributes":{},"skip":false,"key":"1.4.3.5.1"},{"backlink":"practice/data-persistence-problem.html#fig1.4.3.6.1","level":"1.4.3.6","list_caption":"Figure: 日志持久化收集解决方案示意图","alt":"日志持久化收集解决方案示意图","nro":51,"url":"../images/log-persistence-logstash.png","index":1,"caption_template":"Figure: _CAPTION_","label":"日志持久化收集解决方案示意图","attributes":{},"skip":false,"key":"1.4.3.6.1"},{"backlink":"practice/storage-for-containers-using-glusterfs-with-openshift.html#fig1.4.4.1.2.1","level":"1.4.4.1.2","list_caption":"Figure: Screen Shot 2017-03-23 at 21.50.34","alt":"Screen Shot 2017-03-23 at 21.50.34","nro":52,"url":"https://keithtenzer.files.wordpress.com/2017/03/screen-shot-2017-03-23-at-21-50-34.png?w=440","index":1,"caption_template":"Figure: _CAPTION_","label":"Screen Shot 2017-03-23 at 21.50.34","attributes":{},"skip":false,"key":"1.4.4.1.2.1"},{"backlink":"practice/storage-for-containers-using-glusterfs-with-openshift.html#fig1.4.4.1.2.2","level":"1.4.4.1.2","list_caption":"Figure: Screen Shot 2017-03-24 at 11.09.34.png","alt":"Screen Shot 2017-03-24 at 11.09.34.png","nro":53,"url":"https://keithtenzer.files.wordpress.com/2017/03/screen-shot-2017-03-24-at-11-09-341.png?w=440","index":2,"caption_template":"Figure: _CAPTION_","label":"Screen Shot 2017-03-24 at 11.09.34.png","attributes":{},"skip":false,"key":"1.4.4.1.2.2"},{"backlink":"usecases/istio.html#fig1.5.1.1.1","level":"1.5.1.1","list_caption":"Figure: Istio架构图","alt":"Istio架构图","nro":54,"url":"../images/istio-arch.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"Istio架构图","attributes":{},"skip":false,"key":"1.5.1.1.1"},{"backlink":"usecases/istio-installation.html#fig1.5.1.1.1.1","level":"1.5.1.1.1","list_caption":"Figure: BookInfo Sample应用架构图","alt":"BookInfo Sample应用架构图","nro":55,"url":"../images/bookinfo-sample-arch.png","index":1,"caption_template":"Figure: _CAPTION_","label":"BookInfo Sample应用架构图","attributes":{},"skip":false,"key":"1.5.1.1.1.1"},{"backlink":"usecases/istio-installation.html#fig1.5.1.1.1.2","level":"1.5.1.1.1","list_caption":"Figure: BookInfo Sample页面","alt":"BookInfo Sample页面","nro":56,"url":"../images/bookinfo-sample.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"BookInfo Sample页面","attributes":{},"skip":false,"key":"1.5.1.1.1.2"},{"backlink":"usecases/istio-installation.html#fig1.5.1.1.1.3","level":"1.5.1.1.1","list_caption":"Figure: Istio Grafana界面","alt":"Istio Grafana界面","nro":57,"url":"../images/istio-grafana.jpg","index":3,"caption_template":"Figure: _CAPTION_","label":"Istio Grafana界面","attributes":{},"skip":false,"key":"1.5.1.1.1.3"},{"backlink":"usecases/istio-installation.html#fig1.5.1.1.1.4","level":"1.5.1.1.1","list_caption":"Figure: Prometheus页面","alt":"Prometheus页面","nro":58,"url":"../images/istio-prometheus.jpg","index":4,"caption_template":"Figure: _CAPTION_","label":"Prometheus页面","attributes":{},"skip":false,"key":"1.5.1.1.1.4"},{"backlink":"usecases/istio-installation.html#fig1.5.1.1.1.5","level":"1.5.1.1.1","list_caption":"Figure: Zipkin页面","alt":"Zipkin页面","nro":59,"url":"../images/istio-zipkin.jpg","index":5,"caption_template":"Figure: _CAPTION_","label":"Zipkin页面","attributes":{},"skip":false,"key":"1.5.1.1.1.5"},{"backlink":"usecases/istio-installation.html#fig1.5.1.1.1.6","level":"1.5.1.1.1","list_caption":"Figure: ServiceGraph页面","alt":"ServiceGraph页面","nro":60,"url":"../images/istio-servicegraph.jpg","index":6,"caption_template":"Figure: _CAPTION_","label":"ServiceGraph页面","attributes":{},"skip":false,"key":"1.5.1.1.1.6"},{"backlink":"usecases/linkerd.html#fig1.5.1.2.1","level":"1.5.1.2","list_caption":"Figure: source https://linkerd.io","alt":"source https://linkerd.io","nro":61,"url":"https://linkerd.io/images/diagram-individual-instance.png","index":1,"caption_template":"Figure: _CAPTION_","label":"source https://linkerd.io","attributes":{},"skip":false,"key":"1.5.1.2.1"},{"backlink":"usecases/linkerd-user-guide.html#fig1.5.1.2.1.1","level":"1.5.1.2.1","list_caption":"Figure: Jenkins pipeline","alt":"Jenkins pipeline","nro":62,"url":"../images/linkerd-jenkins-pipeline.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"Jenkins pipeline","attributes":{},"skip":false,"key":"1.5.1.2.1.1"},{"backlink":"usecases/linkerd-user-guide.html#fig1.5.1.2.1.2","level":"1.5.1.2.1","list_caption":"Figure: Jenkins config","alt":"Jenkins config","nro":63,"url":"../images/linkerd-jenkins.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"Jenkins config","attributes":{},"skip":false,"key":"1.5.1.2.1.2"},{"backlink":"usecases/linkerd-user-guide.html#fig1.5.1.2.1.3","level":"1.5.1.2.1","list_caption":"Figure: namerd","alt":"namerd","nro":64,"url":"../images/namerd-internal.jpg","index":3,"caption_template":"Figure: _CAPTION_","label":"namerd","attributes":{},"skip":false,"key":"1.5.1.2.1.3"},{"backlink":"usecases/linkerd-user-guide.html#fig1.5.1.2.1.4","level":"1.5.1.2.1","list_caption":"Figure: linkerd监控","alt":"linkerd监控","nro":65,"url":"../images/linkerd-helloworld-outgoing.jpg","index":4,"caption_template":"Figure: _CAPTION_","label":"linkerd监控","attributes":{},"skip":false,"key":"1.5.1.2.1.4"},{"backlink":"usecases/linkerd-user-guide.html#fig1.5.1.2.1.5","level":"1.5.1.2.1","list_caption":"Figure: linkerd监控","alt":"linkerd监控","nro":66,"url":"../images/linkerd-helloworld-incoming.jpg","index":5,"caption_template":"Figure: _CAPTION_","label":"linkerd监控","attributes":{},"skip":false,"key":"1.5.1.2.1.5"},{"backlink":"usecases/linkerd-user-guide.html#fig1.5.1.2.1.6","level":"1.5.1.2.1","list_caption":"Figure: linkerd性能监控","alt":"linkerd性能监控","nro":67,"url":"../images/linkerd-grafana.png","index":6,"caption_template":"Figure: _CAPTION_","label":"linkerd性能监控","attributes":{},"skip":false,"key":"1.5.1.2.1.6"},{"backlink":"usecases/linkerd-user-guide.html#fig1.5.1.2.1.7","level":"1.5.1.2.1","list_caption":"Figure: Linkerd ingress controller","alt":"Linkerd ingress controller","nro":68,"url":"../images/linkerd-ingress-controller.jpg","index":7,"caption_template":"Figure: _CAPTION_","label":"Linkerd ingress controller","attributes":{},"skip":false,"key":"1.5.1.2.1.7"},{"backlink":"usecases/service-discovery-in-microservices.html#fig1.5.1.3.1","level":"1.5.1.3","list_caption":"Figure: 微服务中的服务发现","alt":"微服务中的服务发现","nro":69,"url":"../images/service-discovery-in-microservices.png","index":1,"caption_template":"Figure: _CAPTION_","label":"微服务中的服务发现","attributes":{},"skip":false,"key":"1.5.1.3.1"},{"backlink":"usecases/spark-standalone-on-kubernetes.html#fig1.5.2.1.1","level":"1.5.2.1","list_caption":"Figure: spark master ui","alt":"spark master ui","nro":70,"url":"../images/spark-ui.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"spark master ui","attributes":{},"skip":false,"key":"1.5.2.1.1"},{"backlink":"usecases/spark-standalone-on-kubernetes.html#fig1.5.2.1.2","level":"1.5.2.1","list_caption":"Figure: zeppelin ui","alt":"zeppelin ui","nro":71,"url":"../images/zeppelin-ui.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"zeppelin ui","attributes":{},"skip":false,"key":"1.5.2.1.2"},{"backlink":"develop/client-go-sample.html#fig1.6.3.1","level":"1.6.3","list_caption":"Figure: 使用kubernetes dashboard进行故障排查","alt":"使用kubernetes dashboard进行故障排查","nro":72,"url":"../images/kubernetes-client-go-sample-update.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"使用kubernetes dashboard进行故障排查","attributes":{},"skip":false,"key":"1.6.3.1"},{"backlink":"appendix/issues.html#fig1.7.2.1","level":"1.7.2","list_caption":"Figure: pvc-storage-limit","alt":"pvc-storage-limit","nro":73,"url":"../images/pvc-storage-limit.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"pvc-storage-limit","attributes":{},"skip":false,"key":"1.7.2.1"}]},"title":"Kubernetes Handbook","language":"zh-cn","gitbook":"*","description":"Let's play fun with kubernetes!","image-captions":{"caption":"图片 - _CAPTION_"}},"file":{"path":"practice/storage-for-containers-using-glusterfs-with-openshift.md","mtime":"2017-08-21T10:23:35.000Z","type":"markdown"},"gitbook":{"version":"3.2.2","time":"2017-08-31T06:23:10.290Z"},"basePath":"..","book":{"language":""}});
});
</script>
</div>
<script src="../gitbook/gitbook.js"></script>
<script src="../gitbook/theme.js"></script>
<script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
<script src="../gitbook/gitbook-plugin-page-toc-button/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-search-plus/jquery.mark.min.js"></script>
<script src="../gitbook/gitbook-plugin-search-plus/search.js"></script>
<script src="../gitbook/gitbook-plugin-sharing/buttons.js"></script>
<script src="../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
</body>
</html>