【译】Hello Kubernetes快速交互实验手册
<p>本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。</p><blockquote>
<div>原文:https://kubernetes.io/docs/tutorials</div>
<div>翻译:Edison Zhou</div>
</blockquote>
<p> <img style="border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://img2018.cnblogs.com/blog/381412/201907/381412-20190709182042280-2033777895.png" alt=""></p>
<h1>一、基本介绍</h1>
<div> 此交互实验可以让你不用搭建K8S环境就可以轻松地尝试管理一个简单的容器化应用集群,可以学习到以下内容:</div>
<ul>
<li>部署一个容器化应用到一个集群中</li>
<li>对部署进行伸缩(Scale)</li>
<li>更新容器化应用至一个新版本</li>
<li><span style="text-decoration: line-through">Debug容器化应用</span></li>
</ul>
<div> 此交互实验主要基于虚拟终端(Virutal Terminal),可以直接在你的Web浏览器中运行Minikube,这是一个可以随处运行K8S的最小化的本地K8S环境,不需要你安装任何软件和做任何配置。</div>
<h1>二、实验内容</h1>
<ol>
<li>创建一个集群</li>
<li>部署一个应用</li>
<li>访问当前应用</li>
<li>伸缩当前应用</li>
<li>滚动更新应用</li>
</ol>
<h1>三、具体步骤</h1>
<h2>创建一个集群</h2>
<div> 进入实验地址:https://kubernetes.io/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive/</div>
<div> 选中“Create a Cluster"=>"Interactive Tutorial - Creating a Cluster",从这里开始</div>
<div> <img style="width: 50%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/FB372FF6C3124DE8ACAFFFACB80023A8/502" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/FB372FF6C3124DE8ACAFFFACB80023A8/502"></div>
<div> 然后会看到提示和终端的界面,这是一个基于Minikube的K8S终端:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/EC405D0E02FF460798D3ACF5EB588D89/510" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/EC405D0E02FF460798D3ACF5EB588D89/510"></div>
<div> 通过在终端中执行 minikube start 来创建一个单节点的K8S集群:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/A71495D8D4DC445B93DE09C33EB2CC35/516" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/A71495D8D4DC445B93DE09C33EB2CC35/516"></div>
<div> 通过执行 kubectl cluster-info 可以查看集群信息:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/E3EF4225206C477CA7EBAD21811E81D7/520" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/E3EF4225206C477CA7EBAD21811E81D7/520"></div>
<h2>部署一个应用</h2>
<div> 这里部署一个示例应用,执行以下命令:</div>
<div id="2872-1562657930163" class="block-view code-view yne-code-theme-default" data-language="javascript" data-theme="default">
<div class="para-text">
<div class="cnblogs_code">
<pre>kubectl run kubernetes-<span style="color: rgba(0, 0, 0, 1)">bootcamp \
</span>--image=docker.io/jocatalin/kubernetes-<span style="color: rgba(0, 0, 0, 1)">bootcamp:v1 \
</span>--port=<span style="color: rgba(128, 0, 128, 1)">8080</span></pre>
</div>
</div>
</div>
<div id="7593-1562657930163"> 这里kubectl run是老版本的命令,即将被废除,建议使用kubectl create替代。</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/82944F881A6B4E47A2366D9A15247BC5/526" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/82944F881A6B4E47A2366D9A15247BC5/526"></div>
<div> 通过执行kubectl get pods可以看到,当前的kubernetes-bootcamp-7dc9765bf6-dgmz8就是当前应用的Pod。</div>
<h2>访问当前应用</h2>
<div> 默认情况下,所有Pod只能在集群内部访问,想要从外部访问,就必须映射端口。</div>
<div id="8458-1562658604752" class="block-view code-view yne-code-theme-default" data-language="javascript" data-theme="default">
<div class="para-text">
<div class="cnblogs_code">
<pre>kubectl expose deployment/kubernetes-<span style="color: rgba(0, 0, 0, 1)">bootcamp \
</span>--type=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">NodePort</span><span style="color: rgba(128, 0, 0, 1)">"</span>
--port <span style="color: rgba(128, 0, 128, 1)">8080</span></pre>
</div>
</div>
</div>
<div> 可以看到,映射成功:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/22EEAD3F80C04A9DB5F673EE85C4DCA6/542" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/22EEAD3F80C04A9DB5F673EE85C4DCA6/542"></div>
<div> 执行命令 kubectl get services,可以看到应用被映射到了节点的哪个端口:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/C151C2DCC85C4FB3A2E0B3E2DC4A6803/551" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/C151C2DCC85C4FB3A2E0B3E2DC4A6803/551"></div>
<div> 可以看出,当前应用所处的服务被映射到了32752端口上,这个端口是随机分配的。因为采用NodePort方式的话,是会在30000-32767区间随机取一个端口号。</div>
<div>怎么验证部署的应用是否可以访问?</div>
<div id="6090-1562659027680" class="block-view code-view yne-code-theme-default" data-language="javascript" data-theme="default">
<div class="para-text">
<div class="cnblogs_code">
<pre>curl your-cluster-ip:<span style="color: rgba(128, 0, 128, 1)">32725</span></pre>
</div>
</div>
</div>
<div> 效果如下图所示:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/4C10F138F2464A648B14C84CB6B4A0AE/561" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/4C10F138F2464A648B14C84CB6B4A0AE/561"></div>
<h2>伸缩当前应用</h2>
<div> 默认情况下,应用只会运行一个副本,可以通过kubectl get deployments来查看:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/946FA85CC8A0450C92AC535C35B23CC9/565" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/946FA85CC8A0450C92AC535C35B23CC9/565"></div>
<div> 那么,如果需要增加副本数,可以通过命令kubectl scale来增加,如下图所示,可以看到现在已经由1个副本增长为了3个副本了:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/F2ACFD8C9CD741B6A567E76C323A5ACD/571" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/F2ACFD8C9CD741B6A567E76C323A5ACD/571"></div>
<div> 由于Pod是K8S资源调度的最小单位,因此执行kubectl get pods也可以验证Pod的数量:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/37EEF6F7D2204116B53A93DCD3CEC9AD/578" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/37EEF6F7D2204116B53A93DCD3CEC9AD/578"></div>
<div> 这时,可以通过curl再次访问应用,便可以看到这些请求都会发往不同的Pod(也不一定完全是每次都会转发给不同的Pod),因为我们有3个副本会负载均衡:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/1D4834EFB25C42ADAEB328EF19DE80FD/586" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/1D4834EFB25C42ADAEB328EF19DE80FD/586"></div>
<div> 如果不需要很多的副本来负载均衡,也可以收缩副本数量,比如收缩到2个副本:</div>
<div id="7461-1562659652246" class="block-view code-view yne-code-theme-default" data-language="javascript" data-theme="default">
<div class="para-text">
<div class="cnblogs_code">
<pre>kubectl scale deployments/kubernetes-bootcamp --replicas=<span style="color: rgba(128, 0, 128, 1)">2</span></pre>
</div>
</div>
</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/E5FF3679AF9A41D5AD489FDB2BB9C5C4/595" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/E5FF3679AF9A41D5AD489FDB2BB9C5C4/595"></div>
<h2>滚动更新应用</h2>
<div> 当前应用kubernetes-bootcamp所用的image的版本为v1,假设现在有了新版本,可以通过以下命令来将其升级到v2。</div>
<div id="5582-1562660113194" class="block-view code-view yne-code-theme-default" data-language="javascript" data-theme="default">
<div class="para-text">
<div class="cnblogs_code">
<pre>kubectl <span style="color: rgba(0, 0, 255, 1)">set</span> image deployments/kubernetes-<span style="color: rgba(0, 0, 0, 1)">bootcamp \
kubernetes</span>-bootcamp=jocatalin/kubernetes-bootcamp:v2</pre>
</div>
</div>
</div>
<div> 从下图可以看到,更新版本之后原先v1的两个Pod便已经在被停止,进而创建了两个新的Pod:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/3C5C0AF45ED2457C892D33D93B739AEC/612" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/3C5C0AF45ED2457C892D33D93B739AEC/612"></div>
<div> 过了几秒之后,再次查看,原先的两个v1的Pod已经被删除:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/F5647A60870F4AFBA14E7F50CE3FF9A8/617" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/F5647A60870F4AFBA14E7F50CE3FF9A8/617"></div>
<div> 这时可以通过curl进行验证,可以发现版本号已经升级为了v2:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/5D75B3BCE34E4FE4805C8F7DDB2DEBF6/636" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/5D75B3BCE34E4FE4805C8F7DDB2DEBF6/636"></div>
<div> 这时如果发现v2存在某个百年一遇的大Bug(不容易发现那种),想要快速回退到上个版本v1,可以通过以下命令来快速回退:</div>
<div id="3986-1562660934785" class="block-view code-view yne-code-theme-default" data-language="javascript" data-theme="default">
<div class="para-text">
<div class="cnblogs_code">
<pre>kubectl rollout undo deployments/kubernetes-bootcamp</pre>
</div>
</div>
</div>
<div> 可以看到回退之后,v2的两个Pod就被停止了,进而新创建了两个v1的Pod:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/16CBACFB7F42469599B81B4273B3BB94/626" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/16CBACFB7F42469599B81B4273B3BB94/626"></div>
<div> 这时如果再进行curl验证,可以发现版本变为了v1了:</div>
<div> <img style="width: 70%; border: 2px solid rgba(221, 221, 221, 1); border-radius: 5px" src="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/661E38DC91E3431D8887BB103E4CD9F0/632" alt="" data-media-type="image" data-original="https://note.youdao.com/yws/public/resource/d3542398fc8bdae5e79f5bb7a8180ab3/xmlnote/661E38DC91E3431D8887BB103E4CD9F0/632"></div>
<h1>四、实验小结</h1>
<p> 这里通过官网的交互实验教程快速的体验了一把K8S的基本功能使用,全程通过kubectl来调用的K8S API,相信会对完全没接触K8S的童鞋有帮助。</p>
<h1>参考资料</h1>
<div> <em>K8S指导手册</em>:https://kubernetes.io/docs/tutorials</div>
<div> <em>每天5分钟玩转K8S</em>:https://item.jd.com/12329528.html</div>
<p> </p>
<div id="Copyright">
<p>作者:周旭龙</p>
<p>出处:http://edisonchou.cnblogs.com</p>
<p>本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。</p>
</div>
</div>
<div id="MySignature" role="contentinfo">
<div align="center"><img border="0" src="http://service.t.sina.com.cn/widget/qmd/2068032061/d643d182/10.png"></div><br><br>
来源:https://www.cnblogs.com/edisontalk/p/kubernetes_quick_tutorial_chinese_notes.html
頁:
[1]