kubernetes-handbook/concepts/deployment.html

2066 lines
141 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters!

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

<!DOCTYPE HTML>
<html lang="zh-cn" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>2.2.6 Deployment · Kubernetes Handbook</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="">
<meta name="generator" content="GitBook 3.2.2">
<meta name="author" content="Jimmy Song">
<link rel="stylesheet" href="../gitbook/style.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-page-toc-button/plugin.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-image-captions/image-captions.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-page-footer-ex/style/plugin.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-search-plus/search.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-fontsettings/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="../gitbook/images/apple-touch-icon-precomposed-152.png">
<link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">
<link rel="next" href="secret.html" />
<link rel="prev" href="volume.html" />
</head>
<body>
<div class="book">
<div class="book-summary">
<div id="book-search-input" role="search">
<input type="text" placeholder="輸入並搜尋" />
</div>
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="../">
<a href="../">
1. 前言
</a>
</li>
<li class="chapter " data-level="1.2" data-path="./">
<a href="./">
2. 概念原理
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="concepts.html">
<a href="concepts.html">
2.1 设计理念
</a>
</li>
<li class="chapter " data-level="1.2.2" data-path="objects.html">
<a href="objects.html">
2.2 主要概念
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.2.1" data-path="pod-overview.html">
<a href="pod-overview.html">
2.2.1 Pod
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.2.1.1" data-path="pod.html">
<a href="pod.html">
2.2.1.1 Pod解析
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.2.2" data-path="node.html">
<a href="node.html">
2.2.2 Node
</a>
</li>
<li class="chapter " data-level="1.2.2.3" data-path="namespace.html">
<a href="namespace.html">
2.2.3 Namespace
</a>
</li>
<li class="chapter " data-level="1.2.2.4" data-path="service.html">
<a href="service.html">
2.2.4 Service
</a>
</li>
<li class="chapter " data-level="1.2.2.5" data-path="volume.html">
<a href="volume.html">
2.2.5 Volume和Persistent Volume
</a>
</li>
<li class="chapter active" data-level="1.2.2.6" data-path="deployment.html">
<a href="deployment.html">
2.2.6 Deployment
</a>
</li>
<li class="chapter " data-level="1.2.2.7" data-path="secret.html">
<a href="secret.html">
2.2.7 Secret
</a>
</li>
<li class="chapter " data-level="1.2.2.8" data-path="statefulset.html">
<a href="statefulset.html">
2.2.8 StatefulSet
</a>
</li>
<li class="chapter " data-level="1.2.2.9" data-path="daemonset.html">
<a href="daemonset.html">
2.2.9 DaemonSet
</a>
</li>
<li class="chapter " data-level="1.2.2.10" data-path="serviceaccount.html">
<a href="serviceaccount.html">
2.2.10 ServiceAccount
</a>
</li>
<li class="chapter " data-level="1.2.2.11" data-path="replicaset.html">
<a href="replicaset.html">
2.2.11 ReplicationController和ReplicaSet
</a>
</li>
<li class="chapter " data-level="1.2.2.12" data-path="job.html">
<a href="job.html">
2.2.12 Job
</a>
</li>
<li class="chapter " data-level="1.2.2.13" data-path="cronjob.html">
<a href="cronjob.html">
2.2.13 CronJob
</a>
</li>
<li class="chapter " data-level="1.2.2.14" data-path="ingress.html">
<a href="ingress.html">
2.2.14 Ingress
</a>
</li>
<li class="chapter " data-level="1.2.2.15" data-path="configmap.html">
<a href="configmap.html">
2.2.15 ConfigMap
</a>
</li>
<li class="chapter " data-level="1.2.2.16" data-path="horizontal-pod-autoscaling.html">
<a href="horizontal-pod-autoscaling.html">
2.2.16 Horizontal Pod Autoscaling
</a>
</li>
<li class="chapter " data-level="1.2.2.17" data-path="label.html">
<a href="label.html">
2.2.17 Label
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3" data-path="../guide/">
<a href="../guide/">
3. 用户指南
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="../guide/resource-configuration.html">
<a href="../guide/resource-configuration.html">
3.1 资源配置
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.1.1" data-path="../guide/configure-liveness-readiness-probes.html">
<a href="../guide/configure-liveness-readiness-probes.html">
3.1.1 配置Pod的liveness和readiness探针
</a>
</li>
<li class="chapter " data-level="1.3.1.2" data-path="../guide/configure-pod-service-account.html">
<a href="../guide/configure-pod-service-account.html">
3.1.2 配置Pod的Service Account
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3.2" data-path="../guide/command-usage.html">
<a href="../guide/command-usage.html">
3.2 命令使用
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.2.1" data-path="../guide/using-kubectl.html">
<a href="../guide/using-kubectl.html">
3.2.1 使用kubectl
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3.3" data-path="../guide/cluster-management.html">
<a href="../guide/cluster-management.html">
3.3 集群管理
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.3.1" data-path="../guide/managing-tls-in-a-cluster.html">
<a href="../guide/managing-tls-in-a-cluster.html">
3.3.1 管理集群中的TLS
</a>
</li>
<li class="chapter " data-level="1.3.3.2" data-path="../guide/kubelet-authentication-authorization.html">
<a href="../guide/kubelet-authentication-authorization.html">
3.3.2 kubelet的认证授权
</a>
</li>
<li class="chapter " data-level="1.3.3.3" data-path="../guide/tls-bootstrapping.html">
<a href="../guide/tls-bootstrapping.html">
3.3.3 TLS bootstrap
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3.4" data-path="../guide/access-kubernetes-cluster.html">
<a href="../guide/access-kubernetes-cluster.html">
3.4 访问 Kubernetes 集群
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.4.1" data-path="../guide/access-cluster.html">
<a href="../guide/access-cluster.html">
3.4.1 访问集群
</a>
</li>
<li class="chapter " data-level="1.3.4.2" data-path="../guide/authenticate-across-clusters-kubeconfig.html">
<a href="../guide/authenticate-across-clusters-kubeconfig.html">
3.4.2 使用 kubeconfig 文件配置跨集群认证
</a>
</li>
<li class="chapter " data-level="1.3.4.3" data-path="../guide/connecting-to-applications-port-forward.html">
<a href="../guide/connecting-to-applications-port-forward.html">
3.4.3 通过端口转发访问集群中的应用程序
</a>
</li>
<li class="chapter " data-level="1.3.4.4" data-path="../guide/service-access-application-cluster.html">
<a href="../guide/service-access-application-cluster.html">
3.4.4 使用 service 访问群集中的应用程序
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3.5" data-path="../guide/application-development-deployment-flow.html">
<a href="../guide/application-development-deployment-flow.html">
3.5 在kubernetes中开发部署应用
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.5.1" data-path="../guide/deploy-applications-in-kubernetes.html">
<a href="../guide/deploy-applications-in-kubernetes.html">
3.5.1 适用于kubernetes的应用开发部署流程
</a>
</li>
<li class="chapter " data-level="1.3.5.2" data-path="../guide/migrating-hadoop-yarn-to-kubernetes.html">
<a href="../guide/migrating-hadoop-yarn-to-kubernetes.html">
3.5.2 迁移传统应用到kubernetes中——以Hadoop YARN为例
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" data-path="../practice/">
<a href="../practice/">
4. 最佳实践
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.1" data-path="../practice/install-kbernetes1.6-on-centos.html">
<a href="../practice/install-kbernetes1.6-on-centos.html">
4.1 在CentOS上部署kubernetes1.6集群
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.1.1" data-path="../practice/create-tls-and-secret-key.html">
<a href="../practice/create-tls-and-secret-key.html">
4.1.1 创建TLS证书和秘钥
</a>
</li>
<li class="chapter " data-level="1.4.1.2" data-path="../practice/create-kubeconfig.html">
<a href="../practice/create-kubeconfig.html">
4.1.2 创建kubeconfig文件
</a>
</li>
<li class="chapter " data-level="1.4.1.3" data-path="../practice/etcd-cluster-installation.html">
<a href="../practice/etcd-cluster-installation.html">
4.1.3 创建高可用etcd集群
</a>
</li>
<li class="chapter " data-level="1.4.1.4" data-path="../practice/kubectl-installation.html">
<a href="../practice/kubectl-installation.html">
4.1.4 安装kubectl命令行工具
</a>
</li>
<li class="chapter " data-level="1.4.1.5" data-path="../practice/master-installation.html">
<a href="../practice/master-installation.html">
4.1.5 部署master节点
</a>
</li>
<li class="chapter " data-level="1.4.1.6" data-path="../practice/node-installation.html">
<a href="../practice/node-installation.html">
4.1.6 部署node节点
</a>
</li>
<li class="chapter " data-level="1.4.1.7" data-path="../practice/kubedns-addon-installation.html">
<a href="../practice/kubedns-addon-installation.html">
4.1.7 安装kubedns插件
</a>
</li>
<li class="chapter " data-level="1.4.1.8" data-path="../practice/dashboard-addon-installation.html">
<a href="../practice/dashboard-addon-installation.html">
4.1.8 安装dashboard插件
</a>
</li>
<li class="chapter " data-level="1.4.1.9" data-path="../practice/heapster-addon-installation.html">
<a href="../practice/heapster-addon-installation.html">
4.1.9 安装heapster插件
</a>
</li>
<li class="chapter " data-level="1.4.1.10" data-path="../practice/efk-addon-installation.html">
<a href="../practice/efk-addon-installation.html">
4.1.10 安装EFK插件
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4.2" data-path="../practice/service-discovery-and-loadbalancing.html">
<a href="../practice/service-discovery-and-loadbalancing.html">
4.2 服务发现与负载均衡
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.2.1" data-path="../practice/traefik-ingress-installation.html">
<a href="../practice/traefik-ingress-installation.html">
4.2.1 安装Traefik ingress
</a>
</li>
<li class="chapter " data-level="1.4.2.2" data-path="../practice/distributed-load-test.html">
<a href="../practice/distributed-load-test.html">
4.2.2 分布式负载测试
</a>
</li>
<li class="chapter " data-level="1.4.2.3" data-path="../practice/network-and-cluster-perfermance-test.html">
<a href="../practice/network-and-cluster-perfermance-test.html">
4.2.3 网络和集群性能测试
</a>
</li>
<li class="chapter " data-level="1.4.2.4" data-path="../practice/edge-node-configuration.html">
<a href="../practice/edge-node-configuration.html">
4.2.4 边缘节点配置
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4.3" data-path="../practice/operation.html">
<a href="../practice/operation.html">
4.3 运维管理
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.3.1" data-path="../practice/service-rolling-update.html">
<a href="../practice/service-rolling-update.html">
4.3.1 服务滚动升级
</a>
</li>
<li class="chapter " data-level="1.4.3.2" data-path="../practice/app-log-collection.html">
<a href="../practice/app-log-collection.html">
4.3.2 应用日志收集
</a>
</li>
<li class="chapter " data-level="1.4.3.3" data-path="../practice/configuration-best-practice.html">
<a href="../practice/configuration-best-practice.html">
4.3.3 配置最佳实践
</a>
</li>
<li class="chapter " data-level="1.4.3.4" data-path="../practice/monitor.html">
<a href="../practice/monitor.html">
4.3.4 集群及应用监控
</a>
</li>
<li class="chapter " data-level="1.4.3.5" data-path="../practice/jenkins-ci-cd.html">
<a href="../practice/jenkins-ci-cd.html">
4.3.5 使用Jenkins进行持续构建与发布
</a>
</li>
<li class="chapter " data-level="1.4.3.6" data-path="../practice/data-persistence-problem.html">
<a href="../practice/data-persistence-problem.html">
4.3.6 数据持久化问题
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4.4" data-path="../practice/storage.html">
<a href="../practice/storage.html">
4.4 存储管理
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.4.1" data-path="../practice/glusterfs.html">
<a href="../practice/glusterfs.html">
4.4.1 GlusterFS
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.4.1.1" data-path="../practice/using-glusterfs-for-persistent-storage.html">
<a href="../practice/using-glusterfs-for-persistent-storage.html">
4.4.1.1 使用GlusterFS做持久化存储
</a>
</li>
<li class="chapter " data-level="1.4.4.1.2" data-path="../practice/storage-for-containers-using-glusterfs-with-openshift.html">
<a href="../practice/storage-for-containers-using-glusterfs-with-openshift.html">
4.4.1.2 在OpenShift中使用GlusterFS做持久化存储
</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5" data-path="../usecases/">
<a href="../usecases/">
5. 领域应用
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.1" data-path="../usecases/microservices.html">
<a href="../usecases/microservices.html">
5.1 微服务架构
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.1.1" data-path="../usecases/istio.html">
<a href="../usecases/istio.html">
5.1.1 Istio
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.1.1.1" data-path="../usecases/istio-installation.html">
<a href="../usecases/istio-installation.html">
5.1.1.1 安装istio
</a>
</li>
<li class="chapter " data-level="1.5.1.1.2" data-path="../usecases/configuring-request-routing.html">
<a href="../usecases/configuring-request-routing.html">
5.1.1.2 配置请求的路由规则
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5.1.2" data-path="../usecases/linkerd.html">
<a href="../usecases/linkerd.html">
5.1.2 Linkerd
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.1.2.1" data-path="../usecases/linkerd-user-guide.html">
<a href="../usecases/linkerd-user-guide.html">
5.1.2.1 Linkerd 使用指南
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5.1.3" data-path="../usecases/service-discovery-in-microservices.html">
<a href="../usecases/service-discovery-in-microservices.html">
5.1.3 微服务中的服务发现
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5.2" data-path="../usecases/big-data.html">
<a href="../usecases/big-data.html">
5.2 大数据
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.2.1" data-path="../usecases/spark-standalone-on-kubernetes.html">
<a href="../usecases/spark-standalone-on-kubernetes.html">
5.2.1 Spark standalone on Kubernetes
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5.3" data-path="../usecases/serverless.html">
<a href="../usecases/serverless.html">
5.3 Serverless架构
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.6" data-path="../develop/">
<a href="../develop/">
6. 开发指南
</a>
<ul class="articles">
<li class="chapter " data-level="1.6.1" data-path="../develop/developing-environment.html">
<a href="../develop/developing-environment.html">
6.1 开发环境搭建
</a>
</li>
<li class="chapter " data-level="1.6.2" data-path="../develop/testing.html">
<a href="../develop/testing.html">
6.2 单元测试和集成测试
</a>
</li>
<li class="chapter " data-level="1.6.3" data-path="../develop/client-go-sample.html">
<a href="../develop/client-go-sample.html">
6.3 client-go示例
</a>
</li>
<li class="chapter " data-level="1.6.4" data-path="../develop/contribute.html">
<a href="../develop/contribute.html">
6.4 社区贡献
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.7" data-path="../appendix/">
<a href="../appendix/">
7. 附录
</a>
<ul class="articles">
<li class="chapter " data-level="1.7.1" data-path="../appendix/docker-best-practice.html">
<a href="../appendix/docker-best-practice.html">
7.1 Docker最佳实践
</a>
</li>
<li class="chapter " data-level="1.7.2" data-path="../appendix/issues.html">
<a href="../appendix/issues.html">
7.2 问题记录
</a>
</li>
<li class="chapter " data-level="1.7.3" data-path="../appendix/tricks.html">
<a href="../appendix/tricks.html">
7.3 使用技巧
</a>
</li>
</ul>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本書使用 GitBook 釋出
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href=".." >2.2.6 Deployment</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="deployment">Deployment</h1>
<p>[TOC]</p>
<h2 id="&#x7B80;&#x8FF0;">&#x7B80;&#x8FF0;</h2>
<p>Deployment &#x4E3A; Pod &#x548C; ReplicaSet &#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x4E2A;&#x58F0;&#x660E;&#x5F0F;&#x5B9A;&#x4E49;(declarative)&#x65B9;&#x6CD5;&#xFF0C;&#x7528;&#x6765;&#x66FF;&#x4EE3;&#x4EE5;&#x524D;&#x7684;ReplicationController &#x6765;&#x65B9;&#x4FBF;&#x7684;&#x7BA1;&#x7406;&#x5E94;&#x7528;&#x3002;&#x5178;&#x578B;&#x7684;&#x5E94;&#x7528;&#x573A;&#x666F;&#x5305;&#x62EC;&#xFF1A;</p>
<ul>
<li>&#x5B9A;&#x4E49;Deployment&#x6765;&#x521B;&#x5EFA;Pod&#x548C;ReplicaSet</li>
<li>&#x6EDA;&#x52A8;&#x5347;&#x7EA7;&#x548C;&#x56DE;&#x6EDA;&#x5E94;&#x7528;</li>
<li>&#x6269;&#x5BB9;&#x548C;&#x7F29;&#x5BB9;</li>
<li>&#x6682;&#x505C;&#x548C;&#x7EE7;&#x7EED;Deployment</li>
</ul>
<p>&#x6BD4;&#x5982;&#x4E00;&#x4E2A;&#x7B80;&#x5355;&#x7684;nginx&#x5E94;&#x7528;&#x53EF;&#x4EE5;&#x5B9A;&#x4E49;&#x4E3A;</p>
<pre><code class="lang-yaml"><span class="hljs-attr">apiVersion:</span> extensions/v1beta1
<span class="hljs-attr">kind:</span> Deployment
<span class="hljs-attr">metadata:</span>
<span class="hljs-attr"> name:</span> nginx-deployment
<span class="hljs-attr">spec:</span>
<span class="hljs-attr"> replicas:</span> <span class="hljs-number">3</span>
<span class="hljs-attr"> template:</span>
<span class="hljs-attr"> metadata:</span>
<span class="hljs-attr"> labels:</span>
<span class="hljs-attr"> app:</span> nginx
<span class="hljs-attr"> spec:</span>
<span class="hljs-attr"> containers:</span>
<span class="hljs-attr"> - name:</span> nginx
<span class="hljs-attr"> image:</span> nginx:<span class="hljs-number">1.7</span><span class="hljs-number">.9</span>
<span class="hljs-attr"> ports:</span>
<span class="hljs-attr"> - containerPort:</span> <span class="hljs-number">80</span>
</code></pre>
<p>&#x6269;&#x5BB9;&#xFF1A;</p>
<pre><code>kubectl scale deployment nginx-deployment --replicas 10
</code></pre><p>&#x5982;&#x679C;&#x96C6;&#x7FA4;&#x652F;&#x6301; horizontal pod autoscaling &#x7684;&#x8BDD;&#xFF0C;&#x8FD8;&#x53EF;&#x4EE5;&#x4E3A;Deployment&#x8BBE;&#x7F6E;&#x81EA;&#x52A8;&#x6269;&#x5C55;&#xFF1A;</p>
<pre><code>kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80
</code></pre><p>&#x66F4;&#x65B0;&#x955C;&#x50CF;&#x4E5F;&#x6BD4;&#x8F83;&#x7B80;&#x5355;:</p>
<pre><code>kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
</code></pre><p>&#x56DE;&#x6EDA;&#xFF1A;</p>
<pre><code>kubectl rollout undo deployment/nginx-deployment
</code></pre><h2 id="deployment-&#x7ED3;&#x6784;&#x793A;&#x610F;&#x56FE;">Deployment &#x7ED3;&#x6784;&#x793A;&#x610F;&#x56FE;</h2>
<p>&#x53C2;&#x8003;&#xFF1A;<a href="https://kubernetes.io/docs/api-reference/v1.6/#deploymentspec-v1beta1-apps" target="_blank">https://kubernetes.io/docs/api-reference/v1.6/#deploymentspec-v1beta1-apps</a></p>
<figure id="fig1.2.2.6.1"><img src="../images/deployment-cheatsheet.png" alt="kubernetes deployment cheatsheet"><figcaption>Figure: kubernetes deployment cheatsheet</figcaption></figure>
<h2 id="deployment-&#x6982;&#x5FF5;&#x8BE6;&#x7EC6;&#x89E3;&#x6790;">Deployment &#x6982;&#x5FF5;&#x8BE6;&#x7EC6;&#x89E3;&#x6790;</h2>
<p>&#x672C;&#x6587;&#x7FFB;&#x8BD1;&#x81EA;kubernetes&#x5B98;&#x65B9;&#x6587;&#x6863;&#xFF1A;<a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment.md" target="_blank">https://kubernetes.io/docs/concepts/workloads/controllers/deployment.md</a></p>
<p>&#x6839;&#x636E;2017&#x5E74;5&#x6708;10&#x65E5;&#x7684;Commit 8481c02 &#x7FFB;&#x8BD1;&#x3002;</p>
<h2 id="deployment-&#x662F;&#x4EC0;&#x4E48;&#xFF1F;">Deployment &#x662F;&#x4EC0;&#x4E48;&#xFF1F;</h2>
<p>Deployment&#x4E3A;Pod&#x548C;Replica Set&#xFF08;&#x4E0B;&#x4E00;&#x4EE3;Replication Controller&#xFF09;&#x63D0;&#x4F9B;&#x58F0;&#x660E;&#x5F0F;&#x66F4;&#x65B0;&#x3002;</p>
<p>&#x60A8;&#x53EA;&#x9700;&#x8981;&#x5728; Deployment &#x4E2D;&#x63CF;&#x8FF0;&#x60A8;&#x60F3;&#x8981;&#x7684;&#x76EE;&#x6807;&#x72B6;&#x6001;&#x662F;&#x4EC0;&#x4E48;&#xFF0C;Deployment controller &#x5C31;&#x4F1A;&#x5E2E;&#x60A8;&#x5C06; Pod &#x548C;ReplicaSet &#x7684;&#x5B9E;&#x9645;&#x72B6;&#x6001;&#x6539;&#x53D8;&#x5230;&#x60A8;&#x7684;&#x76EE;&#x6807;&#x72B6;&#x6001;&#x3002;&#x60A8;&#x53EF;&#x4EE5;&#x5B9A;&#x4E49;&#x4E00;&#x4E2A;&#x5168;&#x65B0;&#x7684; Deployment &#x6765;&#x521B;&#x5EFA; ReplicaSet &#x6216;&#x8005;&#x5220;&#x9664;&#x5DF2;&#x6709;&#x7684; Deployment &#x5E76;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x6765;&#x66FF;&#x6362;&#x3002;</p>
<p><strong>&#x6CE8;&#x610F;</strong>&#xFF1A;&#x60A8;&#x4E0D;&#x8BE5;&#x624B;&#x52A8;&#x7BA1;&#x7406;&#x7531; Deployment &#x521B;&#x5EFA;&#x7684; ReplicaSet&#xFF0C;&#x5426;&#x5219;&#x60A8;&#x5C31;&#x7BE1;&#x8D8A;&#x4E86; Deployment controller &#x7684;&#x804C;&#x8D23;&#xFF01;&#x4E0B;&#x6587;&#x7F57;&#x5217;&#x4E86; Deployment &#x5BF9;&#x8C61;&#x4E2D;&#x5DF2;&#x7ECF;&#x8986;&#x76D6;&#x4E86;&#x6240;&#x6709;&#x7684;&#x7528;&#x4F8B;&#x3002;&#x5982;&#x679C;&#x672A;&#x6709;&#x8986;&#x76D6;&#x60A8;&#x6240;&#x6709;&#x9700;&#x8981;&#x7684;&#x7528;&#x4F8B;&#xFF0C;&#x8BF7;&#x76F4;&#x63A5;&#x5728; Kubernetes &#x7684;&#x4EE3;&#x7801;&#x5E93;&#x4E2D;&#x63D0; issue&#x3002;</p>
<p>&#x5178;&#x578B;&#x7684;&#x7528;&#x4F8B;&#x5982;&#x4E0B;&#xFF1A;</p>
<ul>
<li>&#x4F7F;&#x7528;Deployment&#x6765;&#x521B;&#x5EFA;ReplicaSet&#x3002;ReplicaSet&#x5728;&#x540E;&#x53F0;&#x521B;&#x5EFA;pod&#x3002;&#x68C0;&#x67E5;&#x542F;&#x52A8;&#x72B6;&#x6001;&#xFF0C;&#x770B;&#x5B83;&#x662F;&#x6210;&#x529F;&#x8FD8;&#x662F;&#x5931;&#x8D25;&#x3002;</li>
<li>&#x7136;&#x540E;&#xFF0C;&#x901A;&#x8FC7;&#x66F4;&#x65B0;Deployment&#x7684;PodTemplateSpec&#x5B57;&#x6BB5;&#x6765;&#x58F0;&#x660E;Pod&#x7684;&#x65B0;&#x72B6;&#x6001;&#x3002;&#x8FD9;&#x4F1A;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684;ReplicaSet&#xFF0C;Deployment&#x4F1A;&#x6309;&#x7167;&#x63A7;&#x5236;&#x7684;&#x901F;&#x7387;&#x5C06;pod&#x4ECE;&#x65E7;&#x7684;ReplicaSet&#x79FB;&#x52A8;&#x5230;&#x65B0;&#x7684;ReplicaSet&#x4E2D;&#x3002;</li>
<li>&#x5982;&#x679C;&#x5F53;&#x524D;&#x72B6;&#x6001;&#x4E0D;&#x7A33;&#x5B9A;&#xFF0C;&#x56DE;&#x6EDA;&#x5230;&#x4E4B;&#x524D;&#x7684;Deployment revision&#x3002;&#x6BCF;&#x6B21;&#x56DE;&#x6EDA;&#x90FD;&#x4F1A;&#x66F4;&#x65B0;Deployment&#x7684;revision&#x3002;</li>
<li>&#x6269;&#x5BB9;Deployment&#x4EE5;&#x6EE1;&#x8DB3;&#x66F4;&#x9AD8;&#x7684;&#x8D1F;&#x8F7D;&#x3002;</li>
<li>&#x6682;&#x505C;Deployment&#x6765;&#x5E94;&#x7528;PodTemplateSpec&#x7684;&#x591A;&#x4E2A;&#x4FEE;&#x590D;&#xFF0C;&#x7136;&#x540E;&#x6062;&#x590D;&#x4E0A;&#x7EBF;&#x3002;</li>
<li>&#x6839;&#x636E;Deployment &#x7684;&#x72B6;&#x6001;&#x5224;&#x65AD;&#x4E0A;&#x7EBF;&#x662F;&#x5426;hang&#x4F4F;&#x4E86;&#x3002;</li>
<li>&#x6E05;&#x9664;&#x65E7;&#x7684;&#x4E0D;&#x5FC5;&#x8981;&#x7684; ReplicaSet&#x3002;</li>
</ul>
<h2 id="&#x521B;&#x5EFA;-deployment">&#x521B;&#x5EFA; Deployment</h2>
<p>&#x4E0B;&#x9762;&#x662F;&#x4E00;&#x4E2A; Deployment &#x793A;&#x4F8B;&#xFF0C;&#x5B83;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A; ReplicaSet &#x6765;&#x542F;&#x52A8;3&#x4E2A; nginx pod&#x3002;</p>
<p>&#x4E0B;&#x8F7D;&#x793A;&#x4F8B;&#x6587;&#x4EF6;&#x5E76;&#x6267;&#x884C;&#x547D;&#x4EE4;&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl create -f https://kubernetes.io/docs/user-guide/nginx-deployment.yaml --record
deployment &quot;nginx-deployment&quot; created
</code></pre>
<p>&#x5C06;kubectl&#x7684; <code>--record</code> &#x7684; flag &#x8BBE;&#x7F6E;&#x4E3A; <code>true</code>&#x53EF;&#x4EE5;&#x5728; annotation &#x4E2D;&#x8BB0;&#x5F55;&#x5F53;&#x524D;&#x547D;&#x4EE4;&#x521B;&#x5EFA;&#x6216;&#x8005;&#x5347;&#x7EA7;&#x4E86;&#x8BE5;&#x8D44;&#x6E90;&#x3002;&#x8FD9;&#x5728;&#x672A;&#x6765;&#x4F1A;&#x5F88;&#x6709;&#x7528;&#xFF0C;&#x4F8B;&#x5982;&#xFF0C;&#x67E5;&#x770B;&#x5728;&#x6BCF;&#x4E2A; Deployment revision &#x4E2D;&#x6267;&#x884C;&#x4E86;&#x54EA;&#x4E9B;&#x547D;&#x4EE4;&#x3002;</p>
<p>&#x7136;&#x540E;&#x7ACB;&#x5373;&#x6267;&#x884C; <code>get</code> &#x5C06;&#x83B7;&#x5F97;&#x5982;&#x4E0B;&#x7ED3;&#x679C;&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 3 0 0 0 1s
</code></pre>
<p>&#x8F93;&#x51FA;&#x7ED3;&#x679C;&#x8868;&#x660E;&#x6211;&#x4EEC;&#x5E0C;&#x671B;&#x7684;repalica&#x6570;&#x662F;3&#xFF08;&#x6839;&#x636E;deployment&#x4E2D;&#x7684;<code>.spec.replicas</code>&#x914D;&#x7F6E;&#xFF09;&#x5F53;&#x524D;replica&#x6570;&#xFF08; <code>.status.replicas</code>&#xFF09;&#x662F;0, &#x6700;&#x65B0;&#x7684;replica&#x6570;&#xFF08;<code>.status.updatedReplicas</code>&#xFF09;&#x662F;0&#xFF0C;&#x53EF;&#x7528;&#x7684;replica&#x6570;&#xFF08;<code>.status.availableReplicas</code>&#xFF09;&#x662F;0&#x3002;</p>
<p>&#x8FC7;&#x51E0;&#x79D2;&#x540E;&#x518D;&#x6267;&#x884C;<code>get</code>&#x547D;&#x4EE4;&#xFF0C;&#x5C06;&#x83B7;&#x5F97;&#x5982;&#x4E0B;&#x8F93;&#x51FA;&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 3 3 3 3 18s
</code></pre>
<p>&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230;Deployment&#x5DF2;&#x7ECF;&#x521B;&#x5EFA;&#x4E86;3&#x4E2A; replica&#xFF0C;&#x6240;&#x6709;&#x7684; replica &#x90FD;&#x5DF2;&#x7ECF;&#x662F;&#x6700;&#x65B0;&#x7684;&#x4E86;&#xFF08;&#x5305;&#x542B;&#x6700;&#x65B0;&#x7684;pod template&#xFF09;&#xFF0C;&#x53EF;&#x7528;&#x7684;&#xFF08;&#x6839;&#x636E;Deployment&#x4E2D;&#x7684;<code>.spec.minReadySeconds</code>&#x58F0;&#x660E;&#xFF0C;&#x5904;&#x4E8E;&#x5DF2;&#x5C31;&#x7EEA;&#x72B6;&#x6001;&#x7684;pod&#x7684;&#x6700;&#x5C11;&#x4E2A;&#x6570;&#xFF09;&#x3002;&#x6267;&#x884C;<code>kubectl get rs</code>&#x548C;<code>kubectl get pods</code>&#x4F1A;&#x663E;&#x793A;Replica Set&#xFF08;RS&#xFF09;&#x548C;Pod&#x5DF2;&#x521B;&#x5EFA;&#x3002;</p>
<pre><code class="lang-shell">$ kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-2035384211 3 3 0 18s
</code></pre>
<p>&#x60A8;&#x53EF;&#x80FD;&#x4F1A;&#x6CE8;&#x610F;&#x5230; ReplicaSet &#x7684;&#x540D;&#x5B57;&#x603B;&#x662F;<code>&lt;Deployment&#x7684;&#x540D;&#x5B57;&gt;-&lt;pod template&#x7684;hash&#x503C;&gt;</code>&#x3002;</p>
<pre><code class="lang-shell">$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-deployment-2035384211-7ci7o 1/1 Running 0 18s app=nginx,pod-template-hash=2035384211
nginx-deployment-2035384211-kzszj 1/1 Running 0 18s app=nginx,pod-template-hash=2035384211
nginx-deployment-2035384211-qqcnn 1/1 Running 0 18s app=nginx,pod-template-hash=2035384211
</code></pre>
<p>&#x521A;&#x521B;&#x5EFA;&#x7684;Replica Set&#x5C06;&#x4FDD;&#x8BC1;&#x603B;&#x662F;&#x6709;3&#x4E2A; nginx &#x7684; pod &#x5B58;&#x5728;&#x3002;</p>
<p><strong>&#x6CE8;&#x610F;&#xFF1A;</strong> &#x60A8;&#x5FC5;&#x987B;&#x5728; Deployment &#x4E2D;&#x7684; selector &#x6307;&#x5B9A;&#x6B63;&#x786E;&#x7684; pod template label&#xFF08;&#x5728;&#x8BE5;&#x793A;&#x4F8B;&#x4E2D;&#x662F; <code>app = nginx</code>&#xFF09;&#xFF0C;&#x4E0D;&#x8981;&#x8DDF;&#x5176;&#x4ED6;&#x7684; controller &#x7684; selector &#x4E2D;&#x6307;&#x5B9A;&#x7684; pod template label &#x641E;&#x6DF7;&#x4E86;&#xFF08;&#x5305;&#x62EC; Deployment&#x3001;Replica Set&#x3001;Replication Controller &#x7B49;&#xFF09;&#x3002;<strong>Kubernetes &#x672C;&#x8EAB;&#x5E76;&#x4E0D;&#x4F1A;&#x963B;&#x6B62;&#x60A8;&#x4EFB;&#x610F;&#x6307;&#x5B9A; pod template label </strong>&#xFF0C;&#x4F46;&#x662F;&#x5982;&#x679C;&#x60A8;&#x771F;&#x7684;&#x8FD9;&#x4E48;&#x505A;&#x4E86;&#xFF0C;&#x8FD9;&#x4E9B; controller &#x4E4B;&#x95F4;&#x4F1A;&#x76F8;&#x4E92;&#x6253;&#x67B6;&#xFF0C;&#x5E76;&#x53EF;&#x80FD;&#x5BFC;&#x81F4;&#x4E0D;&#x6B63;&#x786E;&#x7684;&#x884C;&#x4E3A;&#x3002;</p>
<h3 id="pod-template-hash-label">Pod-template-hash label</h3>
<p><strong>&#x6CE8;&#x610F;</strong>&#xFF1A;&#x8FD9;&#x4E2A; label &#x4E0D;&#x662F;&#x7528;&#x6237;&#x6307;&#x5B9A;&#x7684;&#xFF01;</p>
<p>&#x6CE8;&#x610F;&#x4E0A;&#x9762;&#x793A;&#x4F8B;&#x8F93;&#x51FA;&#x4E2D;&#x7684; pod label &#x91CC;&#x7684; pod-template-hash label&#x3002;&#x5F53; Deployment &#x521B;&#x5EFA;&#x6216;&#x8005;&#x63A5;&#x7BA1; ReplicaSet &#x65F6;&#xFF0C;Deployment controller &#x4F1A;&#x81EA;&#x52A8;&#x4E3A; Pod &#x6DFB;&#x52A0; pod-template-hash label&#x3002;&#x8FD9;&#x6837;&#x505A;&#x7684;&#x76EE;&#x7684;&#x662F;&#x9632;&#x6B62; Deployment &#x7684;&#x5B50;ReplicaSet &#x7684; pod &#x540D;&#x5B57;&#x91CD;&#x590D;&#x3002;&#x901A;&#x8FC7;&#x5C06; ReplicaSet &#x7684; PodTemplate &#x8FDB;&#x884C;&#x54C8;&#x5E0C;&#x6563;&#x5217;&#xFF0C;&#x4F7F;&#x7528;&#x751F;&#x6210;&#x7684;&#x54C8;&#x5E0C;&#x503C;&#x4F5C;&#x4E3A; label &#x7684;&#x503C;&#xFF0C;&#x5E76;&#x6DFB;&#x52A0;&#x5230; ReplicaSet selector &#x91CC;&#x3001; pod template label &#x548C; ReplicaSet &#x7BA1;&#x7406;&#x4E2D;&#x7684; Pod &#x4E0A;&#x3002;</p>
<h2 id="&#x66F4;&#x65B0;deployment">&#x66F4;&#x65B0;Deployment</h2>
<p><strong>&#x6CE8;&#x610F;&#xFF1A;</strong> Deployment &#x7684; rollout &#x5F53;&#x4E14;&#x4EC5;&#x5F53; Deployment &#x7684; pod template&#xFF08;&#x4F8B;&#x5982;<code>.spec.template</code>&#xFF09;&#x4E2D;&#x7684;label&#x66F4;&#x65B0;&#x6216;&#x8005;&#x955C;&#x50CF;&#x66F4;&#x6539;&#x65F6;&#x88AB;&#x89E6;&#x53D1;&#x3002;&#x5176;&#x4ED6;&#x66F4;&#x65B0;&#xFF0C;&#x4F8B;&#x5982;&#x6269;&#x5BB9;Deployment&#x4E0D;&#x4F1A;&#x89E6;&#x53D1; rollout&#x3002;</p>
<p>&#x5047;&#x5982;&#x6211;&#x4EEC;&#x73B0;&#x5728;&#x60F3;&#x8981;&#x8BA9; nginx pod &#x4F7F;&#x7528;<code>nginx:1.9.1</code>&#x7684;&#x955C;&#x50CF;&#x6765;&#x4EE3;&#x66FF;&#x539F;&#x6765;&#x7684;<code>nginx:1.7.9</code>&#x7684;&#x955C;&#x50CF;&#x3002;</p>
<pre><code class="lang-shell">$ kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
deployment &quot;nginx-deployment&quot; image updated
</code></pre>
<p>&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;<code>edit</code>&#x547D;&#x4EE4;&#x6765;&#x7F16;&#x8F91; Deployment&#xFF0C;&#x4FEE;&#x6539; <code>.spec.template.spec.containers[0].image</code> &#xFF0C;&#x5C06;<code>nginx:1.7.9</code> &#x6539;&#x5199;&#x6210; <code>nginx:1.9.1</code>&#x3002;</p>
<pre><code class="lang-shell">$ kubectl edit deployment/nginx-deployment
deployment &quot;nginx-deployment&quot; edited
</code></pre>
<p>&#x67E5;&#x770B; rollout &#x7684;&#x72B6;&#x6001;&#xFF0C;&#x53EA;&#x8981;&#x6267;&#x884C;&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl rollout status deployment/nginx-deployment
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
deployment &quot;nginx-deployment&quot; successfully rolled out
</code></pre>
<p>Rollout &#x6210;&#x529F;&#x540E;&#xFF0C;<code>get</code> Deployment&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 3 3 3 3 36s
</code></pre>
<p>UP-TO-DATE &#x7684; replica &#x7684;&#x6570;&#x76EE;&#x5DF2;&#x7ECF;&#x8FBE;&#x5230;&#x4E86;&#x914D;&#x7F6E;&#x4E2D;&#x8981;&#x6C42;&#x7684;&#x6570;&#x76EE;&#x3002;</p>
<p>CURRENT &#x7684; replica &#x6570;&#x8868;&#x793A; Deployment &#x7BA1;&#x7406;&#x7684; replica &#x6570;&#x91CF;&#xFF0C;AVAILABLE &#x7684; replica &#x6570;&#x662F;&#x5F53;&#x524D;&#x53EF;&#x7528;&#x7684;replica&#x6570;&#x91CF;&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x901A;&#x8FC7;&#x6267;&#x884C;<code>kubectl get rs</code>&#x53EF;&#x4EE5;&#x770B;&#x5230; Deployment &#x66F4;&#x65B0;&#x4E86;Pod&#xFF0C;&#x901A;&#x8FC7;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684; ReplicaSet &#x5E76;&#x6269;&#x5BB9;&#x4E86;3&#x4E2A; replica&#xFF0C;&#x540C;&#x65F6;&#x5C06;&#x539F;&#x6765;&#x7684; ReplicaSet &#x7F29;&#x5BB9;&#x5230;&#x4E86;0&#x4E2A; replica&#x3002;</p>
<pre><code class="lang-shell">$ kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-1564180365 3 3 0 6s
nginx-deployment-2035384211 0 0 0 36s
</code></pre>
<p>&#x6267;&#x884C; <code>get pods</code>&#x53EA;&#x4F1A;&#x770B;&#x5230;&#x5F53;&#x524D;&#x7684;&#x65B0;&#x7684; pod:</p>
<pre><code class="lang-shell">$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-1564180365-khku8 1/1 Running 0 14s
nginx-deployment-1564180365-nacti 1/1 Running 0 14s
nginx-deployment-1564180365-z9gth 1/1 Running 0 14s
</code></pre>
<p>&#x4E0B;&#x6B21;&#x66F4;&#x65B0;&#x8FD9;&#x4E9B; pod &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53EA;&#x9700;&#x8981;&#x66F4;&#x65B0; Deployment &#x4E2D;&#x7684; pod &#x7684; template &#x5373;&#x53EF;&#x3002;</p>
<p>Deployment &#x53EF;&#x4EE5;&#x4FDD;&#x8BC1;&#x5728;&#x5347;&#x7EA7;&#x65F6;&#x53EA;&#x6709;&#x4E00;&#x5B9A;&#x6570;&#x91CF;&#x7684; Pod &#x662F; down &#x7684;&#x3002;&#x9ED8;&#x8BA4;&#x7684;&#xFF0C;&#x5B83;&#x4F1A;&#x786E;&#x4FDD;&#x81F3;&#x5C11;&#x6709;&#x6BD4;&#x671F;&#x671B;&#x7684;Pod&#x6570;&#x91CF;&#x5C11;&#x4E00;&#x4E2A;&#x662F;up&#x72B6;&#x6001;&#xFF08;&#x6700;&#x591A;&#x4E00;&#x4E2A;&#x4E0D;&#x53EF;&#x7528;&#xFF09;&#x3002;</p>
<p>Deployment &#x540C;&#x65F6;&#x4E5F;&#x53EF;&#x4EE5;&#x786E;&#x4FDD;&#x53EA;&#x521B;&#x5EFA;&#x51FA;&#x8D85;&#x8FC7;&#x671F;&#x671B;&#x6570;&#x91CF;&#x7684;&#x4E00;&#x5B9A;&#x6570;&#x91CF;&#x7684; Pod&#x3002;&#x9ED8;&#x8BA4;&#x7684;&#xFF0C;&#x5B83;&#x4F1A;&#x786E;&#x4FDD;&#x6700;&#x591A;&#x6BD4;&#x671F;&#x671B;&#x7684;Pod&#x6570;&#x91CF;&#x591A;&#x4E00;&#x4E2A;&#x7684; Pod &#x662F; up &#x7684;&#xFF08;&#x6700;&#x591A;1&#x4E2A; surge &#xFF09;&#x3002;</p>
<p><strong>&#x5728;&#x672A;&#x6765;&#x7684; Kuberentes &#x7248;&#x672C;&#x4E2D;&#xFF0C;&#x5C06;&#x4ECE;1-1&#x53D8;&#x6210;25%-25%&#x3002;</strong></p>
<p>&#x4F8B;&#x5982;&#xFF0C;&#x5982;&#x679C;&#x60A8;&#x81EA;&#x5DF1;&#x770B;&#x4E0B;&#x4E0A;&#x9762;&#x7684; Deployment&#xFF0C;&#x60A8;&#x4F1A;&#x53D1;&#x73B0;&#xFF0C;&#x5F00;&#x59CB;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684; Pod&#xFF0C;&#x7136;&#x540E;&#x5220;&#x9664;&#x4E00;&#x4E9B;&#x65E7;&#x7684; Pod &#x518D;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x3002;&#x5F53;&#x65B0;&#x7684;Pod&#x521B;&#x5EFA;&#x51FA;&#x6765;&#x4E4B;&#x524D;&#x4E0D;&#x4F1A;&#x6740;&#x6389;&#x65E7;&#x7684;Pod&#x3002;&#x8FD9;&#x6837;&#x80FD;&#x591F;&#x786E;&#x4FDD;&#x53EF;&#x7528;&#x7684; Pod &#x6570;&#x91CF;&#x81F3;&#x5C11;&#x6709;2&#x4E2A;&#xFF0C;Pod&#x7684;&#x603B;&#x6570;&#x6700;&#x591A;4&#x4E2A;&#x3002;</p>
<pre><code class="lang-shell">$ kubectl describe deployments
Name: nginx-deployment
Namespace: default
CreationTimestamp: Tue, 15 Mar 2016 12:01:06 -0700
Labels: app=nginx
Selector: app=nginx
Replicas: 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 1 max unavailable, 1 max surge
OldReplicaSets: &lt;none&gt;
NewReplicaSet: nginx-deployment-1564180365 (3/3 replicas created)
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
36s 36s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-2035384211 to 3
23s 23s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 1
23s 23s 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 2
23s 23s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 2
21s 21s 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 0
21s 21s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 3
</code></pre>
<p>&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x5F53;&#x6211;&#x4EEC;&#x521A;&#x5F00;&#x59CB;&#x521B;&#x5EFA;&#x8FD9;&#x4E2A; Deployment &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A; ReplicaSet&#xFF08;nginx-deployment-2035384211&#xFF09;&#xFF0C;&#x5E76;&#x76F4;&#x63A5;&#x6269;&#x5BB9;&#x5230;&#x4E86;3&#x4E2A; replica&#x3002;</p>
<p>&#x5F53;&#x6211;&#x4EEC;&#x66F4;&#x65B0;&#x8FD9;&#x4E2A; Deployment &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5B83;&#x4F1A;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684; ReplicaSet&#xFF08;nginx-deployment-1564180365&#xFF09;&#xFF0C;&#x5C06;&#x5B83;&#x6269;&#x5BB9;&#x5230;1&#x4E2A;replica&#xFF0C;&#x7136;&#x540E;&#x7F29;&#x5BB9;&#x539F;&#x5148;&#x7684; ReplicaSet &#x5230;2&#x4E2A; replica&#xFF0C;&#x6B64;&#x65F6;&#x6EE1;&#x8DB3;&#x81F3;&#x5C11;2&#x4E2A; Pod &#x662F;&#x53EF;&#x7528;&#x72B6;&#x6001;&#xFF0C;&#x540C;&#x4E00;&#x65F6;&#x523B;&#x6700;&#x591A;&#x6709;4&#x4E2A; Pod &#x5904;&#x4E8E;&#x521B;&#x5EFA;&#x7684;&#x72B6;&#x6001;&#x3002;</p>
<p>&#x63A5;&#x7740;&#x7EE7;&#x7EED;&#x4F7F;&#x7528;&#x76F8;&#x540C;&#x7684; rolling update &#x7B56;&#x7565;&#x6269;&#x5BB9;&#x65B0;&#x7684; ReplicaSet &#x548C;&#x7F29;&#x5BB9;&#x65E7;&#x7684; ReplicaSet&#x3002;&#x6700;&#x7EC8;&#xFF0C;&#x5C06;&#x4F1A;&#x5728;&#x65B0;&#x7684; ReplicaSet &#x4E2D;&#x6709;3&#x4E2A;&#x53EF;&#x7528;&#x7684; replica&#xFF0C;&#x65E7;&#x7684; ReplicaSet &#x7684; replica &#x6570;&#x76EE;&#x53D8;&#x6210;0&#x3002;</p>
<h3 id="rollover&#xFF08;&#x591A;&#x4E2A;rollout&#x5E76;&#x884C;&#xFF09;">Rollover&#xFF08;&#x591A;&#x4E2A;rollout&#x5E76;&#x884C;&#xFF09;</h3>
<p>&#x6BCF;&#x5F53; Deployment controller &#x89C2;&#x6D4B;&#x5230;&#x6709;&#x65B0;&#x7684; deployment &#x88AB;&#x521B;&#x5EFA;&#x65F6;&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x5DF2;&#x5B58;&#x5728;&#x7684; ReplicaSet &#x6765;&#x521B;&#x5EFA;&#x671F;&#x671B;&#x4E2A;&#x6570;&#x7684; Pod &#x7684;&#x8BDD;&#xFF0C;&#x5C31;&#x4F1A;&#x521B;&#x5EFA;&#x51FA;&#x4E00;&#x4E2A;&#x65B0;&#x7684; ReplicaSet &#x6765;&#x505A;&#x8FD9;&#x4EF6;&#x4E8B;&#x3002;&#x5DF2;&#x5B58;&#x5728;&#x7684; ReplicaSet &#x63A7;&#x5236; label &#x4E0E;<code>.spec.selector</code>&#x5339;&#x914D;&#x4F46;&#x662F; template &#x8DDF;<code>.spec.template</code>&#x4E0D;&#x5339;&#x914D;&#x7684; Pod &#x7F29;&#x5BB9;&#x3002;&#x6700;&#x7EC8;&#xFF0C;&#x65B0;&#x7684; ReplicaSet &#x5C06;&#x4F1A;&#x6269;&#x5BB9;&#x51FA;<code>.spec.replicas</code>&#x6307;&#x5B9A;&#x6570;&#x76EE;&#x7684; Pod&#xFF0C;&#x65E7;&#x7684; ReplicaSet &#x4F1A;&#x7F29;&#x5BB9;&#x5230;0&#x3002;</p>
<p>&#x5982;&#x679C;&#x60A8;&#x66F4;&#x65B0;&#x4E86;&#x4E00;&#x4E2A;&#x7684;&#x5DF2;&#x5B58;&#x5728;&#x5E76;&#x6B63;&#x5728;&#x8FDB;&#x884C;&#x4E2D;&#x7684; Deployment&#xFF0C;&#x6BCF;&#x6B21;&#x66F4;&#x65B0; Deployment&#x90FD;&#x4F1A;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684; ReplicaSet&#x5E76;&#x6269;&#x5BB9;&#x5B83;&#xFF0C;&#x540C;&#x65F6;&#x56DE;&#x6EDA;&#x4E4B;&#x524D;&#x6269;&#x5BB9;&#x7684; ReplicaSet &#x2014;&#x2014;&#x5C06;&#x5B83;&#x6DFB;&#x52A0;&#x5230;&#x65E7;&#x7684; ReplicaSet &#x5217;&#x8868;&#x4E2D;&#xFF0C;&#x5F00;&#x59CB;&#x7F29;&#x5BB9;&#x3002;</p>
<p>&#x4F8B;&#x5982;&#xFF0C;&#x5047;&#x5982;&#x60A8;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;&#x6709;5&#x4E2A;<code>niginx:1.7.9</code> replica&#x7684; Deployment&#xFF0C;&#x4F46;&#x662F;&#x5F53;&#x8FD8;&#x53EA;&#x6709;3&#x4E2A;<code>nginx:1.7.9</code>&#x7684; replica &#x521B;&#x5EFA;&#x51FA;&#x6765;&#x7684;&#x65F6;&#x5019;&#x60A8;&#x5C31;&#x5F00;&#x59CB;&#x66F4;&#x65B0;&#x542B;&#x6709;5&#x4E2A;<code>nginx:1.9.1</code> replica &#x7684; Deployment&#x3002;&#x5728;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;Deployment &#x4F1A;&#x7ACB;&#x5373;&#x6740;&#x6389;&#x5DF2;&#x521B;&#x5EFA;&#x7684;3&#x4E2A;<code>nginx:1.7.9</code>&#x7684; Pod&#xFF0C;&#x5E76;&#x5F00;&#x59CB;&#x521B;&#x5EFA;<code>nginx:1.9.1</code>&#x7684; Pod&#x3002;&#x5B83;&#x4E0D;&#x4F1A;&#x7B49;&#x5230;&#x6240;&#x6709;&#x7684;5&#x4E2A;<code>nginx:1.7.9</code>&#x7684; Pod &#x90FD;&#x521B;&#x5EFA;&#x5B8C;&#x6210;&#x540E;&#x624D;&#x5F00;&#x59CB;&#x6539;&#x53D8;&#x822A;&#x9053;&#x3002;</p>
<h3 id="label-selector-&#x66F4;&#x65B0;">Label selector &#x66F4;&#x65B0;</h3>
<p>&#x6211;&#x4EEC;&#x901A;&#x5E38;&#x4E0D;&#x9F13;&#x52B1;&#x66F4;&#x65B0; label selector&#xFF0C;&#x6211;&#x4EEC;&#x5EFA;&#x8BAE;&#x5B9E;&#x73B0;&#x89C4;&#x5212;&#x597D;&#x60A8;&#x7684; selector&#x3002;</p>
<p>&#x4EFB;&#x4F55;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x53EA;&#x8981;&#x60A8;&#x60F3;&#x8981;&#x6267;&#x884C; label selector &#x7684;&#x66F4;&#x65B0;&#xFF0C;&#x8BF7;&#x4E00;&#x5B9A;&#x8981;&#x8C28;&#x614E;&#x5E76;&#x786E;&#x8BA4;&#x60A8;&#x5DF2;&#x7ECF;&#x9884;&#x6599;&#x5230;&#x6240;&#x6709;&#x53EF;&#x80FD;&#x56E0;&#x6B64;&#x5BFC;&#x81F4;&#x7684;&#x540E;&#x679C;&#x3002;</p>
<ul>
<li>&#x589E;&#x6DFB; selector &#x9700;&#x8981;&#x540C;&#x65F6;&#x5728; Deployment &#x7684; spec &#x4E2D;&#x66F4;&#x65B0;&#x65B0;&#x7684; label&#xFF0C;&#x5426;&#x5219;&#x5C06;&#x8FD4;&#x56DE;&#x6821;&#x9A8C;&#x9519;&#x8BEF;&#x3002;&#x6B64;&#x66F4;&#x6539;&#x662F;&#x4E0D;&#x53EF;&#x8986;&#x76D6;&#x7684;&#xFF0C;&#x8FD9;&#x610F;&#x5473;&#x7740;&#x65B0;&#x7684; selector &#x4E0D;&#x4F1A;&#x9009;&#x62E9;&#x4F7F;&#x7528;&#x65E7; selector &#x521B;&#x5EFA;&#x7684; ReplicaSet &#x548C; Pod&#xFF0C;&#x4ECE;&#x800C;&#x5BFC;&#x81F4;&#x6240;&#x6709;&#x65E7;&#x7248;&#x672C;&#x7684; ReplicaSet &#x90FD;&#x88AB;&#x4E22;&#x5F03;&#xFF0C;&#x5E76;&#x521B;&#x5EFA;&#x65B0;&#x7684; ReplicaSet&#x3002;</li>
<li>&#x66F4;&#x65B0; selector&#xFF0C;&#x5373;&#x66F4;&#x6539; selector key &#x7684;&#x5F53;&#x524D;&#x503C;&#xFF0C;&#x5C06;&#x5BFC;&#x81F4;&#x8DDF;&#x589E;&#x6DFB; selector &#x540C;&#x6837;&#x7684;&#x540E;&#x679C;&#x3002;</li>
<li>&#x5220;&#x9664; selector&#xFF0C;&#x5373;&#x5220;&#x9664; Deployment selector &#x4E2D;&#x7684;&#x5DF2;&#x6709;&#x7684; key&#xFF0C;&#x4E0D;&#x9700;&#x8981;&#x5BF9; Pod template label &#x505A;&#x4EFB;&#x4F55;&#x66F4;&#x6539;&#xFF0C;&#x73B0;&#x6709;&#x7684; ReplicaSet &#x4E5F;&#x4E0D;&#x4F1A;&#x6210;&#x4E3A;&#x5B64;&#x513F;&#xFF0C;&#x4F46;&#x662F;&#x8BF7;&#x6CE8;&#x610F;&#xFF0C;&#x5220;&#x9664;&#x7684; label &#x4ECD;&#x7136;&#x5B58;&#x5728;&#x4E8E;&#x73B0;&#x6709;&#x7684; Pod &#x548C; ReplicaSet &#x4E2D;&#x3002;</li>
</ul>
<h2 id="&#x56DE;&#x9000;deployment">&#x56DE;&#x9000;Deployment</h2>
<p>&#x6709;&#x65F6;&#x5019;&#x60A8;&#x53EF;&#x80FD;&#x60F3;&#x56DE;&#x9000;&#x4E00;&#x4E2A; Deployment&#xFF0C;&#x4F8B;&#x5982;&#xFF0C;&#x5F53; Deployment &#x4E0D;&#x7A33;&#x5B9A;&#x65F6;&#xFF0C;&#x6BD4;&#x5982;&#x4E00;&#x76F4; crash looping&#x3002;</p>
<p>&#x9ED8;&#x8BA4;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;kubernetes &#x4F1A;&#x5728;&#x7CFB;&#x7EDF;&#x4E2D;&#x4FDD;&#x5B58;&#x524D;&#x4E24;&#x6B21;&#x7684; Deployment &#x7684; rollout &#x5386;&#x53F2;&#x8BB0;&#x5F55;&#xFF0C;&#x4EE5;&#x4FBF;&#x60A8;&#x53EF;&#x4EE5;&#x968F;&#x65F6;&#x56DE;&#x9000;&#xFF08;&#x60A8;&#x53EF;&#x4EE5;&#x4FEE;&#x6539;<code>revision history limit</code>&#x6765;&#x66F4;&#x6539;&#x4FDD;&#x5B58;&#x7684;revision&#x6570;&#xFF09;&#x3002;</p>
<p><strong>&#x6CE8;&#x610F;&#xFF1A;</strong> &#x53EA;&#x8981; Deployment &#x7684; rollout &#x88AB;&#x89E6;&#x53D1;&#x5C31;&#x4F1A;&#x521B;&#x5EFA;&#x4E00;&#x4E2A; revision&#x3002;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#x5F53;&#x4E14;&#x4EC5;&#x5F53; Deployment &#x7684; Pod template&#xFF08;&#x5982;<code>.spec.template</code>&#xFF09;&#x88AB;&#x66F4;&#x6539;&#xFF0C;&#x4F8B;&#x5982;&#x66F4;&#x65B0;template &#x4E2D;&#x7684; label &#x548C;&#x5BB9;&#x5668;&#x955C;&#x50CF;&#x65F6;&#xFF0C;&#x5C31;&#x4F1A;&#x521B;&#x5EFA;&#x51FA;&#x4E00;&#x4E2A;&#x65B0;&#x7684; revision&#x3002;</p>
<p>&#x5176;&#x4ED6;&#x7684;&#x66F4;&#x65B0;&#xFF0C;&#x6BD4;&#x5982;&#x6269;&#x5BB9; Deployment &#x4E0D;&#x4F1A;&#x521B;&#x5EFA; revision&#x2014;&#x2014;&#x56E0;&#x6B64;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5F88;&#x65B9;&#x4FBF;&#x7684;&#x624B;&#x52A8;&#x6216;&#x8005;&#x81EA;&#x52A8;&#x6269;&#x5BB9;&#x3002;&#x8FD9;&#x610F;&#x5473;&#x7740;&#x5F53;&#x60A8;&#x56DE;&#x9000;&#x5230;&#x5386;&#x53F2; revision &#x662F;&#xFF0C;&#x76F4;&#x6709; Deployment &#x4E2D;&#x7684; Pod template &#x90E8;&#x5206;&#x624D;&#x4F1A;&#x56DE;&#x9000;&#x3002;</p>
<p>&#x5047;&#x8BBE;&#x6211;&#x4EEC;&#x5728;&#x66F4;&#x65B0; Deployment &#x7684;&#x65F6;&#x5019;&#x72AF;&#x4E86;&#x4E00;&#x4E2A;&#x62FC;&#x5199;&#x9519;&#x8BEF;&#xFF0C;&#x5C06;&#x955C;&#x50CF;&#x7684;&#x540D;&#x5B57;&#x5199;&#x6210;&#x4E86;<code>nginx:1.91</code>&#xFF0C;&#x800C;&#x6B63;&#x786E;&#x7684;&#x540D;&#x5B57;&#x5E94;&#x8BE5;&#x662F;<code>nginx:1.9.1</code>&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl set image deployment/nginx-deployment nginx=nginx:1.91
deployment &quot;nginx-deployment&quot; image updated
</code></pre>
<p>Rollout &#x5C06;&#x4F1A;&#x5361;&#x4F4F;&#x3002;</p>
<pre><code class="lang-shell">$ kubectl rollout status deployments nginx-deployment
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
</code></pre>
<p>&#x6309;&#x4F4F; Ctrl-C &#x505C;&#x6B62;&#x4E0A;&#x9762;&#x7684; rollout &#x72B6;&#x6001;&#x76D1;&#x63A7;&#x3002;</p>
<p>&#x60A8;&#x4F1A;&#x770B;&#x5230;&#x65E7;&#x7684; replica&#xFF08;nginx-deployment-1564180365 &#x548C; nginx-deployment-2035384211&#xFF09;&#x548C;&#x65B0;&#x7684; replica &#xFF08;nginx-deployment-3066724191&#xFF09;&#x6570;&#x76EE;&#x90FD;&#x662F;2&#x4E2A;&#x3002;</p>
<pre><code class="lang-shell">$ kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-1564180365 2 2 0 25s
nginx-deployment-2035384211 0 0 0 36s
nginx-deployment-3066724191 2 2 2 6s
</code></pre>
<p>&#x770B;&#x4E0B;&#x521B;&#x5EFA; Pod&#xFF0C;&#x60A8;&#x4F1A;&#x770B;&#x5230;&#x6709;&#x4E24;&#x4E2A;&#x65B0;&#x7684; ReplicaSet &#x521B;&#x5EFA;&#x7684; Pod &#x5904;&#x4E8E; ImagePullBackOff &#x72B6;&#x6001;&#xFF0C;&#x5FAA;&#x73AF;&#x62C9;&#x53D6;&#x955C;&#x50CF;&#x3002;</p>
<pre><code class="lang-shell">$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-1564180365-70iae 1/1 Running 0 25s
nginx-deployment-1564180365-jbqqo 1/1 Running 0 25s
nginx-deployment-3066724191-08mng 0/1 ImagePullBackOff 0 6s
nginx-deployment-3066724191-eocby 0/1 ImagePullBackOff 0 6s
</code></pre>
<p>&#x6CE8;&#x610F;&#xFF0C;Deployment controller&#x4F1A;&#x81EA;&#x52A8;&#x505C;&#x6B62;&#x574F;&#x7684; rollout&#xFF0C;&#x5E76;&#x505C;&#x6B62;&#x6269;&#x5BB9;&#x65B0;&#x7684; ReplicaSet&#x3002;</p>
<pre><code class="lang-shell">$ kubectl describe deployment
Name: nginx-deployment
Namespace: default
CreationTimestamp: Tue, 15 Mar 2016 14:48:04 -0700
Labels: app=nginx
Selector: app=nginx
Replicas: 2 updated | 3 total | 2 available | 2 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 1 max unavailable, 1 max surge
OldReplicaSets: nginx-deployment-1564180365 (2/2 replicas created)
NewReplicaSet: nginx-deployment-3066724191 (2/2 replicas created)
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
1m 1m 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-2035384211 to 3
22s 22s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 1
22s 22s 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 2
22s 22s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 2
21s 21s 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 0
21s 21s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 3
13s 13s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-3066724191 to 1
13s 13s 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-1564180365 to 2
13s 13s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-3066724191 to 2
</code></pre>
<p>&#x4E3A;&#x4E86;&#x4FEE;&#x590D;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x56DE;&#x9000;&#x5230;&#x7A33;&#x5B9A;&#x7684; Deployment revision&#x3002;</p>
<h3 id="&#x68C0;&#x67E5;-deployment-&#x5347;&#x7EA7;&#x7684;&#x5386;&#x53F2;&#x8BB0;&#x5F55;">&#x68C0;&#x67E5; Deployment &#x5347;&#x7EA7;&#x7684;&#x5386;&#x53F2;&#x8BB0;&#x5F55;</h3>
<p>&#x9996;&#x5148;&#xFF0C;&#x68C0;&#x67E5;&#x4E0B; Deployment &#x7684; revision&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl rollout history deployment/nginx-deployment
deployments &quot;nginx-deployment&quot;:
REVISION CHANGE-CAUSE
1 kubectl create -f https://kubernetes.io/docs/user-guide/nginx-deployment.yaml--record
2 kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
3 kubectl set image deployment/nginx-deployment nginx=nginx:1.91
</code></pre>
<p>&#x56E0;&#x4E3A;&#x6211;&#x4EEC;&#x521B;&#x5EFA; Deployment &#x7684;&#x65F6;&#x5019;&#x4F7F;&#x7528;&#x4E86;<code>--recored</code>&#x53C2;&#x6570;&#x53EF;&#x4EE5;&#x8BB0;&#x5F55;&#x547D;&#x4EE4;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5F88;&#x65B9;&#x4FBF;&#x7684;&#x67E5;&#x770B;&#x6BCF;&#x6B21; revision &#x7684;&#x53D8;&#x5316;&#x3002;</p>
<p>&#x67E5;&#x770B;&#x5355;&#x4E2A;revision &#x7684;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl rollout history deployment/nginx-deployment --revision=2
deployments &quot;nginx-deployment&quot; revision 2
Labels: app=nginx
pod-template-hash=1159050644
Annotations: kubernetes.io/change-cause=kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
Containers:
nginx:
Image: nginx:1.9.1
Port: 80/TCP
QoS Tier:
cpu: BestEffort
memory: BestEffort
Environment Variables: &lt;none&gt;
No volumes.
</code></pre>
<h3 id="&#x56DE;&#x9000;&#x5230;&#x5386;&#x53F2;&#x7248;&#x672C;">&#x56DE;&#x9000;&#x5230;&#x5386;&#x53F2;&#x7248;&#x672C;</h3>
<p>&#x73B0;&#x5728;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x51B3;&#x5B9A;&#x56DE;&#x9000;&#x5F53;&#x524D;&#x7684; rollout &#x5230;&#x4E4B;&#x524D;&#x7684;&#x7248;&#x672C;&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl rollout undo deployment/nginx-deployment
deployment &quot;nginx-deployment&quot; rolled back
</code></pre>
<p>&#x4E5F;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; <code>--revision</code>&#x53C2;&#x6570;&#x6307;&#x5B9A;&#x67D0;&#x4E2A;&#x5386;&#x53F2;&#x7248;&#x672C;&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl rollout undo deployment/nginx-deployment --to-revision=2
deployment &quot;nginx-deployment&quot; rolled back
</code></pre>
<p>&#x4E0E; rollout &#x76F8;&#x5173;&#x7684;&#x547D;&#x4EE4;&#x8BE6;&#x7EC6;&#x6587;&#x6863;&#x89C1;<a href="https://kubernetes.io/docs/user-guide/kubectl/v1.6/#rollout" target="_blank">kubectl rollout</a>&#x3002;</p>
<p>&#x8BE5; Deployment &#x73B0;&#x5728;&#x5DF2;&#x7ECF;&#x56DE;&#x9000;&#x5230;&#x4E86;&#x5148;&#x524D;&#x7684;&#x7A33;&#x5B9A;&#x7248;&#x672C;&#x3002;&#x5982;&#x60A8;&#x6240;&#x89C1;&#xFF0C;Deployment controller&#x4EA7;&#x751F;&#x4E86;&#x4E00;&#x4E2A;&#x56DE;&#x9000;&#x5230;revison 2&#x7684;<code>DeploymentRollback</code>&#x7684; event&#x3002;</p>
<pre><code class="lang-shell">$ kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 3 3 3 3 30m
$ kubectl describe deployment
Name: nginx-deployment
Namespace: default
CreationTimestamp: Tue, 15 Mar 2016 14:48:04 -0700
Labels: app=nginx
Selector: app=nginx
Replicas: 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 1 max unavailable, 1 max surge
OldReplicaSets: &lt;none&gt;
NewReplicaSet: nginx-deployment-1564180365 (3/3 replicas created)
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
30m 30m 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-2035384211 to 3
29m 29m 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 1
29m 29m 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 2
29m 29m 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 2
29m 29m 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 0
29m 29m 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-3066724191 to 2
29m 29m 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-3066724191 to 1
29m 29m 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-1564180365 to 2
2m 2m 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-3066724191 to 0
2m 2m 1 {deployment-controller } Normal DeploymentRollback Rolled back deployment &quot;nginx-deployment&quot; to revision 2
29m 2m 2 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 3
</code></pre>
<h3 id="&#x6E05;&#x7406;-policy">&#x6E05;&#x7406; Policy</h3>
<p>&#x60A8;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x8BBE;&#x7F6E;<code>.spec.revisonHistoryLimit</code>&#x9879;&#x6765;&#x6307;&#x5B9A; deployment &#x6700;&#x591A;&#x4FDD;&#x7559;&#x591A;&#x5C11; revision &#x5386;&#x53F2;&#x8BB0;&#x5F55;&#x3002;&#x9ED8;&#x8BA4;&#x7684;&#x4F1A;&#x4FDD;&#x7559;&#x6240;&#x6709;&#x7684; revision&#xFF1B;&#x5982;&#x679C;&#x5C06;&#x8BE5;&#x9879;&#x8BBE;&#x7F6E;&#x4E3A;0&#xFF0C;Deployment&#x5C31;&#x4E0D;&#x5141;&#x8BB8;&#x56DE;&#x9000;&#x4E86;&#x3002;</p>
<h2 id="deployment-&#x6269;&#x5BB9;">Deployment &#x6269;&#x5BB9;</h2>
<p>&#x60A8;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x4EE5;&#x4E0B;&#x547D;&#x4EE4;&#x6269;&#x5BB9; Deployment&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl scale deployment nginx-deployment --replicas 10
deployment &quot;nginx-deployment&quot; scaled
</code></pre>
<p>&#x5047;&#x8BBE;&#x60A8;&#x7684;&#x96C6;&#x7FA4;&#x4E2D;&#x542F;&#x7528;&#x4E86;<a href="https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough" target="_blank">horizontal pod autoscaling</a>&#xFF0C;&#x60A8;&#x53EF;&#x4EE5;&#x7ED9; Deployment &#x8BBE;&#x7F6E;&#x4E00;&#x4E2A; autoscaler&#xFF0C;&#x57FA;&#x4E8E;&#x5F53;&#x524D; Pod&#x7684; CPU &#x5229;&#x7528;&#x7387;&#x9009;&#x62E9;&#x6700;&#x5C11;&#x548C;&#x6700;&#x591A;&#x7684; Pod &#x6570;&#x3002;</p>
<pre><code class="lang-shell">$ kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80
deployment &quot;nginx-deployment&quot; autoscaled
</code></pre>
<h3 id="&#x6BD4;&#x4F8B;&#x6269;&#x5BB9;">&#x6BD4;&#x4F8B;&#x6269;&#x5BB9;</h3>
<p>RollingUpdate Deployment &#x652F;&#x6301;&#x540C;&#x65F6;&#x8FD0;&#x884C;&#x4E00;&#x4E2A;&#x5E94;&#x7528;&#x7684;&#x591A;&#x4E2A;&#x7248;&#x672C;&#x3002;&#x6216;&#x8005; autoscaler &#x6269; &#x5BB9; RollingUpdate Deployment &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6B63;&#x5728;&#x4E2D;&#x9014;&#x7684; rollout&#xFF08;&#x8FDB;&#x884C;&#x4E2D;&#x6216;&#x8005;&#x5DF2;&#x7ECF;&#x6682;&#x505C;&#x7684;&#xFF09;&#xFF0C;&#x4E3A;&#x4E86;&#x964D;&#x4F4E;&#x98CE;&#x9669;&#xFF0C;Deployment controller &#x5C06;&#x4F1A;&#x5E73;&#x8861;&#x5DF2;&#x5B58;&#x5728;&#x7684;&#x6D3B;&#x52A8;&#x4E2D;&#x7684; ReplicaSet&#xFF08;&#x6709; Pod &#x7684; ReplicaSet&#xFF09;&#x548C;&#x65B0;&#x52A0;&#x5165;&#x7684; replica&#x3002;&#x8FD9;&#x88AB;&#x79F0;&#x4E3A;&#x6BD4;&#x4F8B;&#x6269;&#x5BB9;&#x3002;</p>
<p>&#x4F8B;&#x5982;&#xFF0C;&#x60A8;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x4E2D;&#x542B;&#x6709;10&#x4E2A; replica &#x7684; Deployment&#x3002;maxSurge=3&#xFF0C;maxUnavailable=2&#x3002;</p>
<pre><code class="lang-shell">$ kubectl get deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 10 10 10 10 50s
</code></pre>
<p>&#x60A8;&#x66F4;&#x65B0;&#x4E86;&#x4E00;&#x4E2A;&#x955C;&#x50CF;&#xFF0C;&#x800C;&#x5728;&#x96C6;&#x7FA4;&#x5185;&#x90E8;&#x65E0;&#x6CD5;&#x89E3;&#x6790;&#x3002;</p>
<pre><code class="lang-shell">$ kubectl set image deploy/nginx-deployment nginx=nginx:sometag
deployment &quot;nginx-deployment&quot; image updated
</code></pre>
<p>&#x955C;&#x50CF;&#x66F4;&#x65B0;&#x542F;&#x52A8;&#x4E86;&#x4E00;&#x4E2A;&#x5305;&#x542B;ReplicaSet nginx-deployment-1989198191&#x7684;&#x65B0;&#x7684;rollout&#xFF0C;&#x4F46;&#x662F;&#x5B83;&#x88AB;&#x963B;&#x585E;&#x4E86;&#xFF0C;&#x56E0;&#x4E3A;&#x6211;&#x4EEC;&#x4E0A;&#x9762;&#x63D0;&#x5230;&#x7684;maxUnavailable&#x3002;</p>
<pre><code class="lang-shell">$ kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-1989198191 5 5 0 9s
nginx-deployment-618515232 8 8 8 1m
</code></pre>
<p>&#x7136;&#x540E;&#x53D1;&#x8D77;&#x4E86;&#x4E00;&#x4E2A;&#x65B0;&#x7684;Deployment&#x6269;&#x5BB9;&#x8BF7;&#x6C42;&#x3002;autoscaler&#x5C06;Deployment&#x7684;repllica&#x6570;&#x76EE;&#x589E;&#x52A0;&#x5230;&#x4E86;15&#x4E2A;&#x3002;Deployment controller&#x9700;&#x8981;&#x5224;&#x65AD;&#x5728;&#x54EA;&#x91CC;&#x589E;&#x52A0;&#x8FD9;5&#x4E2A;&#x65B0;&#x7684;replica&#x3002;&#x5982;&#x679C;&#x6211;&#x4EEC;&#x6CA1;&#x6709;&#x8C01;&#x7528;&#x6BD4;&#x4F8B;&#x6269;&#x5BB9;&#xFF0C;&#x6240;&#x6709;&#x7684;5&#x4E2A;replica&#x90FD;&#x4F1A;&#x52A0;&#x5230;&#x4E00;&#x4E2A;&#x65B0;&#x7684;ReplicaSet&#x4E2D;&#x3002;&#x5982;&#x679C;&#x4F7F;&#x7528;&#x6BD4;&#x4F8B;&#x6269;&#x5BB9;&#xFF0C;&#x65B0;&#x6DFB;&#x52A0;&#x7684;replica&#x5C06;&#x4F20;&#x64AD;&#x5230;&#x6240;&#x6709;&#x7684;ReplicaSet&#x4E2D;&#x3002;&#x5927;&#x7684;&#x90E8;&#x5206;&#x52A0;&#x5165;replica&#x6570;&#x6700;&#x591A;&#x7684;ReplicaSet&#x4E2D;&#xFF0C;&#x5C0F;&#x7684;&#x90E8;&#x5206;&#x52A0;&#x5165;&#x5230;replica&#x6570;&#x5C11;&#x7684;ReplciaSet&#x4E2D;&#x3002;0&#x4E2A;replica&#x7684;ReplicaSet&#x4E0D;&#x4F1A;&#x88AB;&#x6269;&#x5BB9;&#x3002;</p>
<p>&#x5728;&#x6211;&#x4EEC;&#x4E0A;&#x9762;&#x7684;&#x4F8B;&#x5B50;&#x4E2D;&#xFF0C;3&#x4E2A;replica&#x5C06;&#x6DFB;&#x52A0;&#x5230;&#x65E7;&#x7684;ReplicaSet&#x4E2D;&#xFF0C;2&#x4E2A;replica&#x5C06;&#x6DFB;&#x52A0;&#x5230;&#x65B0;&#x7684;ReplicaSet&#x4E2D;&#x3002;rollout&#x8FDB;&#x7A0B;&#x6700;&#x7EC8;&#x4F1A;&#x5C06;&#x6240;&#x6709;&#x7684;replica&#x79FB;&#x52A8;&#x5230;&#x65B0;&#x7684;ReplicaSet&#x4E2D;&#xFF0C;&#x5047;&#x8BBE;&#x65B0;&#x7684;replica&#x6210;&#x4E3A;&#x5065;&#x5EB7;&#x72B6;&#x6001;&#x3002;</p>
<pre><code class="lang-shell">$ kubectl get deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 15 18 7 8 7m
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-1989198191 7 7 0 7m
nginx-deployment-618515232 11 11 11 7m
</code></pre>
<h2 id="&#x6682;&#x505C;&#x548C;&#x6062;&#x590D;deployment">&#x6682;&#x505C;&#x548C;&#x6062;&#x590D;Deployment</h2>
<p>&#x60A8;&#x53EF;&#x4EE5;&#x5728;&#x53D1;&#x51FA;&#x4E00;&#x6B21;&#x6216;&#x591A;&#x6B21;&#x66F4;&#x65B0;&#x524D;&#x6682;&#x505C;&#x4E00;&#x4E2A; Deployment&#xFF0C;&#x7136;&#x540E;&#x518D;&#x6062;&#x590D;&#x5B83;&#x3002;&#x8FD9;&#x6837;&#x60A8;&#x5C31;&#x80FD;&#x591A;&#x6B21;&#x6682;&#x505C;&#x548C;&#x6062;&#x590D; Deployment&#xFF0C;&#x5728;&#x6B64;&#x671F;&#x95F4;&#x8FDB;&#x884C;&#x4E00;&#x4E9B;&#x4FEE;&#x590D;&#x5DE5;&#x4F5C;&#xFF0C;&#x800C;&#x4E0D;&#x4F1A;&#x53D1;&#x51FA;&#x4E0D;&#x5FC5;&#x8981;&#x7684; rollout&#x3002;</p>
<p>&#x4F8B;&#x5982;&#x4F7F;&#x7528;&#x521A;&#x521A;&#x521B;&#x5EFA; Deployment&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl get deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 3 3 3 3 1m
[mkargaki@dhcp129-211 kubernetes]$ kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-2142116321 3 3 3 1m
</code></pre>
<p>&#x4F7F;&#x7528;&#x4EE5;&#x4E0B;&#x547D;&#x4EE4;&#x6682;&#x505C; Deployment&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl rollout pause deployment/nginx-deployment
deployment &quot;nginx-deployment&quot; paused
</code></pre>
<p>&#x7136;&#x540E;&#x66F4;&#x65B0; Deplyment&#x4E2D;&#x7684;&#x955C;&#x50CF;&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl set image deploy/nginx nginx=nginx:1.9.1
deployment &quot;nginx-deployment&quot; image updated
</code></pre>
<p>&#x6CE8;&#x610F;&#x65B0;&#x7684; rollout &#x542F;&#x52A8;&#x4E86;&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl rollout history deploy/nginx
deployments &quot;nginx&quot;
REVISION CHANGE-CAUSE
1 &lt;none&gt;
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-2142116321 3 3 3 2m
</code></pre>
<p>&#x60A8;&#x53EF;&#x4EE5;&#x8FDB;&#x884C;&#x4EFB;&#x610F;&#x591A;&#x6B21;&#x66F4;&#x65B0;&#xFF0C;&#x4F8B;&#x5982;&#x66F4;&#x65B0;&#x4F7F;&#x7528;&#x7684;&#x8D44;&#x6E90;&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi
deployment &quot;nginx&quot; resource requirements updated
</code></pre>
<p>Deployment &#x6682;&#x505C;&#x524D;&#x7684;&#x521D;&#x59CB;&#x72B6;&#x6001;&#x5C06;&#x7EE7;&#x7EED;&#x5B83;&#x7684;&#x529F;&#x80FD;&#xFF0C;&#x800C;&#x4E0D;&#x4F1A;&#x5BF9; Deployment &#x7684;&#x66F4;&#x65B0;&#x4EA7;&#x751F;&#x4EFB;&#x4F55;&#x5F71;&#x54CD;&#xFF0C;&#x53EA;&#x8981; Deployment&#x662F;&#x6682;&#x505C;&#x7684;&#x3002;</p>
<p>&#x6700;&#x540E;&#xFF0C;&#x6062;&#x590D;&#x8FD9;&#x4E2A; Deployment&#xFF0C;&#x89C2;&#x5BDF;&#x5B8C;&#x6210;&#x66F4;&#x65B0;&#x7684; ReplicaSet &#x5DF2;&#x7ECF;&#x521B;&#x5EFA;&#x51FA;&#x6765;&#x4E86;&#xFF1A;</p>
<pre><code class="lang-shell">$ kubectl rollout resume deploy nginx
deployment &quot;nginx&quot; resumed
$ KUBECTL get rs -w
NAME DESIRED CURRENT READY AGE
nginx-2142116321 2 2 2 2m
nginx-3926361531 2 2 0 6s
nginx-3926361531 2 2 1 18s
nginx-2142116321 1 2 2 2m
nginx-2142116321 1 2 2 2m
nginx-3926361531 3 2 1 18s
nginx-3926361531 3 2 1 18s
nginx-2142116321 1 1 1 2m
nginx-3926361531 3 3 1 18s
nginx-3926361531 3 3 2 19s
nginx-2142116321 0 1 1 2m
nginx-2142116321 0 1 1 2m
nginx-2142116321 0 0 0 2m
nginx-3926361531 3 3 3 20s
^C
$ KUBECTL get rs
NAME DESIRED CURRENT READY AGE
nginx-2142116321 0 0 0 2m
nginx-3926361531 3 3 3 28s
</code></pre>
<p><strong>&#x6CE8;&#x610F;&#xFF1A;</strong> &#x5728;&#x6062;&#x590D; Deployment &#x4E4B;&#x524D;&#x60A8;&#x65E0;&#x6CD5;&#x56DE;&#x9000;&#x4E00;&#x4E2A;&#x5DF2;&#x7ECF;&#x6682;&#x505C;&#x7684; Deployment&#x3002;</p>
<h2 id="deployment-&#x72B6;&#x6001;">Deployment &#x72B6;&#x6001;</h2>
<p>Deployment &#x5728;&#x751F;&#x547D;&#x5468;&#x671F;&#x4E2D;&#x6709;&#x591A;&#x79CD;&#x72B6;&#x6001;&#x3002;&#x5728;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684; ReplicaSet &#x7684;&#x65F6;&#x5019;&#x5B83;&#x53EF;&#x4EE5;&#x662F; <a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment.md#progressing-deployment" target="_blank">progressing</a> &#x72B6;&#x6001;&#xFF0C; <a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment.md#complete-deployment" target="_blank">complete</a> &#x72B6;&#x6001;&#xFF0C;&#x6216;&#x8005; <a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment.md#failed-deployment" target="_blank">fail to progress </a>&#x72B6;&#x6001;&#x3002;</p>
<h3 id="&#x8FDB;&#x884C;&#x4E2D;&#x7684;-deployment">&#x8FDB;&#x884C;&#x4E2D;&#x7684; Deployment</h3>
<p>Kubernetes &#x5C06;&#x6267;&#x884C;&#x8FC7;&#x4E0B;&#x5217;&#x4EFB;&#x52A1;&#x4E4B;&#x4E00;&#x7684; Deployment &#x6807;&#x8BB0;&#x4E3A; <em>progressing</em> &#x72B6;&#x6001;&#xFF1A;</p>
<ul>
<li>Deployment &#x6B63;&#x5728;&#x521B;&#x5EFA;&#x65B0;&#x7684;ReplicaSet&#x8FC7;&#x7A0B;&#x4E2D;&#x3002;</li>
<li>Deployment &#x6B63;&#x5728;&#x6269;&#x5BB9;&#x4E00;&#x4E2A;&#x5DF2;&#x6709;&#x7684; ReplicaSet&#x3002;</li>
<li>Deployment &#x6B63;&#x5728;&#x7F29;&#x5BB9;&#x4E00;&#x4E2A;&#x5DF2;&#x6709;&#x7684; ReplicaSet&#x3002;</li>
<li>&#x6709;&#x65B0;&#x7684;&#x53EF;&#x7528;&#x7684; pod &#x51FA;&#x73B0;&#x3002;</li>
</ul>
<p>&#x60A8;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;<code>kubectl rollout status</code>&#x547D;&#x4EE4;&#x76D1;&#x63A7; Deployment &#x7684;&#x8FDB;&#x5EA6;&#x3002;</p>
<h3 id="&#x5B8C;&#x6210;&#x7684;-deployment">&#x5B8C;&#x6210;&#x7684; Deployment</h3>
<p>Kubernetes &#x5C06;&#x5305;&#x62EC;&#x4EE5;&#x4E0B;&#x7279;&#x6027;&#x7684; Deployment &#x6807;&#x8BB0;&#x4E3A; <em>complete</em> &#x72B6;&#x6001;&#xFF1A;</p>
<ul>
<li>Deployment &#x6700;&#x5C0F;&#x53EF;&#x7528;&#x3002;&#x6700;&#x5C0F;&#x53EF;&#x7528;&#x610F;&#x5473;&#x7740; Deployment &#x7684;&#x53EF;&#x7528; replica &#x4E2A;&#x6570;&#x7B49;&#x4E8E;&#x6216;&#x8005;&#x8D85;&#x8FC7; Deployment &#x7B56;&#x7565;&#x4E2D;&#x7684;&#x671F;&#x671B;&#x4E2A;&#x6570;&#x3002;</li>
<li>&#x6240;&#x6709;&#x4E0E;&#x8BE5; Deployment &#x76F8;&#x5173;&#x7684;replica&#x90FD;&#x88AB;&#x66F4;&#x65B0;&#x5230;&#x4E86;&#x60A8;&#x6307;&#x5B9A;&#x7248;&#x672C;&#xFF0C;&#x4E5F;&#x5C31;&#x8BF4;&#x66F4;&#x65B0;&#x5B8C;&#x6210;&#x3002;</li>
<li>&#x8BE5; Deployment &#x4E2D;&#x6CA1;&#x6709;&#x65E7;&#x7684; Pod &#x5B58;&#x5728;&#x3002;</li>
</ul>
<p>&#x60A8;&#x53EF;&#x4EE5;&#x7528;<code>kubectl rollout status</code>&#x547D;&#x4EE4;&#x67E5;&#x770B; Deployment &#x662F;&#x5426;&#x5B8C;&#x6210;&#x3002;&#x5982;&#x679C; rollout &#x6210;&#x529F;&#x5B8C;&#x6210;&#xFF0C;<code>kubectl rollout status</code>&#x5C06;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;0&#x503C;&#x7684; Exit Code&#x3002;</p>
<pre><code>$ kubectl rollout status deploy/nginx
Waiting for rollout to finish: 2 of 3 updated replicas are available...
deployment &quot;nginx&quot; successfully rolled out
$ echo $?
0
</code></pre><h3 id="&#x5931;&#x8D25;&#x7684;-deployment">&#x5931;&#x8D25;&#x7684; Deployment</h3>
<p>&#x60A8;&#x7684; Deployment &#x5728;&#x5C1D;&#x8BD5;&#x90E8;&#x7F72;&#x65B0;&#x7684; ReplicaSet &#x7684;&#x65F6;&#x5019;&#x53EF;&#x80FD;&#x5361;&#x4F4F;&#xFF0C;&#x7528;&#x4E8E;&#x4E5F;&#x4E0D;&#x4F1A;&#x5B8C;&#x6210;&#x3002;&#x8FD9;&#x53EF;&#x80FD;&#x662F;&#x56E0;&#x4E3A;&#x4EE5;&#x4E0B;&#x51E0;&#x4E2A;&#x56E0;&#x7D20;&#x5F15;&#x8D77;&#x7684;&#xFF1A;</p>
<ul>
<li>&#x65E0;&#x6548;&#x7684;&#x5F15;&#x7528;</li>
<li>&#x4E0D;&#x53EF;&#x8BFB;&#x7684; probe failure</li>
<li>&#x955C;&#x50CF;&#x62C9;&#x53D6;&#x9519;&#x8BEF;</li>
<li>&#x6743;&#x9650;&#x4E0D;&#x591F;</li>
<li>&#x8303;&#x56F4;&#x9650;&#x5236;</li>
<li>&#x7A0B;&#x5E8F;&#x8FD0;&#x884C;&#x65F6;&#x914D;&#x7F6E;&#x9519;&#x8BEF;</li>
</ul>
<p>&#x63A2;&#x6D4B;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x7684;&#x4E00;&#x79CD;&#x65B9;&#x5F0F;&#x662F;&#xFF0C;&#x5728;&#x60A8;&#x7684; Deployment spec &#x4E2D;&#x6307;&#x5B9A;<a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment.md#progress-deadline-seconds" target="_blank"><code>spec.progressDeadlineSeconds</code></a>&#x3002;<code>spec.progressDeadlineSeconds</code> &#x8868;&#x793A; Deployment controller &#x7B49;&#x5F85;&#x591A;&#x5C11;&#x79D2;&#x624D;&#x80FD;&#x786E;&#x5B9A;&#xFF08;&#x901A;&#x8FC7; Deployment status&#xFF09;Deployment&#x8FDB;&#x7A0B;&#x662F;&#x5361;&#x4F4F;&#x7684;&#x3002;</p>
<p>&#x4E0B;&#x9762;&#x7684;<code>kubectl</code>&#x547D;&#x4EE4;&#x8BBE;&#x7F6E;<code>progressDeadlineSeconds</code> &#x4F7F; controller &#x5728; Deployment &#x5728;&#x8FDB;&#x5EA6;&#x5361;&#x4F4F;10&#x5206;&#x949F;&#x540E;&#x62A5;&#x544A;&#xFF1A;</p>
<pre><code>$ kubectl patch deployment/nginx-deployment -p &apos;{&quot;spec&quot;:{&quot;progressDeadlineSeconds&quot;:600}}&apos;
&quot;nginx-deployment&quot; patched
</code></pre><p>&#x5F53;&#x8D85;&#x8FC7;&#x622A;&#x6B62;&#x65F6;&#x95F4;&#x540E;&#xFF0C;Deployment controller &#x4F1A;&#x5728; Deployment &#x7684; <code>status.conditions</code>&#x4E2D;&#x589E;&#x52A0;&#x4E00;&#x6761;DeploymentCondition&#xFF0C;&#x5B83;&#x5305;&#x62EC;&#x5982;&#x4E0B;&#x5C5E;&#x6027;&#xFF1A;</p>
<ul>
<li>Type=Progressing</li>
<li>Status=False</li>
<li>Reason=ProgressDeadlineExceeded</li>
</ul>
<p>&#x6D4F;&#x89C8; <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#typical-status-properties" target="_blank">Kubernetes API conventions</a> &#x67E5;&#x770B;&#x5173;&#x4E8E;status conditions&#x7684;&#x66F4;&#x591A;&#x4FE1;&#x606F;&#x3002;</p>
<p><strong>&#x6CE8;&#x610F;&#xFF1A;</strong> kubernetes&#x9664;&#x4E86;&#x62A5;&#x544A;<code>Reason=ProgressDeadlineExceeded</code>&#x72B6;&#x6001;&#x4FE1;&#x606F;&#x5916;&#x4E0D;&#x4F1A;&#x5BF9;&#x5361;&#x4F4F;&#x7684; Deployment &#x505A;&#x4EFB;&#x4F55;&#x64CD;&#x4F5C;&#x3002;&#x66F4;&#x9AD8;&#x5C42;&#x6B21;&#x7684;&#x534F;&#x8C03;&#x5668;&#x53EF;&#x4EE5;&#x5229;&#x7528;&#x5B83;&#x5E76;&#x91C7;&#x53D6;&#x76F8;&#x5E94;&#x884C;&#x52A8;&#xFF0C;&#x4F8B;&#x5982;&#xFF0C;&#x56DE;&#x6EDA; Deployment &#x5230;&#x4E4B;&#x524D;&#x7684;&#x7248;&#x672C;&#x3002;</p>
<p><strong>&#x6CE8;&#x610F;&#xFF1A;</strong> &#x5982;&#x679C;&#x60A8;&#x6682;&#x505C;&#x4E86;&#x4E00;&#x4E2A; Deployment&#xFF0C;&#x5728;&#x6682;&#x505C;&#x7684;&#x8FD9;&#x6BB5;&#x65F6;&#x95F4;&#x5185;kubernetnes&#x4E0D;&#x4F1A;&#x68C0;&#x67E5;&#x60A8;&#x6307;&#x5B9A;&#x7684; deadline&#x3002;&#x60A8;&#x53EF;&#x4EE5;&#x5728; Deployment &#x7684; rollout &#x9014;&#x4E2D;&#x5B89;&#x5168;&#x7684;&#x6682;&#x505C;&#x5B83;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x6062;&#x590D;&#x5B83;&#xFF0C;&#x8FD9;&#x4E0D;&#x4F1A;&#x89E6;&#x53D1;&#x8D85;&#x8FC7;deadline&#x7684;&#x72B6;&#x6001;&#x3002;</p>
<p>&#x60A8;&#x53EF;&#x80FD;&#x5728;&#x4F7F;&#x7528; Deployment &#x7684;&#x65F6;&#x5019;&#x9047;&#x5230;&#x4E00;&#x4E9B;&#x77ED;&#x6682;&#x7684;&#x9519;&#x8BEF;&#xFF0C;&#x8FD9;&#x4E9B;&#x53EF;&#x80FD;&#x662F;&#x7531;&#x4E8E;&#x60A8;&#x8BBE;&#x7F6E;&#x4E86;&#x592A;&#x77ED;&#x7684; timeout&#xFF0C;&#x4E5F;&#x6709;&#x53EF;&#x80FD;&#x662F;&#x56E0;&#x4E3A;&#x5404;&#x79CD;&#x5176;&#x4ED6;&#x9519;&#x8BEF;&#x5BFC;&#x81F4;&#x7684;&#x77ED;&#x6682;&#x9519;&#x8BEF;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x5047;&#x8BBE;&#x60A8;&#x4F7F;&#x7528;&#x4E86;&#x65E0;&#x6548;&#x7684;&#x5F15;&#x7528;&#x3002;&#x5F53;&#x60A8; Describe Deployment &#x7684;&#x65F6;&#x5019;&#x53EF;&#x80FD;&#x4F1A;&#x6CE8;&#x610F;&#x5230;&#x5982;&#x4E0B;&#x4FE1;&#x606F;&#xFF1A;</p>
<pre><code>$ kubectl describe deployment nginx-deployment
&lt;...&gt;
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True ReplicaSetUpdated
ReplicaFailure True FailedCreate
&lt;...&gt;
</code></pre><p>&#x6267;&#x884C; <code>kubectl get deployment nginx-deployment -o yaml</code>&#xFF0C;Deployement &#x7684;&#x72B6;&#x6001;&#x53EF;&#x80FD;&#x770B;&#x8D77;&#x6765;&#x50CF;&#x8FD9;&#x4E2A;&#x6837;&#x5B50;&#xFF1A;</p>
<pre><code class="lang-yaml"><span class="hljs-attr">status:</span>
<span class="hljs-attr"> availableReplicas:</span> <span class="hljs-number">2</span>
<span class="hljs-attr"> conditions:</span>
<span class="hljs-attr"> - lastTransitionTime:</span> <span class="hljs-number">2016</span><span class="hljs-bullet">-10</span><span class="hljs-bullet">-04</span>T12:<span class="hljs-number">25</span>:<span class="hljs-number">39</span>Z
<span class="hljs-attr"> lastUpdateTime:</span> <span class="hljs-number">2016</span><span class="hljs-bullet">-10</span><span class="hljs-bullet">-04</span>T12:<span class="hljs-number">25</span>:<span class="hljs-number">39</span>Z
<span class="hljs-attr"> message:</span> Replica set <span class="hljs-string">&quot;nginx-deployment-4262182780&quot;</span> is progressing.
<span class="hljs-attr"> reason:</span> ReplicaSetUpdated
<span class="hljs-attr"> status:</span> <span class="hljs-string">&quot;True&quot;</span>
<span class="hljs-attr"> type:</span> Progressing
<span class="hljs-attr"> - lastTransitionTime:</span> <span class="hljs-number">2016</span><span class="hljs-bullet">-10</span><span class="hljs-bullet">-04</span>T12:<span class="hljs-number">25</span>:<span class="hljs-number">42</span>Z
<span class="hljs-attr"> lastUpdateTime:</span> <span class="hljs-number">2016</span><span class="hljs-bullet">-10</span><span class="hljs-bullet">-04</span>T12:<span class="hljs-number">25</span>:<span class="hljs-number">42</span>Z
<span class="hljs-attr"> message:</span> Deployment has minimum availability.
<span class="hljs-attr"> reason:</span> MinimumReplicasAvailable
<span class="hljs-attr"> status:</span> <span class="hljs-string">&quot;True&quot;</span>
<span class="hljs-attr"> type:</span> Available
<span class="hljs-attr"> - lastTransitionTime:</span> <span class="hljs-number">2016</span><span class="hljs-bullet">-10</span><span class="hljs-bullet">-04</span>T12:<span class="hljs-number">25</span>:<span class="hljs-number">39</span>Z
<span class="hljs-attr"> lastUpdateTime:</span> <span class="hljs-number">2016</span><span class="hljs-bullet">-10</span><span class="hljs-bullet">-04</span>T12:<span class="hljs-number">25</span>:<span class="hljs-number">39</span>Z
<span class="hljs-attr"> message:</span> <span class="hljs-string">&apos;Error creating: pods &quot;nginx-deployment-4262182780-&quot; is forbidden: exceeded quota:
object-counts, requested: pods=1, used: pods=3, limited: pods=2&apos;</span>
<span class="hljs-attr"> reason:</span> FailedCreate
<span class="hljs-attr"> status:</span> <span class="hljs-string">&quot;True&quot;</span>
<span class="hljs-attr"> type:</span> ReplicaFailure
<span class="hljs-attr"> observedGeneration:</span> <span class="hljs-number">3</span>
<span class="hljs-attr"> replicas:</span> <span class="hljs-number">2</span>
<span class="hljs-attr"> unavailableReplicas:</span> <span class="hljs-number">2</span>
</code></pre>
<p>&#x6700;&#x7EC8;&#xFF0C;&#x4E00;&#x65E6;&#x8D85;&#x8FC7; Deployment &#x8FDB;&#x7A0B;&#x7684; deadline&#xFF0C;kuberentes &#x4F1A;&#x66F4;&#x65B0;&#x72B6;&#x6001;&#x548C;&#x5BFC;&#x81F4; Progressing &#x72B6;&#x6001;&#x7684;&#x539F;&#x56E0;&#xFF1A;</p>
<pre><code>Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing False ProgressDeadlineExceeded
ReplicaFailure True FailedCreate
</code></pre><p>&#x60A8;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x7F29;&#x5BB9; Deployment&#x7684;&#x65B9;&#x5F0F;&#x89E3;&#x51B3;&#x914D;&#x989D;&#x4E0D;&#x8DB3;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x6216;&#x8005;&#x589E;&#x52A0;&#x60A8;&#x7684; namespace &#x7684;&#x914D;&#x989D;&#x3002;&#x5982;&#x679C;&#x60A8;&#x6EE1;&#x8DB3;&#x4E86;&#x914D;&#x989D;&#x6761;&#x4EF6;&#x540E;&#xFF0C;Deployment controller &#x5C31;&#x4F1A;&#x5B8C;&#x6210;&#x60A8;&#x7684; Deployment rollout&#xFF0C;&#x60A8;&#x5C06;&#x770B;&#x5230; Deployment &#x7684;&#x72B6;&#x6001;&#x66F4;&#x65B0;&#x4E3A;&#x6210;&#x529F;&#x72B6;&#x6001;&#xFF08;<code>Status=True</code>&#x5E76;&#x4E14;<code>Reason=NewReplicaSetAvailable</code>&#xFF09;&#x3002;</p>
<pre><code>Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
</code></pre><p><code>Type=Available</code>&#x3001; <code>Status=True</code> &#x4EE5;&#x4E3A;&#x8FD9;&#x60A8;&#x7684;Deployment&#x6709;&#x6700;&#x5C0F;&#x53EF;&#x7528;&#x6027;&#x3002; &#x6700;&#x5C0F;&#x53EF;&#x7528;&#x6027;&#x662F;&#x5728;Deployment&#x7B56;&#x7565;&#x4E2D;&#x6307;&#x5B9A;&#x7684;&#x53C2;&#x6570;&#x3002;<code>Type=Progressing</code> &#x3001; <code>Status=True</code>&#x610F;&#x5473;&#x7740;&#x60A8;&#x7684;Deployment &#x6216;&#x8005;&#x5728;&#x90E8;&#x7F72;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x6216;&#x8005;&#x5DF2;&#x7ECF;&#x6210;&#x529F;&#x90E8;&#x7F72;&#xFF0C;&#x8FBE;&#x5230;&#x4E86;&#x671F;&#x671B;&#x7684;&#x6700;&#x5C11;&#x7684;&#x53EF;&#x7528;replica&#x6570;&#x91CF;&#xFF08;&#x67E5;&#x770B;&#x7279;&#x5B9A;&#x72B6;&#x6001;&#x7684;Reason&#x2014;&#x2014;&#x5728;&#x6211;&#x4EEC;&#x7684;&#x4F8B;&#x5B50;&#x4E2D;<code>Reason=NewReplicaSetAvailable</code> &#x610F;&#x5473;&#x7740;Deployment&#x5DF2;&#x7ECF;&#x5B8C;&#x6210;&#xFF09;&#x3002;</p>
<p>&#x60A8;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;<code>kubectl rollout status</code>&#x547D;&#x4EE4;&#x67E5;&#x770B;Deployment&#x8FDB;&#x7A0B;&#x662F;&#x5426;&#x5931;&#x8D25;&#x3002;&#x5F53;Deployment&#x8FC7;&#x7A0B;&#x8D85;&#x8FC7;&#x4E86;deadline&#xFF0C;<code>kubectl rollout status</code>&#x5C06;&#x8FD4;&#x56DE;&#x975E;0&#x7684;exit code&#x3002;</p>
<pre><code>$ kubectl rollout status deploy/nginx
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
error: deployment &quot;nginx&quot; exceeded its progress deadline
$ echo $?
1
</code></pre><h3 id="&#x64CD;&#x4F5C;&#x5931;&#x8D25;&#x7684;-deployment">&#x64CD;&#x4F5C;&#x5931;&#x8D25;&#x7684; Deployment</h3>
<p>&#x6240;&#x6709;&#x5BF9;&#x5B8C;&#x6210;&#x7684; Deployment &#x7684;&#x64CD;&#x4F5C;&#x90FD;&#x9002;&#x7528;&#x4E8E;&#x5931;&#x8D25;&#x7684; Deployment&#x3002;&#x60A8;&#x53EF;&#x4EE5;&#x5BF9;&#x5B83;&#x6269;/&#x7F29;&#x5BB9;&#xFF0C;&#x56DE;&#x9000;&#x5230;&#x5386;&#x53F2;&#x7248;&#x672C;&#xFF0C;&#x60A8;&#x751A;&#x81F3;&#x53EF;&#x4EE5;&#x591A;&#x6B21;&#x6682;&#x505C;&#x5B83;&#x6765;&#x5E94;&#x7528; Deployment pod template&#x3002;</p>
<h2 id="&#x6E05;&#x7406;policy">&#x6E05;&#x7406;Policy</h2>
<p>&#x60A8;&#x53EF;&#x4EE5;&#x8BBE;&#x7F6E; Deployment &#x4E2D;&#x7684; <code>.spec.revisionHistoryLimit</code> &#x9879;&#x6765;&#x6307;&#x5B9A;&#x4FDD;&#x7559;&#x591A;&#x5C11;&#x65E7;&#x7684; ReplicaSet&#x3002; &#x4F59;&#x4E0B;&#x7684;&#x5C06;&#x5728;&#x540E;&#x53F0;&#x88AB;&#x5F53;&#x4F5C;&#x5783;&#x573E;&#x6536;&#x96C6;&#x3002;&#x9ED8;&#x8BA4;&#x7684;&#xFF0C;&#x6240;&#x6709;&#x7684; revision &#x5386;&#x53F2;&#x5C31;&#x90FD;&#x4F1A;&#x88AB;&#x4FDD;&#x7559;&#x3002;&#x5728;&#x672A;&#x6765;&#x7684;&#x7248;&#x672C;&#x4E2D;&#xFF0C;&#x5C06;&#x4F1A;&#x66F4;&#x6539;&#x4E3A;2&#x3002;</p>
<p><strong>&#x6CE8;&#x610F;&#xFF1A;</strong> &#x5C06;&#x8BE5;&#x503C;&#x8BBE;&#x7F6E;&#x4E3A;0&#xFF0C;&#x5C06;&#x5BFC;&#x81F4;&#x6240;&#x6709;&#x7684; Deployment &#x5386;&#x53F2;&#x8BB0;&#x5F55;&#x90FD;&#x4F1A;&#x88AB;&#x6E05;&#x9664;&#xFF0C;&#x8BE5; Deployment &#x5C31;&#x65E0;&#x6CD5;&#x518D;&#x56DE;&#x9000;&#x4E86;&#x3002;</p>
<h2 id="&#x7528;&#x4F8B;">&#x7528;&#x4F8B;</h2>
<h3 id="&#x91D1;&#x4E1D;&#x96C0;-deployment">&#x91D1;&#x4E1D;&#x96C0; Deployment</h3>
<p>&#x5982;&#x679C;&#x60A8;&#x60F3;&#x8981;&#x4F7F;&#x7528; Deployment &#x5BF9;&#x90E8;&#x5206;&#x7528;&#x6237;&#x6216;&#x670D;&#x52A1;&#x5668;&#x53D1;&#x5E03; release&#xFF0C;&#x60A8;&#x53EF;&#x4EE5;&#x521B;&#x5EFA;&#x591A;&#x4E2A; Deployment&#xFF0C;&#x6BCF;&#x4E2A; Deployment &#x5BF9;&#x5E94;&#x4E00;&#x4E2A; release&#xFF0C;&#x53C2;&#x7167; <a href="https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/#canary-deployments" target="_blank">managing resources</a> &#x4E2D;&#x5BF9;&#x91D1;&#x4E1D;&#x96C0;&#x6A21;&#x5F0F;&#x7684;&#x63CF;&#x8FF0;&#x3002;</p>
<h2 id="&#x7F16;&#x5199;-deployment-spec">&#x7F16;&#x5199; Deployment Spec</h2>
<p>&#x5728;&#x6240;&#x6709;&#x7684; Kubernetes &#x914D;&#x7F6E;&#x4E2D;&#xFF0C;Deployment &#x4E5F;&#x9700;&#x8981;<code>apiVersion</code>&#xFF0C;<code>kind</code>&#x548C;<code>metadata</code>&#x8FD9;&#x4E9B;&#x914D;&#x7F6E;&#x9879;&#x3002;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x7684;&#x901A;&#x7528;&#x4F7F;&#x7528;&#x8BF4;&#x660E;&#x67E5;&#x770B; <a href="https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/" target="_blank">&#x90E8;&#x7F72;&#x5E94;&#x7528;</a>&#xFF0C;&#x914D;&#x7F6E;&#x5BB9;&#x5668;&#xFF0C;&#x548C; <a href="https://kubernetes.io/docs/tutorials/object-management-kubectl/object-management/" target="_blank">&#x4F7F;&#x7528; kubectl &#x7BA1;&#x7406;&#x8D44;&#x6E90; </a> &#x6587;&#x6863;&#x3002;</p>
<p>Deployment&#x4E5F;&#x9700;&#x8981; <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#spec-and-status" target="_blank"><code>.spec</code> section</a>.</p>
<h3 id="pod-template">Pod Template</h3>
<p> <code>.spec.template</code> &#x662F; <code>.spec</code>&#x4E2D;&#x552F;&#x4E00;&#x8981;&#x6C42;&#x7684;&#x5B57;&#x6BB5;&#x3002;</p>
<p><code>.spec.template</code> &#x662F; <a href="https://kubernetes.io/docs/user-guide/replication-controller/#pod-template" target="_blank">pod template</a>. &#x5B83;&#x8DDF; <a href="https://kubernetes.io/docs/user-guide/pods" target="_blank">Pod</a>&#x6709;&#x4E00;&#x6A21;&#x4E00;&#x6837;&#x7684;schema&#xFF0C;&#x9664;&#x4E86;&#x5B83;&#x662F;&#x5D4C;&#x5957;&#x7684;&#x5E76;&#x4E14;&#x4E0D;&#x9700;&#x8981;<code>apiVersion</code> &#x548C; <code>kind</code>&#x5B57;&#x6BB5;&#x3002;</p>
<p>&#x53E6;&#x5916;&#x4E3A;&#x4E86;&#x5212;&#x5206;Pod&#x7684;&#x8303;&#x56F4;&#xFF0C;Deployment&#x4E2D;&#x7684;pod template&#x5FC5;&#x987B;&#x6307;&#x5B9A;&#x9002;&#x5F53;&#x7684;label&#xFF08;&#x4E0D;&#x8981;&#x8DDF;&#x5176;&#x4ED6;controller&#x91CD;&#x590D;&#x4E86;&#xFF0C;&#x53C2;&#x8003;<a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment.md#selector" target="_blank">selector</a>&#xFF09;&#x548C;&#x9002;&#x5F53;&#x7684;&#x91CD;&#x542F;&#x7B56;&#x7565;&#x3002;</p>
<p><a href="https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle" target="_blank"><code>.spec.template.spec.restartPolicy</code></a> &#x53EF;&#x4EE5;&#x8BBE;&#x7F6E;&#x4E3A; <code>Always</code> , &#x5982;&#x679C;&#x4E0D;&#x6307;&#x5B9A;&#x7684;&#x8BDD;&#x8FD9;&#x5C31;&#x662F;&#x9ED8;&#x8BA4;&#x914D;&#x7F6E;&#x3002;</p>
<h3 id="replicas">Replicas</h3>
<p><code>.spec.replicas</code> &#x662F;&#x53EF;&#x4EE5;&#x9009;&#x5B57;&#x6BB5;&#xFF0C;&#x6307;&#x5B9A;&#x671F;&#x671B;&#x7684;pod&#x6570;&#x91CF;&#xFF0C;&#x9ED8;&#x8BA4;&#x662F;1&#x3002;</p>
<h3 id="selector">Selector</h3>
<p><code>.spec.selector</code>&#x662F;&#x53EF;&#x9009;&#x5B57;&#x6BB5;&#xFF0C;&#x7528;&#x6765;&#x6307;&#x5B9A; <a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels" target="_blank">label selector</a> &#xFF0C;&#x5708;&#x5B9A;Deployment&#x7BA1;&#x7406;&#x7684;pod&#x8303;&#x56F4;&#x3002;</p>
<p>&#x5982;&#x679C;&#x88AB;&#x6307;&#x5B9A;&#xFF0C; <code>.spec.selector</code> &#x5FC5;&#x987B;&#x5339;&#x914D; <code>.spec.template.metadata.labels</code>&#xFF0C;&#x5426;&#x5219;&#x5B83;&#x5C06;&#x88AB;API&#x62D2;&#x7EDD;&#x3002;&#x5982;&#x679C; <code>.spec.selector</code> &#x6CA1;&#x6709;&#x88AB;&#x6307;&#x5B9A;&#xFF0C; <code>.spec.selector.matchLabels</code> &#x9ED8;&#x8BA4;&#x662F; <code>.spec.template.metadata.labels</code>&#x3002;</p>
<p>&#x5728;Pod&#x7684;template&#x8DDF;<code>.spec.template</code>&#x4E0D;&#x540C;&#x6216;&#x8005;&#x6570;&#x91CF;&#x8D85;&#x8FC7;&#x4E86;<code>.spec.replicas</code>&#x89C4;&#x5B9A;&#x7684;&#x6570;&#x91CF;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;Deployment&#x4F1A;&#x6740;&#x6389;label&#x8DDF;selector&#x4E0D;&#x540C;&#x7684;Pod&#x3002;</p>
<p><strong>&#x6CE8;&#x610F;&#xFF1A;</strong> &#x60A8;&#x4E0D;&#x5E94;&#x8BE5;&#x518D;&#x521B;&#x5EFA;&#x5176;&#x4ED6;label&#x8DDF;&#x8FD9;&#x4E2A;selector&#x5339;&#x914D;&#x7684;pod&#xFF0C;&#x6216;&#x8005;&#x901A;&#x8FC7;&#x5176;&#x4ED6;Deployment&#xFF0C;&#x6216;&#x8005;&#x901A;&#x8FC7;&#x5176;&#x4ED6;Controller&#xFF0C;&#x4F8B;&#x5982;ReplicaSet&#x548C;ReplicationController&#x3002;&#x5426;&#x5219;&#x8BE5;Deployment&#x4F1A;&#x88AB;&#x628A;&#x5B83;&#x4EEC;&#x5F53;&#x6210;&#x90FD;&#x662F;&#x81EA;&#x5DF1;&#x521B;&#x5EFA;&#x7684;&#x3002;Kubernetes&#x4E0D;&#x4F1A;&#x963B;&#x6B62;&#x60A8;&#x8FD9;&#x4E48;&#x505A;&#x3002;</p>
<p>&#x5982;&#x679C;&#x60A8;&#x6709;&#x591A;&#x4E2A;controller&#x4F7F;&#x7528;&#x4E86;&#x91CD;&#x590D;&#x7684;selector&#xFF0C;controller&#x4EEC;&#x5C31;&#x4F1A;&#x4E92;&#x76F8;&#x6253;&#x67B6;&#x5E76;&#x5BFC;&#x81F4;&#x4E0D;&#x6B63;&#x786E;&#x7684;&#x884C;&#x4E3A;&#x3002;</p>
<h3 id="&#x7B56;&#x7565;">&#x7B56;&#x7565;</h3>
<p><code>.spec.strategy</code> &#x6307;&#x5B9A;&#x65B0;&#x7684;Pod&#x66FF;&#x6362;&#x65E7;&#x7684;Pod&#x7684;&#x7B56;&#x7565;&#x3002; <code>.spec.strategy.type</code> &#x53EF;&#x4EE5;&#x662F;&quot;Recreate&quot;&#x6216;&#x8005;&#x662F; &quot;RollingUpdate&quot;&#x3002;&quot;RollingUpdate&quot;&#x662F;&#x9ED8;&#x8BA4;&#x503C;&#x3002;</p>
<h4 id="recreate-deployment">Recreate Deployment</h4>
<p><code>.spec.strategy.type==Recreate</code>&#x65F6;&#xFF0C;&#x5728;&#x521B;&#x5EFA;&#x51FA;&#x65B0;&#x7684;Pod&#x4E4B;&#x524D;&#x4F1A;&#x5148;&#x6740;&#x6389;&#x6240;&#x6709;&#x5DF2;&#x5B58;&#x5728;&#x7684;Pod&#x3002;</p>
<h4 id="rolling-update-deployment">Rolling Update Deployment</h4>
<p><code>.spec.strategy.type==RollingUpdate</code>&#x65F6;&#xFF0C;Deployment&#x4F7F;&#x7528;<a href="https://kubernetes.io/docs/tasks/run-application/rolling-update-replication-controller" target="_blank">rolling update</a> &#x7684;&#x65B9;&#x5F0F;&#x66F4;&#x65B0;Pod &#x3002;&#x60A8;&#x53EF;&#x4EE5;&#x6307;&#x5B9A;<code>maxUnavailable</code> &#x548C; <code>maxSurge</code> &#x6765;&#x63A7;&#x5236; rolling update &#x8FDB;&#x7A0B;&#x3002;</p>
<h5 id="max-unavailable">Max Unavailable</h5>
<p><code>.spec.strategy.rollingUpdate.maxUnavailable</code> &#x662F;&#x53EF;&#x9009;&#x914D;&#x7F6E;&#x9879;&#xFF0C;&#x7528;&#x6765;&#x6307;&#x5B9A;&#x5728;&#x5347;&#x7EA7;&#x8FC7;&#x7A0B;&#x4E2D;&#x4E0D;&#x53EF;&#x7528;Pod&#x7684;&#x6700;&#x5927;&#x6570;&#x91CF;&#x3002;&#x8BE5;&#x503C;&#x53EF;&#x4EE5;&#x662F;&#x4E00;&#x4E2A;&#x7EDD;&#x5BF9;&#x503C;&#xFF08;&#x4F8B;&#x5982;5&#xFF09;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x662F;&#x671F;&#x671B;Pod&#x6570;&#x91CF;&#x7684;&#x767E;&#x5206;&#x6BD4;&#xFF08;&#x4F8B;&#x5982;10%&#xFF09;&#x3002;&#x901A;&#x8FC7;&#x8BA1;&#x7B97;&#x767E;&#x5206;&#x6BD4;&#x7684;&#x7EDD;&#x5BF9;&#x503C;&#x5411;&#x4E0B;&#x53D6;&#x6574;&#x3002;&#x5982;&#x679C;<code>.spec.strategy.rollingUpdate.maxSurge</code> &#x4E3A;0&#x65F6;&#xFF0C;&#x8FD9;&#x4E2A;&#x503C;&#x4E0D;&#x53EF;&#x4EE5;&#x4E3A;0&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x662F;1&#x3002;</p>
<p>&#x4F8B;&#x5982;&#xFF0C;&#x8BE5;&#x503C;&#x8BBE;&#x7F6E;&#x6210;30%&#xFF0C;&#x542F;&#x52A8;rolling update&#x540E;&#x65E7;&#x7684;ReplicatSet&#x5C06;&#x4F1A;&#x7ACB;&#x5373;&#x7F29;&#x5BB9;&#x5230;&#x671F;&#x671B;&#x7684;Pod&#x6570;&#x91CF;&#x7684;70%&#x3002;&#x65B0;&#x7684;Pod ready&#x540E;&#xFF0C;&#x968F;&#x7740;&#x65B0;&#x7684;ReplicaSet&#x7684;&#x6269;&#x5BB9;&#xFF0C;&#x65E7;&#x7684;ReplicaSet&#x4F1A;&#x8FDB;&#x4E00;&#x6B65;&#x7F29;&#x5BB9;&#xFF0C;&#x786E;&#x4FDD;&#x5728;&#x5347;&#x7EA7;&#x7684;&#x6240;&#x6709;&#x65F6;&#x523B;&#x53EF;&#x4EE5;&#x7528;&#x7684;Pod&#x6570;&#x91CF;&#x81F3;&#x5C11;&#x662F;&#x671F;&#x671B;Pod&#x6570;&#x91CF;&#x7684;70%&#x3002;</p>
<h5 id="max-surge">Max Surge</h5>
<p><code>.spec.strategy.rollingUpdate.maxSurge</code> &#x662F;&#x53EF;&#x9009;&#x914D;&#x7F6E;&#x9879;&#xFF0C;&#x7528;&#x6765;&#x6307;&#x5B9A;&#x53EF;&#x4EE5;&#x8D85;&#x8FC7;&#x671F;&#x671B;&#x7684;Pod&#x6570;&#x91CF;&#x7684;&#x6700;&#x5927;&#x4E2A;&#x6570;&#x3002;&#x8BE5;&#x503C;&#x53EF;&#x4EE5;&#x662F;&#x4E00;&#x4E2A;&#x7EDD;&#x5BF9;&#x503C;&#xFF08;&#x4F8B;&#x5982;5&#xFF09;&#x6216;&#x8005;&#x662F;&#x671F;&#x671B;&#x7684;Pod&#x6570;&#x91CF;&#x7684;&#x767E;&#x5206;&#x6BD4;&#xFF08;&#x4F8B;&#x5982;10%&#xFF09;&#x3002;&#x5F53;<code>MaxUnavailable</code>&#x4E3A;0&#x65F6;&#x8BE5;&#x503C;&#x4E0D;&#x53EF;&#x4EE5;&#x4E3A;0&#x3002;&#x901A;&#x8FC7;&#x767E;&#x5206;&#x6BD4;&#x8BA1;&#x7B97;&#x7684;&#x7EDD;&#x5BF9;&#x503C;&#x5411;&#x4E0A;&#x53D6;&#x6574;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x662F;1&#x3002;</p>
<p>&#x4F8B;&#x5982;&#xFF0C;&#x8BE5;&#x503C;&#x8BBE;&#x7F6E;&#x6210;30%&#xFF0C;&#x542F;&#x52A8;rolling update&#x540E;&#x65B0;&#x7684;ReplicatSet&#x5C06;&#x4F1A;&#x7ACB;&#x5373;&#x6269;&#x5BB9;&#xFF0C;&#x65B0;&#x8001;Pod&#x7684;&#x603B;&#x6570;&#x4E0D;&#x80FD;&#x8D85;&#x8FC7;&#x671F;&#x671B;&#x7684;Pod&#x6570;&#x91CF;&#x7684;130%&#x3002;&#x65E7;&#x7684;Pod&#x88AB;&#x6740;&#x6389;&#x540E;&#xFF0C;&#x65B0;&#x7684;ReplicaSet&#x5C06;&#x7EE7;&#x7EED;&#x6269;&#x5BB9;&#xFF0C;&#x65E7;&#x7684;ReplicaSet&#x4F1A;&#x8FDB;&#x4E00;&#x6B65;&#x7F29;&#x5BB9;&#xFF0C;&#x786E;&#x4FDD;&#x5728;&#x5347;&#x7EA7;&#x7684;&#x6240;&#x6709;&#x65F6;&#x523B;&#x6240;&#x6709;&#x7684;Pod&#x6570;&#x91CF;&#x548C;&#x4E0D;&#x4F1A;&#x8D85;&#x8FC7;&#x671F;&#x671B;Pod&#x6570;&#x91CF;&#x7684;130%&#x3002;</p>
<h3 id="progress-deadline-seconds">Progress Deadline Seconds</h3>
<p><code>.spec.progressDeadlineSeconds</code> &#x662F;&#x53EF;&#x9009;&#x914D;&#x7F6E;&#x9879;&#xFF0C;&#x7528;&#x6765;&#x6307;&#x5B9A;&#x5728;&#x7CFB;&#x7EDF;&#x62A5;&#x544A;Deployment&#x7684;<a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment.md#failed-deployment" target="_blank">failed progressing</a> &#x2014;&#x2014;&#x8868;&#x73B0;&#x4E3A;resource&#x7684;&#x72B6;&#x6001;&#x4E2D;<code>type=Progressing</code>&#x3001;<code>Status=False</code>&#x3001; <code>Reason=ProgressDeadlineExceeded</code>&#x524D;&#x53EF;&#x4EE5;&#x7B49;&#x5F85;&#x7684;Deployment&#x8FDB;&#x884C;&#x7684;&#x79D2;&#x6570;&#x3002;Deployment controller&#x4F1A;&#x7EE7;&#x7EED;&#x91CD;&#x8BD5;&#x8BE5;Deployment&#x3002;&#x672A;&#x6765;&#xFF0C;&#x5728;&#x5B9E;&#x73B0;&#x4E86;&#x81EA;&#x52A8;&#x56DE;&#x6EDA;&#x540E;&#xFF0C; deployment controller&#x5728;&#x89C2;&#x5BDF;&#x5230;&#x8FD9;&#x79CD;&#x72B6;&#x6001;&#x65F6;&#x5C31;&#x4F1A;&#x81EA;&#x52A8;&#x56DE;&#x6EDA;&#x3002;</p>
<p>&#x5982;&#x679C;&#x8BBE;&#x7F6E;&#x8BE5;&#x53C2;&#x6570;&#xFF0C;&#x8BE5;&#x503C;&#x5FC5;&#x987B;&#x5927;&#x4E8E; <code>.spec.minReadySeconds</code>&#x3002;</p>
<h3 id="min-ready-seconds">Min Ready Seconds</h3>
<p><code>.spec.minReadySeconds</code>&#x662F;&#x4E00;&#x4E2A;&#x53EF;&#x9009;&#x914D;&#x7F6E;&#x9879;&#xFF0C;&#x7528;&#x6765;&#x6307;&#x5B9A;&#x6CA1;&#x6709;&#x4EFB;&#x4F55;&#x5BB9;&#x5668;crash&#x7684;Pod&#x5E76;&#x88AB;&#x8BA4;&#x4E3A;&#x662F;&#x53EF;&#x7528;&#x72B6;&#x6001;&#x7684;&#x6700;&#x5C0F;&#x79D2;&#x6570;&#x3002;&#x9ED8;&#x8BA4;&#x662F;0&#xFF08;Pod&#x5728;ready&#x540E;&#x5C31;&#x4F1A;&#x88AB;&#x8BA4;&#x4E3A;&#x662F;&#x53EF;&#x7528;&#x72B6;&#x6001;&#xFF09;&#x3002;&#x8FDB;&#x4E00;&#x6B65;&#x4E86;&#x89E3;&#x4EC0;&#x4E48;&#x4EC0;&#x4E48;&#x540E;Pod&#x4F1A;&#x88AB;&#x8BA4;&#x4E3A;&#x662F;ready&#x72B6;&#x6001;&#xFF0C;&#x53C2;&#x9605; <a href="https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes" target="_blank">Container Probes</a>&#x3002;</p>
<h3 id="rollback-to">Rollback To</h3>
<p><code>.spec.rollbackTo</code> &#x662F;&#x4E00;&#x4E2A;&#x53EF;&#x4EE5;&#x9009;&#x914D;&#x7F6E;&#x9879;&#xFF0C;&#x7528;&#x6765;&#x914D;&#x7F6E;Deployment&#x56DE;&#x9000;&#x7684;&#x914D;&#x7F6E;&#x3002;&#x8BBE;&#x7F6E;&#x8BE5;&#x53C2;&#x6570;&#x5C06;&#x89E6;&#x53D1;&#x56DE;&#x9000;&#x64CD;&#x4F5C;&#xFF0C;&#x6BCF;&#x6B21;&#x56DE;&#x9000;&#x5B8C;&#x6210;&#x540E;&#xFF0C;&#x8BE5;&#x503C;&#x5C31;&#x4F1A;&#x88AB;&#x6E05;&#x9664;&#x3002;</p>
<h4 id="revision">Revision</h4>
<p><code>.spec.rollbackTo.revision</code>&#x662F;&#x4E00;&#x4E2A;&#x53EF;&#x9009;&#x914D;&#x7F6E;&#x9879;&#xFF0C;&#x7528;&#x6765;&#x6307;&#x5B9A;&#x56DE;&#x9000;&#x5230;&#x7684;revision&#x3002;&#x9ED8;&#x8BA4;&#x662F;0&#xFF0C;&#x610F;&#x5473;&#x7740;&#x56DE;&#x9000;&#x5230;&#x4E0A;&#x4E00;&#x4E2A;revision&#x3002;</p>
<h3 id="revision-history-limit">Revision History Limit</h3>
<p>Deployment revision history&#x5B58;&#x50A8;&#x5728;&#x5B83;&#x63A7;&#x5236;&#x7684;ReplicaSets&#x4E2D;&#x3002;</p>
<p><code>.spec.revisionHistoryLimit</code> &#x662F;&#x4E00;&#x4E2A;&#x53EF;&#x9009;&#x914D;&#x7F6E;&#x9879;&#xFF0C;&#x7528;&#x6765;&#x6307;&#x5B9A;&#x53EF;&#x4EE5;&#x4FDD;&#x7559;&#x7684;&#x65E7;&#x7684;ReplicaSet&#x6570;&#x91CF;&#x3002;&#x8BE5;&#x7406;&#x60F3;&#x503C;&#x53D6;&#x51B3;&#x4E8E;&#x5FC3;Deployment&#x7684;&#x9891;&#x7387;&#x548C;&#x7A33;&#x5B9A;&#x6027;&#x3002;&#x5982;&#x679C;&#x8BE5;&#x503C;&#x6CA1;&#x6709;&#x8BBE;&#x7F6E;&#x7684;&#x8BDD;&#xFF0C;&#x9ED8;&#x8BA4;&#x6240;&#x6709;&#x65E7;&#x7684;Replicaset&#x6216;&#x4F1A;&#x88AB;&#x4FDD;&#x7559;&#xFF0C;&#x5C06;&#x8D44;&#x6E90;&#x5B58;&#x50A8;&#x5728;etcd&#x4E2D;&#xFF0C;&#x662F;&#x7528;<code>kubectl get rs</code>&#x67E5;&#x770B;&#x8F93;&#x51FA;&#x3002;&#x6BCF;&#x4E2A;Deployment&#x7684;&#x8BE5;&#x914D;&#x7F6E;&#x90FD;&#x4FDD;&#x5B58;&#x5728;ReplicaSet&#x4E2D;&#xFF0C;&#x7136;&#x800C;&#xFF0C;&#x4E00;&#x65E6;&#x60A8;&#x5220;&#x9664;&#x7684;&#x65E7;&#x7684;RepelicaSet&#xFF0C;&#x60A8;&#x7684;Deployment&#x5C31;&#x65E0;&#x6CD5;&#x518D;&#x56DE;&#x9000;&#x5230;&#x90A3;&#x4E2A;revison&#x4E86;&#x3002;</p>
<p>&#x5982;&#x679C;&#x60A8;&#x5C06;&#x8BE5;&#x503C;&#x8BBE;&#x7F6E;&#x4E3A;0&#xFF0C;&#x6240;&#x6709;&#x5177;&#x6709;0&#x4E2A;replica&#x7684;ReplicaSet&#x90FD;&#x4F1A;&#x88AB;&#x5220;&#x9664;&#x3002;&#x5728;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x65B0;&#x7684;Deployment rollout&#x65E0;&#x6CD5;&#x64A4;&#x9500;&#xFF0C;&#x56E0;&#x4E3A;revision history&#x90FD;&#x88AB;&#x6E05;&#x7406;&#x6389;&#x4E86;&#x3002;</p>
<h3 id="paused">Paused</h3>
<p><code>.spec.paused</code>&#x662F;&#x53EF;&#x4EE5;&#x53EF;&#x9009;&#x914D;&#x7F6E;&#x9879;&#xFF0C;boolean&#x503C;&#x3002;&#x7528;&#x6765;&#x6307;&#x5B9A;&#x6682;&#x505C;&#x548C;&#x6062;&#x590D;Deployment&#x3002;Paused&#x548C;&#x6CA1;&#x6709;paused&#x7684;Deployment&#x4E4B;&#x95F4;&#x7684;&#x552F;&#x4E00;&#x533A;&#x522B;&#x5C31;&#x662F;&#xFF0C;&#x6240;&#x6709;&#x5BF9;paused deployment&#x4E2D;&#x7684;PodTemplateSpec&#x7684;&#x4FEE;&#x6539;&#x90FD;&#x4E0D;&#x4F1A;&#x89E6;&#x53D1;&#x65B0;&#x7684;rollout&#x3002;Deployment&#x88AB;&#x521B;&#x5EFA;&#x4E4B;&#x540E;&#x9ED8;&#x8BA4;&#x662F;&#x975E;paused&#x3002;</p>
<h2 id="deployment-&#x7684;&#x66FF;&#x4EE3;&#x9009;&#x62E9;">Deployment &#x7684;&#x66FF;&#x4EE3;&#x9009;&#x62E9;</h2>
<h3 id="kubectl-rolling-update">kubectl rolling update</h3>
<p><a href="https://kubernetes.io/docs/user-guide/kubectl/v1.6/#rolling-update" target="_blank">Kubectl rolling update</a> &#x867D;&#x7136;&#x4F7F;&#x7528;&#x7C7B;&#x4F3C;&#x7684;&#x65B9;&#x5F0F;&#x66F4;&#x65B0;Pod&#x548C;ReplicationController&#x3002;&#x4F46;&#x662F;&#x6211;&#x4EEC;&#x63A8;&#x8350;&#x4F7F;&#x7528;Deployment&#xFF0C;&#x56E0;&#x4E3A;&#x5B83;&#x662F;&#x58F0;&#x660E;&#x5F0F;&#x7684;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x4FA7;&#xFF0C;&#x5177;&#x6709;&#x9644;&#x52A0;&#x7279;&#x6027;&#xFF0C;&#x4F8B;&#x5982;&#x5373;&#x4F7F;&#x6EDA;&#x52A8;&#x5347;&#x7EA7;&#x7ED3;&#x675F;&#x540E;&#x4E5F;&#x53EF;&#x4EE5;&#x56DE;&#x6EDA;&#x5230;&#x4EFB;&#x4F55;&#x5386;&#x53F2;&#x7248;&#x672C;&#x3002;</p>
<footer class="page-footer-ex"> <span class="page-footer-ex-copyright">for GitBook</span>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span class="page-footer-ex-footer-update">update
2017-08-25 11:15:15
</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="volume.html" class="navigation navigation-prev " aria-label="Previous page: 2.2.5 Volume和Persistent Volume">
<i class="fa fa-angle-left"></i>
</a>
<a href="secret.html" class="navigation navigation-next " aria-label="Next page: 2.2.7 Secret">
<i class="fa fa-angle-right"></i>
</a>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"2.2.6 Deployment","level":"1.2.2.6","depth":3,"next":{"title":"2.2.7 Secret","level":"1.2.2.7","depth":3,"path":"concepts/secret.md","ref":"concepts/secret.md","articles":[]},"previous":{"title":"2.2.5 Volume和Persistent Volume","level":"1.2.2.5","depth":3,"path":"concepts/volume.md","ref":"concepts/volume.md","articles":[]},"dir":"ltr"},"config":{"plugins":["github","codesnippet","splitter","page-toc-button","image-captions","page-footer-ex","editlink","-lunr","-search","search-plus"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"github":{"url":"https://github.com/rootsongjc/kubernetes-handbook"},"editlink":{"label":"编辑本页","multilingual":false,"base":"https://github.com/rootsongjc/kubernetes-handbook/blob/master/"},"page-footer-ex":{"copyright":"for GitBook","update_format":"YYYY-MM-DD HH:mm:ss","update_label":"update"},"splitter":{},"codesnippet":{},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"page-toc-button":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"search-plus":{},"image-captions":{"variable_name":"_pictures"}},"page-footer-ex":{"copyright":"Jimmy Song","update_label":"最后更新:","update_format":"YYYY-MM-DD HH:mm:ss"},"theme":"default","author":"Jimmy Song","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{"_pictures":[{"backlink":"index.html#fig1.1.1","level":"1.1","list_caption":"Figure: wercker status","alt":"wercker status","nro":1,"url":"https://app.wercker.com/status/b8b69e593784e17ddcfd1286adfd8f3c/s/master","index":1,"caption_template":"Figure: _CAPTION_","label":"wercker status","attributes":{},"title":"wercker status","skip":false,"key":"1.1.1"},{"backlink":"concepts/index.html#fig1.2.1","level":"1.2","list_caption":"Figure: Borg架构","alt":"Borg架构","nro":2,"url":"../images/borg.png","index":1,"caption_template":"Figure: _CAPTION_","label":"Borg架构","attributes":{},"skip":false,"key":"1.2.1"},{"backlink":"concepts/index.html#fig1.2.2","level":"1.2","list_caption":"Figure: Kubernetes架构","alt":"Kubernetes架构","nro":3,"url":"../images/architecture.png","index":2,"caption_template":"Figure: _CAPTION_","label":"Kubernetes架构","attributes":{},"skip":false,"key":"1.2.2"},{"backlink":"concepts/index.html#fig1.2.3","level":"1.2","list_caption":"Figure: kubernetes整体架构示意图","alt":"kubernetes整体架构示意图","nro":4,"url":"../images/kubernetes-whole-arch.png","index":3,"caption_template":"Figure: _CAPTION_","label":"kubernetes整体架构示意图","attributes":{},"skip":false,"key":"1.2.3"},{"backlink":"concepts/index.html#fig1.2.4","level":"1.2","list_caption":"Figure: Kubernetes master架构示意图","alt":"Kubernetes master架构示意图","nro":5,"url":"../images/kubernetes-master-arch.png","index":4,"caption_template":"Figure: _CAPTION_","label":"Kubernetes master架构示意图","attributes":{},"skip":false,"key":"1.2.4"},{"backlink":"concepts/index.html#fig1.2.5","level":"1.2","list_caption":"Figure: kubernetes node架构示意图","alt":"kubernetes node架构示意图","nro":6,"url":"../images/kubernetes-node-arch.png","index":5,"caption_template":"Figure: _CAPTION_","label":"kubernetes node架构示意图","attributes":{},"skip":false,"key":"1.2.5"},{"backlink":"concepts/index.html#fig1.2.6","level":"1.2","list_caption":"Figure: Kubernetes分层架构示意图","alt":"Kubernetes分层架构示意图","nro":7,"url":"../images/kubernetes-layers-arch.jpg","index":6,"caption_template":"Figure: _CAPTION_","label":"Kubernetes分层架构示意图","attributes":{},"skip":false,"key":"1.2.6"},{"backlink":"concepts/concepts.html#fig1.2.1.1","level":"1.2.1","list_caption":"Figure: 分层架构示意图","alt":"分层架构示意图","nro":8,"url":"../images/kubernetes-layers-arch.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"分层架构示意图","attributes":{},"skip":false,"key":"1.2.1.1"},{"backlink":"concepts/pod-overview.html#fig1.2.2.1.1","level":"1.2.2.1","list_caption":"Figure: pod diagram","alt":"pod diagram","nro":9,"url":"../images/pod-overview.png","index":1,"caption_template":"Figure: _CAPTION_","label":"pod diagram","attributes":{},"skip":false,"key":"1.2.2.1.1"},{"backlink":"concepts/pod.html#fig1.2.2.1.1.1","level":"1.2.2.1.1","list_caption":"Figure: Pod示意图","alt":"Pod示意图","nro":10,"url":"../images/pod-overview.png","index":1,"caption_template":"Figure: _CAPTION_","label":"Pod示意图","attributes":{},"skip":false,"key":"1.2.2.1.1.1"},{"backlink":"concepts/pod.html#fig1.2.2.1.1.2","level":"1.2.2.1.1","list_caption":"Figure: Pod Cheatsheet","alt":"Pod Cheatsheet","nro":11,"url":"../images/kubernetes-pod-cheatsheet.png","index":2,"caption_template":"Figure: _CAPTION_","label":"Pod Cheatsheet","attributes":{},"skip":false,"key":"1.2.2.1.1.2"},{"backlink":"concepts/service.html#fig1.2.2.4.1","level":"1.2.2.4","list_caption":"Figure: userspace代理模式下Service概览图","alt":"userspace代理模式下Service概览图","nro":12,"url":"https://d33wubrfki0l68.cloudfront.net/b8e1022c2dd815d8dd36b1bc4f0cc3ad870a924f/1dd12/images/docs/services-userspace-overview.svg","index":1,"caption_template":"Figure: _CAPTION_","label":"userspace代理模式下Service概览图","attributes":{},"skip":false,"key":"1.2.2.4.1"},{"backlink":"concepts/service.html#fig1.2.2.4.2","level":"1.2.2.4","list_caption":"Figure: iptables代理模式下Service概览图","alt":"iptables代理模式下Service概览图","nro":13,"url":"https://d33wubrfki0l68.cloudfront.net/837afa5715eb31fb9ca6516ec6863e810f437264/42951/images/docs/services-iptables-overview.svg","index":2,"caption_template":"Figure: _CAPTION_","label":"iptables代理模式下Service概览图","attributes":{},"skip":false,"key":"1.2.2.4.2"},{"backlink":"concepts/deployment.html#fig1.2.2.6.1","level":"1.2.2.6","list_caption":"Figure: kubernetes deployment cheatsheet","alt":"kubernetes deployment cheatsheet","nro":14,"url":"../images/deployment-cheatsheet.png","index":1,"caption_template":"Figure: _CAPTION_","label":"kubernetes deployment cheatsheet","attributes":{},"skip":false,"key":"1.2.2.6.1"},{"backlink":"concepts/horizontal-pod-autoscaling.html#fig1.2.2.16.1","level":"1.2.2.16","list_caption":"Figure: horizontal-pod-autoscaler","alt":"horizontal-pod-autoscaler","nro":15,"url":"../images/horizontal-pod-autoscaler.png","index":1,"caption_template":"Figure: _CAPTION_","label":"horizontal-pod-autoscaler","attributes":{},"skip":false,"key":"1.2.2.16.1"},{"backlink":"concepts/label.html#fig1.2.2.17.1","level":"1.2.2.17","list_caption":"Figure: label示意图","alt":"label示意图","nro":16,"url":"../images/labels.png","index":1,"caption_template":"Figure: _CAPTION_","label":"label示意图","attributes":{},"skip":false,"key":"1.2.2.17.1"},{"backlink":"guide/using-kubectl.html#fig1.3.2.1.1","level":"1.3.2.1","list_caption":"Figure: kubectl cheatsheet","alt":"kubectl cheatsheet","nro":17,"url":"../images/kubernetes-kubectl-cheatsheet.png","index":1,"caption_template":"Figure: _CAPTION_","label":"kubectl cheatsheet","attributes":{},"skip":false,"key":"1.3.2.1.1"},{"backlink":"guide/using-kubectl.html#fig1.3.2.1.2","level":"1.3.2.1","list_caption":"Figure: kube-shell页面","alt":"kube-shell页面","nro":18,"url":"../images/kube-shell.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"kube-shell页面","attributes":{},"skip":false,"key":"1.3.2.1.2"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig1.3.5.1.1","level":"1.3.5.1","list_caption":"Figure: API","alt":"API","nro":19,"url":"../images/k8s-app-monitor-test-api-doc.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"API","attributes":{},"skip":false,"key":"1.3.5.1.1"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig1.3.5.1.2","level":"1.3.5.1","list_caption":"Figure: wercker","alt":"wercker","nro":20,"url":"../images/k8s-app-monitor-agent-wercker.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"wercker","attributes":{},"skip":false,"key":"1.3.5.1.2"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig1.3.5.1.3","level":"1.3.5.1","list_caption":"Figure: 图表","alt":"图表","nro":21,"url":"../images/k8s-app-monitor-agent.jpg","index":3,"caption_template":"Figure: _CAPTION_","label":"图表","attributes":{},"skip":false,"key":"1.3.5.1.3"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig1.3.5.2.1","level":"1.3.5.2","list_caption":"Figure: spark on yarn with kubernetes","alt":"spark on yarn with kubernetes","nro":22,"url":"../images/spark-on-yarn-with-kubernetes.png","index":1,"caption_template":"Figure: _CAPTION_","label":"spark on yarn with kubernetes","attributes":{},"skip":false,"key":"1.3.5.2.1"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig1.3.5.2.2","level":"1.3.5.2","list_caption":"Figure: Terms","alt":"Terms","nro":23,"url":"../images/terms-in-kubernetes-app-deployment.png","index":2,"caption_template":"Figure: _CAPTION_","label":"Terms","attributes":{},"skip":false,"key":"1.3.5.2.2"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig1.3.5.2.3","level":"1.3.5.2","list_caption":"Figure: 分解步骤解析","alt":"分解步骤解析","nro":24,"url":"../images/migrating-hadoop-yarn-to-kubernetes.png","index":3,"caption_template":"Figure: _CAPTION_","label":"分解步骤解析","attributes":{},"skip":false,"key":"1.3.5.2.3"},{"backlink":"practice/node-installation.html#fig1.4.1.6.1","level":"1.4.1.6","list_caption":"Figure: welcome-nginx","alt":"welcome-nginx","nro":25,"url":"http://olz1di9xf.bkt.clouddn.com/kubernetes-installation-test-nginx.png","index":1,"caption_template":"Figure: _CAPTION_","label":"welcome-nginx","attributes":{},"skip":false,"key":"1.4.1.6.1"},{"backlink":"practice/dashboard-addon-installation.html#fig1.4.1.8.1","level":"1.4.1.8","list_caption":"Figure: kubernetes-dashboard","alt":"kubernetes-dashboard","nro":26,"url":"http://olz1di9xf.bkt.clouddn.com/kubernetes-dashboard-raw.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"kubernetes-dashboard","attributes":{},"skip":false,"key":"1.4.1.8.1"},{"backlink":"practice/heapster-addon-installation.html#fig1.4.1.9.1","level":"1.4.1.9","list_caption":"Figure: dashboard-heapster","alt":"dashboard-heapster","nro":27,"url":"../images/kubernetes-dashboard-with-heapster.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"dashboard-heapster","attributes":{},"skip":false,"key":"1.4.1.9.1"},{"backlink":"practice/heapster-addon-installation.html#fig1.4.1.9.2","level":"1.4.1.9","list_caption":"Figure: grafana","alt":"grafana","nro":28,"url":"../images/kubernetes-heapster-grafana.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"grafana","attributes":{},"skip":false,"key":"1.4.1.9.2"},{"backlink":"practice/heapster-addon-installation.html#fig1.4.1.9.3","level":"1.4.1.9","list_caption":"Figure: kubernetes-influxdb-heapster","alt":"kubernetes-influxdb-heapster","nro":29,"url":"../images/kubernetes-influxdb-heapster.jpg","index":3,"caption_template":"Figure: _CAPTION_","label":"kubernetes-influxdb-heapster","attributes":{},"skip":false,"key":"1.4.1.9.3"},{"backlink":"practice/efk-addon-installation.html#fig1.4.1.10.1","level":"1.4.1.10","list_caption":"Figure: es-setting","alt":"es-setting","nro":30,"url":"../images/es-setting.png","index":1,"caption_template":"Figure: _CAPTION_","label":"es-setting","attributes":{},"skip":false,"key":"1.4.1.10.1"},{"backlink":"practice/efk-addon-installation.html#fig1.4.1.10.2","level":"1.4.1.10","list_caption":"Figure: es-home","alt":"es-home","nro":31,"url":"../images/kubernetes-efk-kibana.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"es-home","attributes":{},"skip":false,"key":"1.4.1.10.2"},{"backlink":"practice/traefik-ingress-installation.html#fig1.4.2.1.1","level":"1.4.2.1","list_caption":"Figure: kubernetes-dashboard","alt":"kubernetes-dashboard","nro":32,"url":"../images/traefik-dashboard.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"kubernetes-dashboard","attributes":{},"skip":false,"key":"1.4.2.1.1"},{"backlink":"practice/traefik-ingress-installation.html#fig1.4.2.1.2","level":"1.4.2.1","list_caption":"Figure: traefik-nginx","alt":"traefik-nginx","nro":33,"url":"../images/traefik-nginx.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"traefik-nginx","attributes":{},"skip":false,"key":"1.4.2.1.2"},{"backlink":"practice/traefik-ingress-installation.html#fig1.4.2.1.3","level":"1.4.2.1","list_caption":"Figure: traefik-guestbook","alt":"traefik-guestbook","nro":34,"url":"../images/traefik-guestbook.jpg","index":3,"caption_template":"Figure: _CAPTION_","label":"traefik-guestbook","attributes":{},"skip":false,"key":"1.4.2.1.3"},{"backlink":"practice/distributed-load-test.html#fig1.4.2.2.1","level":"1.4.2.2","list_caption":"Figure: traefik-dashboard-locust","alt":"traefik-dashboard-locust","nro":35,"url":"../images/traefik-dashboard-locust.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"traefik-dashboard-locust","attributes":{},"skip":false,"key":"1.4.2.2.1"},{"backlink":"practice/distributed-load-test.html#fig1.4.2.2.2","level":"1.4.2.2","list_caption":"Figure: locust-start-swarming","alt":"locust-start-swarming","nro":36,"url":"../images/locust-start-swarming.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"locust-start-swarming","attributes":{},"skip":false,"key":"1.4.2.2.2"},{"backlink":"practice/distributed-load-test.html#fig1.4.2.2.3","level":"1.4.2.2","list_caption":"Figure: sample-webapp-rc","alt":"sample-webapp-rc","nro":37,"url":"../images/sample-webapp-rc.jpg","index":3,"caption_template":"Figure: _CAPTION_","label":"sample-webapp-rc","attributes":{},"skip":false,"key":"1.4.2.2.3"},{"backlink":"practice/distributed-load-test.html#fig1.4.2.2.4","level":"1.4.2.2","list_caption":"Figure: locust-dashboard","alt":"locust-dashboard","nro":38,"url":"../images/locust-dashboard.jpg","index":4,"caption_template":"Figure: _CAPTION_","label":"locust-dashboard","attributes":{},"skip":false,"key":"1.4.2.2.4"},{"backlink":"practice/network-and-cluster-perfermance-test.html#fig1.4.2.3.1","level":"1.4.2.3","list_caption":"Figure: kubernetes-dashboard","alt":"kubernetes-dashboard","nro":39,"url":"http://olz1di9xf.bkt.clouddn.com/kubenetes-e2e-test.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"kubernetes-dashboard","attributes":{},"skip":false,"key":"1.4.2.3.1"},{"backlink":"practice/network-and-cluster-perfermance-test.html#fig1.4.2.3.2","level":"1.4.2.3","list_caption":"Figure: locust-test","alt":"locust-test","nro":40,"url":"http://olz1di9xf.bkt.clouddn.com/kubernetes-locust-test.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"locust-test","attributes":{},"skip":false,"key":"1.4.2.3.2"},{"backlink":"practice/edge-node-configuration.html#fig1.4.2.4.1","level":"1.4.2.4","list_caption":"Figure: 边缘节点架构","alt":"边缘节点架构","nro":41,"url":"../images/kubernetes-edge-node-architecture.png","index":1,"caption_template":"Figure: _CAPTION_","label":"边缘节点架构","attributes":{},"skip":false,"key":"1.4.2.4.1"},{"backlink":"practice/app-log-collection.html#fig1.4.3.2.1","level":"1.4.3.2","list_caption":"Figure: logstash日志收集架构图","alt":"logstash日志收集架构图","nro":42,"url":"../images/filebeat-log-collector.png","index":1,"caption_template":"Figure: _CAPTION_","label":"logstash日志收集架构图","attributes":{},"skip":false,"key":"1.4.3.2.1"},{"backlink":"practice/app-log-collection.html#fig1.4.3.2.2","level":"1.4.3.2","list_caption":"Figure: Kibana页面","alt":"Kibana页面","nro":43,"url":"../images/filebeat-docker-test.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"Kibana页面","attributes":{},"skip":false,"key":"1.4.3.2.2"},{"backlink":"practice/app-log-collection.html#fig1.4.3.2.3","level":"1.4.3.2","list_caption":"Figure: filebeat收集的日志详细信息","alt":"filebeat收集的日志详细信息","nro":44,"url":"../images/kubernetes-filebeat-detail.png","index":3,"caption_template":"Figure: _CAPTION_","label":"filebeat收集的日志详细信息","attributes":{},"skip":false,"key":"1.4.3.2.3"},{"backlink":"practice/monitor.html#fig1.4.3.4.1","level":"1.4.3.4","list_caption":"Figure: Kubernetes集群中的监控","alt":"Kubernetes集群中的监控","nro":45,"url":"../images/monitoring-in-kubernetes.png","index":1,"caption_template":"Figure: _CAPTION_","label":"Kubernetes集群中的监控","attributes":{},"skip":false,"key":"1.4.3.4.1"},{"backlink":"practice/monitor.html#fig1.4.3.4.2","level":"1.4.3.4","list_caption":"Figure: kubernetes的容器命名规则示意图","alt":"kubernetes的容器命名规则示意图","nro":46,"url":"../images/kubernetes-container-naming-rule.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"kubernetes的容器命名规则示意图","attributes":{},"skip":false,"key":"1.4.3.4.2"},{"backlink":"practice/monitor.html#fig1.4.3.4.3","level":"1.4.3.4","list_caption":"Figure: Heapster架构图改进版","alt":"Heapster架构图改进版","nro":47,"url":"../images/kubernetes-heapster-monitoring.png","index":3,"caption_template":"Figure: _CAPTION_","label":"Heapster架构图改进版","attributes":{},"skip":false,"key":"1.4.3.4.3"},{"backlink":"practice/monitor.html#fig1.4.3.4.4","level":"1.4.3.4","list_caption":"Figure: 应用监控架构图","alt":"应用监控架构图","nro":48,"url":"../images/kubernetes-app-monitoring.png","index":4,"caption_template":"Figure: _CAPTION_","label":"应用监控架构图","attributes":{},"skip":false,"key":"1.4.3.4.4"},{"backlink":"practice/monitor.html#fig1.4.3.4.5","level":"1.4.3.4","list_caption":"Figure: 应用拓扑图","alt":"应用拓扑图","nro":49,"url":"../images/weave-scope-service-topology.jpg","index":5,"caption_template":"Figure: _CAPTION_","label":"应用拓扑图","attributes":{},"skip":false,"key":"1.4.3.4.5"},{"backlink":"practice/jenkins-ci-cd.html#fig1.4.3.5.1","level":"1.4.3.5","list_caption":"Figure: 基于Jenkins的持续集成与发布","alt":"基于Jenkins的持续集成与发布","nro":50,"url":"../images/kubernetes-jenkins-ci-cd.png","index":1,"caption_template":"Figure: _CAPTION_","label":"基于Jenkins的持续集成与发布","attributes":{},"skip":false,"key":"1.4.3.5.1"},{"backlink":"practice/data-persistence-problem.html#fig1.4.3.6.1","level":"1.4.3.6","list_caption":"Figure: 日志持久化收集解决方案示意图","alt":"日志持久化收集解决方案示意图","nro":51,"url":"../images/log-persistence-logstash.png","index":1,"caption_template":"Figure: _CAPTION_","label":"日志持久化收集解决方案示意图","attributes":{},"skip":false,"key":"1.4.3.6.1"},{"backlink":"practice/storage-for-containers-using-glusterfs-with-openshift.html#fig1.4.4.1.2.1","level":"1.4.4.1.2","list_caption":"Figure: Screen Shot 2017-03-23 at 21.50.34","alt":"Screen Shot 2017-03-23 at 21.50.34","nro":52,"url":"https://keithtenzer.files.wordpress.com/2017/03/screen-shot-2017-03-23-at-21-50-34.png?w=440","index":1,"caption_template":"Figure: _CAPTION_","label":"Screen Shot 2017-03-23 at 21.50.34","attributes":{},"skip":false,"key":"1.4.4.1.2.1"},{"backlink":"practice/storage-for-containers-using-glusterfs-with-openshift.html#fig1.4.4.1.2.2","level":"1.4.4.1.2","list_caption":"Figure: Screen Shot 2017-03-24 at 11.09.34.png","alt":"Screen Shot 2017-03-24 at 11.09.34.png","nro":53,"url":"https://keithtenzer.files.wordpress.com/2017/03/screen-shot-2017-03-24-at-11-09-341.png?w=440","index":2,"caption_template":"Figure: _CAPTION_","label":"Screen Shot 2017-03-24 at 11.09.34.png","attributes":{},"skip":false,"key":"1.4.4.1.2.2"},{"backlink":"usecases/istio.html#fig1.5.1.1.1","level":"1.5.1.1","list_caption":"Figure: Istio架构图","alt":"Istio架构图","nro":54,"url":"../images/istio-arch.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"Istio架构图","attributes":{},"skip":false,"key":"1.5.1.1.1"},{"backlink":"usecases/istio-installation.html#fig1.5.1.1.1.1","level":"1.5.1.1.1","list_caption":"Figure: BookInfo Sample应用架构图","alt":"BookInfo Sample应用架构图","nro":55,"url":"../images/bookinfo-sample-arch.png","index":1,"caption_template":"Figure: _CAPTION_","label":"BookInfo Sample应用架构图","attributes":{},"skip":false,"key":"1.5.1.1.1.1"},{"backlink":"usecases/istio-installation.html#fig1.5.1.1.1.2","level":"1.5.1.1.1","list_caption":"Figure: BookInfo Sample页面","alt":"BookInfo Sample页面","nro":56,"url":"../images/bookinfo-sample.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"BookInfo Sample页面","attributes":{},"skip":false,"key":"1.5.1.1.1.2"},{"backlink":"usecases/istio-installation.html#fig1.5.1.1.1.3","level":"1.5.1.1.1","list_caption":"Figure: Istio Grafana界面","alt":"Istio Grafana界面","nro":57,"url":"../images/istio-grafana.jpg","index":3,"caption_template":"Figure: _CAPTION_","label":"Istio Grafana界面","attributes":{},"skip":false,"key":"1.5.1.1.1.3"},{"backlink":"usecases/istio-installation.html#fig1.5.1.1.1.4","level":"1.5.1.1.1","list_caption":"Figure: Prometheus页面","alt":"Prometheus页面","nro":58,"url":"../images/istio-prometheus.jpg","index":4,"caption_template":"Figure: _CAPTION_","label":"Prometheus页面","attributes":{},"skip":false,"key":"1.5.1.1.1.4"},{"backlink":"usecases/istio-installation.html#fig1.5.1.1.1.5","level":"1.5.1.1.1","list_caption":"Figure: Zipkin页面","alt":"Zipkin页面","nro":59,"url":"../images/istio-zipkin.jpg","index":5,"caption_template":"Figure: _CAPTION_","label":"Zipkin页面","attributes":{},"skip":false,"key":"1.5.1.1.1.5"},{"backlink":"usecases/istio-installation.html#fig1.5.1.1.1.6","level":"1.5.1.1.1","list_caption":"Figure: ServiceGraph页面","alt":"ServiceGraph页面","nro":60,"url":"../images/istio-servicegraph.jpg","index":6,"caption_template":"Figure: _CAPTION_","label":"ServiceGraph页面","attributes":{},"skip":false,"key":"1.5.1.1.1.6"},{"backlink":"usecases/linkerd.html#fig1.5.1.2.1","level":"1.5.1.2","list_caption":"Figure: source https://linkerd.io","alt":"source https://linkerd.io","nro":61,"url":"https://linkerd.io/images/diagram-individual-instance.png","index":1,"caption_template":"Figure: _CAPTION_","label":"source https://linkerd.io","attributes":{},"skip":false,"key":"1.5.1.2.1"},{"backlink":"usecases/linkerd-user-guide.html#fig1.5.1.2.1.1","level":"1.5.1.2.1","list_caption":"Figure: Jenkins pipeline","alt":"Jenkins pipeline","nro":62,"url":"../images/linkerd-jenkins-pipeline.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"Jenkins pipeline","attributes":{},"skip":false,"key":"1.5.1.2.1.1"},{"backlink":"usecases/linkerd-user-guide.html#fig1.5.1.2.1.2","level":"1.5.1.2.1","list_caption":"Figure: Jenkins config","alt":"Jenkins config","nro":63,"url":"../images/linkerd-jenkins.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"Jenkins config","attributes":{},"skip":false,"key":"1.5.1.2.1.2"},{"backlink":"usecases/linkerd-user-guide.html#fig1.5.1.2.1.3","level":"1.5.1.2.1","list_caption":"Figure: namerd","alt":"namerd","nro":64,"url":"../images/namerd-internal.jpg","index":3,"caption_template":"Figure: _CAPTION_","label":"namerd","attributes":{},"skip":false,"key":"1.5.1.2.1.3"},{"backlink":"usecases/linkerd-user-guide.html#fig1.5.1.2.1.4","level":"1.5.1.2.1","list_caption":"Figure: linkerd监控","alt":"linkerd监控","nro":65,"url":"../images/linkerd-helloworld-outgoing.jpg","index":4,"caption_template":"Figure: _CAPTION_","label":"linkerd监控","attributes":{},"skip":false,"key":"1.5.1.2.1.4"},{"backlink":"usecases/linkerd-user-guide.html#fig1.5.1.2.1.5","level":"1.5.1.2.1","list_caption":"Figure: linkerd监控","alt":"linkerd监控","nro":66,"url":"../images/linkerd-helloworld-incoming.jpg","index":5,"caption_template":"Figure: _CAPTION_","label":"linkerd监控","attributes":{},"skip":false,"key":"1.5.1.2.1.5"},{"backlink":"usecases/linkerd-user-guide.html#fig1.5.1.2.1.6","level":"1.5.1.2.1","list_caption":"Figure: linkerd性能监控","alt":"linkerd性能监控","nro":67,"url":"../images/linkerd-grafana.png","index":6,"caption_template":"Figure: _CAPTION_","label":"linkerd性能监控","attributes":{},"skip":false,"key":"1.5.1.2.1.6"},{"backlink":"usecases/linkerd-user-guide.html#fig1.5.1.2.1.7","level":"1.5.1.2.1","list_caption":"Figure: Linkerd ingress controller","alt":"Linkerd ingress controller","nro":68,"url":"../images/linkerd-ingress-controller.jpg","index":7,"caption_template":"Figure: _CAPTION_","label":"Linkerd ingress controller","attributes":{},"skip":false,"key":"1.5.1.2.1.7"},{"backlink":"usecases/service-discovery-in-microservices.html#fig1.5.1.3.1","level":"1.5.1.3","list_caption":"Figure: 微服务中的服务发现","alt":"微服务中的服务发现","nro":69,"url":"../images/service-discovery-in-microservices.png","index":1,"caption_template":"Figure: _CAPTION_","label":"微服务中的服务发现","attributes":{},"skip":false,"key":"1.5.1.3.1"},{"backlink":"usecases/spark-standalone-on-kubernetes.html#fig1.5.2.1.1","level":"1.5.2.1","list_caption":"Figure: spark master ui","alt":"spark master ui","nro":70,"url":"../images/spark-ui.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"spark master ui","attributes":{},"skip":false,"key":"1.5.2.1.1"},{"backlink":"usecases/spark-standalone-on-kubernetes.html#fig1.5.2.1.2","level":"1.5.2.1","list_caption":"Figure: zeppelin ui","alt":"zeppelin ui","nro":71,"url":"../images/zeppelin-ui.jpg","index":2,"caption_template":"Figure: _CAPTION_","label":"zeppelin ui","attributes":{},"skip":false,"key":"1.5.2.1.2"},{"backlink":"develop/client-go-sample.html#fig1.6.3.1","level":"1.6.3","list_caption":"Figure: 使用kubernetes dashboard进行故障排查","alt":"使用kubernetes dashboard进行故障排查","nro":72,"url":"../images/kubernetes-client-go-sample-update.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"使用kubernetes dashboard进行故障排查","attributes":{},"skip":false,"key":"1.6.3.1"},{"backlink":"appendix/issues.html#fig1.7.2.1","level":"1.7.2","list_caption":"Figure: pvc-storage-limit","alt":"pvc-storage-limit","nro":73,"url":"../images/pvc-storage-limit.jpg","index":1,"caption_template":"Figure: _CAPTION_","label":"pvc-storage-limit","attributes":{},"skip":false,"key":"1.7.2.1"}]},"title":"Kubernetes Handbook","language":"zh-cn","gitbook":"*","description":"Let's play fun with kubernetes!","image-captions":{"caption":"图片 - _CAPTION_"}},"file":{"path":"concepts/deployment.md","mtime":"2017-08-25T03:15:15.000Z","type":"markdown"},"gitbook":{"version":"3.2.2","time":"2017-08-30T08:52:03.041Z"},"basePath":"..","book":{"language":""}});
});
</script>
</div>
<script src="../gitbook/gitbook.js"></script>
<script src="../gitbook/theme.js"></script>
<script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
<script src="../gitbook/gitbook-plugin-page-toc-button/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-search-plus/jquery.mark.min.js"></script>
<script src="../gitbook/gitbook-plugin-search-plus/search.js"></script>
<script src="../gitbook/gitbook-plugin-sharing/buttons.js"></script>
<script src="../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
</body>
</html>