第1章 先把kubernetes跑起来
<h3>第 1 章</h3>
<p>先把kubernetes跑起来
kubernetes是google是2014年发布的一个开源项目。
据说Google的数据中心里运行着20多个亿的容器。而且Google十年前就开始使用容器技术了。</p>
<h4>1.1 先跑起来</h4>
<pre><code>按照一贯的学习思路,我们会在最短时间内搭建起一个可用系统,这样才能够尽快建立起对学习对象的感性认识。 先把玩起来,快速了解基本概念、功能和使用场景。
越是门槛高的知识,就越需要有这么一个最小的可用系统。如果直接上来就学习理论知识和概念,很容易从入门到放弃。</code></pre>
<p>kubernetes.io开发了一个交互式教程:
<a href="https://kubernetes.io/docs/tutorials/kubernetes-basics/">https://kubernetes.io/docs/tutorials/kubernetes-basics/</a>
<a href="https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/">https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/</a>
教程菜单:</p>
<h4>1.2创建kubernetes集群</h4>
<p>Create a Cluster -->interactive Tutorial-Creating a Cluster,
下一步,下一步,好多步后,start。。。
左边是菜单,右边是Terminal
执行命令:</p>
<pre><code class="language-bash">kubectl get nodes
hostname
kubectl cluster-info 查看集群信息</code></pre>
<h4>1.3部署应用</h4>
<p>执行命令</p>
<pre><code class="language-bash">kubectl run kubernetes-bootcamp --image=docker.io/jocatalin/kubernetes-bootcamp:v1 --port=8080</code></pre>
<p>这里通过kubectl run 部署了一个应用,命名为kubernetes-bootcamp,dockker镜像通过image指定。--port设置应用对外服务的端口。
这里的Deploymenetes是kubernetes的术语,可以理解为应用。
kubernetes还有一术语pod。
pod是容器的集合,通常会将紧密相关的一组容器放到一个pod中,同一个pod中的所有容器共享IP地址和Portpwuj ,也就是说它们是一个network namespace中。
pod是kubernetes调度的最小单位,同一个pod中的容器始终被一起调度。
查看当前pod</p>
<pre><code class="language-bash">kubectl get pods</code></pre>
<h4>1.4 访问应用</h4>
<p>默认情况下,所有pod只能在集群内部访问。为了能够从外部访问应用,我们需要将容器的8080映射到节点的端口上。
将容器的8080映射到节点的端口上,执行如下命令:</p>
<pre><code class="language-bash">kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080</code></pre>
<p>查看应用被映射到节点上哪个端口</p>
<pre><code class="language-bash">kubectl get services</code></pre>
<p>端口已经映射到host01的32320端口,端口号是随机分配的。可以执行如下命令访问:</p>
<pre><code class="language-bash">curl host01:32320</code></pre>
<h4>1.5 Scale应用</h4>
<p>默认情况下应用只会运行一个副本。</p>
<pre><code class="language-bash">kubectl get deployments 查看副本数</code></pre>
<p>将副本增加到3个</p>
<pre><code class="language-bash">kubectl scale deployments/kubernetes-bootcamp --replicas=3</code></pre>
<p>查看当前pod数量</p>
<pre><code class="language-bash">kubectl get pods</code></pre>
<p>通过curl访问应用,可以看到每次请求发道到不同的Pod,3个副本轮询处理,实现负载均衡。</p>
<h4>1.6 滚动更新</h4>
<p>当前应用使用image版本为v1,升级到v2</p>
<pre><code class="language-bash">kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2</code></pre>
<p>通过kubectl get pods可以观察滚动更新的过程:v1的pod被逐个删除,同时启动了新的v2 pod.
退回V1版本</p>
<pre><code class="language-bash">kubectl rollout undo deployments/kubernetes-bootcamp</code></pre>