kubernetes-handbook/practice/helm.html

2698 lines
133 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters!

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

<!DOCTYPE HTML>
<html lang="zh-hans" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>4.6.1 使用Helm管理kubernetes应用 · 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="create-private-charts-repo.html" />
<link rel="prev" href="services-management-tool.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>
<li class="chapter " data-level="1.3.2.20" data-path="../concepts/annotation.html">
<a href="../concepts/annotation.html">
2.2.20 Annotation
</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>
<li class="chapter " data-level="1.4.3.7" data-path="../guide/auth-with-kubeconfig-or-token.html">
<a href="../guide/auth-with-kubeconfig-or-token.html">
3.3.7 使用kubeconfig或token进行用户身份认证
</a>
</li>
<li class="chapter " data-level="1.4.3.8" data-path="../guide/authentication.html">
<a href="../guide/authentication.html">
3.3.8 kubernetes中的用户与身份认证授权
</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>
</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 " 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="monitoring.html">
<a href="monitoring.html">
4.5 集群与应用监控
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.5.1" data-path="heapster.html">
<a href="heapster.html">
4.5.1 Heapster
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.5.1.1" data-path="using-heapster-to-get-object-metrics.html">
<a href="using-heapster-to-get-object-metrics.html">
4.5.1.1 使用Heapster获取集群和对象的metric数据
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5.5.2" data-path="prometheus.html">
<a href="prometheus.html">
4.5.2 Prometheus
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.5.2.1" data-path="using-prometheus-to-monitor-kuberentes-cluster.html">
<a href="using-prometheus-to-monitor-kuberentes-cluster.html">
4.5.2.1 使用Prometheus监控kubernetes集群
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5.6" data-path="services-management-tool.html">
<a href="services-management-tool.html">
4.6 服务编排管理
</a>
<ul class="articles">
<li class="chapter active" data-level="1.5.6.1" data-path="helm.html">
<a href="helm.html">
4.6.1 使用Helm管理kubernetes应用
</a>
</li>
<li class="chapter " data-level="1.5.6.2" data-path="create-private-charts-repo.html">
<a href="create-private-charts-repo.html">
4.6.2 构建私有Chart仓库
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5.7" data-path="ci-cd.html">
<a href="ci-cd.html">
4.7 持续集成与发布
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.7.1" data-path="jenkins-ci-cd.html">
<a href="jenkins-ci-cd.html">
4.7.1 使用Jenkins进行持续集成与发布
</a>
</li>
<li class="chapter " data-level="1.5.7.2" data-path="drone-ci-cd.html">
<a href="drone-ci-cd.html">
4.7.2 使用Drone进行持续集成与发布
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5.8" data-path="update-and-upgrade.html">
<a href="update-and-upgrade.html">
4.8 更新与升级
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.8.1" data-path="manually-upgrade.html">
<a href="manually-upgrade.html">
4.8.1 手动升级kubernetes集群
</a>
</li>
<li class="chapter " data-level="1.5.8.2" data-path="dashboard-upgrade.html">
<a href="dashboard-upgrade.html">
4.8.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.6.1 使用Helm管理kubernetes应用</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="&#x4F7F;&#x7528;helm&#x7BA1;&#x7406;kubernetes&#x5E94;&#x7528;">&#x4F7F;&#x7528;Helm&#x7BA1;&#x7406;kubernetes&#x5E94;&#x7528;</h1>
<p>&#x8BFB;&#x5B8C;&#x672C;&#x6587;&#x540E;&#x60A8;&#x5E94;&#x8BE5;&#x53EF;&#x4EE5;&#x81EA;&#x5DF1;&#x521B;&#x5EFA;chart&#xFF0C;&#x5E76;&#x521B;&#x5EFA;&#x81EA;&#x5DF1;&#x7684;&#x79C1;&#x6709;chart&#x4ED3;&#x5E93;&#x3002;</p>
<p><a href="http://helm.sh" target="_blank">Helm</a>&#x662F;&#x4E00;&#x4E2A;kubernetes&#x5E94;&#x7528;&#x7684;&#x5305;&#x7BA1;&#x7406;&#x5DE5;&#x5177;&#xFF0C;&#x7528;&#x6765;&#x7BA1;&#x7406;<a href="https://github.com/kubernetes/charts" target="_blank">charts</a>&#x2014;&#x2014;&#x9884;&#x5148;&#x914D;&#x7F6E;&#x597D;&#x7684;&#x5B89;&#x88C5;&#x5305;&#x8D44;&#x6E90;&#xFF0C;&#x6709;&#x70B9;&#x7C7B;&#x4F3C;&#x4E8E;Ubuntu&#x7684;APT&#x548C;CentOS&#x4E2D;&#x7684;yum&#x3002;</p>
<p>Helm chart&#x662F;&#x7528;&#x6765;&#x5C01;&#x88C5;kubernetes&#x539F;&#x751F;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x7684;yaml&#x6587;&#x4EF6;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x4F60;&#x90E8;&#x7F72;&#x5E94;&#x7528;&#x7684;&#x65F6;&#x5019;&#x81EA;&#x5B9A;&#x4E49;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x7684;&#x4E00;&#x4E9B;metadata&#xFF0C;&#x4FBF;&#x4E0E;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x7684;&#x5206;&#x53D1;&#x3002;</p>
<p>Helm&#x548C;charts&#x7684;&#x4E3B;&#x8981;&#x4F5C;&#x7528;&#xFF1A;</p>
<ul>
<li>&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5C01;&#x88C5;</li>
<li>&#x7248;&#x672C;&#x7BA1;&#x7406;</li>
<li>&#x4F9D;&#x8D56;&#x68C0;&#x67E5;</li>
<li>&#x4FBF;&#x4E8E;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5206;&#x53D1;</li>
</ul>
<h2 id="&#x5B89;&#x88C5;helm">&#x5B89;&#x88C5;Helm</h2>
<p><strong>&#x524D;&#x63D0;&#x8981;&#x6C42;</strong></p>
<ul>
<li>Kubernetes1.5&#x4EE5;&#x4E0A;&#x7248;&#x672C;</li>
<li>&#x96C6;&#x7FA4;&#x53EF;&#x8BBF;&#x95EE;&#x5230;&#x7684;&#x955C;&#x50CF;&#x4ED3;&#x5E93;</li>
<li>&#x6267;&#x884C;helm&#x547D;&#x4EE4;&#x7684;&#x4E3B;&#x673A;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x5230;kubernetes&#x96C6;&#x7FA4;</li>
</ul>
<p><strong>&#x5B89;&#x88C5;&#x6B65;&#x9AA4;</strong></p>
<p>&#x9996;&#x5148;&#x9700;&#x8981;&#x5B89;&#x88C5;helm&#x5BA2;&#x6237;&#x7AEF;</p>
<pre><code class="lang-bash">curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get &gt; get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh
</code></pre>
<p>&#x521B;&#x5EFA;tiller&#x7684;<code>serviceaccount</code>&#x548C;<code>clusterrolebinding</code></p>
<pre><code class="lang-bash">kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
</code></pre>
<p>&#x7136;&#x540E;&#x5B89;&#x88C5;helm&#x670D;&#x52A1;&#x7AEF;tiller</p>
<pre><code class="lang-bash">helm init -i sz-pg-oam-docker-hub-001.tendcloud.com/library/kubernetes-helm-tiller:v2.3.1
</code></pre>
<p>&#x6211;&#x4EEC;&#x4F7F;&#x7528;<code>-i</code>&#x6307;&#x5B9A;&#x81EA;&#x5DF1;&#x7684;&#x955C;&#x50CF;&#xFF0C;&#x56E0;&#x4E3A;&#x5B98;&#x65B9;&#x7684;&#x955C;&#x50CF;&#x56E0;&#x4E3A;&#x67D0;&#x4E9B;&#x539F;&#x56E0;&#x65E0;&#x6CD5;&#x62C9;&#x53D6;&#x3002;</p>
<p>&#x4E3A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x8BBE;&#x7F6E;<code>serviceAccount</code>&#xFF1A;</p>
<pre><code class="lang-bash">kubectl patch deploy --namespace kube-system tiller-deploy -p <span class="hljs-string">&apos;{&quot;spec&quot;:{&quot;template&quot;:{&quot;spec&quot;:{&quot;serviceAccount&quot;:&quot;tiller&quot;}}}}&apos;</span>
</code></pre>
<p>&#x68C0;&#x67E5;&#x662F;&#x5426;&#x5B89;&#x88C5;&#x6210;&#x529F;&#xFF1A;</p>
<pre><code class="lang-bash">$ kubectl -n kube-system get pods|grep tiller
tiller-deploy-2372561459<span class="hljs-_">-f</span>6p0z 1/1 Running 0 1h
$ helm version
Client: &amp;version.Version{SemVer:<span class="hljs-string">&quot;v2.3.1&quot;</span>, GitCommit:<span class="hljs-string">&quot;32562a3040bb5ca690339b9840b6f60f8ce25da4&quot;</span>, GitTreeState:<span class="hljs-string">&quot;clean&quot;</span>}
Server: &amp;version.Version{SemVer:<span class="hljs-string">&quot;v2.3.1&quot;</span>, GitCommit:<span class="hljs-string">&quot;32562a3040bb5ca690339b9840b6f60f8ce25da4&quot;</span>, GitTreeState:<span class="hljs-string">&quot;clean&quot;</span>}
</code></pre>
<h2 id="&#x521B;&#x5EFA;&#x81EA;&#x5DF1;&#x7684;chart">&#x521B;&#x5EFA;&#x81EA;&#x5DF1;&#x7684;chart</h2>
<p>&#x6211;&#x4EEC;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x540D;&#x4E3A;<code>mychart</code>&#x7684;chart&#xFF0C;&#x770B;&#x4E00;&#x770B;chart&#x7684;&#x6587;&#x4EF6;&#x7ED3;&#x6784;&#x3002;</p>
<pre><code class="lang-bash">$ helm create mongodb
$ tree mongodb
mongodb
&#x251C;&#x2500;&#x2500; Chart.yaml <span class="hljs-comment">#Chart&#x672C;&#x8EAB;&#x7684;&#x7248;&#x672C;&#x548C;&#x914D;&#x7F6E;&#x4FE1;&#x606F;</span>
&#x251C;&#x2500;&#x2500; charts <span class="hljs-comment">#&#x4F9D;&#x8D56;&#x7684;chart</span>
&#x251C;&#x2500;&#x2500; templates <span class="hljs-comment">#&#x914D;&#x7F6E;&#x6A21;&#x677F;&#x76EE;&#x5F55;</span>
&#x2502; &#x251C;&#x2500;&#x2500; NOTES.txt <span class="hljs-comment">#helm&#x63D0;&#x793A;&#x4FE1;&#x606F;</span>
&#x2502; &#x251C;&#x2500;&#x2500; _helpers.tpl <span class="hljs-comment">#&#x7528;&#x4E8E;&#x4FEE;&#x6539;kubernetes objcet&#x914D;&#x7F6E;&#x7684;&#x6A21;&#x677F;</span>
&#x2502; &#x251C;&#x2500;&#x2500; deployment.yaml <span class="hljs-comment">#kubernetes Deployment object</span>
&#x2502; &#x2514;&#x2500;&#x2500; service.yaml <span class="hljs-comment">#kubernetes Serivce</span>
&#x2514;&#x2500;&#x2500; values.yaml <span class="hljs-comment">#kubernetes object configuration</span>
2 directories, 6 files
</code></pre>
<h3 id="&#x6A21;&#x677F;">&#x6A21;&#x677F;</h3>
<p><code>Templates</code>&#x76EE;&#x5F55;&#x4E0B;&#x662F;yaml&#x6587;&#x4EF6;&#x7684;&#x6A21;&#x677F;&#xFF0C;&#x9075;&#x5FAA;<a href="https://golang.org/pkg/text/template/" target="_blank">Go template</a>&#x8BED;&#x6CD5;&#x3002;&#x4F7F;&#x7528;&#x8FC7;<a href="https://gohugo.io" target="_blank">Hugo</a>&#x7684;&#x9759;&#x6001;&#x7F51;&#x7AD9;&#x751F;&#x6210;&#x5DE5;&#x5177;&#x7684;&#x4EBA;&#x5E94;&#x8BE5;&#x5BF9;&#x6B64;&#x5F88;&#x719F;&#x6089;&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x67E5;&#x770B;&#x4E0B;<code>deployment.yaml</code>&#x6587;&#x4EF6;&#x7684;&#x5185;&#x5BB9;&#x3002;</p>
<pre><code class="lang-yaml"><span class="hljs-attr">apiVersion:</span> extensions/v1beta1
<span class="hljs-attr">kind:</span> Deployment
<span class="hljs-attr">metadata:</span>
<span class="hljs-attr"> name:</span> {{ template <span class="hljs-string">&quot;fullname&quot;</span> . }}
<span class="hljs-attr"> labels:</span>
<span class="hljs-attr"> chart:</span> <span class="hljs-string">&quot;<span class="hljs-template-variable">{{ .Chart.Name }}</span>-<span class="hljs-template-variable">{{ .Chart.Version | replace &quot;+&quot; &quot;_&quot; }}</span>&quot;</span>
<span class="hljs-attr">spec:</span>
<span class="hljs-attr"> replicas:</span> {{ .Values.replicaCount }}
<span class="hljs-attr"> template:</span>
<span class="hljs-attr"> metadata:</span>
<span class="hljs-attr"> labels:</span>
<span class="hljs-attr"> app:</span> {{ template <span class="hljs-string">&quot;fullname&quot;</span> . }}
<span class="hljs-attr"> spec:</span>
<span class="hljs-attr"> containers:</span>
<span class="hljs-attr"> - name:</span> {{ .Chart.Name }}
<span class="hljs-attr"> image:</span> <span class="hljs-string">&quot;<span class="hljs-template-variable">{{ .Values.image.repository }}</span>:<span class="hljs-template-variable">{{ .Values.image.tag }}</span>&quot;</span>
<span class="hljs-attr"> imagePullPolicy:</span> {{ .Values.image.pullPolicy }}
<span class="hljs-attr"> ports:</span>
<span class="hljs-attr"> - containerPort:</span> {{ .Values.service.internalPort }}
<span class="hljs-attr"> livenessProbe:</span>
<span class="hljs-attr"> httpGet:</span>
<span class="hljs-attr"> path:</span> /
<span class="hljs-attr"> port:</span> {{ .Values.service.internalPort }}
<span class="hljs-attr"> readinessProbe:</span>
<span class="hljs-attr"> httpGet:</span>
<span class="hljs-attr"> path:</span> /
<span class="hljs-attr"> port:</span> {{ .Values.service.internalPort }}
<span class="hljs-attr"> resources:</span>
{{ toYaml .Values.resources | indent <span class="hljs-number">12</span> }}
</code></pre>
<p>&#x8FD9;&#x662F;&#x8BE5;&#x5E94;&#x7528;&#x7684;Deployment&#x7684;yaml&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#xFF0C;&#x5176;&#x4E2D;&#x7684;&#x53CC;&#x5927;&#x62EC;&#x53F7;&#x5305;&#x6269;&#x8D77;&#x6765;&#x7684;&#x90E8;&#x5206;&#x662F;Go template&#xFF0C;&#x5176;&#x4E2D;&#x7684;Values&#x662F;&#x5728;<code>values.yaml</code>&#x6587;&#x4EF6;&#x4E2D;&#x5B9A;&#x4E49;&#x7684;&#xFF1A;</p>
<pre><code class="lang-Yaml"><span class="hljs-comment"># Default values for mychart.</span>
<span class="hljs-comment"># This is a YAML-formatted file.</span>
<span class="hljs-comment"># Declare variables to be passed into your templates.</span>
<span class="hljs-attr">replicaCount:</span> <span class="hljs-number">1</span>
<span class="hljs-attr">image:</span>
<span class="hljs-attr"> repository:</span> nginx
<span class="hljs-attr"> tag:</span> stable
<span class="hljs-attr"> pullPolicy:</span> IfNotPresent
<span class="hljs-attr">service:</span>
<span class="hljs-attr"> name:</span> nginx
<span class="hljs-attr"> type:</span> ClusterIP
<span class="hljs-attr"> externalPort:</span> <span class="hljs-number">80</span>
<span class="hljs-attr"> internalPort:</span> <span class="hljs-number">80</span>
<span class="hljs-attr">resources:</span>
<span class="hljs-attr"> limits:</span>
<span class="hljs-attr"> cpu:</span> <span class="hljs-number">100</span>m
<span class="hljs-attr"> memory:</span> <span class="hljs-number">128</span>Mi
<span class="hljs-attr"> requests:</span>
<span class="hljs-attr"> cpu:</span> <span class="hljs-number">100</span>m
<span class="hljs-attr"> memory:</span> <span class="hljs-number">128</span>Mi
</code></pre>
<p>&#x6BD4;&#x5982;&#x5728;<code>Deployment.yaml</code>&#x4E2D;&#x5B9A;&#x4E49;&#x7684;&#x5BB9;&#x5668;&#x955C;&#x50CF;<code>image: &quot;{{ .Values.image.repository }}:{{ .Values.image.tag }}&quot;</code>&#x5176;&#x4E2D;&#x7684;&#xFF1A;</p>
<ul>
<li><code>.Values.image.repository</code>&#x5C31;&#x662F;nginx</li>
<li><code>.Values.image.tag</code>&#x5C31;&#x662F;stable</li>
</ul>
<p>&#x4EE5;&#x4E0A;&#x4E24;&#x4E2A;&#x53D8;&#x91CF;&#x503C;&#x662F;&#x5728;create chart&#x7684;&#x65F6;&#x5019;&#x81EA;&#x52A8;&#x751F;&#x6210;&#x7684;&#x9ED8;&#x8BA4;&#x503C;&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x5C06;&#x9ED8;&#x8BA4;&#x7684;&#x955C;&#x50CF;&#x5730;&#x5740;&#x548C;tag&#x6539;&#x6210;&#x6211;&#x4EEC;&#x81EA;&#x5DF1;&#x7684;&#x955C;&#x50CF;<code>sz-pg-oam-docker-hub-001.tendcloud.com/library/nginx:1.9</code>&#x3002;</p>
<h3 id="&#x68C0;&#x67E5;&#x914D;&#x7F6E;&#x548C;&#x6A21;&#x677F;&#x662F;&#x5426;&#x6709;&#x6548;">&#x68C0;&#x67E5;&#x914D;&#x7F6E;&#x548C;&#x6A21;&#x677F;&#x662F;&#x5426;&#x6709;&#x6548;</h3>
<p>&#x5F53;&#x4F7F;&#x7528;kubernetes&#x90E8;&#x7F72;&#x5E94;&#x7528;&#x7684;&#x65F6;&#x5019;&#x5B9E;&#x9645;&#x4E0A;&#x8BB2;templates&#x6E32;&#x67D3;&#x6210;&#x6700;&#x7EC8;&#x7684;kubernetes&#x80FD;&#x591F;&#x8BC6;&#x522B;&#x7684;yaml&#x683C;&#x5F0F;&#x3002;</p>
<p>&#x4F7F;&#x7528;<code>helm install --dry-run --debug &lt;chart_dir&gt;</code>&#x547D;&#x4EE4;&#x6765;&#x9A8C;&#x8BC1;chart&#x914D;&#x7F6E;&#x3002;&#x8BE5;&#x8F93;&#x51FA;&#x4E2D;&#x5305;&#x542B;&#x4E86;&#x6A21;&#x677F;&#x7684;&#x53D8;&#x91CF;&#x914D;&#x7F6E;&#x4E0E;&#x6700;&#x7EC8;&#x6E32;&#x67D3;&#x7684;yaml&#x6587;&#x4EF6;&#x3002;</p>
<pre><code class="lang-bash">$ helm install --dry-run --debug mychart
Created tunnel using <span class="hljs-built_in">local</span> port: <span class="hljs-string">&apos;58406&apos;</span>
SERVER: <span class="hljs-string">&quot;localhost:58406&quot;</span>
CHART PATH: /Users/jimmy/Workspace/github/bitnami/charts/incubator/mean/charts/mychart
NAME: filled-seahorse
REVISION: 1
RELEASED: Tue Oct 24 18:57:13 2017
CHART: mychart-0.1.0
USER-SUPPLIED VALUES:
{}
COMPUTED VALUES:
image:
pullPolicy: IfNotPresent
repository: sz-pg-oam-docker-hub-001.tendcloud.com/library/nginx
tag: 1.9
replicaCount: 1
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
service:
externalPort: 80
internalPort: 80
name: nginx
<span class="hljs-built_in">type</span>: ClusterIP
HOOKS:
MANIFEST:
---
<span class="hljs-comment"># Source: mychart/templates/service.yaml</span>
apiVersion: v1
kind: Service
metadata:
name: filled-seahorse-mychart
labels:
chart: <span class="hljs-string">&quot;mychart-0.1.0&quot;</span>
spec:
<span class="hljs-built_in">type</span>: ClusterIP
ports:
- port: 80
targetPort: 80
protocol: TCP
name: nginx
selector:
app: filled-seahorse-mychart
---
<span class="hljs-comment"># Source: mychart/templates/deployment.yaml</span>
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: filled-seahorse-mychart
labels:
chart: <span class="hljs-string">&quot;mychart-0.1.0&quot;</span>
spec:
replicas: 1
template:
metadata:
labels:
app: filled-seahorse-mychart
spec:
containers:
- name: mychart
image: <span class="hljs-string">&quot;sz-pg-oam-docker-hub-001.tendcloud.com/library/nginx:1.9&quot;</span>
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /
port: 80
readinessProbe:
httpGet:
path: /
port: 80
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
</code></pre>
<p>&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230;Deployment&#x548C;Service&#x7684;&#x540D;&#x5B57;&#x524D;&#x534A;&#x622A;&#x7531;&#x4E24;&#x4E2A;&#x968F;&#x673A;&#x7684;&#x5355;&#x8BCD;&#x7EC4;&#x6210;&#xFF0C;&#x6700;&#x540E;&#x624D;&#x662F;&#x6211;&#x4EEC;&#x5728;<code>values.yaml</code>&#x4E2D;&#x914D;&#x7F6E;&#x7684;&#x503C;&#x3002;</p>
<h3 id="&#x90E8;&#x7F72;&#x5230;kubernetes">&#x90E8;&#x7F72;&#x5230;kubernetes</h3>
<p>&#x5728;<code>mychart</code>&#x76EE;&#x5F55;&#x4E0B;&#x6267;&#x884C;&#x4E0B;&#x9762;&#x7684;&#x547D;&#x4EE4;&#x5C06;nginx&#x90E8;&#x7F72;&#x5230;kubernetes&#x96C6;&#x7FA4;&#x4E0A;&#x3002;</p>
<pre><code class="lang-bash">helm install .
NAME: eating-hound
LAST DEPLOYED: Wed Oct 25 14:58:15 2017
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==&gt; v1/Service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
eating-hound-mychart 10.254.135.68 &lt;none&gt; 80/TCP 0s
==&gt; extensions/v1beta1/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
eating-hound-mychart 1 1 1 0 0s
NOTES:
1. Get the application URL by running these commands:
<span class="hljs-built_in">export</span> POD_NAME=$(kubectl get pods --namespace default <span class="hljs-_">-l</span> <span class="hljs-string">&quot;app=eating-hound-mychart&quot;</span> -o jsonpath=<span class="hljs-string">&quot;{.items[0].metadata.name}&quot;</span>)
<span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;Visit http://127.0.0.1:8080 to use your application&quot;</span>
kubectl port-forward <span class="hljs-variable">$POD_NAME</span> 8080:80
</code></pre>
<p>&#x73B0;&#x5728;nginx&#x5DF2;&#x7ECF;&#x90E8;&#x7F72;&#x5230;kubernetes&#x96C6;&#x7FA4;&#x4E0A;&#xFF0C;&#x672C;&#x5730;&#x6267;&#x884C;&#x63D0;&#x793A;&#x4E2D;&#x7684;&#x547D;&#x4EE4;&#x5728;&#x672C;&#x5730;&#x4E3B;&#x673A;&#x4E0A;&#x8BBF;&#x95EE;&#x5230;nginx&#x5B9E;&#x4F8B;&#x3002;</p>
<pre><code class="lang-bash"><span class="hljs-built_in">export</span> POD_NAME=$(kubectl get pods --namespace default <span class="hljs-_">-l</span> <span class="hljs-string">&quot;app=eating-hound-mychart&quot;</span> -o jsonpath=<span class="hljs-string">&quot;{.items[0].metadata.name}&quot;</span>)
<span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;Visit http://127.0.0.1:8080 to use your application&quot;</span>
kubectl port-forward <span class="hljs-variable">$POD_NAME</span> 8080:80
</code></pre>
<p>&#x5728;&#x672C;&#x5730;&#x8BBF;&#x95EE;<code>http://127.0.0.1:8080</code>&#x5373;&#x53EF;&#x8BBF;&#x95EE;&#x5230;nginx&#x3002;</p>
<p><strong>&#x67E5;&#x770B;&#x90E8;&#x7F72;&#x7684;relaese</strong></p>
<pre><code class="lang-bash">$ helm list
NAME REVISION UPDATED STATUS CHART NAMESPACE
eating-hound 1 Wed Oct 25 14:58:15 2017 DEPLOYED mychart-0.1.0 default
</code></pre>
<p><strong>&#x5220;&#x9664;&#x90E8;&#x7F72;&#x7684;release</strong></p>
<pre><code class="lang-bash">$ helm delete eating-hound
release <span class="hljs-string">&quot;eating-hound&quot;</span> deleted
</code></pre>
<h3 id="&#x6253;&#x5305;&#x5206;&#x4EAB;">&#x6253;&#x5305;&#x5206;&#x4EAB;</h3>
<p>&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x4FEE;&#x6539;<code>Chart.yaml</code>&#x4E2D;&#x7684;helm chart&#x914D;&#x7F6E;&#x4FE1;&#x606F;&#xFF0C;&#x7136;&#x540E;&#x4F7F;&#x7528;&#x4E0B;&#x5217;&#x547D;&#x4EE4;&#x5C06;chart&#x6253;&#x5305;&#x6210;&#x4E00;&#x4E2A;&#x538B;&#x7F29;&#x6587;&#x4EF6;&#x3002;</p>
<pre><code class="lang-bash">helm package .
</code></pre>
<p>&#x6253;&#x5305;&#x51FA;<code>mychart-0.1.0.tgz</code>&#x6587;&#x4EF6;&#x3002;</p>
<h3 id="&#x4F9D;&#x8D56;">&#x4F9D;&#x8D56;</h3>
<p>&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5728;<code>requirement.yaml</code>&#x4E2D;&#x5B9A;&#x4E49;&#x5E94;&#x7528;&#x6240;&#x4F9D;&#x8D56;&#x7684;chart&#xFF0C;&#x4F8B;&#x5982;&#x5B9A;&#x4E49;&#x5BF9;<code>mariadb</code>&#x7684;&#x4F9D;&#x8D56;&#xFF1A;</p>
<pre><code class="lang-yaml"><span class="hljs-attr">dependencies:</span>
<span class="hljs-attr">- name:</span> mariadb
<span class="hljs-attr"> version:</span> <span class="hljs-number">0.6</span><span class="hljs-number">.0</span>
<span class="hljs-attr"> repository:</span> https://kubernetes-charts.storage.googleapis.com
</code></pre>
<p>&#x4F7F;&#x7528;<code>helm lint .</code>&#x547D;&#x4EE4;&#x53EF;&#x4EE5;&#x68C0;&#x67E5;&#x4F9D;&#x8D56;&#x548C;&#x6A21;&#x677F;&#x914D;&#x7F6E;&#x662F;&#x5426;&#x6B63;&#x786E;&#x3002;</p>
<h3 id="&#x5B89;&#x88C5;&#x6E90;">&#x5B89;&#x88C5;&#x6E90;</h3>
<p>&#x6211;&#x4EEC;&#x5728;&#x524D;&#x9762;&#x5B89;&#x88C5;chart&#x53EF;&#x4EE5;&#x901A;&#x8FC7;HTTP server&#x7684;&#x65B9;&#x5F0F;&#x63D0;&#x4F9B;&#x3002;</p>
<pre><code class="lang-bash">$ helm serve
Regenerating index. This may take a moment.
Now serving you on 127.0.0.1:8879
</code></pre>
<p>&#x8BBF;&#x95EE;<code>http://localhost:8879</code>&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x521A;&#x521A;&#x5B89;&#x88C5;&#x7684;chart&#x3002;</p>
<figure id="fig1.5.6.1.1"><img src="../images/helm-charts-repository.jpg" alt="Helm chart&#x6E90;"><figcaption>&#x56FE;&#x7247; - Helm chart&#x6E90;</figcaption></figure>
<p>&#x70B9;&#x51FB;&#x94FE;&#x63A5;&#x5373;&#x53EF;&#x4EE5;&#x4E0B;&#x8F7D;chart&#x7684;&#x538B;&#x7F29;&#x5305;&#x3002;</p>
<h2 id="&#x90E8;&#x7F72;mean&#x6D4B;&#x8BD5;&#x6848;&#x4F8B;">&#x90E8;&#x7F72;MEAN&#x6D4B;&#x8BD5;&#x6848;&#x4F8B;</h2>
<p>MEAN&#x662F;&#x7528;&#x6765;&#x6784;&#x5EFA;&#x7F51;&#x7AD9;&#x548C;web&#x5E94;&#x7528;&#x7684;&#x514D;&#x8D39;&#x5F00;&#x6E90;&#x7684;JavaScript&#x8F6F;&#x4EF6;&#x6808;&#xFF0C;&#x8BE5;&#x8F6F;&#x4EF6;&#x6808;&#x5305;&#x62EC;MongoDB&#x3001;Express.js&#x3001;Angular&#x548C;Node.js&#x3002;</p>
<p><strong>&#x4E0B;&#x8F7D;charts</strong></p>
<pre><code class="lang-bash">$ git <span class="hljs-built_in">clone</span> https://github.com/bitnami/charts.git
$ <span class="hljs-built_in">cd</span> charts/incubator/mean
$ helm dep list
NAME VERSION REPOSITORY STATUS
mongodb 0.4.x https://kubernetes-charts.storage.googleapis.com/ missing
</code></pre>
<p>&#x7F3A;&#x5C11;mongodb&#x7684;&#x4F9D;&#x8D56;&#xFF0C;&#x9700;&#x8981;&#x66F4;&#x65B0;&#x4E00;&#x4E0B;chart&#x3002;</p>
<p><strong>&#x6CE8;</strong>&#xFF1A;<code>https://kubernetes-charts.storage.googleapis.com/</code>&#x662F;Google&#x7EF4;&#x62A4;&#x7684;chart&#x5E93;&#xFF0C;&#x8BBF;&#x95EE;&#x8BE5;&#x5730;&#x5740;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x6240;&#x6709;&#x7684;chart&#x5217;&#x8868;&#x3002;</p>
<pre><code class="lang-bash">$ helm dep update
Hang tight <span class="hljs-keyword">while</span> we grab the latest from your chart repositories...
...Unable to get an update from the <span class="hljs-string">&quot;local&quot;</span> chart repository (http://127.0.0.1:8879/charts):
Get http://127.0.0.1:8879/charts/index.yaml: dial tcp 127.0.0.1:8879: getsockopt: connection refused
...Successfully got an update from the <span class="hljs-string">&quot;stable&quot;</span> chart repository
Update Complete. &#x2388;Happy Helming!&#x2388;
Saving 1 charts
Downloading mongodb from repo https://kubernetes-charts.storage.googleapis.com/
</code></pre>
<p>&#x6240;&#x6709;&#x7684;image&#x90FD;&#x5728; <code>values.yaml</code> &#x6587;&#x4EF6;&#x4E2D;&#x914D;&#x7F6E;&#x3002;</p>
<p>&#x4E0B;&#x8F7D;&#x7F3A;&#x5931;&#x7684;chart&#x3002;</p>
<pre><code class="lang-bash">$ helm dep build
Hang tight <span class="hljs-keyword">while</span> we grab the latest from your chart repositories...
...Unable to get an update from the <span class="hljs-string">&quot;local&quot;</span> chart repository (http://127.0.0.1:8879/charts):
Get http://127.0.0.1:8879/charts/index.yaml: dial tcp 127.0.0.1:8879: getsockopt: connection refused
...Successfully got an update from the <span class="hljs-string">&quot;stable&quot;</span> chart repository
Update Complete. &#x2388;Happy Helming!&#x2388;
Saving 1 charts
Downloading mongodb from repo https://kubernetes-charts.storage.googleapis.com/
</code></pre>
<p><strong>&#x4FEE;&#x6539;mongodb chart&#x914D;&#x7F6E;</strong></p>
<p>&#x5C06;&#x521A;&#x624D;&#x4E0B;&#x8F7D;&#x7684;<code>charts/mongodb-0.4.17.tgz</code>&#x7ED9;&#x89E3;&#x538B;&#x540E;&#xFF0C;&#x4FEE;&#x6539;&#x5176;&#x4E2D;&#x7684;&#x914D;&#x7F6E;&#xFF1A;</p>
<ul>
<li>&#x5C06;<code>persistence</code>&#x4E0B;&#x7684;<code>enabled</code>&#x8BBE;&#x7F6E;&#x4E3A;false</li>
<li>&#x5C06;image&#x4FEE;&#x6539;&#x4E3A;&#x6211;&#x4EEC;&#x7684;&#x79C1;&#x6709;&#x955C;&#x50CF;&#xFF1A;sz-pg-oam-docker-hub-001.tendcloud.com/library/bitnami-mongodb:3.4.9-r1</li>
</ul>
<p>&#x6267;&#x884C;<code>helm install --dry-run --debug .</code>&#x786E;&#x5B9A;&#x6A21;&#x677F;&#x65E0;&#x8BEF;&#x3002;</p>
<p>&#x5C06;&#x4FEE;&#x6539;&#x540E;&#x7684;mongodb chart&#x6253;&#x5305;&#xFF0C;&#x5728;mongodb&#x7684;&#x76EE;&#x5F55;&#x4E0B;&#x6267;&#x884C;&#xFF1A;</p>
<pre><code class="lang-bash">helm package .
</code></pre>
<p>&#x73B0;&#x5728;&#x518D;&#x8BBF;&#x95EE;&#x524D;&#x9762;&#x542F;&#x52A8;&#x7684;helm server <code>http://localhost:8879</code>&#x5C06;&#x53EF;&#x4EE5;&#x5728;&#x9875;&#x9762;&#x4E0A;&#x770B;&#x5230;mongodb-0.4.17&#x8FD9;&#x4E2A;chart&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x5BF9;&#x5B98;&#x65B9;chart&#x914D;&#x7F6E;&#x505A;&#x4E86;&#x5982;&#x4E0B;&#x4FEE;&#x6539;&#x540E;&#x63A8;&#x9001;&#x5230;&#x4E86;&#x81EA;&#x5DF1;&#x7684;chart&#x4ED3;&#x5E93;&#xFF1A;</p>
<ul>
<li><code>requirements.yaml</code>&#x548C;<code>requirements.lock</code>&#x6587;&#x4EF6;&#x4E2D;&#x7684;<code>repository</code>&#x4E3A;<code>http://localhost:8879</code></li>
<li>&#x5C06;<code>values.yaml</code>&#x4E2D;&#x7684;<code>storageClass</code>&#x8BBE;&#x7F6E;&#x4E3A;<code>null</code></li>
<li>&#x5C06;<code>values.yaml</code>&#x4E2D;&#x7684;<code>Image</code>&#x90FD;&#x6539;&#x4E3A;&#x79C1;&#x6709;&#x955C;&#x50CF;</li>
<li><code>repositroy</code>&#x90FD;&#x8BBE;&#x7F6E;&#x4E3A;<code>http://localhost:8879</code></li>
</ul>
<p><strong>&#x6CE8;</strong>&#xFF1A;&#x56E0;&#x4E3A;&#x6211;&#x4EEC;&#x6CA1;&#x6709;&#x4F7F;&#x7528;PVC&#x6240;&#x4EE5;&#x5C06;&#x6240;&#x6709;&#x7684;&#x5173;&#x4E8E;&#x6301;&#x4E45;&#x5316;&#x5B58;&#x50A8;&#x7684;&#x914D;&#x7F6E;&#x90FD;&#x8BBE;&#x7F6E;&#x4E3A;false&#x4E86;&#x3002;</p>
<p><strong>&#x90E8;&#x7F72;MEAN</strong></p>
<p>&#x5728;<code>mean</code>&#x76EE;&#x5F55;&#x4E0B;&#x6267;&#x884C;&#xFF1A;</p>
<pre><code class="lang-bash">helm install .
NAME: orbiting-platypus
LAST DEPLOYED: Wed Oct 25 16:21:48 2017
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==&gt; v1/Secret
NAME TYPE DATA AGE
orbiting-platypus-mongodb Opaque 2 2s
==&gt; v1/ConfigMap
NAME DATA AGE
orbiting-platypus-mean 1 2s
==&gt; v1/Service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
orbiting-platypus-mongodb 10.254.144.208 &lt;none&gt; 27017/TCP 2s
orbiting-platypus-mean 10.254.165.23 &lt;none&gt; 80/TCP 2s
==&gt; extensions/v1beta1/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
orbiting-platypus-mean 1 1 1 0 2s
orbiting-platypus-mongodb 1 1 1 0 2s
NOTES:
Get the URL of your Node app by running:
<span class="hljs-built_in">export</span> POD_NAME=$(kubectl get pods --namespace default <span class="hljs-_">-l</span> <span class="hljs-string">&quot;app=orbiting-platypus-mean&quot;</span> -o jsonpath=<span class="hljs-string">&quot;{.items[0].metadata.name}&quot;</span>)
<span class="hljs-built_in">echo</span> http://127.0.0.1:8080/
kubectl port-forward <span class="hljs-variable">$POD_NAME</span> 8080:80
</code></pre>
<p>&#x8FD9;&#x6837;MEAN&#x8F6F;&#x4EF6;&#x6808;&#x5C31;&#x90E8;&#x7F72;&#x5230;&#x4F60;&#x7684;kuberentes&#x96C6;&#x7FA4;&#x91CC;&#x9762;&#x4E86;&#xFF08;&#x9ED8;&#x8BA4;&#x662F;&#x5728;default namespace&#x4E0B;&#xFF09;&#x3002;</p>
<p><strong>&#x9A8C;&#x8BC1;&#x68C0;&#x67E5;</strong></p>
<p>&#x4E3A;&#x4E86;&#x9A8C;&#x8BC1;MEAN&#x662F;&#x5426;&#x5B89;&#x88C5;&#x6210;&#x529F;&#x8FC7;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;<code>kubectl get pods</code>&#x67E5;&#x770B;pod&#x662F;&#x5426;&#x542F;&#x52A8;&#x5B8C;&#x6210;&#xFF0C;&#x4F1A;&#x5148;&#x542F;&#x52A8;mongodb&#x7684;pod&#xFF0C;&#x7136;&#x540E;&#x542F;&#x52A8;MEAN&#x4E2D;&#x7684;4&#x6B65;init&#x3002;</p>
<p><strong>&#x8BBF;&#x95EE;Web UI</strong></p>
<p>&#x5728;Ingress&#x4E2D;&#x589E;&#x52A0;&#x5982;&#x4E0B;&#x914D;&#x7F6E;&#xFF1A;</p>
<pre><code class="lang-yaml"><span class="hljs-attr"> - host:</span> mean.jimmysong.io
<span class="hljs-attr"> http:</span>
<span class="hljs-attr"> paths:</span>
<span class="hljs-attr"> - backend:</span>
<span class="hljs-attr"> serviceName:</span> orbiting-platypus-mean
<span class="hljs-attr"> servicePort:</span> <span class="hljs-number">80</span>
<span class="hljs-attr"> path:</span> /
</code></pre>
<p>&#x7136;&#x540E;&#x5728;&#x9875;&#x9762;&#x4E2D;&#x66F4;&#x65B0;ingress:</p>
<pre><code class="lang-bash">kubectl repalce <span class="hljs-_">-f</span> ingress.yaml
</code></pre>
<p>&#x5173;&#x4E8E;Ingress&#x914D;&#x7F6E;&#x8BF7;&#x53C2;&#x8003;&#xFF1A;<a href="edge-node-configuration.html">&#x8FB9;&#x7F18;&#x8282;&#x70B9;&#x914D;&#x7F6E;</a></p>
<p>&#x7136;&#x540E;&#x5728;&#x672C;&#x5730;&#x7684;<code>/etc/hosts</code>&#x6587;&#x4EF6;&#x4E2D;&#x589E;&#x52A0;&#x4E00;&#x6761;&#x914D;&#x7F6E;&#xFF1A;</p>
<pre><code class="lang-Ini">172.20.0.119 mean.jimmysong.io
</code></pre>
<p><strong>&#x6CE8;</strong>&#xFF1A;172.20.0.119&#x5373;&#x8FB9;&#x7F18;&#x8282;&#x70B9;&#x7684;VIP&#x3002;</p>
<p>&#x56E0;&#x4E3A;&#x8BE5;&#x9875;&#x9762;&#x9700;&#x8981;&#x52A0;&#x8F7D;google&#x7684;angularjs&#x3001;&#x8FD8;&#x6709;&#x4E24;&#x4E2A;css&#x5728;&#x56FD;&#x5185;&#x65E0;&#x6CD5;&#x8BBF;&#x95EE;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;curl&#x6D4B;&#x8BD5;&#xFF1A;</p>
<pre><code class="lang-bash">curl mean.jimmysong.io
</code></pre>
<p>&#x5C06;&#x4F1A;&#x8FD4;&#x56DE;HTML&#x5185;&#x5BB9;&#xFF1A;</p>
<pre><code class="lang-html"><span class="hljs-meta">&lt;!doctype html&gt;</span>
<span class="hljs-comment">&lt;!-- ASSIGN OUR ANGULAR MODULE --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span> <span class="hljs-attr">ng-app</span>=<span class="hljs-string">&quot;scotchTodo&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-comment">&lt;!-- META --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">&quot;utf-8&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;viewport&quot;</span> <span class="hljs-attr">content</span>=<span class="hljs-string">&quot;width=device-width, initial-scale=1&quot;</span>&gt;</span>
<span class="hljs-comment">&lt;!-- Optimize mobile viewport --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>Node/Angular Todo App<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
<span class="hljs-comment">&lt;!-- SCROLLS --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">&quot;stylesheet&quot;</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&quot;//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css&quot;</span>&gt;</span>
<span class="hljs-comment">&lt;!-- load bootstrap --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">&quot;stylesheet&quot;</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&quot;//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">style</span>&gt;</span><span class="css">
<span class="hljs-selector-tag">html</span> {
<span class="hljs-attribute">overflow-y</span>: scroll;
}
<span class="hljs-selector-tag">body</span> {
<span class="hljs-attribute">padding-top</span>: <span class="hljs-number">50px</span>;
}
<span class="hljs-selector-id">#todo-list</span> {
<span class="hljs-attribute">margin-bottom</span>: <span class="hljs-number">30px</span>;
}
<span class="hljs-selector-id">#todo-form</span> {
<span class="hljs-attribute">margin-bottom</span>: <span class="hljs-number">50px</span>;
}
</span><span class="hljs-tag">&lt;/<span class="hljs-name">style</span>&gt;</span>
<span class="hljs-comment">&lt;!-- SPELLS --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js&quot;</span>&gt;</span><span class="undefined"></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-comment">&lt;!-- load angular --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;js/controllers/main.js&quot;</span>&gt;</span><span class="undefined"></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-comment">&lt;!-- load up our controller --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;js/services/todos.js&quot;</span>&gt;</span><span class="undefined"></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-comment">&lt;!-- load our todo service --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;js/core.js&quot;</span>&gt;</span><span class="undefined"></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-comment">&lt;!-- load our main application --&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-comment">&lt;!-- SET THE CONTROLLER --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span> <span class="hljs-attr">ng-controller</span>=<span class="hljs-string">&quot;mainController&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;container&quot;</span>&gt;</span>
<span class="hljs-comment">&lt;!-- HEADER AND TODO COUNT --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;jumbotron text-center&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>I&apos;m a Todo-aholic <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;label label-info&quot;</span>&gt;</span>{{ todos.length }}<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-comment">&lt;!-- TODO LIST --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;todo-list&quot;</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;row&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;col-sm-4 col-sm-offset-4&quot;</span>&gt;</span>
<span class="hljs-comment">&lt;!-- LOOP OVER THE TODOS IN $scope.todos --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;checkbox&quot;</span> <span class="hljs-attr">ng-repeat</span>=<span class="hljs-string">&quot;todo in todos&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">label</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">&quot;checkbox&quot;</span> <span class="hljs-attr">ng-click</span>=<span class="hljs-string">&quot;deleteTodo(todo._id)&quot;</span>&gt;</span> {{ todo.text }}
<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;text-center&quot;</span> <span class="hljs-attr">ng-show</span>=<span class="hljs-string">&quot;loading&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;fa fa-spinner fa-spin fa-3x&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-comment">&lt;!-- FORM TO CREATE TODOS --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;todo-form&quot;</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;row&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;col-sm-8 col-sm-offset-2 text-center&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">form</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;form-group&quot;</span>&gt;</span>
<span class="hljs-comment">&lt;!-- BIND THIS VALUE TO formData.text IN ANGULAR --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">&quot;text&quot;</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;form-control input-lg text-center&quot;</span> <span class="hljs-attr">placeholder</span>=<span class="hljs-string">&quot;I want to buy a puppy that will love me forever&quot;</span> <span class="hljs-attr">ng-model</span>=<span class="hljs-string">&quot;formData.text&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-comment">&lt;!-- createToDo() WILL CREATE NEW TODOS --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">type</span>=<span class="hljs-string">&quot;submit&quot;</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;btn btn-primary btn-lg&quot;</span> <span class="hljs-attr">ng-click</span>=<span class="hljs-string">&quot;createTodo()&quot;</span>&gt;</span>Add<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">form</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;text-center text-muted&quot;</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>A demo by <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&quot;http://scotch.io&quot;</span>&gt;</span>Scotch<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>.<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Read the <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&quot;http://scotch.io/tutorials/javascript/creating-a-single-page-todo-app-with-node-and-angular&quot;</span>&gt;</span>tutorial<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>.<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<p>&#x8BBF;&#x95EE; <a href="http://mean.jimmysong.io" target="_blank">http://mean.jimmysong.io</a> &#x53EF;&#x4EE5;&#x770B;&#x5230;&#x5982;&#x4E0B;&#x754C;&#x9762;&#xFF0C;&#x6211;&#x5728;&#x5176;&#x4E2D;&#x6DFB;&#x52A0;&#x51E0;&#x6761;todo&#xFF1A;</p>
<figure id="fig1.5.6.1.2"><img src="../images/helm-mean-todo-aholic.jpg" alt="TODO&#x5E94;&#x7528;&#x7684;Web&#x9875;&#x9762;"><figcaption>&#x56FE;&#x7247; - TODO&#x5E94;&#x7528;&#x7684;Web&#x9875;&#x9762;</figcaption></figure>
<p><strong>&#x6CE8;</strong>&#xFF1A;Todo&#x4E2D;&#x7684;&#x6587;&#x5B57;&#x6765;&#x81EA;<em>What does the fox say&#xFF1F;</em></p>
<p>&#x6D4B;&#x8BD5;&#x5B8C;&#x6210;&#x540E;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x4E0B;&#x9762;&#x7684;&#x547D;&#x4EE4;&#x5C06;mean chart&#x63A8;&#x9001;&#x7684;&#x672C;&#x5730;chart&#x4ED3;&#x5E93;&#x4E2D;&#x3002;</p>
<p>&#x5728;mean&#x76EE;&#x5F55;&#x4E0B;&#x6267;&#x884C;&#xFF1A;</p>
<pre><code class="lang-bash">helm package .
</code></pre>
<p>&#x518D;&#x6B21;&#x5237;&#x65B0;<code>http://localhost:8879</code>&#x5C06;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x5982;&#x4E0B;&#x4E09;&#x4E2A;chart&#xFF1A;</p>
<ul>
<li>mean<ul>
<li>mean-0.1.3</li>
</ul>
</li>
<li>mongodb<ul>
<li>mongodb-0.4.17</li>
</ul>
</li>
<li>mychart<ul>
<li>mychart-0.1.0</li>
</ul>
</li>
</ul>
<h2 id="&#x53C2;&#x8003;">&#x53C2;&#x8003;</h2>
<ul>
<li><a href="https://docs.bitnami.com/kubernetes/how-to/deploy-application-kubernetes-helm/" target="_blank">Deploy, Scale And Upgrade An Application On Kubernetes With Helm</a></li>
<li><a href="https://github.com/kubernetes/helm/blob/master/docs/charts.md" target="_blank">Helm charts</a></li>
<li><a href="https://golang.org/pkg/text/template/" target="_blank">Go template</a></li>
<li><a href="https://github.com/kubernetes/helm/blob/master/docs/index.md" target="_blank">Helm docs</a></li>
<li><a href="https://docs.bitnami.com/kubernetes/how-to/create-your-first-helm-chart/" target="_blank">How To Create Your First Helm Chart</a></li>
<li><a href="https://www.ibm.com/blogs/bluemix/2017/10/quick-example-helm-chart-for-kubernetes/" target="_blank">Speed deployment on Kubernetes with Helm Chart &#x2013; Quick YAML example from scratch</a> </li>
</ul>
<footer class="page-footer"><span class="copyright">Copyright &#xA9; jimmysong.io 2017 all right reserved&#xFF0C;powered by Gitbook</span><span class="footer-modification">Updated:
2017-11-01 23:39:54
</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="services-management-tool.html" class="navigation navigation-prev " aria-label="Previous page: 4.6 服务编排管理">
<i class="fa fa-angle-left"></i>
</a>
<a href="create-private-charts-repo.html" class="navigation navigation-next " aria-label="Next page: 4.6.2 构建私有Chart仓库">
<i class="fa fa-angle-right"></i>
</a>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"4.6.1 使用Helm管理kubernetes应用","level":"1.5.6.1","depth":3,"next":{"title":"4.6.2 构建私有Chart仓库","level":"1.5.6.2","depth":3,"path":"practice/create-private-charts-repo.md","ref":"practice/create-private-charts-repo.md","articles":[]},"previous":{"title":"4.6 服务编排管理","level":"1.5.6","depth":2,"path":"practice/services-management-tool.md","ref":"practice/services-management-tool.md","articles":[{"title":"4.6.1 使用Helm管理kubernetes应用","level":"1.5.6.1","depth":3,"path":"practice/helm.md","ref":"practice/helm.md","articles":[]},{"title":"4.6.2 构建私有Chart仓库","level":"1.5.6.2","depth":3,"path":"practice/create-private-charts-repo.md","ref":"practice/create-private-charts-repo.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: 容器生态","alt":"容器生态","nro":4,"url":"../images/container-ecosystem.png","index":4,"caption_template":"图片 - _CAPTION_","label":"容器生态","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: 使用Jenkins进行持续集成与发布流程图","alt":"使用Jenkins进行持续集成与发布流程图","nro":5,"url":"../images/kubernetes-jenkins-ci-cd.png","index":5,"caption_template":"图片 - _CAPTION_","label":"使用Jenkins进行持续集成与发布流程图","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: filebeat日志收集架构图","alt":"filebeat日志收集架构图","nro":6,"url":"../images/filebeat-log-collector-arch.png","index":6,"caption_template":"图片 - _CAPTION_","label":"filebeat日志收集架构图","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: API文档","alt":"API文档","nro":7,"url":"../images/k8s-app-monitor-test-api-doc.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"API文档","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: 迁移步骤示意图","alt":"迁移步骤示意图","nro":8,"url":"../images/migrating-hadoop-yarn-to-kubernetes.png","index":8,"caption_template":"图片 - _CAPTION_","label":"迁移步骤示意图","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: service mesh架构图","alt":"service mesh架构图","nro":9,"url":"../images/serivce-mesh-control-plane.png","index":9,"caption_template":"图片 - _CAPTION_","label":"service mesh架构图","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: kibana界面","alt":"kibana界面","nro":10,"url":"../images/filebeat-docker-test.jpg","index":10,"caption_template":"图片 - _CAPTION_","label":"kibana界面","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界面示意图1","alt":"Grafana界面示意图1","nro":11,"url":"../images/kubernetes-devops-example-grafana-1.png","index":11,"caption_template":"图片 - _CAPTION_","label":"Grafana界面示意图1","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界面示意图2","alt":"Grafana界面示意图2","nro":12,"url":"../images/kubernetes-devops-example-grafana-2.png","index":12,"caption_template":"图片 - _CAPTION_","label":"Grafana界面示意图2","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: Grafana界面示意图3","alt":"Grafana界面示意图3","nro":13,"url":"../images/kubernetes-devops-example-grafana-3.png","index":13,"caption_template":"图片 - _CAPTION_","label":"Grafana界面示意图3","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: dashboard","alt":"dashboard","nro":14,"url":"../images/spark-job-on-kubernetes-example-1.jpg","index":14,"caption_template":"图片 - _CAPTION_","label":"dashboard","attributes":{},"skip":false,"key":"1.2.14"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig1.2.15","level":"1.2","list_caption":"Figure: Grafana","alt":"Grafana","nro":15,"url":"../images/spark-job-on-kubernetes-example-2.jpg","index":15,"caption_template":"图片 - _CAPTION_","label":"Grafana","attributes":{},"skip":false,"key":"1.2.15"},{"backlink":"concepts/index.html#fig1.3.1","level":"1.3","list_caption":"Figure: Borg架构","alt":"Borg架构","nro":16,"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":17,"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":18,"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":19,"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":20,"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":21,"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":22,"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":23,"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":24,"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":25,"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":26,"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":27,"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":28,"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":29,"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":30,"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":31,"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":32,"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":33,"url":"../images/ip-masq.png","index":1,"caption_template":"图片 - _CAPTION_","label":"IP伪装代理示意图","attributes":{},"skip":false,"key":"1.4.3.6.1"},{"backlink":"guide/auth-with-kubeconfig-or-token.html#fig1.4.3.7.1","level":"1.4.3.7","list_caption":"Figure: kubeconfig文件","alt":"kubeconfig文件","nro":34,"url":"../images/brand-kubeconfig-yaml.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"kubeconfig文件","attributes":{},"skip":false,"key":"1.4.3.7.1"},{"backlink":"guide/authentication.html#fig1.4.3.8.1","level":"1.4.3.8","list_caption":"Figure: Kubernetes OpenID Connect Flow","alt":"Kubernetes OpenID Connect Flow","nro":35,"url":"../images/kubernetes-oidc-login.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes OpenID Connect Flow","attributes":{},"skip":false,"key":"1.4.3.8.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":36,"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":37,"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":38,"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":39,"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":40,"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":41,"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":42,"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":43,"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":44,"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":45,"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":46,"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":47,"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":48,"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":49,"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":50,"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":51,"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":52,"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":53,"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":54,"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":55,"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":56,"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":57,"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":58,"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":59,"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":60,"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":61,"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":62,"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":63,"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":64,"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":65,"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":66,"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":67,"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":68,"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":69,"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":70,"url":"../images/log-persistence-logstash.png","index":1,"caption_template":"图片 - _CAPTION_","label":"日志持久化收集解决方案示意图","attributes":{},"skip":false,"key":"1.5.3.5.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":71,"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":72,"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/using-heapster-to-get-object-metrics.html#fig1.5.5.1.1.1","level":"1.5.5.1.1","list_caption":"Figure: Heapster架构图","alt":"Heapster架构图","nro":73,"url":"../images/heapster-architecture.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Heapster架构图","attributes":{},"skip":false,"key":"1.5.5.1.1.1"},{"backlink":"practice/prometheus.html#fig1.5.5.2.1","level":"1.5.5.2","list_caption":"Figure: Prometheus 架构图","alt":"Prometheus 架构图","nro":74,"url":"../images/prometheus-architecture.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Prometheus 架构图","attributes":{},"skip":false,"key":"1.5.5.2.1"},{"backlink":"practice/using-prometheus-to-monitor-kuberentes-cluster.html#fig1.5.5.2.1.1","level":"1.5.5.2.1","list_caption":"Figure: Grafana页面","alt":"Grafana页面","nro":75,"url":"../images/kubernetes-prometheus-monitoring.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Grafana页面","attributes":{},"skip":false,"key":"1.5.5.2.1.1"},{"backlink":"practice/helm.html#fig1.5.6.1.1","level":"1.5.6.1","list_caption":"Figure: Helm chart源","alt":"Helm chart源","nro":76,"url":"../images/helm-charts-repository.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Helm chart源","attributes":{},"skip":false,"key":"1.5.6.1.1"},{"backlink":"practice/helm.html#fig1.5.6.1.2","level":"1.5.6.1","list_caption":"Figure: TODO应用的Web页面","alt":"TODO应用的Web页面","nro":77,"url":"../images/helm-mean-todo-aholic.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"TODO应用的Web页面","attributes":{},"skip":false,"key":"1.5.6.1.2"},{"backlink":"practice/create-private-charts-repo.html#fig1.5.6.2.1","level":"1.5.6.2","list_caption":"Figure: Helm monocular界面","alt":"Helm monocular界面","nro":78,"url":"../images/helm-monocular-jimmysong.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Helm monocular界面","attributes":{},"skip":false,"key":"1.5.6.2.1"},{"backlink":"practice/jenkins-ci-cd.html#fig1.5.7.1.1","level":"1.5.7.1","list_caption":"Figure: 基于Jenkins的持续集成与发布","alt":"基于Jenkins的持续集成与发布","nro":79,"url":"../images/kubernetes-jenkins-ci-cd.png","index":1,"caption_template":"图片 - _CAPTION_","label":"基于Jenkins的持续集成与发布","attributes":{},"skip":false,"key":"1.5.7.1.1"},{"backlink":"practice/drone-ci-cd.html#fig1.5.7.2.1","level":"1.5.7.2","list_caption":"Figure: OAuth注册","alt":"OAuth注册","nro":80,"url":"../images/github-oauth-register.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"OAuth注册","attributes":{},"skip":false,"key":"1.5.7.2.1"},{"backlink":"practice/drone-ci-cd.html#fig1.5.7.2.2","level":"1.5.7.2","list_caption":"Figure: OAuth key","alt":"OAuth key","nro":81,"url":"../images/github-oauth-drone-key.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"OAuth key","attributes":{},"skip":false,"key":"1.5.7.2.2"},{"backlink":"practice/drone-ci-cd.html#fig1.5.7.2.3","level":"1.5.7.2","list_caption":"Figure: Drone登陆界面","alt":"Drone登陆界面","nro":82,"url":"../images/drone-login-github.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Drone登陆界面","attributes":{},"skip":false,"key":"1.5.7.2.3"},{"backlink":"practice/drone-ci-cd.html#fig1.5.7.2.4","level":"1.5.7.2","list_caption":"Figure: Github启用repo设置","alt":"Github启用repo设置","nro":83,"url":"../images/drone-github-active.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Github启用repo设置","attributes":{},"skip":false,"key":"1.5.7.2.4"},{"backlink":"practice/drone-ci-cd.html#fig1.5.7.2.5","level":"1.5.7.2","list_caption":"Figure: Github单个repo设置","alt":"Github单个repo设置","nro":84,"url":"../images/drone-github-repo-setting.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Github单个repo设置","attributes":{},"skip":false,"key":"1.5.7.2.5"},{"backlink":"practice/dashboard-upgrade.html#fig1.5.8.2.1","level":"1.5.8.2","list_caption":"Figure: 登陆界面","alt":"登陆界面","nro":85,"url":"../images/kubernetes-dashboard-1.7.1-login.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"登陆界面","attributes":{},"skip":false,"key":"1.5.8.2.1"},{"backlink":"practice/dashboard-upgrade.html#fig1.5.8.2.2","level":"1.5.8.2","list_caption":"Figure: 首页","alt":"首页","nro":86,"url":"../images/kubernetes-dashboard-1.7.1-default-page.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"首页","attributes":{},"skip":false,"key":"1.5.8.2.2"},{"backlink":"practice/dashboard-upgrade.html#fig1.5.8.2.3","level":"1.5.8.2","list_caption":"Figure: 用户空间","alt":"用户空间","nro":87,"url":"../images/kubernetes-dashboard-1.7.1-brand.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"用户空间","attributes":{},"skip":false,"key":"1.5.8.2.3"},{"backlink":"practice/dashboard-upgrade.html#fig1.5.8.2.4","level":"1.5.8.2","list_caption":"Figure: kubeconfig文件","alt":"kubeconfig文件","nro":88,"url":"../images/brand-kubeconfig-yaml.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"kubeconfig文件","attributes":{},"skip":false,"key":"1.5.8.2.4"},{"backlink":"usecases/service-discovery-in-microservices.html#fig1.6.1.1.1","level":"1.6.1.1","list_caption":"Figure: 微服务中的服务发现","alt":"微服务中的服务发现","nro":89,"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":90,"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":91,"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":92,"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":93,"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":94,"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":95,"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":96,"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":97,"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":98,"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":99,"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":100,"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":101,"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":102,"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":103,"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":104,"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":105,"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":106,"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":107,"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":108,"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":109,"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":110,"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":111,"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":112,"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":113,"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/helm.md","mtime":"2017-11-01T15:39:54.660Z","type":"markdown"},"gitbook":{"version":"3.2.2","time":"2017-11-14T05:45:49.463Z"},"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>