2585 lines
137 KiB
HTML
2585 lines
137 KiB
HTML
|
||
<!DOCTYPE HTML>
|
||
<html lang="zh-hans" >
|
||
<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-back-to-top-button/plugin.css">
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="../gitbook/gitbook-plugin-search-plus/search.css">
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="../gitbook/gitbook-plugin-tbfed-pagefooter/footer.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="cephfs.html" />
|
||
|
||
|
||
<link rel="prev" href="using-glusterfs-for-persistent-storage.html" />
|
||
|
||
|
||
|
||
<link rel="shortcut icon" href='../favicon.ico' type="image/x-icon">
|
||
|
||
|
||
<link rel="bookmark" href='../favicon.ico' type="image/x-icon">
|
||
|
||
|
||
|
||
|
||
<style>
|
||
@media only screen and (max-width: 640px) {
|
||
.book-header .hidden-mobile {
|
||
display: none;
|
||
}
|
||
}
|
||
</style>
|
||
<script>
|
||
window["gitbook-plugin-github-buttons"] = {"repo":"rootsongjc/kubernetes-handbook","types":["star"],"size":"small"};
|
||
</script>
|
||
|
||
</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>
|
||
<a href="https://jimmysong.io" target="_blank" class="custom-link">Home</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
<li class="divider"></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="chapter " data-level="1.1" data-path="../">
|
||
|
||
<a href="../">
|
||
|
||
|
||
序言
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.2" data-path="../cloud-native/kubernetes-and-cloud-native-app-overview.html">
|
||
|
||
<a href="../cloud-native/kubernetes-and-cloud-native-app-overview.html">
|
||
|
||
|
||
1. Kubernetes与云原生应用概览
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3" data-path="../concepts/">
|
||
|
||
<a href="../concepts/">
|
||
|
||
|
||
2. 概念原理
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.3.1" data-path="../concepts/concepts.html">
|
||
|
||
<a href="../concepts/concepts.html">
|
||
|
||
|
||
2.1 设计理念
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2" data-path="../concepts/objects.html">
|
||
|
||
<a href="../concepts/objects.html">
|
||
|
||
|
||
2.2 Objects
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.3.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.3.2.1.1" data-path="../concepts/pod.html">
|
||
|
||
<a href="../concepts/pod.html">
|
||
|
||
|
||
2.2.1.1 Pod解析
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.1.2" data-path="../concepts/init-containers.html">
|
||
|
||
<a href="../concepts/init-containers.html">
|
||
|
||
|
||
2.2.1.2 Init容器
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.1.3" data-path="../concepts/pod-security-policy.html">
|
||
|
||
<a href="../concepts/pod-security-policy.html">
|
||
|
||
|
||
2.2.1.3 Pod安全策略
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.1.4" data-path="../concepts/pod-lifecycle.html">
|
||
|
||
<a href="../concepts/pod-lifecycle.html">
|
||
|
||
|
||
2.2.1.4 Pod的生命周期
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.2" data-path="../concepts/node.html">
|
||
|
||
<a href="../concepts/node.html">
|
||
|
||
|
||
2.2.2 Node
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.3" data-path="../concepts/namespace.html">
|
||
|
||
<a href="../concepts/namespace.html">
|
||
|
||
|
||
2.2.3 Namespace
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.4" data-path="../concepts/service.html">
|
||
|
||
<a href="../concepts/service.html">
|
||
|
||
|
||
2.2.4 Service
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.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.3.2.6" data-path="../concepts/deployment.html">
|
||
|
||
<a href="../concepts/deployment.html">
|
||
|
||
|
||
2.2.6 Deployment
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.7" data-path="../concepts/secret.html">
|
||
|
||
<a href="../concepts/secret.html">
|
||
|
||
|
||
2.2.7 Secret
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.8" data-path="../concepts/statefulset.html">
|
||
|
||
<a href="../concepts/statefulset.html">
|
||
|
||
|
||
2.2.8 StatefulSet
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.9" data-path="../concepts/daemonset.html">
|
||
|
||
<a href="../concepts/daemonset.html">
|
||
|
||
|
||
2.2.9 DaemonSet
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.10" data-path="../concepts/serviceaccount.html">
|
||
|
||
<a href="../concepts/serviceaccount.html">
|
||
|
||
|
||
2.2.10 ServiceAccount
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.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.3.2.12" data-path="../concepts/job.html">
|
||
|
||
<a href="../concepts/job.html">
|
||
|
||
|
||
2.2.12 Job
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.13" data-path="../concepts/cronjob.html">
|
||
|
||
<a href="../concepts/cronjob.html">
|
||
|
||
|
||
2.2.13 CronJob
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.14" data-path="../concepts/ingress.html">
|
||
|
||
<a href="../concepts/ingress.html">
|
||
|
||
|
||
2.2.14 Ingress
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.15" data-path="../concepts/configmap.html">
|
||
|
||
<a href="../concepts/configmap.html">
|
||
|
||
|
||
2.2.15 ConfigMap
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.3.2.15.1" data-path="../concepts/configmap-hot-update.html">
|
||
|
||
<a href="../concepts/configmap-hot-update.html">
|
||
|
||
|
||
2.2.15.1 ConfigMap的热更新
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.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.3.2.17" data-path="../concepts/label.html">
|
||
|
||
<a href="../concepts/label.html">
|
||
|
||
|
||
2.2.17 Label
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.18" data-path="../concepts/garbage-collection.html">
|
||
|
||
<a href="../concepts/garbage-collection.html">
|
||
|
||
|
||
2.2.18 垃圾收集
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.3.2.19" data-path="../concepts/network-policy.html">
|
||
|
||
<a href="../concepts/network-policy.html">
|
||
|
||
|
||
2.2.19 NetworkPolicy
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4" data-path="../guide/">
|
||
|
||
<a href="../guide/">
|
||
|
||
|
||
3. 用户指南
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.4.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.4.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.4.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>
|
||
|
||
<li class="chapter " data-level="1.4.1.3" data-path="../guide/secret-configuration.html">
|
||
|
||
<a href="../guide/secret-configuration.html">
|
||
|
||
|
||
3.1.3 Secret配置
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.1.4" data-path="../guide/resource-quota-management.html">
|
||
|
||
<a href="../guide/resource-quota-management.html">
|
||
|
||
|
||
3.2.3 管理namespace中的资源配额
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.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.4.2.1" data-path="../guide/docker-cli-to-kubectl.html">
|
||
|
||
<a href="../guide/docker-cli-to-kubectl.html">
|
||
|
||
|
||
3.2.1 docker用户过度到kubectl命令行指南
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.2.2" data-path="../guide/using-kubectl.html">
|
||
|
||
<a href="../guide/using-kubectl.html">
|
||
|
||
|
||
3.2.2 kubectl命令概览
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.2.3" data-path="../guide/kubectl-cheatsheet.html">
|
||
|
||
<a href="../guide/kubectl-cheatsheet.html">
|
||
|
||
|
||
3.2.3 kubectl命令技巧大全
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.3" data-path="../guide/cluster-security-management.html">
|
||
|
||
<a href="../guide/cluster-security-management.html">
|
||
|
||
|
||
3.3 集群安全性管理
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.4.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.4.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.4.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.4.3.4" data-path="../guide/kubectl-user-authentication-authorization.html">
|
||
|
||
<a href="../guide/kubectl-user-authentication-authorization.html">
|
||
|
||
|
||
3.3.4 创建用户认证授权的kubeconfig文件
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.3.5" data-path="../guide/rbac.html">
|
||
|
||
<a href="../guide/rbac.html">
|
||
|
||
|
||
3.3.5 RBAC——基于角色的访问控制
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.3.6" data-path="../guide/ip-masq-agent.html">
|
||
|
||
<a href="../guide/ip-masq-agent.html">
|
||
|
||
|
||
3.3.6 IP伪装代理
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.4.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.4.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.4.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.4.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.4.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.4.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.4.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.4.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>
|
||
|
||
<li class="chapter " data-level="1.4.5.3" data-path="../guide/using-statefulset.html">
|
||
|
||
<a href="../guide/using-statefulset.html">
|
||
|
||
|
||
3.5.3 使用StatefulSet部署用状态应用
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5" data-path="./">
|
||
|
||
<a href="./">
|
||
|
||
|
||
4. 最佳实践
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.5.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.5.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.5.1.2" data-path="create-kubeconfig.html">
|
||
|
||
<a href="create-kubeconfig.html">
|
||
|
||
|
||
4.1.2 创建kubeconfig文件
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.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.5.1.4" data-path="kubectl-installation.html">
|
||
|
||
<a href="kubectl-installation.html">
|
||
|
||
|
||
4.1.4 安装kubectl命令行工具
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.1.5" data-path="master-installation.html">
|
||
|
||
<a href="master-installation.html">
|
||
|
||
|
||
4.1.5 部署master节点
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.1.6" data-path="node-installation.html">
|
||
|
||
<a href="node-installation.html">
|
||
|
||
|
||
4.1.6 部署node节点
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.2.4" data-path="edge-node-configuration.html">
|
||
|
||
<a href="edge-node-configuration.html">
|
||
|
||
|
||
4.2.4 边缘节点配置
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.2.5" data-path="nginx-ingress-installation.html">
|
||
|
||
<a href="nginx-ingress-installation.html">
|
||
|
||
|
||
4.2.5 安装Nginx ingress
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.3" data-path="operation.html">
|
||
|
||
<a href="operation.html">
|
||
|
||
|
||
4.3 运维管理
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.5.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.5.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.5.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.5.3.4" data-path="monitor.html">
|
||
|
||
<a href="monitor.html">
|
||
|
||
|
||
4.3.4 集群及应用监控
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.3.5" data-path="data-persistence-problem.html">
|
||
|
||
<a href="data-persistence-problem.html">
|
||
|
||
|
||
4.3.6 数据持久化问题
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.3.6" data-path="manage-compute-resources-container.html">
|
||
|
||
<a href="manage-compute-resources-container.html">
|
||
|
||
|
||
4.3.7 管理容器的计算资源
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.3.7" data-path="using-prometheus-to-monitor-kuberentes-cluster.html">
|
||
|
||
<a href="using-prometheus-to-monitor-kuberentes-cluster.html">
|
||
|
||
|
||
4.3.8 使用Prometheus监控kubernetes集群
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.3.8" data-path="using-heapster-to-get-object-metrics.html">
|
||
|
||
<a href="using-heapster-to-get-object-metrics.html">
|
||
|
||
|
||
4.3.9 使用Heapster获取集群和对象的metric数据
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.4" data-path="storage.html">
|
||
|
||
<a href="storage.html">
|
||
|
||
|
||
4.4 存储管理
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.5.4.1" data-path="glusterfs.html">
|
||
|
||
<a href="glusterfs.html">
|
||
|
||
|
||
4.4.1 GlusterFS
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.5.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.5.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>
|
||
|
||
<li class="chapter " data-level="1.5.4.2" data-path="cephfs.html">
|
||
|
||
<a href="cephfs.html">
|
||
|
||
|
||
4.4.2 CephFS
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.5.4.2.1" data-path="using-ceph-for-persistent-storage.html">
|
||
|
||
<a href="using-ceph-for-persistent-storage.html">
|
||
|
||
|
||
4.4.2.1 使用Ceph做持久化存储
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.5" data-path="services-management-tool.html">
|
||
|
||
<a href="services-management-tool.html">
|
||
|
||
|
||
4.5 服务编排管理
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.5.5.1" data-path="helm.html">
|
||
|
||
<a href="helm.html">
|
||
|
||
|
||
4.5.1 使用Helm管理kubernetes应用
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.5.2" data-path="create-private-charts-repo.html">
|
||
|
||
<a href="create-private-charts-repo.html">
|
||
|
||
|
||
4.5.2 构建私有Chart仓库
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.6" data-path="ci-cd.html">
|
||
|
||
<a href="ci-cd.html">
|
||
|
||
|
||
4.6 持续集成与发布
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.5.6.1" data-path="jenkins-ci-cd.html">
|
||
|
||
<a href="jenkins-ci-cd.html">
|
||
|
||
|
||
4.6.1 使用Jenkins进行持续集成与发布
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.6.2" data-path="drone-ci-cd.html">
|
||
|
||
<a href="drone-ci-cd.html">
|
||
|
||
|
||
4.6.2 使用Drone进行持续集成与发布
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.7" data-path="update-and-upgrade.html">
|
||
|
||
<a href="update-and-upgrade.html">
|
||
|
||
|
||
4.7 更新与升级
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.5.7.1" data-path="manually-upgrade.html">
|
||
|
||
<a href="manually-upgrade.html">
|
||
|
||
|
||
4.7.1 手动升级kubernetes集群
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.5.7.2" data-path="dashboard-upgrade.html">
|
||
|
||
<a href="dashboard-upgrade.html">
|
||
|
||
|
||
4.7.2 升级dashboard
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.6" data-path="../usecases/">
|
||
|
||
<a href="../usecases/">
|
||
|
||
|
||
5. 领域应用
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.6.1" data-path="../usecases/microservices.html">
|
||
|
||
<a href="../usecases/microservices.html">
|
||
|
||
|
||
5.1 微服务架构
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.6.1.1" data-path="../usecases/service-discovery-in-microservices.html">
|
||
|
||
<a href="../usecases/service-discovery-in-microservices.html">
|
||
|
||
|
||
5.1.1 微服务中的服务发现
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.6.2" data-path="../usecases/service-mesh.html">
|
||
|
||
<a href="../usecases/service-mesh.html">
|
||
|
||
|
||
5.2 Service Mesh 服务网格
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.6.2.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.6.2.1.1" data-path="../usecases/istio-installation.html">
|
||
|
||
<a href="../usecases/istio-installation.html">
|
||
|
||
|
||
5.1.1.1 安装并试用Istio service mesh
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.6.2.1.2" data-path="../usecases/configuring-request-routing.html">
|
||
|
||
<a href="../usecases/configuring-request-routing.html">
|
||
|
||
|
||
5.1.1.2 配置请求的路由规则
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.6.2.1.3" data-path="../usecases/install-and-expand-istio-mesh.html">
|
||
|
||
<a href="../usecases/install-and-expand-istio-mesh.html">
|
||
|
||
|
||
5.1.1.3 安装和拓展Istio service mesh
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.6.2.1.4" data-path="../usecases/integrating-vms.html">
|
||
|
||
<a href="../usecases/integrating-vms.html">
|
||
|
||
|
||
5.1.1.4 集成虚拟机
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.6.2.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.6.2.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>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.6.3" data-path="../usecases/big-data.html">
|
||
|
||
<a href="../usecases/big-data.html">
|
||
|
||
|
||
5.2 大数据
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.6.3.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.6.3.2" data-path="../usecases/running-spark-with-kubernetes-native-scheduler.html">
|
||
|
||
<a href="../usecases/running-spark-with-kubernetes-native-scheduler.html">
|
||
|
||
|
||
5.2.2 运行支持kubernetes原生调度的Spark程序
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.6.4" data-path="../usecases/serverless.html">
|
||
|
||
<a href="../usecases/serverless.html">
|
||
|
||
|
||
5.3 Serverless架构
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.6.5" data-path="../usecases/edge-computing.html">
|
||
|
||
<a href="../usecases/edge-computing.html">
|
||
|
||
|
||
5.4 边缘计算
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.7" data-path="../develop/">
|
||
|
||
<a href="../develop/">
|
||
|
||
|
||
6. 开发指南
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.7.1" data-path="../develop/developing-environment.html">
|
||
|
||
<a href="../develop/developing-environment.html">
|
||
|
||
|
||
6.1 开发环境搭建
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.7.2" data-path="../develop/testing.html">
|
||
|
||
<a href="../develop/testing.html">
|
||
|
||
|
||
6.2 单元测试和集成测试
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.7.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.7.4" data-path="../develop/contribute.html">
|
||
|
||
<a href="../develop/contribute.html">
|
||
|
||
|
||
6.4 社区贡献
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.7.5" data-path="../develop/minikube.html">
|
||
|
||
<a href="../develop/minikube.html">
|
||
|
||
|
||
6.5 Minikube
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.8" data-path="../appendix/">
|
||
|
||
<a href="../appendix/">
|
||
|
||
|
||
7. 附录
|
||
|
||
</a>
|
||
|
||
|
||
|
||
<ul class="articles">
|
||
|
||
|
||
<li class="chapter " data-level="1.8.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.8.2" data-path="../appendix/issues.html">
|
||
|
||
<a href="../appendix/issues.html">
|
||
|
||
|
||
7.2 问题记录
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.8.3" data-path="../appendix/tricks.html">
|
||
|
||
<a href="../appendix/tricks.html">
|
||
|
||
|
||
7.3 使用技巧
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.8.4" data-path="../appendix/debug-kubernetes-services.html">
|
||
|
||
<a href="../appendix/debug-kubernetes-services.html">
|
||
|
||
|
||
7.4 kubernetes中的应用故障排查
|
||
|
||
</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li class="chapter " data-level="1.8.5" data-path="../appendix/material-share.html">
|
||
|
||
<a href="../appendix/material-share.html">
|
||
|
||
|
||
7.5 Kubernetes相关资讯和情报链接
|
||
|
||
</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="在openshift中使用glusterfs做持久化存储">在OpenShift中使用GlusterFS做持久化存储</h1>
|
||
<h3 id="概述">概述</h3>
|
||
<p>本文由Daniel Messer(Technical Marketing Manager Storage @RedHat)和Keith Tenzer(Solutions Architect @RedHat)共同撰写。</p>
|
||
<ul>
|
||
<li><a href="https://keithtenzer.com/2017/03/07/storage-for-containers-overview-part-i/" target="_blank">Storage for Containers Overview – 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 – 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 – 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 – 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 – 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 – Part VI</a></li>
|
||
</ul>
|
||
<h3 id="gluster作为container-ready-storagecrs">Gluster作为Container-Ready Storage(CRS)</h3>
|
||
<p>在本文中,我们将介绍容器存储的首选以及如何部署它。 Kusternet和OpenShift支持GlusterFS已经有一段时间了。 GlusterFS的适用性很好,可用于所有的部署场景:裸机、虚拟机、内部部署和公共云。 在容器中运行GlusterFS的新特性将在本系列后面讨论。</p>
|
||
<p>GlusterFS是一个分布式文件系统,内置了原生协议(GlusterFS)和各种其他协议(NFS,SMB,...)。 为了与OpenShift集成,节点将通过FUSE使用原生协议,将GlusterFS卷挂在到节点本身上,然后将它们绑定到目标容器中。 OpenShift / Kubernetes具有实现请求、释放和挂载、卸载GlusterFS卷的原生程序。</p>
|
||
<h3 id="crs概述">CRS概述</h3>
|
||
<p>在存储方面,根据OpenShift / Kubernetes的要求,还有一个额外的组件管理集群,称为“heketi”。 这实际上是一个用于GlusterFS的REST API,它还提供CLI版本。 在以下步骤中,我们将在3个GlusterFS节点中部署heketi,使用它来部署GlusterFS存储池,将其连接到OpenShift,并使用它来通过PersistentVolumeClaims为容器配置存储。 我们将总共部署4台虚拟机。 一个用于OpenShift(实验室设置),另一个用于GlusterFS。</p>
|
||
<p>注意:您的系统应至少需要有四核CPU,16GB RAM和20 GB可用磁盘空间。</p>
|
||
<h3 id="部署openshift">部署OpenShift</h3>
|
||
<p>首先你需要先部署OpenShift。最有效率的方式是直接在虚拟机中部署一个All-in-One环境,部署指南见 <a href="https://keithtenzer.com/2017/03/13/openshift-enterprise-3-4-all-in-one-lab-environment/" target="_blank">the “OpenShift Enterprise 3.4 all-in-one Lab Environment” article.</a>。</p>
|
||
<p>确保你的OpenShift虚拟机可以解析外部域名。编辑<code>/etc/dnsmasq.conf</code>文件,增加下面的Google DNS:</p>
|
||
<pre><code class="lang-ini"><span class="hljs-attr">server</span>=<span class="hljs-number">8.8</span>.<span class="hljs-number">8.8</span>
|
||
</code></pre>
|
||
<p>重启:</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># systemctl restart dnsmasq</span>
|
||
<span class="hljs-comment"># ping -c1 google.com</span>
|
||
</code></pre>
|
||
<h3 id="部署gluster">部署Gluster</h3>
|
||
<p>GlusterFS至少需要有以下配置的3台虚拟机:</p>
|
||
<ul>
|
||
<li>RHEL 7.3</li>
|
||
<li>2 CPUs</li>
|
||
<li>2 GB内存</li>
|
||
<li>30 GB磁盘存储给操作系统</li>
|
||
<li>10 GB磁盘存储给GlusterFS bricks</li>
|
||
</ul>
|
||
<p>修改/etc/hosts文件,定义三台虚拟机的主机名。</p>
|
||
<p>例如(主机名可以根据你自己的环境自由调整)</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>在3台GlusterFS虚拟机上都执行以下步骤</strong>:</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># subscription-manager repos --disable="*"</span>
|
||
<span class="hljs-comment"># subscription-manager repos --enable=rhel-7-server-rpms</span>
|
||
</code></pre>
|
||
<p>如果你已经订阅了GlusterFS那么可以直接使用,开启<code>rh-gluster-3-for-rhel-7-server-rpms</code>的yum源。</p>
|
||
<p>如果你没有的话,那么可以通过EPEL使用非官方支持的GlusterFS的社区源。</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>在<code>/etc/yum.repos.d/</code>目录下创建<code>glusterfs-3.10.repo</code>文件:</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">"GlusterFS 3.10 Community Version"</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>验证源已经被激活。</p>
|
||
<pre><code class="lang-Bash"><span class="hljs-comment"># yum repolist</span>
|
||
</code></pre>
|
||
<p>现在可以开始安装GlusterFS了。</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># yum -y install glusterfs-server</span>
|
||
</code></pre>
|
||
<p>需要为GlusterFS peers打开几个基本TCP端口,以便与OpenShift进行通信并提供存储:</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>现在我们可以启动GlusterFS的daemon进程了:</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>完成。GlusterFS已经启动并正在运行。其他配置将通过heketi完成。</p>
|
||
<p><strong>在GlusterFS的一台虚拟机上安装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="更新epel">更新EPEL</h3>
|
||
<p>如果你没有Red Hat Gluster Storage订阅的话,你可以从EPEL中获取heketi。 在撰写本文时,2016年10月那时候还是3.0.0-1.el7版本,它不适用于OpenShift 3.4。 你将需要更新到更新的版本:</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>在<code>/etc/systemd/system/heketi.service</code>中创建v4版本的heketi二进制文件的更新语法文件:</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使用SSH来配置GlusterFS的所有节点。创建SSH密钥对,将公钥拷贝到所有3个节点上(包括你登陆的第一个节点):</p>
|
||
<pre><code class="lang-bash">[root@crs-node1 ~]<span class="hljs-comment"># ssh-keygen -f /etc/heketi/heketi_key -t rsa -N ''</span>
|
||
[root@crs-node1 ~]<span class="hljs-comment"># ssh-copy-id -i /etc/heketi/heketi_key.pub root@crs-node1.lab</span>
|
||
[root@crs-node1 ~]<span class="hljs-comment"># ssh-copy-id -i /etc/heketi/heketi_key.pub root@crs-node2.lab</span>
|
||
[root@crs-node1 ~]<span class="hljs-comment"># ssh-copy-id -i /etc/heketi/heketi_key.pub root@crs-node3.lab</span>
|
||
[root@crs-node1 ~]<span class="hljs-comment"># chown heketi:heketi /etc/heketi/heketi_key*</span>
|
||
</code></pre>
|
||
<p>剩下唯一要做的事情就是配置heketi来使用SSH。 编辑<code>/etc/heketi/heketi.json</code>文件使它看起来像下面这个样子(改变的部分突出显示下划线):</p>
|
||
<pre><code class="lang-json">{
|
||
<span class="hljs-string">"_port_comment"</span>:<span class="hljs-string">"Heketi Server Port Number"</span>,
|
||
<span class="hljs-string">"port"</span>:<span class="hljs-string">"8080"</span>,
|
||
<span class="hljs-string">"_use_auth"</span>:<span class="hljs-string">"Enable JWT authorization. Please enable for deployment"</span>,
|
||
<span class="hljs-string">"use_auth"</span>:<span class="hljs-literal">false</span>,
|
||
<span class="hljs-string">"_jwt"</span>:<span class="hljs-string">"Private keys for access"</span>,
|
||
<span class="hljs-string">"jwt"</span>:{
|
||
<span class="hljs-string">"_admin"</span>:<span class="hljs-string">"Admin has access to all APIs"</span>,
|
||
<span class="hljs-string">"admin"</span>:{
|
||
<span class="hljs-string">"key"</span>:<span class="hljs-string">"My Secret"</span>
|
||
},
|
||
<span class="hljs-string">"_user"</span>:<span class="hljs-string">"User only has access to /volumes endpoint"</span>,
|
||
<span class="hljs-string">"user"</span>:{
|
||
<span class="hljs-string">"key"</span>:<span class="hljs-string">"My Secret"</span>
|
||
}
|
||
},
|
||
<span class="hljs-string">"_glusterfs_comment"</span>:<span class="hljs-string">"GlusterFS Configuration"</span>,
|
||
<span class="hljs-string">"glusterfs"</span>:{
|
||
<span class="hljs-string">"_executor_comment"</span>:[
|
||
<span class="hljs-string">"Execute plugin. Possible choices: mock, ssh"</span>,
|
||
<span class="hljs-string">"mock: This setting is used for testing and development."</span>,
|
||
<span class="hljs-string">" It will not send commands to any node."</span>,
|
||
<span class="hljs-string">"ssh: This setting will notify Heketi to ssh to the nodes."</span>,
|
||
<span class="hljs-string">" It will need the values in sshexec to be configured."</span>,
|
||
<span class="hljs-string">"kubernetes: Communicate with GlusterFS containers over"</span>,
|
||
<span class="hljs-string">" Kubernetes exec api."</span>
|
||
],
|
||
<span class="hljs-string">"executor"</span>:<span class="hljs-string">"ssh"</span>,
|
||
<span class="hljs-string">"_sshexec_comment"</span>:<span class="hljs-string">"SSH username and private key file information"</span>,
|
||
<span class="hljs-string">"sshexec"</span>:{
|
||
<span class="hljs-string">"keyfile"</span>:<span class="hljs-string">"/etc/heketi/heketi_key"</span>,
|
||
<span class="hljs-string">"user"</span>:<span class="hljs-string">"root"</span>,
|
||
<span class="hljs-string">"port"</span>:<span class="hljs-string">"22"</span>,
|
||
<span class="hljs-string">"fstab"</span>:<span class="hljs-string">"/etc/fstab"</span>
|
||
},
|
||
<span class="hljs-string">"_kubeexec_comment"</span>:<span class="hljs-string">"Kubernetes configuration"</span>,
|
||
<span class="hljs-string">"kubeexec"</span>:{
|
||
<span class="hljs-string">"host"</span>:<span class="hljs-string">"https://kubernetes.host:8443"</span>,
|
||
<span class="hljs-string">"cert"</span>:<span class="hljs-string">"/path/to/crt.file"</span>,
|
||
<span class="hljs-string">"insecure"</span>:<span class="hljs-literal">false</span>,
|
||
<span class="hljs-string">"user"</span>:<span class="hljs-string">"kubernetes username"</span>,
|
||
<span class="hljs-string">"password"</span>:<span class="hljs-string">"password for kubernetes user"</span>,
|
||
<span class="hljs-string">"namespace"</span>:<span class="hljs-string">"OpenShift project or Kubernetes namespace"</span>,
|
||
<span class="hljs-string">"fstab"</span>:<span class="hljs-string">"Optional: Specify fstab file on node. Default is /etc/fstab"</span>
|
||
},
|
||
<span class="hljs-string">"_db_comment"</span>:<span class="hljs-string">"Database file name"</span>,
|
||
<span class="hljs-string">"db"</span>:<span class="hljs-string">"/var/lib/heketi/heketi.db"</span>,
|
||
<span class="hljs-string">"_loglevel_comment"</span>:[
|
||
<span class="hljs-string">"Set log level. Choices are:"</span>,
|
||
<span class="hljs-string">" none, critical, error, warning, info, debug"</span>,
|
||
<span class="hljs-string">"Default is warning"</span>
|
||
],
|
||
<span class="hljs-string">"loglevel"</span>:<span class="hljs-string">"debug"</span>
|
||
}
|
||
}
|
||
</code></pre>
|
||
<p>完成。heketi将监听8080端口,我们来确认下防火墙规则允许它监听该端口:</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># firewall-cmd --add-port=8080/tcp</span>
|
||
<span class="hljs-comment"># firewall-cmd --runtime-to-permanent</span>
|
||
</code></pre>
|
||
<p>重启heketi:</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># systemctl enable heketi</span>
|
||
<span class="hljs-comment"># systemctl restart heketi</span>
|
||
</code></pre>
|
||
<p>测试它是否在运行:</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># curl http://crs-node1.lab:8080/hello</span>
|
||
Hello from Heketi
|
||
</code></pre>
|
||
<p>很好。heketi上场的时候到了。 我们将使用它来配置我们的GlusterFS存储池。 该软件已经在我们所有的虚拟机上运行,但并未被配置。 要将其改造为满足我们需求的存储系统,需要在拓扑文件中描述我们所需的GlusterFS存储池,如下所示:</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># vi topology.json</span>
|
||
{
|
||
<span class="hljs-string">"clusters"</span>: [
|
||
{
|
||
<span class="hljs-string">"nodes"</span>: [
|
||
{
|
||
<span class="hljs-string">"node"</span>: {
|
||
<span class="hljs-string">"hostnames"</span>: {
|
||
<span class="hljs-string">"manage"</span>: [
|
||
<span class="hljs-string">"crs-node1.lab"</span>
|
||
],
|
||
<span class="hljs-string">"storage"</span>: [
|
||
<span class="hljs-string">"172.16.128.7"</span>
|
||
]
|
||
},
|
||
<span class="hljs-string">"zone"</span>: 1
|
||
},
|
||
<span class="hljs-string">"devices"</span>: [
|
||
<span class="hljs-string">"/dev/sdb"</span>
|
||
]
|
||
},
|
||
{
|
||
<span class="hljs-string">"node"</span>: {
|
||
<span class="hljs-string">"hostnames"</span>: {
|
||
<span class="hljs-string">"manage"</span>: [
|
||
<span class="hljs-string">"crs-node2.lab"</span>
|
||
],
|
||
<span class="hljs-string">"storage"</span>: [
|
||
<span class="hljs-string">"172.16.128.8"</span>
|
||
]
|
||
},
|
||
<span class="hljs-string">"zone"</span>: 1
|
||
},
|
||
<span class="hljs-string">"devices"</span>: [
|
||
<span class="hljs-string">"/dev/sdb"</span>
|
||
]
|
||
},
|
||
{
|
||
<span class="hljs-string">"node"</span>: {
|
||
<span class="hljs-string">"hostnames"</span>: {
|
||
<span class="hljs-string">"manage"</span>: [
|
||
<span class="hljs-string">"crs-node3.lab"</span>
|
||
],
|
||
<span class="hljs-string">"storage"</span>: [
|
||
<span class="hljs-string">"172.16.128.9"</span>
|
||
]
|
||
},
|
||
<span class="hljs-string">"zone"</span>: 1
|
||
},
|
||
<span class="hljs-string">"devices"</span>: [
|
||
<span class="hljs-string">"/dev/sdb"</span>
|
||
]
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
</code></pre>
|
||
<p>该文件格式比较简单,基本上是告诉heketi要创建一个3节点的集群,其中每个节点包含的配置有FQDN,IP地址以及至少一个将用作GlusterFS块的备用块设备。</p>
|
||
<p>现在将该文件发送给heketi:</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># export HEKETI_CLI_SERVER=http://crs-node1.lab:8080</span>
|
||
<span class="hljs-comment"># heketi-cli topology load --json=topology.json</span>
|
||
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>现在heketi已经配置了3个节点的GlusterFS存储池。很简单!你现在可以看到3个虚拟机都已经成功构成了GlusterFS中的可信存储池(Trusted Stroage Pool)。</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>现在回到OpenShift!</p>
|
||
<h3 id="将gluster与openshift集成">将Gluster与OpenShift集成</h3>
|
||
<p>为了集成OpenShift,需要两样东西:一个动态的Kubernetes Storage Provisioner和一个StorageClass。 Provisioner在OpenShift中开箱即用。 实际上关键的是如何将存储挂载到容器上。 StorageClass是OpenShift中的用户可以用来实现的PersistentVolumeClaims的实体,它反过来能够触发一个Provisioner实现实际的配置,并将结果表示为Kubernetes PersistentVolume(PV)。</p>
|
||
<p>就像OpenShift中的其他组件一样,StorageClass也简单的用YAML文件定义:</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">"true"</span>
|
||
provisioner: kubernetes.io/glusterfs
|
||
parameters:
|
||
resturl: <span class="hljs-string">"http://crs-node1.lab:8080"</span>
|
||
restauthenabled: <span class="hljs-string">"false"</span>
|
||
</code></pre>
|
||
<p>我们的provisioner是kubernetes.io/glusterfs,将它指向我们的heketi实例。 我们将类命名为“container-ready-storage”,同时使其成为所有没有显示指定StorageClass的PersistentVolumeClaim的默认StorageClass。</p>
|
||
<p>为你的GlusterFS池创建StorageClass:</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># oc create -f crs-storageclass.yaml</span>
|
||
</code></pre>
|
||
<h3 id="在openshift中使用gluster">在OpenShift中使用Gluster</h3>
|
||
<p>我们来看下如何在OpenShift中使用GlusterFS。首先在OpenShift虚拟机中创建一个测试项目。</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># oc new-project crs-storage --display-name="Container-Ready Storage"</span>
|
||
</code></pre>
|
||
<p>这会向Kubernetes/OpenShift发出storage请求,请求一个PersistentVolumeClaim(PVC)。 这是一个简单的对象,它描述最少需要多少容量和应该提供哪种访问模式(非共享,共享,只读)。 它通常是应用程序模板的一部分,但我们只需创建一个独立的PVC:</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>发送该请求:</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># oc create -f crs-claim.yaml</span>
|
||
</code></pre>
|
||
<p>观察在OpenShfit中,PVC正在以动态创建volume的方式实现:</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>太棒了! 你现在可以在OpenShift中使用存储容量,而不需要直接与存储系统进行任何交互。 我们来看看创建的volume:</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">'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’s log messages:</p>
|
||
<p>该volume是根据PVC中的定义特别创建的。 在PVC中,我们没有明确指定要使用哪个StorageClass,因为heketi的GlusterFS StorageClass已经被定义为系统范围的默认值。</p>
|
||
<p>在后台发生的情况是,当PVC到达系统时,默认的StorageClass请求具有该PVC中volume声明规格的GlusterFS Provisioner。 Provisioner又与我们的heketi实例通信,这有助于创建GlusterFS volume,我们可以在其日志消息中追踪:</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>成功! 大约用了3秒钟,GlusterFS池就配置完成了,并配置了一个volume。 默认值是replica 3,这意味着数据将被复制到3个不同节点的3个块上(用GlusterFS作为后端存储)。 该过程是通过Heketi在OpenShift进行编排的。</p>
|
||
<p>你也可以从GlusterFS的角度看到有关volume的信息:</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>请注意,GlusterFS中的卷名称如何对应于OpenShift中Kubernetes Persistent Volume的“路径”。</p>
|
||
<p>或者,你也可以使用OpenShift UI来配置存储,这样可以很方便地在系统中的所有已知的StorageClasses中进行选择:</p>
|
||
<figure id="fig1.5.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>图片 - Screen Shot 2017-03-23 at 21.50.34</figcaption></figure>
|
||
<figure id="fig1.5.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>图片 - Screen Shot 2017-03-24 at 11.09.34.png</figcaption></figure>
|
||
<p>让我们做点更有趣的事情,在OpenShift中运行工作负载。</p>
|
||
<p>在仍运行着crs-storage项目的OpenShift虚拟机中执行:</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># oc get templates -n openshift</span>
|
||
</code></pre>
|
||
<p>你应该可以看到一个应用程序和数据库模板列表,这个列表将方便你更轻松的使用OpenShift来部署你的应用程序项目。</p>
|
||
<p>我们将使用MySQL来演示如何在OpenShift上部署具有持久化和弹性存储的有状态应用程序。 Mysql-persistent模板包含一个用于MySQL数据库目录的1G空间的PVC。 为了演示目的,可以直接使用默认值。</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># oc process mysql-persistent -n openshift | oc create -f -</span>
|
||
</code></pre>
|
||
<p>等待部署完成。你可以通过UI或者命令行观察部署进度:</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># oc get pods</span>
|
||
NAME READY STATUS RESTARTS AGE
|
||
mysql-1-h4afb 1/1 Running 0 2m
|
||
</code></pre>
|
||
<p>好了。我们已经使用这个模板创建了一个service,secrets、PVC和pod。我们来使用它(你的pod名字将跟我的不同):</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># oc rsh mysql-1-h4afb</span>
|
||
</code></pre>
|
||
<p>你已经成功的将它挂载到MySQL的pod上。我们连接一下数据库试试:</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>这点很方便,所有重要的配置,如MySQL凭据,数据库名称等都是pod模板中的环境变量的一部分,因此可以在pod中作为shell的环境变量。 我们来创建一些数据:</p>
|
||
<pre><code class="lang-Bash">mysql> 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> \u sampledb
|
||
Database changed
|
||
mysql> CREATE TABLE IF NOT EXISTS equipment (
|
||
-> equip_id int(5) NOT NULL AUTO_INCREMENT,
|
||
-> <span class="hljs-built_in">type</span> varchar(50) DEFAULT NULL,
|
||
-> install_date DATE DEFAULT NULL,
|
||
-> color varchar(20) DEFAULT NULL,
|
||
-> working bool DEFAULT NULL,
|
||
-> location varchar(250) DEFAULT NULL,
|
||
-> PRIMARY KEY(equip_id)
|
||
-> );
|
||
Query OK, 0 rows affected (0.13 sec)
|
||
|
||
mysql> INSERT INTO equipment (<span class="hljs-built_in">type</span>, install_date, color, working, location)
|
||
-> VALUES
|
||
-> (<span class="hljs-string">"Slide"</span>, Now(), <span class="hljs-string">"blue"</span>, 1, <span class="hljs-string">"Southwest Corner"</span>);
|
||
Query OK, 1 row affected, 1 warning (0.01 sec)
|
||
|
||
mysql> 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>很好,数据库运行正常。</p>
|
||
<p>你想看下数据存储在哪里吗?很简单!查看刚使用模板创建的mysql volume:</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">'s lifetime)
|
||
EndpointsName: gluster-dynamic-mysql
|
||
Path: vol_6299fc74eee513119dafd43f8a438db1
|
||
ReadOnly: false
|
||
</span></code></pre>
|
||
<p>GlusterFS的volume名字是vol_6299fc74eee513119dafd43f8a438db1。回到你的GlusterFS虚拟机中,输入:</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>你可以看到数据是如何被复制到3个GlusterFS块的。我们从中挑一个(最好挑选你刚登陆的那台虚拟机并查看目录):</p>
|
||
<pre><code class="lang-bash"><span class="hljs-comment"># ll /var/lib/heketi/mounts/vg_67314f879686de975f9b8936ae43c5c5/brick_f264a47aa32be5d595f83477572becf8/brick</span>
|
||
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<span class="hljs-_">-s</span>---. 2 1000070000 2001 8192 Mar 24 12:12 mysql
|
||
-rw-r-----. 2 1000070000 2001 2 Mar 24 12:12 mysql-1-h4afb.pid
|
||
drwxr<span class="hljs-_">-s</span>---. 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<span class="hljs-_">-s</span>---. 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<span class="hljs-_">-s</span>---. 2 1000070000 2001 8192 Mar 24 12:12 sys
|
||
</code></pre>
|
||
<p>你可以在这里看到MySQL数据库目录。 它使用GlusterFS作为后端存储,并作为绑定挂载给MySQL容器使用。 如果你检查OpenShift VM上的mount表,你将会看到GlusterFS的mount。</p>
|
||
<h3 id="总结">总结</h3>
|
||
<p>在这里我们是在OpenShift之外创建了一个简单但功能强大的GlusterFS存储池。 该池可以独立于应用程序扩展和收缩。 该池的整个生命周期由一个简单的称为heketi的前端管理,你只需要在部署增长时进行手动干预。 对于日常配置操作,使用它的API与OpenShifts动态配置器交互,无需开发人员直接与基础架构团队进行交互。</p>
|
||
<p>o这就是我们如何将存储带入DevOps世界 - 无痛苦,并在OpenShift PaaS系统的开发人员工具中直接提供。</p>
|
||
<p>GlusterFS和OpenShift可跨越所有环境:裸机,虚拟机,私有和公共云(Azure,Google Cloud,AWS ...),确保应用程序可移植性,并避免云供应商锁定。</p>
|
||
<p>祝你愉快在容器中使用GlusterFS!</p>
|
||
<p>(c) 2017 Keith Tenzer</p>
|
||
<p>原文链接:<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"><span class="copyright">Copyright © jimmysong.io 2017 all right reserved,powered by Gitbook</span><span class="footer-modification">Updated:
|
||
2017-10-19 18:34:12
|
||
</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="cephfs.html" class="navigation navigation-next " aria-label="Next page: 4.4.2 CephFS">
|
||
<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.5.4.1.2","depth":4,"next":{"title":"4.4.2 CephFS","level":"1.5.4.2","depth":3,"path":"practice/cephfs.md","ref":"practice/cephfs.md","articles":[{"title":"4.4.2.1 使用Ceph做持久化存储","level":"1.5.4.2.1","depth":4,"path":"practice/using-ceph-for-persistent-storage.md","ref":"practice/using-ceph-for-persistent-storage.md","articles":[]}]},"previous":{"title":"4.4.1.1 使用GlusterFS做持久化存储","level":"1.5.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","editlink","back-to-top-button","-lunr","-search","search-plus","github-buttons@2.1.0","favicon@^0.0.2","tbfed-pagefooter@^0.0.1","3-ba"],"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":{"tbfed-pagefooter":{"copyright":"Copyright © jimmysong.io 2017","modify_label":"Updated:","modify_format":"YYYY-MM-DD HH:mm:ss"},"github":{"url":"https://github.com/rootsongjc/kubernetes-handbook"},"editlink":{"label":"编辑本页","multilingual":false,"base":"https://github.com/rootsongjc/kubernetes-handbook/blob/master/"},"splitter":{},"codesnippet":{},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":{"shortcut":"favicon.ico","bookmark":"favicon.ico"},"page-toc-button":{},"back-to-top-button":{},"github-buttons":{"repo":"rootsongjc/kubernetes-handbook","types":["star"],"size":"small"},"3-ba":{"configuration":"auto","token":"11f7d254cfa4e0ca44b175c66d379ecc"},"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":{"caption":"图片 - _CAPTION_","variable_name":"_pictures"}},"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":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.1","level":"1.2","list_caption":"Figure: 云计算演进历程","alt":"云计算演进历程","nro":1,"url":"../images/cloud-computing-evolution-road.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"云计算演进历程","attributes":{},"skip":false,"key":"1.2.1"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.2","level":"1.2","list_caption":"Figure: Cloud native思维导图","alt":"Cloud native思维导图","nro":2,"url":"../images/cloud-native-architecutre-mindnode.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Cloud native思维导图","attributes":{},"skip":false,"key":"1.2.2"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.3","level":"1.2","list_caption":"Figure: 十二因素应用","alt":"十二因素应用","nro":3,"url":"../images/12-factor-app.png","index":3,"caption_template":"图片 - _CAPTION_","label":"十二因素应用","attributes":{},"skip":false,"key":"1.2.3"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.4","level":"1.2","list_caption":"Figure: 使用Jenkins进行持续集成与发布流程图","alt":"使用Jenkins进行持续集成与发布流程图","nro":4,"url":"../images/kubernetes-jenkins-ci-cd.png","index":4,"caption_template":"图片 - _CAPTION_","label":"使用Jenkins进行持续集成与发布流程图","attributes":{},"skip":false,"key":"1.2.4"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.5","level":"1.2","list_caption":"Figure: filebeat日志收集架构图","alt":"filebeat日志收集架构图","nro":5,"url":"../images/filebeat-log-collector-arch.png","index":5,"caption_template":"图片 - _CAPTION_","label":"filebeat日志收集架构图","attributes":{},"skip":false,"key":"1.2.5"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.6","level":"1.2","list_caption":"Figure: API文档","alt":"API文档","nro":6,"url":"../images/k8s-app-monitor-test-api-doc.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"API文档","attributes":{},"skip":false,"key":"1.2.6"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.7","level":"1.2","list_caption":"Figure: 迁移步骤示意图","alt":"迁移步骤示意图","nro":7,"url":"../images/migrating-hadoop-yarn-to-kubernetes.png","index":7,"caption_template":"图片 - _CAPTION_","label":"迁移步骤示意图","attributes":{},"skip":false,"key":"1.2.7"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.8","level":"1.2","list_caption":"Figure: service mesh架构图","alt":"service mesh架构图","nro":8,"url":"../images/serivce-mesh-control-plane.png","index":8,"caption_template":"图片 - _CAPTION_","label":"service mesh架构图","attributes":{},"skip":false,"key":"1.2.8"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.9","level":"1.2","list_caption":"Figure: kibana界面","alt":"kibana界面","nro":9,"url":"../images/filebeat-docker-test.jpg","index":9,"caption_template":"图片 - _CAPTION_","label":"kibana界面","attributes":{},"skip":false,"key":"1.2.9"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.10","level":"1.2","list_caption":"Figure: Grafana界面示意图1","alt":"Grafana界面示意图1","nro":10,"url":"../images/kubernetes-devops-example-grafana-1.png","index":10,"caption_template":"图片 - _CAPTION_","label":"Grafana界面示意图1","attributes":{},"skip":false,"key":"1.2.10"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.11","level":"1.2","list_caption":"Figure: Grafana界面示意图2","alt":"Grafana界面示意图2","nro":11,"url":"../images/kubernetes-devops-example-grafana-2.png","index":11,"caption_template":"图片 - _CAPTION_","label":"Grafana界面示意图2","attributes":{},"skip":false,"key":"1.2.11"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.12","level":"1.2","list_caption":"Figure: Grafana界面示意图3","alt":"Grafana界面示意图3","nro":12,"url":"../images/kubernetes-devops-example-grafana-3.png","index":12,"caption_template":"图片 - _CAPTION_","label":"Grafana界面示意图3","attributes":{},"skip":false,"key":"1.2.12"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.13","level":"1.2","list_caption":"Figure: dashboard","alt":"dashboard","nro":13,"url":"../images/spark-job-on-kubernetes-example-1.jpg","index":13,"caption_template":"图片 - _CAPTION_","label":"dashboard","attributes":{},"skip":false,"key":"1.2.13"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.14","level":"1.2","list_caption":"Figure: Grafana","alt":"Grafana","nro":14,"url":"../images/spark-job-on-kubernetes-example-2.jpg","index":14,"caption_template":"图片 - _CAPTION_","label":"Grafana","attributes":{},"skip":false,"key":"1.2.14"},{"backlink":"concepts/index.html#fig1.3.1","level":"1.3","list_caption":"Figure: Borg架构","alt":"Borg架构","nro":15,"url":"../images/borg.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Borg架构","attributes":{},"skip":false,"key":"1.3.1"},{"backlink":"concepts/index.html#fig1.3.2","level":"1.3","list_caption":"Figure: Kubernetes架构","alt":"Kubernetes架构","nro":16,"url":"../images/architecture.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Kubernetes架构","attributes":{},"skip":false,"key":"1.3.2"},{"backlink":"concepts/index.html#fig1.3.3","level":"1.3","list_caption":"Figure: kubernetes整体架构示意图","alt":"kubernetes整体架构示意图","nro":17,"url":"../images/kubernetes-whole-arch.png","index":3,"caption_template":"图片 - _CAPTION_","label":"kubernetes整体架构示意图","attributes":{},"skip":false,"key":"1.3.3"},{"backlink":"concepts/index.html#fig1.3.4","level":"1.3","list_caption":"Figure: Kubernetes master架构示意图","alt":"Kubernetes master架构示意图","nro":18,"url":"../images/kubernetes-master-arch.png","index":4,"caption_template":"图片 - _CAPTION_","label":"Kubernetes master架构示意图","attributes":{},"skip":false,"key":"1.3.4"},{"backlink":"concepts/index.html#fig1.3.5","level":"1.3","list_caption":"Figure: kubernetes node架构示意图","alt":"kubernetes node架构示意图","nro":19,"url":"../images/kubernetes-node-arch.png","index":5,"caption_template":"图片 - _CAPTION_","label":"kubernetes node架构示意图","attributes":{},"skip":false,"key":"1.3.5"},{"backlink":"concepts/index.html#fig1.3.6","level":"1.3","list_caption":"Figure: Kubernetes分层架构示意图","alt":"Kubernetes分层架构示意图","nro":20,"url":"../images/kubernetes-layers-arch.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"Kubernetes分层架构示意图","attributes":{},"skip":false,"key":"1.3.6"},{"backlink":"concepts/concepts.html#fig1.3.1.1","level":"1.3.1","list_caption":"Figure: 分层架构示意图","alt":"分层架构示意图","nro":21,"url":"../images/kubernetes-layers-arch.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"分层架构示意图","attributes":{},"skip":false,"key":"1.3.1.1"},{"backlink":"concepts/pod-overview.html#fig1.3.2.1.1","level":"1.3.2.1","list_caption":"Figure: pod diagram","alt":"pod diagram","nro":22,"url":"../images/pod-overview.png","index":1,"caption_template":"图片 - _CAPTION_","label":"pod diagram","attributes":{},"skip":false,"key":"1.3.2.1.1"},{"backlink":"concepts/pod.html#fig1.3.2.1.1.1","level":"1.3.2.1.1","list_caption":"Figure: Pod示意图","alt":"Pod示意图","nro":23,"url":"../images/pod-overview.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Pod示意图","attributes":{},"skip":false,"key":"1.3.2.1.1.1"},{"backlink":"concepts/pod.html#fig1.3.2.1.1.2","level":"1.3.2.1.1","list_caption":"Figure: Pod Cheatsheet","alt":"Pod Cheatsheet","nro":24,"url":"../images/kubernetes-pod-cheatsheet.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Pod Cheatsheet","attributes":{},"skip":false,"key":"1.3.2.1.1.2"},{"backlink":"concepts/service.html#fig1.3.2.4.1","level":"1.3.2.4","list_caption":"Figure: userspace代理模式下Service概览图","alt":"userspace代理模式下Service概览图","nro":25,"url":"../images/services-userspace-overview.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"userspace代理模式下Service概览图","attributes":{},"skip":false,"key":"1.3.2.4.1"},{"backlink":"concepts/service.html#fig1.3.2.4.2","level":"1.3.2.4","list_caption":"Figure: iptables代理模式下Service概览图","alt":"iptables代理模式下Service概览图","nro":26,"url":"../images/services-iptables-overview.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"iptables代理模式下Service概览图","attributes":{},"skip":false,"key":"1.3.2.4.2"},{"backlink":"concepts/deployment.html#fig1.3.2.6.1","level":"1.3.2.6","list_caption":"Figure: kubernetes deployment cheatsheet","alt":"kubernetes deployment cheatsheet","nro":27,"url":"../images/deployment-cheatsheet.png","index":1,"caption_template":"图片 - _CAPTION_","label":"kubernetes deployment cheatsheet","attributes":{},"skip":false,"key":"1.3.2.6.1"},{"backlink":"concepts/horizontal-pod-autoscaling.html#fig1.3.2.16.1","level":"1.3.2.16","list_caption":"Figure: horizontal-pod-autoscaler","alt":"horizontal-pod-autoscaler","nro":28,"url":"../images/horizontal-pod-autoscaler.png","index":1,"caption_template":"图片 - _CAPTION_","label":"horizontal-pod-autoscaler","attributes":{},"skip":false,"key":"1.3.2.16.1"},{"backlink":"concepts/label.html#fig1.3.2.17.1","level":"1.3.2.17","list_caption":"Figure: label示意图","alt":"label示意图","nro":29,"url":"../images/labels.png","index":1,"caption_template":"图片 - _CAPTION_","label":"label示意图","attributes":{},"skip":false,"key":"1.3.2.17.1"},{"backlink":"guide/using-kubectl.html#fig1.4.2.2.1","level":"1.4.2.2","list_caption":"Figure: kubectl cheatsheet","alt":"kubectl cheatsheet","nro":30,"url":"../images/kubernetes-kubectl-cheatsheet.png","index":1,"caption_template":"图片 - _CAPTION_","label":"kubectl cheatsheet","attributes":{},"skip":false,"key":"1.4.2.2.1"},{"backlink":"guide/using-kubectl.html#fig1.4.2.2.2","level":"1.4.2.2","list_caption":"Figure: kube-shell页面","alt":"kube-shell页面","nro":31,"url":"../images/kube-shell.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"kube-shell页面","attributes":{},"skip":false,"key":"1.4.2.2.2"},{"backlink":"guide/ip-masq-agent.html#fig1.4.3.6.1","level":"1.4.3.6","list_caption":"Figure: IP伪装代理示意图","alt":"IP伪装代理示意图","nro":32,"url":"../images/ip-masq.png","index":1,"caption_template":"图片 - _CAPTION_","label":"IP伪装代理示意图","attributes":{},"skip":false,"key":"1.4.3.6.1"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig1.4.5.1.1","level":"1.4.5.1","list_caption":"Figure: API","alt":"API","nro":33,"url":"../images/k8s-app-monitor-test-api-doc.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"API","attributes":{},"skip":false,"key":"1.4.5.1.1"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig1.4.5.1.2","level":"1.4.5.1","list_caption":"Figure: wercker","alt":"wercker","nro":34,"url":"../images/k8s-app-monitor-agent-wercker.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"wercker","attributes":{},"skip":false,"key":"1.4.5.1.2"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig1.4.5.1.3","level":"1.4.5.1","list_caption":"Figure: 图表","alt":"图表","nro":35,"url":"../images/k8s-app-monitor-agent.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"图表","attributes":{},"skip":false,"key":"1.4.5.1.3"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig1.4.5.2.1","level":"1.4.5.2","list_caption":"Figure: spark on yarn with kubernetes","alt":"spark on yarn with kubernetes","nro":36,"url":"../images/spark-on-yarn-with-kubernetes.png","index":1,"caption_template":"图片 - _CAPTION_","label":"spark on yarn with kubernetes","attributes":{},"skip":false,"key":"1.4.5.2.1"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig1.4.5.2.2","level":"1.4.5.2","list_caption":"Figure: Terms","alt":"Terms","nro":37,"url":"../images/terms-in-kubernetes-app-deployment.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Terms","attributes":{},"skip":false,"key":"1.4.5.2.2"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig1.4.5.2.3","level":"1.4.5.2","list_caption":"Figure: 分解步骤解析","alt":"分解步骤解析","nro":38,"url":"../images/migrating-hadoop-yarn-to-kubernetes.png","index":3,"caption_template":"图片 - _CAPTION_","label":"分解步骤解析","attributes":{},"skip":false,"key":"1.4.5.2.3"},{"backlink":"practice/node-installation.html#fig1.5.1.6.1","level":"1.5.1.6","list_caption":"Figure: welcome-nginx","alt":"welcome-nginx","nro":39,"url":"http://olz1di9xf.bkt.clouddn.com/kubernetes-installation-test-nginx.png","index":1,"caption_template":"图片 - _CAPTION_","label":"welcome-nginx","attributes":{},"skip":false,"key":"1.5.1.6.1"},{"backlink":"practice/dashboard-addon-installation.html#fig1.5.1.8.1","level":"1.5.1.8","list_caption":"Figure: kubernetes-dashboard","alt":"kubernetes-dashboard","nro":40,"url":"http://olz1di9xf.bkt.clouddn.com/kubernetes-dashboard-raw.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"kubernetes-dashboard","attributes":{},"skip":false,"key":"1.5.1.8.1"},{"backlink":"practice/dashboard-addon-installation.html#fig1.5.1.8.2","level":"1.5.1.8","list_caption":"Figure: V1.6.3版本的dashboard界面","alt":"V1.6.3版本的dashboard界面","nro":41,"url":"../images/dashboard-v163.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"V1.6.3版本的dashboard界面","attributes":{},"skip":false,"key":"1.5.1.8.2"},{"backlink":"practice/heapster-addon-installation.html#fig1.5.1.9.1","level":"1.5.1.9","list_caption":"Figure: dashboard-heapster","alt":"dashboard-heapster","nro":42,"url":"../images/kubernetes-dashboard-with-heapster.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"dashboard-heapster","attributes":{},"skip":false,"key":"1.5.1.9.1"},{"backlink":"practice/heapster-addon-installation.html#fig1.5.1.9.2","level":"1.5.1.9","list_caption":"Figure: grafana","alt":"grafana","nro":43,"url":"../images/kubernetes-heapster-grafana.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"grafana","attributes":{},"skip":false,"key":"1.5.1.9.2"},{"backlink":"practice/heapster-addon-installation.html#fig1.5.1.9.3","level":"1.5.1.9","list_caption":"Figure: kubernetes-influxdb-heapster","alt":"kubernetes-influxdb-heapster","nro":44,"url":"../images/kubernetes-influxdb-heapster.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"kubernetes-influxdb-heapster","attributes":{},"skip":false,"key":"1.5.1.9.3"},{"backlink":"practice/heapster-addon-installation.html#fig1.5.1.9.4","level":"1.5.1.9","list_caption":"Figure: 修改grafana模板","alt":"修改grafana模板","nro":45,"url":"../images/grafana-dashboard-setting.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"修改grafana模板","attributes":{},"skip":false,"key":"1.5.1.9.4"},{"backlink":"practice/efk-addon-installation.html#fig1.5.1.10.1","level":"1.5.1.10","list_caption":"Figure: es-setting","alt":"es-setting","nro":46,"url":"../images/es-setting.png","index":1,"caption_template":"图片 - _CAPTION_","label":"es-setting","attributes":{},"skip":false,"key":"1.5.1.10.1"},{"backlink":"practice/efk-addon-installation.html#fig1.5.1.10.2","level":"1.5.1.10","list_caption":"Figure: es-home","alt":"es-home","nro":47,"url":"../images/kubernetes-efk-kibana.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"es-home","attributes":{},"skip":false,"key":"1.5.1.10.2"},{"backlink":"practice/traefik-ingress-installation.html#fig1.5.2.1.1","level":"1.5.2.1","list_caption":"Figure: kubernetes-dashboard","alt":"kubernetes-dashboard","nro":48,"url":"../images/traefik-dashboard.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"kubernetes-dashboard","attributes":{},"skip":false,"key":"1.5.2.1.1"},{"backlink":"practice/traefik-ingress-installation.html#fig1.5.2.1.2","level":"1.5.2.1","list_caption":"Figure: traefik-nginx","alt":"traefik-nginx","nro":49,"url":"../images/traefik-nginx.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"traefik-nginx","attributes":{},"skip":false,"key":"1.5.2.1.2"},{"backlink":"practice/traefik-ingress-installation.html#fig1.5.2.1.3","level":"1.5.2.1","list_caption":"Figure: traefik-guestbook","alt":"traefik-guestbook","nro":50,"url":"../images/traefik-guestbook.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"traefik-guestbook","attributes":{},"skip":false,"key":"1.5.2.1.3"},{"backlink":"practice/distributed-load-test.html#fig1.5.2.2.1","level":"1.5.2.2","list_caption":"Figure: 使用dashboard来扩容","alt":"使用dashboard来扩容","nro":51,"url":"../images/dashbaord-scale.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"使用dashboard来扩容","attributes":{},"skip":false,"key":"1.5.2.2.1"},{"backlink":"practice/distributed-load-test.html#fig1.5.2.2.2","level":"1.5.2.2","list_caption":"Figure: Traefik的UI","alt":"Traefik的UI","nro":52,"url":"../images/traefik-dashboard-locust.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Traefik的UI","attributes":{},"skip":false,"key":"1.5.2.2.2"},{"backlink":"practice/distributed-load-test.html#fig1.5.2.2.3","level":"1.5.2.2","list_caption":"Figure: Locust启动界面","alt":"Locust启动界面","nro":53,"url":"../images/locust-start-swarming.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Locust启动界面","attributes":{},"skip":false,"key":"1.5.2.2.3"},{"backlink":"practice/distributed-load-test.html#fig1.5.2.2.4","level":"1.5.2.2","list_caption":"Figure: Dashboard查看页面","alt":"Dashboard查看页面","nro":54,"url":"../images/sample-webapp-rc.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Dashboard查看页面","attributes":{},"skip":false,"key":"1.5.2.2.4"},{"backlink":"practice/distributed-load-test.html#fig1.5.2.2.5","level":"1.5.2.2","list_caption":"Figure: Locust测试结果页面","alt":"Locust测试结果页面","nro":55,"url":"../images/locust-dashboard.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Locust测试结果页面","attributes":{},"skip":false,"key":"1.5.2.2.5"},{"backlink":"practice/network-and-cluster-perfermance-test.html#fig1.5.2.3.1","level":"1.5.2.3","list_caption":"Figure: kubernetes-dashboard","alt":"kubernetes-dashboard","nro":56,"url":"http://olz1di9xf.bkt.clouddn.com/kubenetes-e2e-test.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"kubernetes-dashboard","attributes":{},"skip":false,"key":"1.5.2.3.1"},{"backlink":"practice/network-and-cluster-perfermance-test.html#fig1.5.2.3.2","level":"1.5.2.3","list_caption":"Figure: locust-test","alt":"locust-test","nro":57,"url":"http://olz1di9xf.bkt.clouddn.com/kubernetes-locust-test.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"locust-test","attributes":{},"skip":false,"key":"1.5.2.3.2"},{"backlink":"practice/edge-node-configuration.html#fig1.5.2.4.1","level":"1.5.2.4","list_caption":"Figure: 边缘节点架构","alt":"边缘节点架构","nro":58,"url":"../images/kubernetes-edge-node-architecture.png","index":1,"caption_template":"图片 - _CAPTION_","label":"边缘节点架构","attributes":{},"skip":false,"key":"1.5.2.4.1"},{"backlink":"practice/app-log-collection.html#fig1.5.3.2.1","level":"1.5.3.2","list_caption":"Figure: filebeat日志收集架构图","alt":"filebeat日志收集架构图","nro":59,"url":"../images/filebeat-log-collector.png","index":1,"caption_template":"图片 - _CAPTION_","label":"filebeat日志收集架构图","attributes":{},"skip":false,"key":"1.5.3.2.1"},{"backlink":"practice/app-log-collection.html#fig1.5.3.2.2","level":"1.5.3.2","list_caption":"Figure: Kibana页面","alt":"Kibana页面","nro":60,"url":"../images/filebeat-docker-test.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kibana页面","attributes":{},"skip":false,"key":"1.5.3.2.2"},{"backlink":"practice/app-log-collection.html#fig1.5.3.2.3","level":"1.5.3.2","list_caption":"Figure: filebeat收集的日志详细信息","alt":"filebeat收集的日志详细信息","nro":61,"url":"../images/kubernetes-filebeat-detail.png","index":3,"caption_template":"图片 - _CAPTION_","label":"filebeat收集的日志详细信息","attributes":{},"skip":false,"key":"1.5.3.2.3"},{"backlink":"practice/monitor.html#fig1.5.3.4.1","level":"1.5.3.4","list_caption":"Figure: Kubernetes集群中的监控","alt":"Kubernetes集群中的监控","nro":62,"url":"../images/monitoring-in-kubernetes.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes集群中的监控","attributes":{},"skip":false,"key":"1.5.3.4.1"},{"backlink":"practice/monitor.html#fig1.5.3.4.2","level":"1.5.3.4","list_caption":"Figure: kubernetes的容器命名规则示意图","alt":"kubernetes的容器命名规则示意图","nro":63,"url":"../images/kubernetes-container-naming-rule.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"kubernetes的容器命名规则示意图","attributes":{},"skip":false,"key":"1.5.3.4.2"},{"backlink":"practice/monitor.html#fig1.5.3.4.3","level":"1.5.3.4","list_caption":"Figure: Heapster架构图(改进版)","alt":"Heapster架构图(改进版)","nro":64,"url":"../images/kubernetes-heapster-monitoring.png","index":3,"caption_template":"图片 - _CAPTION_","label":"Heapster架构图(改进版)","attributes":{},"skip":false,"key":"1.5.3.4.3"},{"backlink":"practice/monitor.html#fig1.5.3.4.4","level":"1.5.3.4","list_caption":"Figure: 应用监控架构图","alt":"应用监控架构图","nro":65,"url":"../images/kubernetes-app-monitoring.png","index":4,"caption_template":"图片 - _CAPTION_","label":"应用监控架构图","attributes":{},"skip":false,"key":"1.5.3.4.4"},{"backlink":"practice/monitor.html#fig1.5.3.4.5","level":"1.5.3.4","list_caption":"Figure: 应用拓扑图","alt":"应用拓扑图","nro":66,"url":"../images/weave-scope-service-topology.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"应用拓扑图","attributes":{},"skip":false,"key":"1.5.3.4.5"},{"backlink":"practice/data-persistence-problem.html#fig1.5.3.5.1","level":"1.5.3.5","list_caption":"Figure: 日志持久化收集解决方案示意图","alt":"日志持久化收集解决方案示意图","nro":67,"url":"../images/log-persistence-logstash.png","index":1,"caption_template":"图片 - _CAPTION_","label":"日志持久化收集解决方案示意图","attributes":{},"skip":false,"key":"1.5.3.5.1"},{"backlink":"practice/using-prometheus-to-monitor-kuberentes-cluster.html#fig1.5.3.7.1","level":"1.5.3.7","list_caption":"Figure: Grafana页面","alt":"Grafana页面","nro":68,"url":"../images/kubernetes-prometheus-monitoring.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Grafana页面","attributes":{},"skip":false,"key":"1.5.3.7.1"},{"backlink":"practice/using-heapster-to-get-object-metrics.html#fig1.5.3.8.1","level":"1.5.3.8","list_caption":"Figure: Heapster架构图","alt":"Heapster架构图","nro":69,"url":"../images/heapster-architecture.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Heapster架构图","attributes":{},"skip":false,"key":"1.5.3.8.1"},{"backlink":"practice/storage-for-containers-using-glusterfs-with-openshift.html#fig1.5.4.1.2.1","level":"1.5.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":70,"url":"https://keithtenzer.files.wordpress.com/2017/03/screen-shot-2017-03-23-at-21-50-34.png?w=440","index":1,"caption_template":"图片 - _CAPTION_","label":"Screen Shot 2017-03-23 at 21.50.34","attributes":{},"skip":false,"key":"1.5.4.1.2.1"},{"backlink":"practice/storage-for-containers-using-glusterfs-with-openshift.html#fig1.5.4.1.2.2","level":"1.5.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":71,"url":"https://keithtenzer.files.wordpress.com/2017/03/screen-shot-2017-03-24-at-11-09-341.png?w=440","index":2,"caption_template":"图片 - _CAPTION_","label":"Screen Shot 2017-03-24 at 11.09.34.png","attributes":{},"skip":false,"key":"1.5.4.1.2.2"},{"backlink":"practice/helm.html#fig1.5.5.1.1","level":"1.5.5.1","list_caption":"Figure: Helm chart源","alt":"Helm chart源","nro":72,"url":"../images/helm-charts-repository.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Helm chart源","attributes":{},"skip":false,"key":"1.5.5.1.1"},{"backlink":"practice/helm.html#fig1.5.5.1.2","level":"1.5.5.1","list_caption":"Figure: TODO应用的Web页面","alt":"TODO应用的Web页面","nro":73,"url":"../images/helm-mean-todo-aholic.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"TODO应用的Web页面","attributes":{},"skip":false,"key":"1.5.5.1.2"},{"backlink":"practice/create-private-charts-repo.html#fig1.5.5.2.1","level":"1.5.5.2","list_caption":"Figure: Helm monocular界面","alt":"Helm monocular界面","nro":74,"url":"../images/helm-monocular-jimmysong.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Helm monocular界面","attributes":{},"skip":false,"key":"1.5.5.2.1"},{"backlink":"practice/jenkins-ci-cd.html#fig1.5.6.1.1","level":"1.5.6.1","list_caption":"Figure: 基于Jenkins的持续集成与发布","alt":"基于Jenkins的持续集成与发布","nro":75,"url":"../images/kubernetes-jenkins-ci-cd.png","index":1,"caption_template":"图片 - _CAPTION_","label":"基于Jenkins的持续集成与发布","attributes":{},"skip":false,"key":"1.5.6.1.1"},{"backlink":"practice/drone-ci-cd.html#fig1.5.6.2.1","level":"1.5.6.2","list_caption":"Figure: OAuth注册","alt":"OAuth注册","nro":76,"url":"../images/github-oauth-register.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"OAuth注册","attributes":{},"skip":false,"key":"1.5.6.2.1"},{"backlink":"practice/drone-ci-cd.html#fig1.5.6.2.2","level":"1.5.6.2","list_caption":"Figure: OAuth key","alt":"OAuth key","nro":77,"url":"../images/github-oauth-drone-key.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"OAuth key","attributes":{},"skip":false,"key":"1.5.6.2.2"},{"backlink":"practice/drone-ci-cd.html#fig1.5.6.2.3","level":"1.5.6.2","list_caption":"Figure: Drone登陆界面","alt":"Drone登陆界面","nro":78,"url":"../images/drone-login-github.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Drone登陆界面","attributes":{},"skip":false,"key":"1.5.6.2.3"},{"backlink":"practice/drone-ci-cd.html#fig1.5.6.2.4","level":"1.5.6.2","list_caption":"Figure: Github启用repo设置","alt":"Github启用repo设置","nro":79,"url":"../images/drone-github-active.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Github启用repo设置","attributes":{},"skip":false,"key":"1.5.6.2.4"},{"backlink":"practice/drone-ci-cd.html#fig1.5.6.2.5","level":"1.5.6.2","list_caption":"Figure: Github单个repo设置","alt":"Github单个repo设置","nro":80,"url":"../images/drone-github-repo-setting.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Github单个repo设置","attributes":{},"skip":false,"key":"1.5.6.2.5"},{"backlink":"practice/dashboard-upgrade.html#fig1.5.7.2.1","level":"1.5.7.2","list_caption":"Figure: 登陆界面","alt":"登陆界面","nro":81,"url":"../images/kubernetes-dashboard-1.7.1-login.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"登陆界面","attributes":{},"skip":false,"key":"1.5.7.2.1"},{"backlink":"practice/dashboard-upgrade.html#fig1.5.7.2.2","level":"1.5.7.2","list_caption":"Figure: 首页","alt":"首页","nro":82,"url":"../images/kubernetes-dashboard-1.7.1-default-page.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"首页","attributes":{},"skip":false,"key":"1.5.7.2.2"},{"backlink":"practice/dashboard-upgrade.html#fig1.5.7.2.3","level":"1.5.7.2","list_caption":"Figure: 用户空间","alt":"用户空间","nro":83,"url":"../images/kubernetes-dashboard-1.7.1-brand.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"用户空间","attributes":{},"skip":false,"key":"1.5.7.2.3"},{"backlink":"practice/dashboard-upgrade.html#fig1.5.7.2.4","level":"1.5.7.2","list_caption":"Figure: kubeconfig文件","alt":"kubeconfig文件","nro":84,"url":"../images/brand-kubeconfig-yaml.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"kubeconfig文件","attributes":{},"skip":false,"key":"1.5.7.2.4"},{"backlink":"usecases/service-discovery-in-microservices.html#fig1.6.1.1.1","level":"1.6.1.1","list_caption":"Figure: 微服务中的服务发现","alt":"微服务中的服务发现","nro":85,"url":"../images/service-discovery-in-microservices.png","index":1,"caption_template":"图片 - _CAPTION_","label":"微服务中的服务发现","attributes":{},"skip":false,"key":"1.6.1.1.1"},{"backlink":"usecases/service-mesh.html#fig1.6.2.1","level":"1.6.2","list_caption":"Figure: 下一代异构微服务架构","alt":"下一代异构微服务架构","nro":86,"url":"../images/polyglot-microservices-serivce-mesh.png","index":1,"caption_template":"图片 - _CAPTION_","label":"下一代异构微服务架构","attributes":{},"skip":false,"key":"1.6.2.1"},{"backlink":"usecases/service-mesh.html#fig1.6.2.2","level":"1.6.2","list_caption":"Figure: Service Mesh 架构图","alt":"Service Mesh 架构图","nro":87,"url":"../images/serivce-mesh-control-plane.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Service Mesh 架构图","attributes":{},"skip":false,"key":"1.6.2.2"},{"backlink":"usecases/istio.html#fig1.6.2.1.1","level":"1.6.2.1","list_caption":"Figure: Istio架构图","alt":"Istio架构图","nro":88,"url":"../images/istio-arch.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Istio架构图","attributes":{},"skip":false,"key":"1.6.2.1.1"},{"backlink":"usecases/istio-installation.html#fig1.6.2.1.1.1","level":"1.6.2.1.1","list_caption":"Figure: BookInfo Sample应用架构图","alt":"BookInfo Sample应用架构图","nro":89,"url":"../images/bookinfo-sample-arch.png","index":1,"caption_template":"图片 - _CAPTION_","label":"BookInfo Sample应用架构图","attributes":{},"skip":false,"key":"1.6.2.1.1.1"},{"backlink":"usecases/istio-installation.html#fig1.6.2.1.1.2","level":"1.6.2.1.1","list_caption":"Figure: BookInfo Sample页面","alt":"BookInfo Sample页面","nro":90,"url":"../images/bookinfo-sample.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"BookInfo Sample页面","attributes":{},"skip":false,"key":"1.6.2.1.1.2"},{"backlink":"usecases/istio-installation.html#fig1.6.2.1.1.3","level":"1.6.2.1.1","list_caption":"Figure: Istio Grafana界面","alt":"Istio Grafana界面","nro":91,"url":"../images/istio-grafana.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Istio Grafana界面","attributes":{},"skip":false,"key":"1.6.2.1.1.3"},{"backlink":"usecases/istio-installation.html#fig1.6.2.1.1.4","level":"1.6.2.1.1","list_caption":"Figure: Prometheus页面","alt":"Prometheus页面","nro":92,"url":"../images/istio-prometheus.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Prometheus页面","attributes":{},"skip":false,"key":"1.6.2.1.1.4"},{"backlink":"usecases/istio-installation.html#fig1.6.2.1.1.5","level":"1.6.2.1.1","list_caption":"Figure: Zipkin页面","alt":"Zipkin页面","nro":93,"url":"../images/istio-zipkin.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Zipkin页面","attributes":{},"skip":false,"key":"1.6.2.1.1.5"},{"backlink":"usecases/istio-installation.html#fig1.6.2.1.1.6","level":"1.6.2.1.1","list_caption":"Figure: ServiceGraph页面","alt":"ServiceGraph页面","nro":94,"url":"../images/istio-servicegraph.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"ServiceGraph页面","attributes":{},"skip":false,"key":"1.6.2.1.1.6"},{"backlink":"usecases/install-and-expand-istio-mesh.html#fig1.6.2.1.3.1","level":"1.6.2.1.3","list_caption":"Figure: BookInfo","alt":"BookInfo","nro":95,"url":"../images/noistio.png","index":1,"caption_template":"图片 - _CAPTION_","label":"BookInfo","attributes":{},"skip":false,"key":"1.6.2.1.3.1"},{"backlink":"usecases/install-and-expand-istio-mesh.html#fig1.6.2.1.3.2","level":"1.6.2.1.3","list_caption":"Figure: BookInfo","alt":"BookInfo","nro":96,"url":"../images/noistio.png","index":2,"caption_template":"图片 - _CAPTION_","label":"BookInfo","attributes":{},"skip":false,"key":"1.6.2.1.3.2"},{"backlink":"usecases/integrating-vms.html#fig1.6.2.1.4.1","level":"1.6.2.1.4","list_caption":"Figure: Bookinfo应用的拓展Mesh","alt":"Bookinfo应用的拓展Mesh","nro":97,"url":"../images/istio-mesh-expansion.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Bookinfo应用的拓展Mesh","attributes":{},"skip":false,"key":"1.6.2.1.4.1"},{"backlink":"usecases/linkerd.html#fig1.6.2.2.1","level":"1.6.2.2","list_caption":"Figure: source https://linkerd.io","alt":"source https://linkerd.io","nro":98,"url":"../images/diagram-individual-instance.png","index":1,"caption_template":"图片 - _CAPTION_","label":"source https://linkerd.io","attributes":{},"skip":false,"key":"1.6.2.2.1"},{"backlink":"usecases/linkerd-user-guide.html#fig1.6.2.2.1.1","level":"1.6.2.2.1","list_caption":"Figure: Jenkins pipeline","alt":"Jenkins pipeline","nro":99,"url":"../images/linkerd-jenkins-pipeline.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Jenkins pipeline","attributes":{},"skip":false,"key":"1.6.2.2.1.1"},{"backlink":"usecases/linkerd-user-guide.html#fig1.6.2.2.1.2","level":"1.6.2.2.1","list_caption":"Figure: Jenkins config","alt":"Jenkins config","nro":100,"url":"../images/linkerd-jenkins.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Jenkins config","attributes":{},"skip":false,"key":"1.6.2.2.1.2"},{"backlink":"usecases/linkerd-user-guide.html#fig1.6.2.2.1.3","level":"1.6.2.2.1","list_caption":"Figure: namerd","alt":"namerd","nro":101,"url":"../images/namerd-internal.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"namerd","attributes":{},"skip":false,"key":"1.6.2.2.1.3"},{"backlink":"usecases/linkerd-user-guide.html#fig1.6.2.2.1.4","level":"1.6.2.2.1","list_caption":"Figure: linkerd监控","alt":"linkerd监控","nro":102,"url":"../images/linkerd-helloworld-outgoing.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"linkerd监控","attributes":{},"skip":false,"key":"1.6.2.2.1.4"},{"backlink":"usecases/linkerd-user-guide.html#fig1.6.2.2.1.5","level":"1.6.2.2.1","list_caption":"Figure: linkerd监控","alt":"linkerd监控","nro":103,"url":"../images/linkerd-helloworld-incoming.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"linkerd监控","attributes":{},"skip":false,"key":"1.6.2.2.1.5"},{"backlink":"usecases/linkerd-user-guide.html#fig1.6.2.2.1.6","level":"1.6.2.2.1","list_caption":"Figure: linkerd性能监控","alt":"linkerd性能监控","nro":104,"url":"../images/linkerd-grafana.png","index":6,"caption_template":"图片 - _CAPTION_","label":"linkerd性能监控","attributes":{},"skip":false,"key":"1.6.2.2.1.6"},{"backlink":"usecases/linkerd-user-guide.html#fig1.6.2.2.1.7","level":"1.6.2.2.1","list_caption":"Figure: Linkerd ingress controller","alt":"Linkerd ingress controller","nro":105,"url":"../images/linkerd-ingress-controller.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"Linkerd ingress controller","attributes":{},"skip":false,"key":"1.6.2.2.1.7"},{"backlink":"usecases/spark-standalone-on-kubernetes.html#fig1.6.3.1.1","level":"1.6.3.1","list_caption":"Figure: spark master ui","alt":"spark master ui","nro":106,"url":"../images/spark-ui.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"spark master ui","attributes":{},"skip":false,"key":"1.6.3.1.1"},{"backlink":"usecases/spark-standalone-on-kubernetes.html#fig1.6.3.1.2","level":"1.6.3.1","list_caption":"Figure: zeppelin ui","alt":"zeppelin ui","nro":107,"url":"../images/zeppelin-ui.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"zeppelin ui","attributes":{},"skip":false,"key":"1.6.3.1.2"},{"backlink":"develop/client-go-sample.html#fig1.7.3.1","level":"1.7.3","list_caption":"Figure: 使用kubernetes dashboard进行故障排查","alt":"使用kubernetes dashboard进行故障排查","nro":108,"url":"../images/kubernetes-client-go-sample-update.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"使用kubernetes dashboard进行故障排查","attributes":{},"skip":false,"key":"1.7.3.1"},{"backlink":"appendix/issues.html#fig1.8.2.1","level":"1.8.2","list_caption":"Figure: pvc-storage-limit","alt":"pvc-storage-limit","nro":109,"url":"../images/pvc-storage-limit.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"pvc-storage-limit","attributes":{},"skip":false,"key":"1.8.2.1"}]},"title":"Kubernetes Handbook","language":"zh-hans","links":{"sidebar":{"Home":"https://jimmysong.io"}},"gitbook":"*","description":"Kubernetes中文指南/实践手册|kubernetes handbook|jimmysong.io|宋净超"},"file":{"path":"practice/storage-for-containers-using-glusterfs-with-openshift.md","mtime":"2017-10-19T10:34:12.459Z","type":"markdown"},"gitbook":{"version":"3.2.2","time":"2017-11-08T11:27:15.048Z"},"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-back-to-top-button/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-github-buttons/plugin.js"></script>
|
||
|
||
|
||
|
||
<script src="../gitbook/gitbook-plugin-3-ba/plugin.js"></script>
|
||
|
||
|
||
|
||
<script src="../gitbook/gitbook-plugin-sharing/buttons.js"></script>
|
||
|
||
|
||
|
||
<script src="../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
|
||
|
||
|
||
|
||
</body>
|
||
</html>
|
||
|