本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。

从前面的文章我们知道,Kubernetes 脱胎于 Google 的 Borg,Borg 在 Kubernetes 诞生之初已经在 Google 内部身经百战 10 余年,且不说它的历史源远流长,就凭它是出自 Google 那帮天才工程师之手,就知道它的学习难度不低。

对于这种有一定学习门槛的技术,最好的入门方式是先玩起来,如果刚开始就沉迷在那些理论中,很容易从入门到放弃。

可喜的是,Google 已经考虑到了这一点,官方文档提供了一个很小的 demo,麻雀虽小,五脏俱全,这个 demo 基本涵盖了 K8S 的基本概念,通过它,可以轻松构建一个 K8S 集群,玩转 K8S,我们现在就去玩一玩。(PS:下面提到的概念,我们后面会详细讨论,不理解可以暂时跳过)

打开:  

https://kubernetes.io/docs/tutorials/kubernetes-basics

映入眼帘的是图文并茂的 6 个步骤:

  1. 创建一个 K8S 集群
  2. 部署 APP
  3. 探索 APP
  4. 访问 APP
  5. APP 弹性伸缩
  6. 更新 APP

在开始每个步骤之前,先来了解个东西——minikube。顾名思义,这是一个迷你版的 K8S,一个轻量级的 K8S 实现,对于平常的学习体验,使用它可以达到和使用 K8S 一样的效果。它的部署方式足够简单,All-In-One,一个集群只有一个节点,K8S 所有组件都部署在这个节点上。

用户也可以使用 Web UI 和 minikube CLI 的方式来管理 K8S 集群,比如:启动,停止,删除,获取状态等。官方的 demo 就是使用 minikube CLI 来完成的。

话不多说,下面我们就开始体验下 K8S 之旅吧。

第一步:创建一个 K8S 集群

在交互界面输入 minikube start 就创建了一个 K8S 集群,这个集群创建在一台 VM 上,K8S 所有组件都跑在这台 VM 上。

接下来我们就可以使用 K8S 命令行工具 kubectl 来操作这个集群了。

kubectl version 查看 K8S 的版本号:

看到两个 version,client version 指 kubectl 的 version,server version 就是 K8S 的 version。

kubectl get nodes 获取集群节点数:

可以看到这个 demo 只有一个节点,就是前面创建的 VM。status 是 ready,说明该节点准备好部署 APP 了。

第二步:部署一个 APP

执行命令:

kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080

就完成了一个 APP 的部署。

其中,--image 指定 APP 的 Docker 镜像,--port 设置 APP 对外服务的端口,kubectl run 会下载镜像,然后创建 deployment,根据 deployment 创建 APP。deployment 就像是 APP 的说明书,它指导怎么创建 和维护 APP。APP 创建完运行在 Docker 容器中,使用 kubectl get deployments 可以查看 deployment 的信息。

第三步:探索 APP

上一步创建完 deployment,会接着创建 Pod 来运行 APP 容器,K8S 使用 Pod 来管理容器资源,一个 Pod 可以包含一个或多个容器,在这个例子,一个 Pod 就只有一个 APP 容器。使用 kubectl get pods 查看当前 Pod 信息。

更详细信息使用 kubectl describe pods 查看。

kubectl 工具对于排错很有帮助,下面几个是较为常用的命令:

  • kubectl get - 列出资源
  • kubectl describe - 显示资源的详细信息
  • kubectl logs - 输出 Pod 中容器的日志
  • kubectl exec - 在 Pod 容器中执行命令

第四步:访问 APP

默认情况下,所有 Pod 都只能在集群内部访问,上面看到每个 Pod 有 IP 和端口,Pod 之间可以直接访问。外部想要访问 Pod, 需要将端口暴露出去,执行如下命令:

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080

将容器的端口(8080)映射到节点的端口。

执行 kubectl get services 查看映射到的节点的端口。

可以看到容器的 8080 端口已经映射到节点的 31915 端口。外部可以通过 NodeIP:Port 的方式就可以访问到 Pod 内的容器,如下:

service 是 K8S 中对 Pod 的进一步抽象,是外部访问 Pod 的入口。如果把 K8S 集群想象成一个组织,那么 service 就是这个组织的接口人,为什么需要 service,这个留作后面的内容再讲,在这里你可以把它暂时理解成端口映射。

第五步:APP 的弹性伸缩

为了满足高可用,Pod 可以自动扩容和缩容。默认情况下,Pod 只会运行一个副本,这是由 deployment 定义的,可以通过 kubectl get deployments 查看副本数,通过 kubectl scale deployments/app --replicas=num 增加或减少副本数。

比如,增加副本数到 4 个:

看到 Pod 数也增加到了 4 个。

减少副本数为 2 个:

看到两个副本显示 Terminating,表示正在中止,过段时间再看就只有两个了。

对于多副本的情况,访问 APP 会实现负载均衡,如下:

看到每次请求访问都落在不同的 Pod 上,这个功能是由 service 来完成的。

第六步:更新 APP

当前 APP 使用的镜像版本是 v1,需要升级到 v2,执行如下命令:

kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2

看到升级过程是先中止之前的 4 个副本,再重开 4 个副本。

如果回退到 v1 版本,只用执行如下命令即可:

kubectl rollout undo deployments/kubernetes-bootcamp

至此,我们已经通过官方这个 demo 体验了一把 K8S 的功能和使用方法,下面我会陆陆续续把自己学习 K8S 的笔记整理出来,分享给你,希望对你有帮助。如有可能,请随手转发分享一下,让更多的人也参与进来。

最后,还是继续送书,容器网络专家倪朋飞写的《K8S 指南》电子书,如有需要后台回复“K8S”(之前回复过就不用回复了)。如需加群学习回复“加群”。


我的公众号 「Linux云计算网络」(id: cloud_dev) ,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎大家关注。

Kubernetes 笔记 02 demo 初体验的更多相关文章

  1. 微信小程序DEMO初体验

    小程序虽然被炒的很热,但是绝大部分人却从未亲自体验过,在2017年的上班第一天,献上一个小程序DEMO,您可以体验! 注意:由于微信限制,只能使用扫一扫来体验下方小程序DEMO. DEMO首页截图如下 ...

  2. [开发笔记]-Jqplot图表初体验

    文章内容为初次使用Jqplot图表插件的测试代码,仅供参考. <html xmlns="http://www.w3.org/1999/xhtml"> <head& ...

  3. 云中沙箱学习笔记2-ECS之初体验

    1.1 背景知识 云服务器(Elastic Compute Service, 简称ECS),是一种简单高效,处理能力可以弹性伸缩的计算服务.ECS的相关术语说明如下: --实例(Instance):是 ...

  4. VSTO学习笔记(十五)Office 2013 初体验

    原文:VSTO学习笔记(十五)Office 2013 初体验 Office 2013 近期发布了首个面向消费者的预览版本,我也于第一时间进行了更新试用.从此开始VSTO系列全面转向Office 201 ...

  5. Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用[z]

    前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...

  6. 数据结构(逻辑结构,物理结构,特点) C#多线程编程的同步也线程安全 C#多线程编程笔记 String 与 StringBuilder (StringBuffer) 数据结构与算法-初体验(极客专栏)

    数据结构(逻辑结构,物理结构,特点) 一.数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关.逻辑结构包括: 集合 数 ...

  7. K8S Kubernetes 简单介绍 转自 http://time-track.cn/kubernetes-trial.html Kubernetes初体验

    这段时间学习了一下 git jenkins docker  最近也在看  Kubernetes  感觉写得很赞  也是对自己对于K8S 有了进一步得理解  感谢 倪 大神得Blog 也希望看到这篇Bl ...

  8. django初体验 学习笔记

    django环境搭建     1.安装Python     2.ipython         sudo apt-get install ipython         sudo pip instal ...

  9. python--爬虫入门(七)urllib库初体验以及中文编码问题的探讨

    python系列均基于python3.4环境 ---------@_@? --------------------------------------------------------------- ...

随机推荐

  1. EasyPR源码剖析(9):字符识别

    在上一篇文章的介绍中,我们已经通过相应的字符分割方法,将车牌区域进行分割,得到7个分割字符图块,接下来要做的就是将字符图块放入训练好的神经网络模型,通过模型来预测每个图块所表示的具体字符.神经网络的介 ...

  2. 关于CDN与缓存(浏览器和CDN)

    本文目录:一.引入 二.CDN定义 三.关于缓存 四.浏览器缓存 一.引入 客户端直接从源站点获取数据,当服务器访问量大时会影响访问速度,进而影响用户体验,且无法保证客户端与源站点间的距离足够短,适合 ...

  3. 判断作业完成之 读取log 脚本

    tail 用于读取文件末尾 -n 后边加行数 -f 为持续追踪,实时输出 NUMECA 输出最后两行 ...done in 727.84-sec (STARTING NUMECA FLOW SOLVE ...

  4. sublime包管理

    安装 到https://packagecontrol.io/installation#st3拷贝 import urllib.request,os,hashlib; h = '2915d1851351 ...

  5. AX_CreateAndPostSales

    static void CreateAndPostSales(Args _args) { List il = new List(Types::Record); SalesTable localSale ...

  6. python 模块——os 模块

    os 模块--操作系统的各种接口 常用函数: os.path os.path.join(path,*paths) (常用,设置文件路径)将一个或者多个路径连接起来. PATH_TO_TEST_IMAG ...

  7. kbmmw 5.08 正式发布

    欢迎大家围观. Important notes (changes that may break existing code)         ============================= ...

  8. 循环更新sqlserver数据库表ID

    DECLARE @a INTDECLARE aaa CURSOR for select columnID from LNDB_COLUMN_INFO where columnID BETWEEN 22 ...

  9. C++ Error C2664:无法将参数 1 从“const char [9]”转换为“LPCWSTR”解决方案

    问题出现 编译平台:VS2013     Windows 出现地方:在使用LoadLibrary( )函数动态链接DLL文件时出现的一个问题 Eg.   在使用 UNICODE字符的工程中,  HIN ...

  10. 网络操作系统 第六章 Window Server 2008 活动目录

    本章小结 在企业网络中,活动目录是必不可少的,它将网络中各种对象组织起来进行管理,方便了网络对象的查找,增强了网络的安全性,为用户的物流管理提供了极大的便利,本章首先介绍了活动目录的基本概念,然后通过 ...