4319 lines
234 KiB
HTML
4319 lines
234 KiB
HTML
|
|
|||
|
<!DOCTYPE HTML>
|
|||
|
<html lang="zh-hans" >
|
|||
|
<head>
|
|||
|
<meta charset="UTF-8">
|
|||
|
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
|||
|
<title>Istio 教程 · Kubernetes Handbook - jimmysong.io</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-prism/prism-ghcolors.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="linkerd.html" />
|
|||
|
|
|||
|
|
|||
|
<link rel="prev" href="istio-community-tips.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">Jimmy Song</a>
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="divider"></li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">前言</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="1.1" data-path="../">
|
|||
|
|
|||
|
<a href="../">
|
|||
|
|
|||
|
|
|||
|
<b>1.1.</b>
|
|||
|
|
|||
|
序言
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="1.2" data-path="../cloud-native/cncf.html">
|
|||
|
|
|||
|
<a href="../cloud-native/cncf.html">
|
|||
|
|
|||
|
|
|||
|
<b>1.2.</b>
|
|||
|
|
|||
|
CNCF - 云原生计算基金会简介
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">云原生</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="2.1" data-path="../cloud-native/play-with-kubernetes.html">
|
|||
|
|
|||
|
<a href="../cloud-native/play-with-kubernetes.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.1.</b>
|
|||
|
|
|||
|
Play with Kubernetes
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.2" data-path="../cloud-native/kubernetes-and-cloud-native-app-overview.html">
|
|||
|
|
|||
|
<a href="../cloud-native/kubernetes-and-cloud-native-app-overview.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.2.</b>
|
|||
|
|
|||
|
Kubernetes与云原生应用概览
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="2.3" data-path="../cloud-native/from-kubernetes-to-cloud-native.html">
|
|||
|
|
|||
|
<a href="../cloud-native/from-kubernetes-to-cloud-native.html">
|
|||
|
|
|||
|
|
|||
|
<b>2.3.</b>
|
|||
|
|
|||
|
云原生应用之路——从Kubernetes到Cloud Native
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">概念与原理</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.1" data-path="../concepts/">
|
|||
|
|
|||
|
<a href="../concepts/">
|
|||
|
|
|||
|
|
|||
|
<b>3.1.</b>
|
|||
|
|
|||
|
Kubernetes架构
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.1.1" data-path="../concepts/concepts.html">
|
|||
|
|
|||
|
<a href="../concepts/concepts.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.1.1.</b>
|
|||
|
|
|||
|
设计理念
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.1.2" data-path="../concepts/etcd.html">
|
|||
|
|
|||
|
<a href="../concepts/etcd.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.1.2.</b>
|
|||
|
|
|||
|
Etcd解析
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.1.3" data-path="../concepts/open-interfaces.html">
|
|||
|
|
|||
|
<a href="../concepts/open-interfaces.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.1.3.</b>
|
|||
|
|
|||
|
开放接口
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.1.3.1" data-path="../concepts/cri.html">
|
|||
|
|
|||
|
<a href="../concepts/cri.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.1.3.1.</b>
|
|||
|
|
|||
|
CRI - Container Runtime Interface(容器运行时接口)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.1.3.2" data-path="../concepts/cni.html">
|
|||
|
|
|||
|
<a href="../concepts/cni.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.1.3.2.</b>
|
|||
|
|
|||
|
CNI - Container Network Interface(容器网络接口)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.1.3.3" data-path="../concepts/csi.html">
|
|||
|
|
|||
|
<a href="../concepts/csi.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.1.3.3.</b>
|
|||
|
|
|||
|
CSI - Container Storage Interface(容器存储接口)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.2" >
|
|||
|
|
|||
|
<span>
|
|||
|
|
|||
|
|
|||
|
<b>3.2.</b>
|
|||
|
|
|||
|
Kubernetes中的网络
|
|||
|
|
|||
|
</span>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.2.1" data-path="../concepts/networking.html">
|
|||
|
|
|||
|
<a href="../concepts/networking.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.2.1.</b>
|
|||
|
|
|||
|
Kubernetes中的网络解析——以flannel为例
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.2.2" data-path="../concepts/calico.html">
|
|||
|
|
|||
|
<a href="../concepts/calico.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.2.2.</b>
|
|||
|
|
|||
|
Kubernetes中的网络解析——以calico为例
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.3" data-path="../concepts/objects.html">
|
|||
|
|
|||
|
<a href="../concepts/objects.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.3.</b>
|
|||
|
|
|||
|
资源对象与基本概念解析
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4" data-path="../concepts/pod-state-and-lifecycle.html">
|
|||
|
|
|||
|
<a href="../concepts/pod-state-and-lifecycle.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.</b>
|
|||
|
|
|||
|
Pod状态与生命周期管理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.1" data-path="../concepts/pod-overview.html">
|
|||
|
|
|||
|
<a href="../concepts/pod-overview.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.1.</b>
|
|||
|
|
|||
|
Pod概览
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.2" data-path="../concepts/pod.html">
|
|||
|
|
|||
|
<a href="../concepts/pod.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.2.</b>
|
|||
|
|
|||
|
Pod解析
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.3" data-path="../concepts/init-containers.html">
|
|||
|
|
|||
|
<a href="../concepts/init-containers.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.3.</b>
|
|||
|
|
|||
|
Init容器
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.4" data-path="../concepts/pause-container.html">
|
|||
|
|
|||
|
<a href="../concepts/pause-container.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.4.</b>
|
|||
|
|
|||
|
Pause容器
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.5" data-path="../concepts/pod-security-policy.html">
|
|||
|
|
|||
|
<a href="../concepts/pod-security-policy.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.5.</b>
|
|||
|
|
|||
|
Pod安全策略
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.6" data-path="../concepts/pod-lifecycle.html">
|
|||
|
|
|||
|
<a href="../concepts/pod-lifecycle.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.6.</b>
|
|||
|
|
|||
|
Pod的生命周期
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.7" data-path="../concepts/pod-hook.html">
|
|||
|
|
|||
|
<a href="../concepts/pod-hook.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.7.</b>
|
|||
|
|
|||
|
Pod Hook
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.8" data-path="../concepts/pod-preset.html">
|
|||
|
|
|||
|
<a href="../concepts/pod-preset.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.8.</b>
|
|||
|
|
|||
|
Pod Preset
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.4.9" data-path="../concepts/pod-disruption-budget.html">
|
|||
|
|
|||
|
<a href="../concepts/pod-disruption-budget.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.4.9.</b>
|
|||
|
|
|||
|
Pod中断与PDB(Pod中断预算)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.5" data-path="../concepts/cluster.html">
|
|||
|
|
|||
|
<a href="../concepts/cluster.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.5.</b>
|
|||
|
|
|||
|
集群资源管理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.5.1" data-path="../concepts/node.html">
|
|||
|
|
|||
|
<a href="../concepts/node.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.5.1.</b>
|
|||
|
|
|||
|
Node
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.5.2" data-path="../concepts/namespace.html">
|
|||
|
|
|||
|
<a href="../concepts/namespace.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.5.2.</b>
|
|||
|
|
|||
|
Namespace
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.5.3" data-path="../concepts/label.html">
|
|||
|
|
|||
|
<a href="../concepts/label.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.5.3.</b>
|
|||
|
|
|||
|
Label
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.5.4" data-path="../concepts/annotation.html">
|
|||
|
|
|||
|
<a href="../concepts/annotation.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.5.4.</b>
|
|||
|
|
|||
|
Annotation
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.5.5" data-path="../concepts/taint-and-toleration.html">
|
|||
|
|
|||
|
<a href="../concepts/taint-and-toleration.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.5.5.</b>
|
|||
|
|
|||
|
Taint和Toleration(污点和容忍)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.5.6" data-path="../concepts/garbage-collection.html">
|
|||
|
|
|||
|
<a href="../concepts/garbage-collection.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.5.6.</b>
|
|||
|
|
|||
|
垃圾收集
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6" data-path="../concepts/controllers.html">
|
|||
|
|
|||
|
<a href="../concepts/controllers.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.</b>
|
|||
|
|
|||
|
控制器
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.1" data-path="../concepts/deployment.html">
|
|||
|
|
|||
|
<a href="../concepts/deployment.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.1.</b>
|
|||
|
|
|||
|
Deployment
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.2" data-path="../concepts/statefulset.html">
|
|||
|
|
|||
|
<a href="../concepts/statefulset.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.2.</b>
|
|||
|
|
|||
|
StatefulSet
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.3" data-path="../concepts/daemonset.html">
|
|||
|
|
|||
|
<a href="../concepts/daemonset.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.3.</b>
|
|||
|
|
|||
|
DaemonSet
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.4" data-path="../concepts/replicaset.html">
|
|||
|
|
|||
|
<a href="../concepts/replicaset.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.4.</b>
|
|||
|
|
|||
|
ReplicationController和ReplicaSet
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.5" data-path="../concepts/job.html">
|
|||
|
|
|||
|
<a href="../concepts/job.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.5.</b>
|
|||
|
|
|||
|
Job
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.6" data-path="../concepts/cronjob.html">
|
|||
|
|
|||
|
<a href="../concepts/cronjob.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.6.</b>
|
|||
|
|
|||
|
CronJob
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.7" data-path="../concepts/horizontal-pod-autoscaling.html">
|
|||
|
|
|||
|
<a href="../concepts/horizontal-pod-autoscaling.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.7.</b>
|
|||
|
|
|||
|
Horizontal Pod Autoscaling
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.6.7.1" data-path="../concepts/custom-metrics-hpa.html">
|
|||
|
|
|||
|
<a href="../concepts/custom-metrics-hpa.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.6.7.1.</b>
|
|||
|
|
|||
|
自定义指标HPA
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.7" data-path="../concepts/service-discovery.html">
|
|||
|
|
|||
|
<a href="../concepts/service-discovery.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.7.</b>
|
|||
|
|
|||
|
服务发现
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.7.1" data-path="../concepts/service.html">
|
|||
|
|
|||
|
<a href="../concepts/service.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.7.1.</b>
|
|||
|
|
|||
|
Service
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.7.2" data-path="../concepts/ingress.html">
|
|||
|
|
|||
|
<a href="../concepts/ingress.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.7.2.</b>
|
|||
|
|
|||
|
Ingress
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.7.2.1" data-path="../concepts/traefik-ingress-controller.html">
|
|||
|
|
|||
|
<a href="../concepts/traefik-ingress-controller.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.7.2.1.</b>
|
|||
|
|
|||
|
Traefik Ingress Controller
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.8" data-path="../concepts/authentication-and-permission.html">
|
|||
|
|
|||
|
<a href="../concepts/authentication-and-permission.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.8.</b>
|
|||
|
|
|||
|
身份与权限控制
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.8.1" data-path="../concepts/serviceaccount.html">
|
|||
|
|
|||
|
<a href="../concepts/serviceaccount.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.8.1.</b>
|
|||
|
|
|||
|
ServiceAccount
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.8.2" data-path="../concepts/rbac.html">
|
|||
|
|
|||
|
<a href="../concepts/rbac.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.8.2.</b>
|
|||
|
|
|||
|
RBAC——基于角色的访问控制
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.8.3" data-path="../concepts/network-policy.html">
|
|||
|
|
|||
|
<a href="../concepts/network-policy.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.8.3.</b>
|
|||
|
|
|||
|
NetworkPolicy
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9" data-path="../concepts/storage.html">
|
|||
|
|
|||
|
<a href="../concepts/storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.</b>
|
|||
|
|
|||
|
存储
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9.1" data-path="../concepts/secret.html">
|
|||
|
|
|||
|
<a href="../concepts/secret.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.1.</b>
|
|||
|
|
|||
|
Secret
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9.2" data-path="../concepts/configmap.html">
|
|||
|
|
|||
|
<a href="../concepts/configmap.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.2.</b>
|
|||
|
|
|||
|
ConfigMap
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9.2.1" data-path="../concepts/configmap-hot-update.html">
|
|||
|
|
|||
|
<a href="../concepts/configmap-hot-update.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.2.1.</b>
|
|||
|
|
|||
|
ConfigMap的热更新
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9.3" data-path="../concepts/volume.html">
|
|||
|
|
|||
|
<a href="../concepts/volume.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.3.</b>
|
|||
|
|
|||
|
Volume
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9.4" data-path="../concepts/persistent-volume.html">
|
|||
|
|
|||
|
<a href="../concepts/persistent-volume.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.4.</b>
|
|||
|
|
|||
|
Persistent Volume(持久化卷)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9.5" data-path="../concepts/storageclass.html">
|
|||
|
|
|||
|
<a href="../concepts/storageclass.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.5.</b>
|
|||
|
|
|||
|
Storage Class
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.9.6" data-path="../concepts/local-persistent-storage.html">
|
|||
|
|
|||
|
<a href="../concepts/local-persistent-storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.9.6.</b>
|
|||
|
|
|||
|
本地持久化存储
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.10" data-path="../concepts/extension.html">
|
|||
|
|
|||
|
<a href="../concepts/extension.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.10.</b>
|
|||
|
|
|||
|
集群扩展
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="3.10.1" data-path="../concepts/custom-resource.html">
|
|||
|
|
|||
|
<a href="../concepts/custom-resource.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.10.1.</b>
|
|||
|
|
|||
|
使用自定义资源扩展API
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.10.2" data-path="../concepts/aggregated-api-server.html">
|
|||
|
|
|||
|
<a href="../concepts/aggregated-api-server.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.10.2.</b>
|
|||
|
|
|||
|
Aggregated API Server
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.10.3" data-path="../concepts/apiservice.html">
|
|||
|
|
|||
|
<a href="../concepts/apiservice.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.10.3.</b>
|
|||
|
|
|||
|
APIService
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="3.11" data-path="../concepts/scheduling.html">
|
|||
|
|
|||
|
<a href="../concepts/scheduling.html">
|
|||
|
|
|||
|
|
|||
|
<b>3.11.</b>
|
|||
|
|
|||
|
资源调度
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">用户指南</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="4.1" data-path="../guide/">
|
|||
|
|
|||
|
<a href="../guide/">
|
|||
|
|
|||
|
|
|||
|
<b>4.1.</b>
|
|||
|
|
|||
|
用户指南
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.2" data-path="../guide/resource-configuration.html">
|
|||
|
|
|||
|
<a href="../guide/resource-configuration.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.2.</b>
|
|||
|
|
|||
|
资源对象配置
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="4.2.1" data-path="../guide/configure-liveness-readiness-probes.html">
|
|||
|
|
|||
|
<a href="../guide/configure-liveness-readiness-probes.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.2.1.</b>
|
|||
|
|
|||
|
配置Pod的liveness和readiness探针
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.2.2" data-path="../guide/configure-pod-service-account.html">
|
|||
|
|
|||
|
<a href="../guide/configure-pod-service-account.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.2.2.</b>
|
|||
|
|
|||
|
配置Pod的Service Account
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.2.3" data-path="../guide/secret-configuration.html">
|
|||
|
|
|||
|
<a href="../guide/secret-configuration.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.2.3.</b>
|
|||
|
|
|||
|
Secret配置
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.2.4" data-path="../guide/resource-quota-management.html">
|
|||
|
|
|||
|
<a href="../guide/resource-quota-management.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.2.4.</b>
|
|||
|
|
|||
|
管理namespace中的资源配额
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.3" data-path="../guide/command-usage.html">
|
|||
|
|
|||
|
<a href="../guide/command-usage.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.3.</b>
|
|||
|
|
|||
|
命令使用
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="4.3.1" data-path="../guide/docker-cli-to-kubectl.html">
|
|||
|
|
|||
|
<a href="../guide/docker-cli-to-kubectl.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.3.1.</b>
|
|||
|
|
|||
|
docker用户过度到kubectl命令行指南
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.3.2" data-path="../guide/using-kubectl.html">
|
|||
|
|
|||
|
<a href="../guide/using-kubectl.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.3.2.</b>
|
|||
|
|
|||
|
kubectl命令概览
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.3.3" data-path="../guide/kubectl-cheatsheet.html">
|
|||
|
|
|||
|
<a href="../guide/kubectl-cheatsheet.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.3.3.</b>
|
|||
|
|
|||
|
kubectl命令技巧大全
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.3.4" data-path="../guide/using-etcdctl-to-access-kubernetes-data.html">
|
|||
|
|
|||
|
<a href="../guide/using-etcdctl-to-access-kubernetes-data.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.3.4.</b>
|
|||
|
|
|||
|
使用etcdctl访问kubernetes数据
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4" data-path="../guide/cluster-security-management.html">
|
|||
|
|
|||
|
<a href="../guide/cluster-security-management.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.</b>
|
|||
|
|
|||
|
集群安全性管理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.1" data-path="../guide/managing-tls-in-a-cluster.html">
|
|||
|
|
|||
|
<a href="../guide/managing-tls-in-a-cluster.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.1.</b>
|
|||
|
|
|||
|
管理集群中的TLS
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.2" data-path="../guide/kubelet-authentication-authorization.html">
|
|||
|
|
|||
|
<a href="../guide/kubelet-authentication-authorization.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.2.</b>
|
|||
|
|
|||
|
kubelet的认证授权
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.3" data-path="../guide/tls-bootstrapping.html">
|
|||
|
|
|||
|
<a href="../guide/tls-bootstrapping.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.3.</b>
|
|||
|
|
|||
|
TLS bootstrap
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.4" data-path="../guide/kubectl-user-authentication-authorization.html">
|
|||
|
|
|||
|
<a href="../guide/kubectl-user-authentication-authorization.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.4.</b>
|
|||
|
|
|||
|
创建用户认证授权的kubeconfig文件
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.5" data-path="../guide/ip-masq-agent.html">
|
|||
|
|
|||
|
<a href="../guide/ip-masq-agent.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.5.</b>
|
|||
|
|
|||
|
IP伪装代理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.6" data-path="../guide/auth-with-kubeconfig-or-token.html">
|
|||
|
|
|||
|
<a href="../guide/auth-with-kubeconfig-or-token.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.6.</b>
|
|||
|
|
|||
|
使用kubeconfig或token进行用户身份认证
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.4.7" data-path="../guide/authentication.html">
|
|||
|
|
|||
|
<a href="../guide/authentication.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.4.7.</b>
|
|||
|
|
|||
|
Kubernetes中的用户与身份认证授权
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5" data-path="../guide/access-kubernetes-cluster.html">
|
|||
|
|
|||
|
<a href="../guide/access-kubernetes-cluster.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.</b>
|
|||
|
|
|||
|
访问Kubernetes集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.1" data-path="../guide/access-cluster.html">
|
|||
|
|
|||
|
<a href="../guide/access-cluster.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.1.</b>
|
|||
|
|
|||
|
访问集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.2" data-path="../guide/authenticate-across-clusters-kubeconfig.html">
|
|||
|
|
|||
|
<a href="../guide/authenticate-across-clusters-kubeconfig.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.2.</b>
|
|||
|
|
|||
|
使用kubeconfig文件配置跨集群认证
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.3" data-path="../guide/connecting-to-applications-port-forward.html">
|
|||
|
|
|||
|
<a href="../guide/connecting-to-applications-port-forward.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.3.</b>
|
|||
|
|
|||
|
通过端口转发访问集群中的应用程序
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.4" data-path="../guide/service-access-application-cluster.html">
|
|||
|
|
|||
|
<a href="../guide/service-access-application-cluster.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.4.</b>
|
|||
|
|
|||
|
使用service访问群集中的应用程序
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.5" data-path="../guide/accessing-kubernetes-pods-from-outside-of-the-cluster.html">
|
|||
|
|
|||
|
<a href="../guide/accessing-kubernetes-pods-from-outside-of-the-cluster.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.5.</b>
|
|||
|
|
|||
|
从外部访问Kubernetes中的Pod
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.6" data-path="../guide/cabin-mobile-dashboard-for-kubernetes.html">
|
|||
|
|
|||
|
<a href="../guide/cabin-mobile-dashboard-for-kubernetes.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.6.</b>
|
|||
|
|
|||
|
Cabin - Kubernetes手机客户端
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.7" data-path="../guide/kubernetes-desktop-client.html">
|
|||
|
|
|||
|
<a href="../guide/kubernetes-desktop-client.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.7.</b>
|
|||
|
|
|||
|
Kubernetic - Kubernetes桌面客户端
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.5.8" data-path="../guide/kubernator-kubernetes-ui.html">
|
|||
|
|
|||
|
<a href="../guide/kubernator-kubernetes-ui.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.5.8.</b>
|
|||
|
|
|||
|
Kubernator - 更底层的Kubernetes UI
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.6" data-path="../guide/application-development-deployment-flow.html">
|
|||
|
|
|||
|
<a href="../guide/application-development-deployment-flow.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.6.</b>
|
|||
|
|
|||
|
在Kubernetes中开发部署应用
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="4.6.1" data-path="../guide/deploy-applications-in-kubernetes.html">
|
|||
|
|
|||
|
<a href="../guide/deploy-applications-in-kubernetes.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.6.1.</b>
|
|||
|
|
|||
|
适用于kubernetes的应用开发部署流程
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.6.2" data-path="../guide/migrating-hadoop-yarn-to-kubernetes.html">
|
|||
|
|
|||
|
<a href="../guide/migrating-hadoop-yarn-to-kubernetes.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.6.2.</b>
|
|||
|
|
|||
|
迁移传统应用到Kubernetes中——以Hadoop YARN为例
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="4.6.3" data-path="../guide/using-statefulset.html">
|
|||
|
|
|||
|
<a href="../guide/using-statefulset.html">
|
|||
|
|
|||
|
|
|||
|
<b>4.6.3.</b>
|
|||
|
|
|||
|
使用StatefulSet部署用状态应用
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">最佳实践</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.1" data-path="../practice/">
|
|||
|
|
|||
|
<a href="../practice/">
|
|||
|
|
|||
|
|
|||
|
<b>5.1.</b>
|
|||
|
|
|||
|
最佳实践概览
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2" data-path="../practice/install-kubernetes-on-centos.html">
|
|||
|
|
|||
|
<a href="../practice/install-kubernetes-on-centos.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.</b>
|
|||
|
|
|||
|
在CentOS上部署Kubernetes集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.1" data-path="../practice/create-tls-and-secret-key.html">
|
|||
|
|
|||
|
<a href="../practice/create-tls-and-secret-key.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.1.</b>
|
|||
|
|
|||
|
创建TLS证书和秘钥
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.2" data-path="../practice/create-kubeconfig.html">
|
|||
|
|
|||
|
<a href="../practice/create-kubeconfig.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.2.</b>
|
|||
|
|
|||
|
创建kubeconfig文件
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.3" data-path="../practice/etcd-cluster-installation.html">
|
|||
|
|
|||
|
<a href="../practice/etcd-cluster-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.3.</b>
|
|||
|
|
|||
|
创建高可用etcd集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.4" data-path="../practice/kubectl-installation.html">
|
|||
|
|
|||
|
<a href="../practice/kubectl-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.4.</b>
|
|||
|
|
|||
|
安装kubectl命令行工具
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.5" data-path="../practice/master-installation.html">
|
|||
|
|
|||
|
<a href="../practice/master-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.5.</b>
|
|||
|
|
|||
|
部署master节点
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.6" data-path="../practice/flannel-installation.html">
|
|||
|
|
|||
|
<a href="../practice/flannel-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.6.</b>
|
|||
|
|
|||
|
安装flannel网络插件
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.7" data-path="../practice/node-installation.html">
|
|||
|
|
|||
|
<a href="../practice/node-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.7.</b>
|
|||
|
|
|||
|
部署node节点
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.8" data-path="../practice/kubedns-addon-installation.html">
|
|||
|
|
|||
|
<a href="../practice/kubedns-addon-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.8.</b>
|
|||
|
|
|||
|
安装kubedns插件
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.9" data-path="../practice/dashboard-addon-installation.html">
|
|||
|
|
|||
|
<a href="../practice/dashboard-addon-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.9.</b>
|
|||
|
|
|||
|
安装dashboard插件
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.10" data-path="../practice/heapster-addon-installation.html">
|
|||
|
|
|||
|
<a href="../practice/heapster-addon-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.10.</b>
|
|||
|
|
|||
|
安装heapster插件
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.2.11" data-path="../practice/efk-addon-installation.html">
|
|||
|
|
|||
|
<a href="../practice/efk-addon-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.2.11.</b>
|
|||
|
|
|||
|
安装EFK插件
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.3" data-path="../practice/install-kubernetes-with-kubeadm.html">
|
|||
|
|
|||
|
<a href="../practice/install-kubernetes-with-kubeadm.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.3.</b>
|
|||
|
|
|||
|
使用kubeadm快速构建测试集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.3.1" data-path="../practice/install-kubernetes-on-ubuntu-server-16.04-with-kubeadm.html">
|
|||
|
|
|||
|
<a href="../practice/install-kubernetes-on-ubuntu-server-16.04-with-kubeadm.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.3.1.</b>
|
|||
|
|
|||
|
使用kubeadm在Ubuntu Server 16.04上快速构建测试集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4" data-path="../practice/service-discovery-and-loadbalancing.html">
|
|||
|
|
|||
|
<a href="../practice/service-discovery-and-loadbalancing.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.</b>
|
|||
|
|
|||
|
服务发现与负载均衡
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4.1" data-path="../practice/traefik-ingress-installation.html">
|
|||
|
|
|||
|
<a href="../practice/traefik-ingress-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.1.</b>
|
|||
|
|
|||
|
安装Traefik ingress
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4.2" data-path="../practice/distributed-load-test.html">
|
|||
|
|
|||
|
<a href="../practice/distributed-load-test.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.2.</b>
|
|||
|
|
|||
|
分布式负载测试
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4.3" data-path="../practice/network-and-cluster-perfermance-test.html">
|
|||
|
|
|||
|
<a href="../practice/network-and-cluster-perfermance-test.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.3.</b>
|
|||
|
|
|||
|
网络和集群性能测试
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4.4" data-path="../practice/edge-node-configuration.html">
|
|||
|
|
|||
|
<a href="../practice/edge-node-configuration.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.4.</b>
|
|||
|
|
|||
|
边缘节点配置
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4.5" data-path="../practice/nginx-ingress-installation.html">
|
|||
|
|
|||
|
<a href="../practice/nginx-ingress-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.5.</b>
|
|||
|
|
|||
|
安装Nginx ingress
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.4.6" data-path="../practice/configuring-dns.html">
|
|||
|
|
|||
|
<a href="../practice/configuring-dns.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.4.6.</b>
|
|||
|
|
|||
|
配置内置DNS(kube-dns)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5" data-path="../practice/operation.html">
|
|||
|
|
|||
|
<a href="../practice/operation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.</b>
|
|||
|
|
|||
|
运维管理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.1" data-path="../practice/master-ha.html">
|
|||
|
|
|||
|
<a href="../practice/master-ha.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.1.</b>
|
|||
|
|
|||
|
Master节点高可用
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.2" data-path="../practice/service-rolling-update.html">
|
|||
|
|
|||
|
<a href="../practice/service-rolling-update.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.2.</b>
|
|||
|
|
|||
|
服务滚动升级
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.3" data-path="../practice/app-log-collection.html">
|
|||
|
|
|||
|
<a href="../practice/app-log-collection.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.3.</b>
|
|||
|
|
|||
|
应用日志收集
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.4" data-path="../practice/configuration-best-practice.html">
|
|||
|
|
|||
|
<a href="../practice/configuration-best-practice.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.4.</b>
|
|||
|
|
|||
|
配置最佳实践
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.5" data-path="../practice/monitor.html">
|
|||
|
|
|||
|
<a href="../practice/monitor.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.5.</b>
|
|||
|
|
|||
|
集群及应用监控
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.6" data-path="../practice/data-persistence-problem.html">
|
|||
|
|
|||
|
<a href="../practice/data-persistence-problem.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.6.</b>
|
|||
|
|
|||
|
数据持久化问题
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.7" data-path="../practice/manage-compute-resources-container.html">
|
|||
|
|
|||
|
<a href="../practice/manage-compute-resources-container.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.7.</b>
|
|||
|
|
|||
|
管理容器的计算资源
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.5.8" data-path="../practice/federation.html">
|
|||
|
|
|||
|
<a href="../practice/federation.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.5.8.</b>
|
|||
|
|
|||
|
集群联邦
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6" data-path="../practice/storage.html">
|
|||
|
|
|||
|
<a href="../practice/storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.</b>
|
|||
|
|
|||
|
存储管理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.1" data-path="../practice/glusterfs.html">
|
|||
|
|
|||
|
<a href="../practice/glusterfs.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.1.</b>
|
|||
|
|
|||
|
GlusterFS
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.1.1" data-path="../practice/using-glusterfs-for-persistent-storage.html">
|
|||
|
|
|||
|
<a href="../practice/using-glusterfs-for-persistent-storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.1.1.</b>
|
|||
|
|
|||
|
使用GlusterFS做持久化存储
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.1.2" data-path="../practice/using-heketi-gluster-for-persistent-storage.html">
|
|||
|
|
|||
|
<a href="../practice/using-heketi-gluster-for-persistent-storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.1.2.</b>
|
|||
|
|
|||
|
使用Heketi作为kubernetes的持久存储GlusterFS的external provisioner
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.1.3" data-path="../practice/storage-for-containers-using-glusterfs-with-openshift.html">
|
|||
|
|
|||
|
<a href="../practice/storage-for-containers-using-glusterfs-with-openshift.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.1.3.</b>
|
|||
|
|
|||
|
在OpenShift中使用GlusterFS做持久化存储
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.2" data-path="../practice/ceph.html">
|
|||
|
|
|||
|
<a href="../practice/ceph.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.2.</b>
|
|||
|
|
|||
|
Ceph
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.2.1" data-path="../practice/using-ceph-for-persistent-storage.html">
|
|||
|
|
|||
|
<a href="../practice/using-ceph-for-persistent-storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.2.1.</b>
|
|||
|
|
|||
|
使用Ceph做持久化存储
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.3" data-path="../practice/openebs.html">
|
|||
|
|
|||
|
<a href="../practice/openebs.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.3.</b>
|
|||
|
|
|||
|
OpenEBS
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.3.1" data-path="../practice/using-openebs-for-persistent-storage.html">
|
|||
|
|
|||
|
<a href="../practice/using-openebs-for-persistent-storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.3.1.</b>
|
|||
|
|
|||
|
使用OpenEBS做持久化存储
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.4" data-path="../practice/rook.html">
|
|||
|
|
|||
|
<a href="../practice/rook.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.4.</b>
|
|||
|
|
|||
|
Rook
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.5" data-path="../practice/nfs.html">
|
|||
|
|
|||
|
<a href="../practice/nfs.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.5.</b>
|
|||
|
|
|||
|
NFS
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.6.5.1" data-path="../practice/using-nfs-for-persistent-storage.html">
|
|||
|
|
|||
|
<a href="../practice/using-nfs-for-persistent-storage.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.6.5.1.</b>
|
|||
|
|
|||
|
利用NFS动态提供Kubernetes后端存储卷
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.7" data-path="../practice/monitoring.html">
|
|||
|
|
|||
|
<a href="../practice/monitoring.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.7.</b>
|
|||
|
|
|||
|
集群与应用监控
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.7.1" data-path="../practice/heapster.html">
|
|||
|
|
|||
|
<a href="../practice/heapster.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.7.1.</b>
|
|||
|
|
|||
|
Heapster
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.7.1.1" data-path="../practice/using-heapster-to-get-object-metrics.html">
|
|||
|
|
|||
|
<a href="../practice/using-heapster-to-get-object-metrics.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.7.1.1.</b>
|
|||
|
|
|||
|
使用Heapster获取集群和对象的metric数据
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.7.2" data-path="../practice/prometheus.html">
|
|||
|
|
|||
|
<a href="../practice/prometheus.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.7.2.</b>
|
|||
|
|
|||
|
Prometheus
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.7.2.1" data-path="../practice/using-prometheus-to-monitor-kuberentes-cluster.html">
|
|||
|
|
|||
|
<a href="../practice/using-prometheus-to-monitor-kuberentes-cluster.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.7.2.1.</b>
|
|||
|
|
|||
|
使用Prometheus监控kubernetes集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.8" data-path="../practice/services-management-tool.html">
|
|||
|
|
|||
|
<a href="../practice/services-management-tool.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.8.</b>
|
|||
|
|
|||
|
服务编排管理
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.8.1" data-path="../practice/helm.html">
|
|||
|
|
|||
|
<a href="../practice/helm.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.8.1.</b>
|
|||
|
|
|||
|
使用Helm管理kubernetes应用
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.8.2" data-path="../practice/create-private-charts-repo.html">
|
|||
|
|
|||
|
<a href="../practice/create-private-charts-repo.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.8.2.</b>
|
|||
|
|
|||
|
构建私有Chart仓库
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.9" data-path="../practice/ci-cd.html">
|
|||
|
|
|||
|
<a href="../practice/ci-cd.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.9.</b>
|
|||
|
|
|||
|
持续集成与发布
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.9.1" data-path="../practice/jenkins-ci-cd.html">
|
|||
|
|
|||
|
<a href="../practice/jenkins-ci-cd.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.9.1.</b>
|
|||
|
|
|||
|
使用Jenkins进行持续集成与发布
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.9.2" data-path="../practice/drone-ci-cd.html">
|
|||
|
|
|||
|
<a href="../practice/drone-ci-cd.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.9.2.</b>
|
|||
|
|
|||
|
使用Drone进行持续集成与发布
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.10" data-path="../practice/update-and-upgrade.html">
|
|||
|
|
|||
|
<a href="../practice/update-and-upgrade.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.10.</b>
|
|||
|
|
|||
|
更新与升级
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="5.10.1" data-path="../practice/manually-upgrade.html">
|
|||
|
|
|||
|
<a href="../practice/manually-upgrade.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.10.1.</b>
|
|||
|
|
|||
|
手动升级Kubernetes集群
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="5.10.2" data-path="../practice/dashboard-upgrade.html">
|
|||
|
|
|||
|
<a href="../practice/dashboard-upgrade.html">
|
|||
|
|
|||
|
|
|||
|
<b>5.10.2.</b>
|
|||
|
|
|||
|
升级dashboard
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">领域应用</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.1" data-path="./">
|
|||
|
|
|||
|
<a href="./">
|
|||
|
|
|||
|
|
|||
|
<b>6.1.</b>
|
|||
|
|
|||
|
领域应用概览
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.2" data-path="microservices.html">
|
|||
|
|
|||
|
<a href="microservices.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.2.</b>
|
|||
|
|
|||
|
微服务架构
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.2.1" data-path="service-discovery-in-microservices.html">
|
|||
|
|
|||
|
<a href="service-discovery-in-microservices.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.2.1.</b>
|
|||
|
|
|||
|
微服务中的服务发现
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.2.2" data-path="microservices-for-java-developers.html">
|
|||
|
|
|||
|
<a href="microservices-for-java-developers.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.2.2.</b>
|
|||
|
|
|||
|
使用Java构建微服务并发布到Kubernetes平台
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.2.2.1" data-path="spring-boot-quick-start-guide.html">
|
|||
|
|
|||
|
<a href="spring-boot-quick-start-guide.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.2.2.1.</b>
|
|||
|
|
|||
|
Spring Boot快速开始指南
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3" data-path="service-mesh.html">
|
|||
|
|
|||
|
<a href="service-mesh.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.</b>
|
|||
|
|
|||
|
Service Mesh 服务网格
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.1" data-path="istio.html">
|
|||
|
|
|||
|
<a href="istio.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.1.</b>
|
|||
|
|
|||
|
Istio
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.1.1" data-path="istio-installation.html">
|
|||
|
|
|||
|
<a href="istio-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.1.1.</b>
|
|||
|
|
|||
|
安装并试用Istio service mesh
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.1.2" data-path="configuring-request-routing.html">
|
|||
|
|
|||
|
<a href="configuring-request-routing.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.1.2.</b>
|
|||
|
|
|||
|
配置请求的路由规则
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.1.3" data-path="install-and-expand-istio-mesh.html">
|
|||
|
|
|||
|
<a href="install-and-expand-istio-mesh.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.1.3.</b>
|
|||
|
|
|||
|
安装和拓展Istio service mesh
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.1.4" data-path="integrating-vms.html">
|
|||
|
|
|||
|
<a href="integrating-vms.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.1.4.</b>
|
|||
|
|
|||
|
集成虚拟机
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.1.5" data-path="sidecar-spec-in-istio.html">
|
|||
|
|
|||
|
<a href="sidecar-spec-in-istio.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.1.5.</b>
|
|||
|
|
|||
|
Istio中sidecar的注入规范及示例
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.1.6" data-path="istio-community-tips.html">
|
|||
|
|
|||
|
<a href="istio-community-tips.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.1.6.</b>
|
|||
|
|
|||
|
如何参与Istio社区及注意事项
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter active" data-level="6.3.1.7" data-path="istio-tutorial.html">
|
|||
|
|
|||
|
<a href="istio-tutorial.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.1.7.</b>
|
|||
|
|
|||
|
Istio 教程
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.2" data-path="linkerd.html">
|
|||
|
|
|||
|
<a href="linkerd.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.2.</b>
|
|||
|
|
|||
|
Linkerd
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.2.1" data-path="linkerd-user-guide.html">
|
|||
|
|
|||
|
<a href="linkerd-user-guide.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.2.1.</b>
|
|||
|
|
|||
|
Linkerd 使用指南
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.3" data-path="conduit.html">
|
|||
|
|
|||
|
<a href="conduit.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.3.</b>
|
|||
|
|
|||
|
Conduit
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.3.1" data-path="conduit-overview.html">
|
|||
|
|
|||
|
<a href="conduit-overview.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.3.1.</b>
|
|||
|
|
|||
|
Condiut概览
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.3.3.2" data-path="conduit-installation.html">
|
|||
|
|
|||
|
<a href="conduit-installation.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.3.3.2.</b>
|
|||
|
|
|||
|
安装Conduit
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.4" data-path="big-data.html">
|
|||
|
|
|||
|
<a href="big-data.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.4.</b>
|
|||
|
|
|||
|
大数据
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.4.1" data-path="spark-standalone-on-kubernetes.html">
|
|||
|
|
|||
|
<a href="spark-standalone-on-kubernetes.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.4.1.</b>
|
|||
|
|
|||
|
Spark standalone on Kubernetes
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.4.2" data-path="running-spark-with-kubernetes-native-scheduler.html">
|
|||
|
|
|||
|
<a href="running-spark-with-kubernetes-native-scheduler.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.4.2.</b>
|
|||
|
|
|||
|
运行支持Kubernetes原生调度的Spark程序
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.5" data-path="serverless.html">
|
|||
|
|
|||
|
<a href="serverless.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.5.</b>
|
|||
|
|
|||
|
Serverless架构
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.5.1" data-path="understanding-serverless.html">
|
|||
|
|
|||
|
<a href="understanding-serverless.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.5.1.</b>
|
|||
|
|
|||
|
理解Serverless
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.5.2" data-path="faas.html">
|
|||
|
|
|||
|
<a href="faas.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.5.2.</b>
|
|||
|
|
|||
|
FaaS-函数即服务
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="6.5.2.1" data-path="openfaas-quick-start.html">
|
|||
|
|
|||
|
<a href="openfaas-quick-start.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.5.2.1.</b>
|
|||
|
|
|||
|
OpenFaaS快速入门指南
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.6" data-path="edge-computing.html">
|
|||
|
|
|||
|
<a href="edge-computing.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.6.</b>
|
|||
|
|
|||
|
边缘计算
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="6.7" data-path="ai.html">
|
|||
|
|
|||
|
<a href="ai.html">
|
|||
|
|
|||
|
|
|||
|
<b>6.7.</b>
|
|||
|
|
|||
|
人工智能
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">开发指南</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="7.1" data-path="../develop/">
|
|||
|
|
|||
|
<a href="../develop/">
|
|||
|
|
|||
|
|
|||
|
<b>7.1.</b>
|
|||
|
|
|||
|
开发指南概览
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.2" data-path="../develop/sigs-and-working-group.html">
|
|||
|
|
|||
|
<a href="../develop/sigs-and-working-group.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.2.</b>
|
|||
|
|
|||
|
SIG和工作组
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.3" data-path="../develop/developing-environment.html">
|
|||
|
|
|||
|
<a href="../develop/developing-environment.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.3.</b>
|
|||
|
|
|||
|
开发环境搭建
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.4" data-path="../develop/using-vagrant-and-virtualbox-for-development.html">
|
|||
|
|
|||
|
<a href="../develop/using-vagrant-and-virtualbox-for-development.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.4.</b>
|
|||
|
|
|||
|
本地分布式开发环境搭建(使用Vagrant和Virtualbox)
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.5" data-path="../develop/testing.html">
|
|||
|
|
|||
|
<a href="../develop/testing.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.5.</b>
|
|||
|
|
|||
|
单元测试和集成测试
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.6" data-path="../develop/client-go-sample.html">
|
|||
|
|
|||
|
<a href="../develop/client-go-sample.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.6.</b>
|
|||
|
|
|||
|
client-go示例
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.7" data-path="../develop/operator.html">
|
|||
|
|
|||
|
<a href="../develop/operator.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.7.</b>
|
|||
|
|
|||
|
Operator
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.8" data-path="../develop/advance-developer.html">
|
|||
|
|
|||
|
<a href="../develop/advance-developer.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.8.</b>
|
|||
|
|
|||
|
高级开发指南
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.9" data-path="../develop/contribute.html">
|
|||
|
|
|||
|
<a href="../develop/contribute.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.9.</b>
|
|||
|
|
|||
|
社区贡献
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="7.10" data-path="../develop/minikube.html">
|
|||
|
|
|||
|
<a href="../develop/minikube.html">
|
|||
|
|
|||
|
|
|||
|
<b>7.10.</b>
|
|||
|
|
|||
|
Minikube
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="header">附录</li>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="8.1" data-path="../appendix/">
|
|||
|
|
|||
|
<a href="../appendix/">
|
|||
|
|
|||
|
|
|||
|
<b>8.1.</b>
|
|||
|
|
|||
|
附录说明
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.2" data-path="../appendix/debug-kubernetes-services.html">
|
|||
|
|
|||
|
<a href="../appendix/debug-kubernetes-services.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.2.</b>
|
|||
|
|
|||
|
Kubernetes中的应用故障排查
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.3" data-path="../appendix/material-share.html">
|
|||
|
|
|||
|
<a href="../appendix/material-share.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.3.</b>
|
|||
|
|
|||
|
Kubernetes相关资讯和情报链接
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.4" data-path="../appendix/docker-best-practice.html">
|
|||
|
|
|||
|
<a href="../appendix/docker-best-practice.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.4.</b>
|
|||
|
|
|||
|
Docker最佳实践
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.5" data-path="../appendix/tricks.html">
|
|||
|
|
|||
|
<a href="../appendix/tricks.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.5.</b>
|
|||
|
|
|||
|
使用技巧
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.6" data-path="../appendix/issues.html">
|
|||
|
|
|||
|
<a href="../appendix/issues.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.6.</b>
|
|||
|
|
|||
|
问题记录
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.7" data-path="../appendix/kubernetes-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.7.</b>
|
|||
|
|
|||
|
Kubernetes版本更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="8.7.1" data-path="../appendix/kubernetes-1.7-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-1.7-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.7.1.</b>
|
|||
|
|
|||
|
Kubernetes1.7更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.7.2" data-path="../appendix/kubernetes-1.8-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-1.8-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.7.2.</b>
|
|||
|
|
|||
|
Kubernetes1.8更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.7.3" data-path="../appendix/kubernetes-1.9-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-1.9-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.7.3.</b>
|
|||
|
|
|||
|
Kubernetes1.9更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.7.4" data-path="../appendix/kubernetes-1.10-changelog.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-1.10-changelog.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.7.4.</b>
|
|||
|
|
|||
|
Kubernetes1.10更新日志
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="chapter " data-level="8.8" data-path="../appendix/summary-and-outlook.html">
|
|||
|
|
|||
|
<a href="../appendix/summary-and-outlook.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.8.</b>
|
|||
|
|
|||
|
Kubernetes及云原生年度总结及展望
|
|||
|
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<ul class="articles">
|
|||
|
|
|||
|
|
|||
|
<li class="chapter " data-level="8.8.1" data-path="../appendix/kubernetes-and-cloud-native-summary-in-2017-and-outlook-for-2018.html">
|
|||
|
|
|||
|
<a href="../appendix/kubernetes-and-cloud-native-summary-in-2017-and-outlook-for-2018.html">
|
|||
|
|
|||
|
|
|||
|
<b>8.8.1.</b>
|
|||
|
|
|||
|
Kubernetes与云原生2017年年终总结及2018年展望
|
|||
|
|
|||
|
</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=".." >Istio 教程</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="istio-教程">Istio 教程</h1>
|
|||
|
<p>本文是 Istio 管理 Java 微服务的案例教程,使用的所有工具和软件全部基于开源方案,替换了 <a href="https://github.com/redhat-developer-demos/istio-tutorial" target="_blank">redhat-developer-demos/istio-tutorial</a> 中的 minishift 环境,使用 <a href="https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster" target="_blank">kubernetes-vagrant-centos-cluster</a> 替代,沿用了原有的微服务示例,使用 Zipkin 做分布式追踪而不是 Jaeger。</p>
|
|||
|
<p>本文中的代码和 YAML 文件见 <a href="https://github.com/rootsongjc/istio-tutorial" target="_blank">https://github.com/rootsongjc/istio-tutorial</a>。</p>
|
|||
|
<h2 id="准备环境">准备环境</h2>
|
|||
|
<p>在进行本教程前需要先准备以下工具和环境。</p>
|
|||
|
<ul>
|
|||
|
<li>8G 以上内存</li>
|
|||
|
<li>Vagrant 2.0+</li>
|
|||
|
<li>Virtualbox 5.0 +</li>
|
|||
|
<li>提前下载 kubernetes1.9.1 的 release 压缩包</li>
|
|||
|
</ul>
|
|||
|
<ul>
|
|||
|
<li>docker 1.12+</li>
|
|||
|
<li>kubectl 1.9.1+</li>
|
|||
|
<li>maven 3.5.2+</li>
|
|||
|
<li>istioctl 0.7.1</li>
|
|||
|
<li>git</li>
|
|||
|
<li>curl、gzip、tar</li>
|
|||
|
<li><a href="https://github.com/johanhaleby/kubetail" target="_blank">kubetail</a></li>
|
|||
|
<li><a href="https://github.com/JoeDog/siege" target="_blank">siege</a></li>
|
|||
|
</ul>
|
|||
|
<h2 id="安装-kubernetes">安装 Kubernetes</h2>
|
|||
|
<p>请参考 <a href="https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster" target="_blank">kubernetes-vagrant-centos-cluster</a> 在本地启动拥有三个节点的 kubernetes 集群。</p>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token function">git</span> clone https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster.git
|
|||
|
<span class="token function">cd</span> kubernetes-vagrant-centos-cluster
|
|||
|
vagrant up
|
|||
|
</code></pre>
|
|||
|
<h2 id="安装-istio">安装 Istio</h2>
|
|||
|
<p>在 <a href="https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster" target="_blank">kubernetes-vagrant-centos-cluster</a> 中的包含 Istio 0.7.1 的安装 YAML 文件,运行下面的命令安装 Istio。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl apply -f addon/istio/
|
|||
|
</code></pre>
|
|||
|
<p><strong>运行示例</strong></p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl apply -n default -f <span class="token operator"><</span><span class="token punctuation">(</span>istioctl kube-inject -f yaml/istio-bookinfo/bookinfo.yaml<span class="token punctuation">)</span>
|
|||
|
</code></pre>
|
|||
|
<p>在您自己的本地主机的<code>/etc/hosts</code>文件中增加如下配置项。</p>
|
|||
|
<pre class="language-"><code class="lang-ini">172.17.8.102 grafana.istio.jimmysong.io
|
|||
|
172.17.8.102 servicegraph.istio.jimmysong.io
|
|||
|
172.17.8.102 zipkin.istio.jimmysong.io
|
|||
|
</code></pre>
|
|||
|
<p>我们可以通过下面的URL地址访问以上的服务。</p>
|
|||
|
<table>
|
|||
|
<thead>
|
|||
|
<tr>
|
|||
|
<th>Service</th>
|
|||
|
<th>URL</th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr>
|
|||
|
<td>grafana</td>
|
|||
|
<td><a href="http://grafana.istio.jimmysong.io" target="_blank">http://grafana.istio.jimmysong.io</a></td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td>servicegraph</td>
|
|||
|
<td><a href="http://servicegraph.istio.jimmysong.io/dotviz" target="_blank">http://servicegraph.istio.jimmysong.io/dotviz</a>,<a href="http://servicegraph.istio.jimmysong.io/graph" target="_blank">http://servicegraph.istio.jimmysong.io/graph</a></td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td>zipkin</td>
|
|||
|
<td><a href="http://zipkin.istio.jimmysong.io" target="_blank">http://zipkin.istio.jimmysong.io</a></td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
<p>详细信息请参阅 <a href="https://istio.io/docs/guides/bookinfo.html" target="_blank">https://istio.io/docs/guides/bookinfo.html</a></p>
|
|||
|
<h2 id="部署示例应用">部署示例应用</h2>
|
|||
|
<p>在打包成镜像部署到 kubernetes 集群上运行之前,我们先在本地运行所有示例。</p>
|
|||
|
<p>本教程中三个服务之间的依赖关系如下:</p>
|
|||
|
<pre class="language-"><code class="lang-ini">customer → preference → recommendation
|
|||
|
</code></pre>
|
|||
|
<p><code>customer</code> 和 <code>preference</code> 微服务是基于 Spring Boot 构建的,<code>recommendation</code> 微服务是基于 <a href="https://vertx.io" target="_blank">vert.x</a> 构建的。</p>
|
|||
|
<p><code>customer</code> 和 <code>preference</code> 微服务的 <code>pom.xml</code> 文件中都引入了 OpenTracing 和 Jeager 的依赖。</p>
|
|||
|
<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span>
|
|||
|
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>io.opentracing.contrib<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span>
|
|||
|
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>opentracing-spring-cloud-starter<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span>
|
|||
|
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>0.1.7<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span>
|
|||
|
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span>
|
|||
|
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span>
|
|||
|
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>com.uber.jaeger<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span>
|
|||
|
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>jaeger-tracerresolver<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span>
|
|||
|
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>0.25.0<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span>
|
|||
|
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span>
|
|||
|
</code></pre>
|
|||
|
<h3 id="本地运行">本地运行</h3>
|
|||
|
<p>我们首先在本地确定所有的微服务都可以正常运行,然后再打包镜像在 kubernetes 集群上运行。</p>
|
|||
|
<h4 id="启动-jaeger">启动 Jaeger</h4>
|
|||
|
<p>使用 docker 来运行 jagger。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">docker run -d \
|
|||
|
--rm \
|
|||
|
-p5775:5775/udp \
|
|||
|
-p6831:6831/udp \
|
|||
|
-p6832:6832/udp \
|
|||
|
-p16686:16686 \
|
|||
|
-p14268:14268 \
|
|||
|
jaegertracing/all-in-one:1.3
|
|||
|
</code></pre>
|
|||
|
<p>Jaeger UI 地址 <a href="http://localhost:16686" target="_blank">http://localhost:16686</a></p>
|
|||
|
<h4 id="customer">Customer</h4>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token function">cd</span> customer/java/springboot
|
|||
|
JAEGER_SERVICE_NAME<span class="token operator">=</span>customer mvn \
|
|||
|
spring-boot:run \
|
|||
|
-Drun.arguments<span class="token operator">=</span><span class="token string">"--spring.config.location=src/main/resources/application-local.properties"</span>
|
|||
|
</code></pre>
|
|||
|
<p>服务访问地址: <a href="http://localhost:8280" target="_blank">http://localhost:8280</a></p>
|
|||
|
<h4 id="preference">Preference</h4>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token function">cd</span> preference/java/springboot
|
|||
|
JAEGER_SERVICE_NAME<span class="token operator">=</span>preference mvn \
|
|||
|
spring-boot:run \
|
|||
|
-Drun.arguments<span class="token operator">=</span><span class="token string">"--spring.config.location=src/main/resources/application-local.properties"</span>
|
|||
|
</code></pre>
|
|||
|
<p>服务访问地址:<a href="http://localhost:8180" target="_blank">http://localhost:8180</a></p>
|
|||
|
<h4 id="recommendation">Recommendation</h4>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token function">cd</span> recommendation/java/vertx
|
|||
|
mvn vertx:run
|
|||
|
</code></pre>
|
|||
|
<p>服务访问地址:<a href="http://localhost:8080" target="_blank">http://localhost:8080</a></p>
|
|||
|
<p>所有服务都启动之后,此时访问 <a href="http://localhost:8280" target="_blank">http://localhost:8280</a> 将会看到如下输出。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'unknown'</span><span class="token keyword">:</span> 1
|
|||
|
</code></pre>
|
|||
|
<p>每访问一次最后的数字就会加 1。</p>
|
|||
|
<h4 id="jaeger">Jaeger</h4>
|
|||
|
<p>此时访问 <a href="http://localhost:16686" target="_blank">http://localhost:16686</a> 将看到 Jaeger query UI,所有应用将 metrics 发送到 Jeager 中。</p>
|
|||
|
<p>可以在 Jaeger UI 中搜索 <code>customer</code> 和 <code>preference</code> service 的 trace 并查看每次请求的 tracing。</p>
|
|||
|
<figure id="fig6.3.1.7.1"><img src="../images/jaeger-query-ui.png" alt="Jaeger query UI"><figcaption>图片 - Jaeger query UI</figcaption></figure>
|
|||
|
<h3 id="构建镜像">构建镜像</h3>
|
|||
|
<p>在本地运行测试无误之后就可以构建镜像了。本教程中的容器镜像都是在 <a href="https://hub.docker.com/r/fabric8/java-jboss-openjdk8-jdk/~/dockerfile/" target="_blank">fabric8/java-jboss-openjdk8-jdk</a> 的基础上构建的。只要将 Java 应用构建出 Jar 包然后放到 <code>/deployments</code> 目录下基础镜像就可以自动帮我们运行,所以我们看到着几个应用的 <code>Dockerfile</code> 文件中都没有执行入口,真正的执行入口是 <a href="https://github.com/fabric8io-images/java/blob/master/images/jboss/openjdk8/jdk/run-java.sh" target="_blank">run-java.sh</a>。</p>
|
|||
|
<h4 id="customer">Customer</h4>
|
|||
|
<p>构建 Customer 镜像。</p>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token function">cd</span> customer/java/springboot
|
|||
|
mvn clean package
|
|||
|
docker build -t jimmysong/istio-tutorial-customer:v1 <span class="token keyword">.</span>
|
|||
|
docker push jimmysong/istio-tutorial-customer:v1
|
|||
|
</code></pre>
|
|||
|
<p>第一次构建和上传需要花费一点时间,下一次构建就会很快。</p>
|
|||
|
<h4 id="preference">Preference</h4>
|
|||
|
<p>构建 Preference 镜像。</p>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token function">cd</span> preference/java/springboot
|
|||
|
mvn clean package
|
|||
|
docker build -t jimmysong/istio-tutorial-preference:v1 <span class="token keyword">.</span>
|
|||
|
docker push jimmysong/istio-tutorial-preference:v1
|
|||
|
</code></pre>
|
|||
|
<h4 id="recommendation">Recommendation</h4>
|
|||
|
<p>构建 Recommendation 镜像。</p>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token function">cd</span> recommendation/java/vertx
|
|||
|
mvn clean package
|
|||
|
docker build -t jimmysong/istio-tutorial-recommendation:v1 <span class="token keyword">.</span>
|
|||
|
docker push jimmysong/istio-tutorial-recommendation:v1
|
|||
|
</code></pre>
|
|||
|
<p>现在三个 docker 镜像都构建完成了,我们检查一下。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">$ docker images <span class="token operator">|</span> <span class="token function">grep</span> istio-tutorial
|
|||
|
REPOSITORY TAG IMAGE ID CREATED SIZE
|
|||
|
jimmysong/istio-tutorial-recommendation v1 d31dd858c300 51 seconds ago 443MB
|
|||
|
jimmysong/istio-tutorial-preference v1 e5f0be361477 6 minutes ago 459MB
|
|||
|
jimmysong/istio-tutorial-customer v1 d9601692673e 13 minutes ago 459MB
|
|||
|
</code></pre>
|
|||
|
<h3 id="部署到-kubernetes">部署到 Kubernetes</h3>
|
|||
|
<p>使用下面的命令将以上服务部署到 kubernetes。</p>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token comment" spellcheck="true"># create new namespace</span>
|
|||
|
kubectl create ns istio-tutorial
|
|||
|
|
|||
|
<span class="token comment" spellcheck="true"># deploy recommendation</span>
|
|||
|
kubectl apply -f <span class="token operator"><</span><span class="token punctuation">(</span>istioctl kube-inject -f recommendation/kubernetes/Deployment.yml<span class="token punctuation">)</span> -n istio-tutorial
|
|||
|
kubectl apply -f recommendation/kubernetes/Service.yml
|
|||
|
|
|||
|
<span class="token comment" spellcheck="true"># deploy preferrence</span>
|
|||
|
kubectl apply -f <span class="token operator"><</span><span class="token punctuation">(</span>istioctl kube-inject -f preference/kubernetes/Deployment.yml<span class="token punctuation">)</span> -n istio-tutorial
|
|||
|
kubectl apply -f preference/kubernetes/Service.yml
|
|||
|
|
|||
|
<span class="token comment" spellcheck="true"># deploy customer</span>
|
|||
|
kubectl apply -f <span class="token operator"><</span><span class="token punctuation">(</span>istioctl kube-inject -f customer/kubernetes/Deployment.yml<span class="token punctuation">)</span> -n istio-tutorial
|
|||
|
kubectl apply -f customer/kubernetes/Service.yml
|
|||
|
</code></pre>
|
|||
|
<p><strong>注意:</strong><code>preference</code> 和 <code>customer</code> 应用启动速度比较慢,我们将 livenessProb 配置中的 <code>initialDelaySeconds</code> 设置为 <strong>20</strong> 秒。</p>
|
|||
|
<p>查看 Pod 启动状态:</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl get pod -w -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<h3 id="增加-ingress-配置">增加 Ingress 配置</h3>
|
|||
|
<p>为了在 kubernetes 集群外部访问 customer 服务,我们需要增加 ingress 配置。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl apply -f ingress/ingress.yaml
|
|||
|
</code></pre>
|
|||
|
<p>修改本地的 <code>/etc/hosts</code> 文件,增加一条配置。</p>
|
|||
|
<pre class="language-"><code class="lang-ini">172.17.8.102 customer.istio-tutorial.jimmysong.io
|
|||
|
</code></pre>
|
|||
|
<p>现在访问 <a href="http://customer.istio-tutorial.jimmysong.io" target="_blank">http://customer.istio-tutorial.jimmysong.io</a> 将看到如下输出:</p>
|
|||
|
<pre class="language-"><code class="lang-ini"><span class="token constant">customer</span> <span class="token attr-value"><span class="token punctuation">=</span>> preference => recommendation v1 from '6fc97476f8-m2ntp': 1</span>
|
|||
|
</code></pre>
|
|||
|
<p>批量访问该地址。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">./bin/poll_customer.sh
|
|||
|
</code></pre>
|
|||
|
<p>访问 <a href="http://servicegraph.istio.jimmysong.io/dotviz" target="_blank">http://servicegraph.istio.jimmysong.io/dotviz</a> 查看服务的分布式追踪和依赖关系。</p>
|
|||
|
<figure id="fig6.3.1.7.2"><img src="../images/istio-tutorial-zipkin-trace.png" alt="分布式追踪"><figcaption>图片 - 分布式追踪</figcaption></figure>
|
|||
|
<figure id="fig6.3.1.7.3"><img src="../images/istio-tutorial-zipkin-dependency.png" alt="依赖关系"><figcaption>图片 - 依赖关系</figcaption></figure>
|
|||
|
<p>访问 <a href="http://servicegraph.istio.jimmysong.io/dotviz" target="_blank">http://servicegraph.istio.jimmysong.io/dotviz</a> 查看服务间的关系图和 QPS。</p>
|
|||
|
<figure id="fig6.3.1.7.4"><img src="../images/istio-tutorial-serivcegraph-dotviz.png" alt="服务关系图和QPS"><figcaption>图片 - 服务关系图和QPS</figcaption></figure>
|
|||
|
<p>访问 <a href="http://grafana.istio.jimmysong.io" target="_blank">http://grafana.istio.jimmysong.io</a> 查看 Service Mesh 的监控信息。</p>
|
|||
|
<figure id="fig6.3.1.7.5"><img src="../images/istio-tutorial-grafana.png" alt="Grafana 监控"><figcaption>图片 - Grafana 监控</figcaption></figure>
|
|||
|
<h2 id="istio-使用示例">Istio 使用示例</h2>
|
|||
|
<p>为了试用 Istio 中的各种功能,我们需要为应用构建多个版本,我们为 recommendation 构建 v2 版本的镜像,看看如何使用 Istio 控制微服务的流量。</p>
|
|||
|
<h3 id="构建-recommendationv2">构建 recommendation:v2</h3>
|
|||
|
<p>我们将构建新版的 <code>recommendation</code> 服务的镜像,并观察 <code>customer</code> 对不同版本的 <code>recommendataion</code> 服务的访问频率。</p>
|
|||
|
<p>修改 <code>recommendation/java/vertx/src/main/java/com/redhat/developer/demos/recommendation/RecommendationVerticle.java</code> 程序中代码。</p>
|
|||
|
<p>将 <code>private static final String RESPONSE_STRING_FORMAT = "recommendation v1 from '%s': %d\n";</code> 修改为 <code>private static final String RESPONSE_STRING_FORMAT = "recommendation v2 from '%s': %d\n";</code></p>
|
|||
|
<p>并构建 <code>recommendation:v2</code> 镜像。</p>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token function">cd</span> recommendation/java/vertx
|
|||
|
mvn clean package
|
|||
|
docker build -t jimmysong/istio-tutorial-recommendation:v2 <span class="token keyword">.</span>
|
|||
|
docker push jimmysong/istio-tutorial-recommendation:v2
|
|||
|
</code></pre>
|
|||
|
<p>将应用部署到 kubernetes。</p>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token comment" spellcheck="true"># deploy recommendation</span>
|
|||
|
kubectl apply -f <span class="token operator"><</span><span class="token punctuation">(</span>istioctl kube-inject -f recommendation/kubernetes/Deployment-v2.yml<span class="token punctuation">)</span> -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>现在再访问 <code>customer</code> 服务,将看到如下输出:</p>
|
|||
|
<pre class="language-"><code class="lang-bash">$ bin/poll_customer.sh
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'77b9f6cc68-5xs27'</span><span class="token keyword">:</span> 1
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 3581
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'77b9f6cc68-5xs27'</span><span class="token keyword">:</span> 2
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 3582
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'77b9f6cc68-5xs27'</span><span class="token keyword">:</span> 3
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 3583
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'77b9f6cc68-5xs27'</span><span class="token keyword">:</span> 4
|
|||
|
</code></pre>
|
|||
|
<p>我们可以看到 v1 和 v2 版本的 <code>recommendation</code> 服务会被间隔访问到。</p>
|
|||
|
<p>我们再将 v2 版本的 <code>recommendation</code> 实例数设置成 2 个。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl scale --replicas<span class="token operator">=</span>2 deployment/recommendation-v2 -n istio-tutorial
|
|||
|
kubectl get pod -w -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>观察 <code>recommendation-v2</code> Pod 达到两个之后再访问 <code>customer</code> 服务。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">$ bin/poll_customer.sh
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'77b9f6cc68-j9fgj'</span><span class="token keyword">:</span> 1
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'77b9f6cc68-5xs27'</span><span class="token keyword">:</span> 71
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 3651
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'77b9f6cc68-j9fgj'</span><span class="token keyword">:</span> 2
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'77b9f6cc68-5xs27'</span><span class="token keyword">:</span> 72
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 3652
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'77b9f6cc68-j9fgj'</span><span class="token keyword">:</span> 3
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'77b9f6cc68-5xs27'</span><span class="token keyword">:</span> 73
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 3653
|
|||
|
</code></pre>
|
|||
|
<p>观察输出中 v1 和 v2 版本 <code>recommendation</code> 的访问频率。</p>
|
|||
|
<p>将 <code>recommendataion</code> 服务的实例数恢复为 1。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl scale --replicas<span class="token operator">=</span>1 deployment/recommendation-v2
|
|||
|
</code></pre>
|
|||
|
<h3 id="修改-istio-routerules">修改 Istio RouteRules</h3>
|
|||
|
<p>以下所有路有规则都是针对 <code>recommendation</code> 服务,并在 repo 的根目录下执行。</p>
|
|||
|
<p><strong>将所有流量打给 v2</strong></p>
|
|||
|
<p>下面将演示如何动态的划分不同版本服务间的流量,将所有的流量都打到 <code>recommendation:v2</code>。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/route-rule-recommendation-v2.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>现在再访问 <code>customer</code> 服务将看到所有的流量都会打到 <code>recommendation:v2</code>。</p>
|
|||
|
<p>删除 RouteRules 后再访问 <code>customer</code> 服务将看到又恢复了 v1 和 v2 版本的 <code>recommendation</code> 服务的间隔访问。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl delete routerule recommendation-default
|
|||
|
</code></pre>
|
|||
|
<p><strong>切分流量</strong></p>
|
|||
|
<p>将 90% 的流量给 v1,10% 的流量给 v2。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/route-rule-recommendation-v1_and_v2.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>执行<code>bin/poll_customer.sh</code> 观察访问情况。</p>
|
|||
|
<p>要想动态切分流量只要修改 RouteRules 中的 <code>weight</code> 配置即可。</p>
|
|||
|
<pre class="language-"><code class="lang-yaml"><span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> config.istio.io/v1alpha2
|
|||
|
<span class="token key atrule">kind</span><span class="token punctuation">:</span> RouteRule
|
|||
|
<span class="token key atrule">metadata</span><span class="token punctuation">:</span>
|
|||
|
<span class="token key atrule">name</span><span class="token punctuation">:</span> recommendation<span class="token punctuation">-</span>v1<span class="token punctuation">-</span>v2
|
|||
|
<span class="token key atrule">spec</span><span class="token punctuation">:</span>
|
|||
|
<span class="token key atrule">destination</span><span class="token punctuation">:</span>
|
|||
|
<span class="token key atrule">namespace</span><span class="token punctuation">:</span> istio<span class="token punctuation">-</span>tutorial
|
|||
|
<span class="token key atrule">name</span><span class="token punctuation">:</span> recommendation
|
|||
|
<span class="token key atrule">precedence</span><span class="token punctuation">:</span> <span class="token number">5</span>
|
|||
|
<span class="token key atrule">route</span><span class="token punctuation">:</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token key atrule">labels</span><span class="token punctuation">:</span>
|
|||
|
<span class="token key atrule">version</span><span class="token punctuation">:</span> v1
|
|||
|
<span class="token key atrule">weight</span><span class="token punctuation">:</span> <span class="token number">90</span>
|
|||
|
<span class="token punctuation">-</span> <span class="token key atrule">labels</span><span class="token punctuation">:</span>
|
|||
|
<span class="token key atrule">version</span><span class="token punctuation">:</span> v2
|
|||
|
<span class="token key atrule">weight</span><span class="token punctuation">:</span> <span class="token number">10</span>
|
|||
|
</code></pre>
|
|||
|
<p>因为 RouteRule 有优先级,为了继续后面的实验,在验证完成后删除该 RouteRule。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl delete routerule recommendation-v1-v2 -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<h3 id="故障注入">故障注入</h3>
|
|||
|
<p>有时候我们为了增强系统的健壮性,需要对系统做混沌工程,故意注入故障,并保障服务可以自动处理这些故障。</p>
|
|||
|
<p><strong>注入 HTTP 503 错误</strong></p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/route-rule-recommendation-503.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>有 50% 的几率报 503 错误。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">$ bin/poll_customer.sh
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'77b9f6cc68-5xs27'</span><span class="token keyword">:</span> 135
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> 503 preference <span class="token operator">=</span><span class="token operator">></span> 503 fault filter abort
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 3860
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> 503 preference <span class="token operator">=</span><span class="token operator">></span> 503 fault filter abort
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> 503 preference <span class="token operator">=</span><span class="token operator">></span> 503 fault filter abort
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'77b9f6cc68-5xs27'</span><span class="token keyword">:</span> 136
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 3861
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> 503 preference <span class="token operator">=</span><span class="token operator">></span> 503 fault filter abort
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> 503 preference <span class="token operator">=</span><span class="token operator">></span> 503 fault filter abort
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'77b9f6cc68-5xs27'</span><span class="token keyword">:</span> 137
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> 503 preference <span class="token operator">=</span><span class="token operator">></span> 503 fault filter abort
|
|||
|
</code></pre>
|
|||
|
<p>清理 RouteRule。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl delete routerule recommendation-503 -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<h3 id="增加延迟">增加延迟</h3>
|
|||
|
<p>增加服务的访问延迟。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/route-rule-recommendation-delay.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>会有 50% 的几率访问 <code>recommendation</code> 服务有 7 秒的延迟。百分比和延迟时间可以在 RouteRule 中配置。</p>
|
|||
|
<p>清理 RouteRule。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl delete routerule recommendation-delay -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<h3 id="重试">重试</h3>
|
|||
|
<p>让服务不是直接失败,而是增加重试机制。</p>
|
|||
|
<p>我们下面将同时应用两条 RouteRule,让访问 <code>recommendation</code> 服务时有 50% 的几率出现 503 错误,并在出现错误的时候尝试访问 v2 版本,超时时间为 2 秒。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/route-rule-recommendation-v2_503.yml -n istio-tutorial
|
|||
|
istioctl create -f istiofiles/route-rule-recommendation-v2_retry.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>执行 <code>bin/poll_customer.sh</code> 我们看到一开始有些 503 错误,然后所有的流量都流向了 v2。</p>
|
|||
|
<p>清理 RouteRules。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl delete routerule recommendation-v2-retry -n istio-tutorial
|
|||
|
istioctl delete routerule recommendation-v2-503 -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<h3 id="超时">超时</h3>
|
|||
|
<p>设置超时时间,只有服务访问超时才认定服务访问失败。</p>
|
|||
|
<p>取消注释 <code>recommendation/java/vertx/src/main/java/com/redhat/developer/demos/recommendation/RecommendationVerticle.java</code> 中的下面一行,增加超时时间为 3 秒。</p>
|
|||
|
<pre class="language-"><code class="lang-java">router<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"/"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">handler</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token operator">:</span><span class="token operator">:</span>timeout<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|||
|
</code></pre>
|
|||
|
<p>重新生成镜像。</p>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token function">cd</span> recommendation/java/vertx
|
|||
|
mvn clean package
|
|||
|
docker build -t jimmysong/istio-tutorial-recommendation:v2 <span class="token keyword">.</span>
|
|||
|
docker push jimmysong/istio-tutorial-recommendation:v2
|
|||
|
</code></pre>
|
|||
|
<p>重新部署到 kubernetes。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl delete -f recommendation/kubernetes/Deployment-v2.yml
|
|||
|
</code></pre>
|
|||
|
<p>因为我们重新构建的镜像使用了同样的名字和 tag,而之前在 <code>Deployment-v2.yml</code> 中配置的镜像拉取策略是 <code>IfNotPresent</code>,这样的话即使我们构建了新的镜像也无法应用到集群上,因此将镜像拉取策略改成 <code>Always</code> 确保每次启动 Pod 的时候都会拉取镜像。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl apply -f <span class="token operator"><</span><span class="token punctuation">(</span>istioctl kube-inject -f recommendation/kubernetes/Deployment-v2.yml<span class="token punctuation">)</span> -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>启用超时 RouteRules。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/route-rule-recommendation-timeout.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>访问 <code>customer</code> 服务将看到如下输出:</p>
|
|||
|
<pre class="language-"><code class="lang-bash">$ bin/poll_customer.sh
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> 503 preference <span class="token operator">=</span><span class="token operator">></span> 504 upstream request <span class="token function">timeout</span>
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 4002
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> 503 preference <span class="token operator">=</span><span class="token operator">></span> 504 upstream request <span class="token function">timeout</span>
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 4003
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> 503 preference <span class="token operator">=</span><span class="token operator">></span> 504 upstream request <span class="token function">timeout</span>
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 4004
|
|||
|
</code></pre>
|
|||
|
<p>清理 RouteRules。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl delete routerule recommendation-timeout -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<h3 id="基于-user-agent-的智能路由(金丝雀发布)">基于 user-agent 的智能路由(金丝雀发布)</h3>
|
|||
|
<p>User-agent 是一个字符串,其中包含了浏览器的信息,访问 <a href="https://www.whoishostingthis.com/tools/user-agent" target="_blank">https://www.whoishostingthis.com/tools/user-agent</a> 获取你的 user-agent。</p>
|
|||
|
<p>我的 user-agent 是:</p>
|
|||
|
<pre class="language-"><code class="lang-ini">Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
|
|||
|
</code></pre>
|
|||
|
<p>将所有的流量打到 v1。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/route-rule-recommendation-v1.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>将使用 Safari 浏览器访问的流量打到 v2。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/route-rule-safari-recommendation-v2.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>谁用 Safari 或者 Chrome(Chrome 浏览器的 user-agent 中也包含 Safari 字段)访问 <a href="http://customer.istio-tutorial.jimmysong.io/" target="_blank">http://customer.istio-tutorial.jimmysong.io/</a> 在经过 3 秒钟(我们在前面重新编译 v2 镜像,设置了 3 秒超时时间)后将看到访问 v2 的输出。</p>
|
|||
|
<p>或者使用 curl 访问。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">curl -A Safari http://customer.istio-tutorial.jimmysong.io/
|
|||
|
curl -A Firefox http://customer.istio-tutorial.jimmysong.io/
|
|||
|
</code></pre>
|
|||
|
<p>观察返回的结果。</p>
|
|||
|
<p>将移动端用户的流量导到 v2。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/route-rule-mobile-recommendation-v2.yml -n istio-tutorial
|
|||
|
|
|||
|
curl -A <span class="token string">"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4(KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5"</span> http://customer.istio-tutorial.jimmysong.io/
|
|||
|
</code></pre>
|
|||
|
<p>观察输出的结果。</p>
|
|||
|
<p>清理 RouteRules。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl delete routerule recommendation-mobile -n istio-tutorial
|
|||
|
istioctl delete routerule recommendation-safari -n istio-tutorial
|
|||
|
istioctl delete routerule recommendation-default -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<h3 id="镜像流量">镜像流量</h3>
|
|||
|
<p>确保当前至少运行了两个版本的 <code>recommendation</code> 服务,并且没有 RouteRule。</p>
|
|||
|
<p>注:可以使用 <code>istioctl get routerule</code> 获取 RouteRule。</p>
|
|||
|
<p>设置流量镜像,将所有 v1 的流量都被镜像到 v2。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/route-rule-recommendation-v1-mirror-v2.yml -n istio-tutorial
|
|||
|
bin/poll_customer.sh
|
|||
|
</code></pre>
|
|||
|
<p>查看 recommendation-v2 的日志。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl logs -f `oc get pods<span class="token operator">|</span><span class="token function">grep</span> recommendation-v2<span class="token operator">|</span><span class="token function">awk</span> <span class="token string">'{ print <span class="token variable">$1</span> }'</span>` -c recommendation
|
|||
|
</code></pre>
|
|||
|
<h3 id="访问控制">访问控制</h3>
|
|||
|
<p>Istio 可以设置服务访问的黑白名单,如果没有权限的话会返回 HTTP 404 Not Found。</p>
|
|||
|
<h4 id="白名单">白名单</h4>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/acl-whitelist.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>此时访问 <code>customer</code> 服务。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">$ bin/poll_customer.sh
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> 404 NOT_FOUND:preferencewhitelist.listchecker.istio-tutorial:customer is not whitelisted
|
|||
|
</code></pre>
|
|||
|
<p>重置环境。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl delete -f istiofiles/acl-whitelist.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<h4 id="黑名单">黑名单</h4>
|
|||
|
<p>设置黑名单,所有位于黑名单中的流量将获得 403 Forbidden 返回码。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/acl-blacklist.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>此时访问 <code>customer</code> 服务。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">$ bin/poll_customer.sh
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> 403 PERMISSION_DENIED:denycustomerhandler.denier.istio-tutorial:Not allowed
|
|||
|
</code></pre>
|
|||
|
<p>重置环境。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl delete -f istiofiles/acl-blacklist.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<h3 id="负载均衡">负载均衡</h3>
|
|||
|
<p>Kubernetes 中默认的负载均衡策略是 round-robin,当然我们可以使用 Istio 把它修改成 random。</p>
|
|||
|
<p>增加 v1 的实例数。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl scale deployment recommendation-v1 --replicas<span class="token operator">=</span>2 -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>持续访问 <code>customer</code> 服务。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">bin/poll_customer.sh
|
|||
|
</code></pre>
|
|||
|
<p>保持前台输出,观察流量的行为。</p>
|
|||
|
<p>应用负载均衡策略。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/recommendation_lb_policy_app.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>观察一段时间流量的行为后,重置环境。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl delete -f istiofiles/recommendation_lb_policy_app.yml -n istio-tutorial
|
|||
|
kubectl scale deployment recommendation-v1 --replicas<span class="token operator">=</span>1 -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<h3 id="速率限制">速率限制</h3>
|
|||
|
<p>暂时不可用</p>
|
|||
|
<h3 id="断路器">断路器</h3>
|
|||
|
<p>当达到最大连接数和最大挂起请求数时快速失败。</p>
|
|||
|
<p>将流量在 v1 和 v2 之间均分。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/route-rule-recommendation-v1_and_v2_50_50.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>未开启断路器的时候启动负载测试。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">$ siege -r 2 -c 20 -v customer.istio-tutorial.jimmysong.io
|
|||
|
New configuration template added to /Users/jimmysong/.siege
|
|||
|
Run siege -C to view the current settings <span class="token keyword">in</span> that <span class="token function">file</span>
|
|||
|
** SIEGE 4.0.4
|
|||
|
** Preparing 20 concurrent <span class="token function">users</span> <span class="token keyword">for</span> battle.
|
|||
|
The server is now under siege<span class="token punctuation">..</span>.
|
|||
|
HTTP/1.1 200 0.10 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.12 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.13 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.13 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.13 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.17 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.12 secs: 74 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.14 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.15 secs: 74 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.15 secs: 74 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.17 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.17 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.20 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.20 secs: 74 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.05 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.12 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.15 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.25 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.26 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.14 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.58 secs: 74 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 6.15 secs: 74 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 6.16 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.03 secs: 74 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 6.06 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 6.04 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.11 secs: 74 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.09 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 6.15 secs: 74 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 6.71 secs: 74 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 3.52 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
^C
|
|||
|
Lifting the server siege<span class="token punctuation">..</span>.
|
|||
|
Transactions: 31 hits
|
|||
|
Availability: 100.00 %
|
|||
|
Elapsed time: 7.99 secs
|
|||
|
Data transferred: 0.00 MB
|
|||
|
Response time: 2.99 secs
|
|||
|
Transaction rate: 3.88 trans/sec
|
|||
|
Throughput: 0.00 MB/sec
|
|||
|
Concurrency: 11.60
|
|||
|
Successful transactions: 31
|
|||
|
Failed transactions: 0
|
|||
|
Longest transaction: 6.71
|
|||
|
Shortest transaction: 0.05
|
|||
|
</code></pre>
|
|||
|
<p>所有的请求都成功了,但是性能很差,因为 v2 版本设置了 3 秒的超时时间。</p>
|
|||
|
<p>我们启用下断路器。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/recommendation_cb_policy_version_v2.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>重新测试一下。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">$ siege -r 2 -c 20 -v customer.istio-tutorial.jimmysong.io
|
|||
|
** SIEGE 4.0.4
|
|||
|
** Preparing 20 concurrent <span class="token function">users</span> <span class="token keyword">for</span> battle.
|
|||
|
The server is now under siege<span class="token punctuation">..</span>.
|
|||
|
HTTP/1.1 200 0.07 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.07 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.07 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.12 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.12 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.16 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.16 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.21 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.21 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.24 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.24 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.14 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.29 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.13 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.18 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.13 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.11 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.39 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.24 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.44 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.43 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.44 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.40 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.47 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.42 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.42 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.06 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.07 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.15 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.12 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.57 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.18 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.52 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.65 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.42 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.09 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.43 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 503 0.04 secs: 92 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 4.15 secs: 74 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
HTTP/1.1 200 0.01 secs: 75 bytes <span class="token operator">==</span><span class="token operator">></span> GET /
|
|||
|
|
|||
|
Transactions: 19 hits
|
|||
|
Availability: 47.50 %
|
|||
|
Elapsed time: 4.16 secs
|
|||
|
Data transferred: 0.00 MB
|
|||
|
Response time: 0.72 secs
|
|||
|
Transaction rate: 4.57 trans/sec
|
|||
|
Throughput: 0.00 MB/sec
|
|||
|
Concurrency: 3.31
|
|||
|
Successful transactions: 19
|
|||
|
Failed transactions: 21
|
|||
|
Longest transaction: 4.15
|
|||
|
Shortest transaction: 0.01
|
|||
|
</code></pre>
|
|||
|
<p>我们可以看到在启用了断路器后各项性能都有提高。</p>
|
|||
|
<p>清理配置。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl delete routerule recommendation-v1-v2 -n istio-tutorial
|
|||
|
istioctl delete -f istiofiles/recommendation_cb_policy_version_v2.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<h3 id="pool-ejection">Pool Ejection</h3>
|
|||
|
<p>所谓的 Pool Ejection 就是当某些实例出现错误(如返回 5xx 错误码)临时将该实例弹出一段时间后(窗口期,可配置),然后再将其加入到负载均衡池中。我们的例子中配置的窗口期是 15 秒。</p>
|
|||
|
<p>将 v1 和 v2 的流量均分。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/route-rule-recommendation-v1_and_v2_50_50.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>增加 v2 的实例个数。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl scale deployment recommendation-v2 --replicas<span class="token operator">=</span>2 -n istio-tutorial
|
|||
|
kubectl get pods -w
|
|||
|
</code></pre>
|
|||
|
<p>等待所有的 Pod 的状态都启动完成。</p>
|
|||
|
<p>现在到 v2 的容器中操作。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">$ kubectl <span class="token function">exec</span> recommendation-v2-785465d9cd-225ms -c recommendation /bin/bash
|
|||
|
$ curl localhost:8080/misbehave
|
|||
|
Following requests to <span class="token string">'/'</span> will <span class="token keyword">return</span> a 503
|
|||
|
</code></pre>
|
|||
|
<p>增加 Pool Ejection 配置。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/recommendation_cb_policy_pool_ejection.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>此时再访问 <code>customer</code> 服务。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">$ bin/poll_customer.sh
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 10505
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'785465d9cd-225ms'</span><span class="token keyword">:</span> 2407
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 10506
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'785465d9cd-225ms'</span><span class="token keyword">:</span> 2408
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 10507
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 10508
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v1 from <span class="token string">'6fc97476f8-m2ntp'</span><span class="token keyword">:</span> 10509
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> 503 preference <span class="token operator">=</span><span class="token operator">></span> 503 recommendation misbehavior from <span class="token string">'785465d9cd-ldc6j'</span>
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'785465d9cd-225ms'</span><span class="token keyword">:</span> 2409
|
|||
|
customer <span class="token operator">=</span><span class="token operator">></span> preference <span class="token operator">=</span><span class="token operator">></span> recommendation v2 from <span class="token string">'785465d9cd-225ms'</span><span class="token keyword">:</span> 2410
|
|||
|
</code></pre>
|
|||
|
<p>我们看到窗口期生效了,当出现 503 错误后至少 15 秒后才会出现第二次。</p>
|
|||
|
<p>即使有了负载均衡池弹出策略对于系统的弹性来说依然还不够,如果你的服务有多个可用实例,可以将<strong>断路器</strong>、<strong>重试</strong>、<strong>Pool Ejection</strong> 等策略组合起来使用。</p>
|
|||
|
<p>例如在以上的 Pool Ejection 的基础上增加重试策略。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl replace -f istiofiles/route-rule-recommendation-v1_and_v2_retry.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>现在再访问 <code>customer</code> 服务就看不到 503 错误了。</p>
|
|||
|
<p>清理配置。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl scale deployment recommendation-v2 --replicas<span class="token operator">=</span>1 -n istio-tutorial
|
|||
|
istioctl delete routerule recommendation-v1-v2 -n istio-tutorial
|
|||
|
istioctl delete -f istiofiles/recommendation_cb_policy_pool_ejection.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<h3 id="egress">Egress</h3>
|
|||
|
<p>Egress 是用来配置 Istio serivce mesh 中的服务对外部服务的访问策略。</p>
|
|||
|
<p>具体配置请参考 <a href="http://istio.doczh.cn/docs/tasks/traffic-management/egress.html" target="_blank">控制 Egress 流量</a>。</p>
|
|||
|
<p>以下示例还有问题,无法正常工作。</p>
|
|||
|
<p>构建示例镜像 egresshttpbin。</p>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token function">cd</span> egress/egresshttpbin/
|
|||
|
mvn clean package
|
|||
|
docker build -t jimmysong/istio-tutorial-egresshttpbin:v1 <span class="token keyword">.</span>
|
|||
|
docker push jimmysong/istio-tutorial-egresshttpbin:v1
|
|||
|
</code></pre>
|
|||
|
<p>部署到 Kubernetes。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl apply -f <span class="token operator"><</span><span class="token punctuation">(</span>istioctl kube-inject -f egress/egresshttpbin/src/main/kubernetes/Deployment.yml<span class="token punctuation">)</span> -n istio-toturial
|
|||
|
kubectl create -f egress/egresshttpbin/src/main/kubernetes/Service.yml
|
|||
|
</code></pre>
|
|||
|
<p>为了在 kubernetes 集群外部访问到该服务,修改增加 ingress 配置并修改本地的<code>/etc/hosts</code> 文件,我们在前面已经完成了,此处不再赘述。</p>
|
|||
|
<p>构建示例镜像 egressgithub。</p>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token function">cd</span> egress/egressgithub
|
|||
|
mvn clean package
|
|||
|
docker build -t jimmysong/istio-tutorial-egressgithub:v1 <span class="token keyword">.</span>
|
|||
|
docker push jimmysong/istio-tutorial-egressgithub:v1
|
|||
|
</code></pre>
|
|||
|
<p>部署到 Kubernetes。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl apply -f <span class="token operator"><</span><span class="token punctuation">(</span>istioctl kube-inject -f egress/egressgithub/src/main/kubernetes/Deployment.yml<span class="token punctuation">)</span> -n istio-tutorial
|
|||
|
kubectl create -f egress/egressgithub/src/main/kubernetes/Service.yml
|
|||
|
</code></pre>
|
|||
|
<p>增加 Egress 配置。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/egress_httpbin.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>到 egresshttpbin 容器中测试。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl <span class="token function">exec</span> -it <span class="token punctuation">$(</span>oc get pods -o jsonpath<span class="token operator">=</span><span class="token string">"{.items[*].metadata.name}"</span> -l app<span class="token operator">=</span>egresshttpbin,version<span class="token operator">=</span>v1<span class="token punctuation">)</span> -c egresshttpbin /bin/bash
|
|||
|
|
|||
|
curl localhost:8080
|
|||
|
|
|||
|
curl httpbin.org/user-agent
|
|||
|
|
|||
|
curl httpbin.org/headers
|
|||
|
|
|||
|
<span class="token keyword">exit</span>
|
|||
|
</code></pre>
|
|||
|
<p>增加对 <a href="https://jimmysong.io" target="_blank">jimmysong.io</a> 的 egress 配置。</p>
|
|||
|
<pre class="language-"><code class="lang-bash"><span class="token function">cat</span> <span class="token operator"><<</span>EOF <span class="token operator">|</span> istioctl create -f -
|
|||
|
apiVersion: config.istio.io/v1alpha2
|
|||
|
kind: EgressRule
|
|||
|
metadata:
|
|||
|
name: jimmysong-egress-rule
|
|||
|
namespace: istio-tutorial
|
|||
|
spec:
|
|||
|
destination:
|
|||
|
service: jimmysong.io
|
|||
|
ports:
|
|||
|
- port: 443
|
|||
|
protocol: https
|
|||
|
EOF
|
|||
|
</code></pre>
|
|||
|
<p>增加 Egress 配置。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl create -f istiofiles/egress_github.yml -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<p>到 egressgithub 容器中测试。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">kubectl <span class="token function">exec</span> -it <span class="token punctuation">$(</span>oc get pods -o jsonpath<span class="token operator">=</span><span class="token string">"{.items[*].metadata.name}"</span> -l app<span class="token operator">=</span>egressgithub,version<span class="token operator">=</span>v1<span class="token punctuation">)</span> -c egressgithub /bin/bash
|
|||
|
|
|||
|
curl http://jimmysong:443
|
|||
|
|
|||
|
<span class="token keyword">exit</span>
|
|||
|
</code></pre>
|
|||
|
<p>清理环境。</p>
|
|||
|
<pre class="language-"><code class="lang-bash">istioctl delete egressrule httpbin-egress-rule jimmysong-egress-rule github-egress-rule -n istio-tutorial
|
|||
|
</code></pre>
|
|||
|
<h2 id="参考">参考</h2>
|
|||
|
<ul>
|
|||
|
<li><a href="https://github.com/redhat-developer-demos/istio-tutorial" target="_blank">https://github.com/redhat-developer-demos/istio-tutorial</a></li>
|
|||
|
<li><a href="https://developers.redhat.com/books/introducing-istio-service-mesh-microservices/" target="_blank">Book - Introducing Istio Service Mesh for Microservices</a> </li>
|
|||
|
</ul>
|
|||
|
<footer class="page-footer"><span class="copyright">Copyright © jimmysong.io 2017-2018 all right reserved,powered by Gitbook</span><span class="footer-modification">Updated at
|
|||
|
2018-04-18 23:23:08
|
|||
|
</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="istio-community-tips.html" class="navigation navigation-prev " aria-label="Previous page: 如何参与Istio社区及注意事项">
|
|||
|
<i class="fa fa-angle-left"></i>
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
<a href="linkerd.html" class="navigation navigation-next " aria-label="Next page: Linkerd">
|
|||
|
<i class="fa fa-angle-right"></i>
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
<script>
|
|||
|
var gitbook = gitbook || [];
|
|||
|
gitbook.push(function() {
|
|||
|
gitbook.page.hasChanged({"page":{"title":"Istio 教程","level":"6.3.1.7","depth":3,"next":{"title":"Linkerd","level":"6.3.2","depth":2,"path":"usecases/linkerd.md","ref":"usecases/linkerd.md","articles":[{"title":"Linkerd 使用指南","level":"6.3.2.1","depth":3,"path":"usecases/linkerd-user-guide.md","ref":"usecases/linkerd-user-guide.md","articles":[]}]},"previous":{"title":"如何参与Istio社区及注意事项","level":"6.3.1.6","depth":3,"path":"usecases/istio-community-tips.md","ref":"usecases/istio-community-tips.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","theme-default","-highlight","prism","prism-themes"],"styles":{"ebook":"styles/ebook.css","epub":"styles/epub.css","mobi":"styles/mobi.css","pdf":"styles/pdf.css","print":"styles/print.css","website":"styles/website.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"Copyright © jimmysong.io 2017-2018","modify_label":"Updated at ","modify_format":"YYYY-MM-DD HH:mm:ss"},"prism":{"css":["prism-themes/themes/prism-ghcolors.css"]},"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},"favicon":{"shortcut":"favicon.ico","bookmark":"favicon.ico"},"page-toc-button":{},"back-to-top-button":{},"prism-themes":{},"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":{"showLevel":true,"styles":{"ebook":"styles/ebook.css","epub":"styles/epub.css","mobi":"styles/mobi.css","pdf":"styles/pdf.css","print":"styles/print.css","website":"styles/website.css"}},"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":"index.html#fig1.1.1","level":"1.1","list_caption":"Figure: Stargazers over time","alt":"Stargazers over time","nro":1,"url":"https://starcharts.herokuapp.com/rootsongjc/kubernetes-handbook.svg","index":1,"caption_template":"图片 - _CAPTION_","label":"Stargazers over time","attributes":{},"skip":false,"key":"1.1.1"},{"backlink":"cloud-native/cncf.html#fig1.2.1","level":"1.2","list_caption":"Figure: CNCF landscape","alt":"CNCF landscape","nro":2,"url":"https://github.com/cncf/landscape/raw/master/landscape/CloudNativeLandscape_latest.png","index":1,"caption_template":"图片 - _CAPTION_","label":"CNCF landscape","attributes":{},"skip":false,"key":"1.2.1"},{"backlink":"cloud-native/cncf.html#fig1.2.2","level":"1.2","list_caption":"Figure: CNCF项目成熟度级别","alt":"CNCF项目成熟度级别","nro":3,"url":"../images/cncf-graduation-criteria.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"CNCF项目成熟度级别","attributes":{},"skip":false,"key":"1.2.2"},{"backlink":"cloud-native/play-with-kubernetes.html#fig2.1.1","level":"2.1","list_caption":"Figure: Play with Kubernetes网页截图","alt":"Play with Kubernetes网页截图","nro":4,"url":"../images/play-with-kubernetes.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Play with Kubernetes网页截图","attributes":{},"skip":false,"key":"2.1.1"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.2.1","level":"2.2","list
|
|||
|
});
|
|||
|
</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>
|
|||
|
|