深入剖析Kubernetes
张磊
Kubernetes社区资深成员与项目维护者
立即订阅
22717 人已学习
课程目录
已完结 56 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (5讲)
开篇词 | 打通“容器技术”的任督二脉
免费
01 | 预习篇 · 小鲸鱼大事记(一):初出茅庐
02 | 预习篇 · 小鲸鱼大事记(二):崭露头角
03 | 预习篇 · 小鲸鱼大事记(三):群雄并起
04 | 预习篇 · 小鲸鱼大事记(四):尘埃落定
容器技术概念入门篇 (5讲)
05 | 白话容器基础(一):从进程说开去
06 | 白话容器基础(二):隔离与限制
07 | 白话容器基础(三):深入理解容器镜像
08 | 白话容器基础(四):重新认识Docker容器
09 | 从容器到容器云:谈谈Kubernetes的本质
Kubernetes集群搭建与实践 (3讲)
10 | Kubernetes一键部署利器:kubeadm
11 | 从0到1:搭建一个完整的Kubernetes集群
12 | 牛刀小试:我的第一个容器化应用
容器编排与Kubernetes作业管理 (15讲)
13 | 为什么我们需要Pod?
14 | 深入解析Pod对象(一):基本概念
15 | 深入解析Pod对象(二):使用进阶
16 | 编排其实很简单:谈谈“控制器”模型
17 | 经典PaaS的记忆:作业副本与水平扩展
18 | 深入理解StatefulSet(一):拓扑状态
19 | 深入理解StatefulSet(二):存储状态
20 | 深入理解StatefulSet(三):有状态应用实践
21 | 容器化守护进程的意义:DaemonSet
22 | 撬动离线业务:Job与CronJob
23 | 声明式API与Kubernetes编程范式
24 | 深入解析声明式API(一):API对象的奥秘
25 | 深入解析声明式API(二):编写自定义控制器
26 | 基于角色的权限控制:RBAC
27 | 聪明的微创新:Operator工作原理解读
Kubernetes容器持久化存储 (4讲)
28 | PV、PVC、StorageClass,这些到底在说啥?
29 | PV、PVC体系是不是多此一举?从本地持久化卷谈起
30 | 编写自己的存储插件:FlexVolume与CSI
31 | 容器存储实践:CSI插件编写指南
Kubernetes容器网络 (8讲)
32 | 浅谈容器网络
33 | 深入解析容器跨主机网络
34 | Kubernetes网络模型与CNI网络插件
35 | 解读Kubernetes三层网络方案
36 | 为什么说Kubernetes只有soft multi-tenancy?
37 | 找到容器不容易:Service、DNS与服务发现
38 | 从外界连通Service与Service调试“三板斧”
39 | 谈谈Service与Ingress
Kubernetes作业调度与资源管理 (5讲)
40 | Kubernetes的资源模型与资源管理
41 | 十字路口上的Kubernetes默认调度器
42 | Kubernetes默认调度器调度策略解析
43 | Kubernetes默认调度器的优先级与抢占机制
44 | Kubernetes GPU管理与Device Plugin机制
Kubernetes容器运行时 (3讲)
45 | 幕后英雄:SIG-Node与CRI
46 | 解读 CRI 与 容器运行时
47 | 绝不仅仅是安全:Kata Containers 与 gVisor
Kubernetes容器监控与日志 (3讲)
48 | Prometheus、Metrics Server与Kubernetes监控体系
49 | Custom Metrics: 让Auto Scaling不再“食之无味”
50 | 让日志无处可逃:容器日志收集与管理
再谈开源与社区 (1讲)
51 | 谈谈Kubernetes开源社区和未来走向
答疑文章 (1讲)
52 | 答疑:在问题中解决问题,在思考中产生思考
特别放送 (1讲)
特别放送 | 2019 年,容器技术生态会发生些什么?
结束语 (1讲)
结束语 | Kubernetes:赢开发者赢天下
特别放送 | 云原生应用管理系列 (1讲)
基于 Kubernetes 的云原生应用管理,到底应该怎么做?
深入剖析Kubernetes
登录|注册

12 | 牛刀小试:我的第一个容器化应用

张磊 2018-09-19
你好,我是张磊。今天我和你分享的主题是:牛刀小试之我的第一个容器化应用。
在上一篇文章《从 0 到 1:搭建一个完整的 Kubernetes 集群》中,我和你一起部署了一套完整的 Kubernetes 集群。这个集群虽然离生产环境的要求还有一定差距(比如,没有一键高可用部署),但也可以当作是一个准生产级别的 Kubernetes 集群了。
而在这篇文章中,我们就来扮演一个应用开发者的角色,使用这个 Kubernetes 集群发布第一个容器化应用。
在开始实践之前,我先给你讲解一下 Kubernetes 里面与开发者关系最密切的几个概念。
作为一个应用开发者,你首先要做的,是制作容器的镜像。这一部分内容,我已经在容器基础部分《白话容器基础(三):深入理解容器镜像》重点讲解过了。
而有了容器镜像之后,你需要按照 Kubernetes 项目的规范和要求,将你的镜像组织为它能够“认识”的方式,然后提交上去。
那么,什么才是 Kubernetes 项目能“认识”的方式呢?
这就是使用 Kubernetes 的必备技能:编写配置文件。
备注:这些配置文件可以是 YAML 或者 JSON 格式的。为方便阅读与理解,在后面的讲解中,我会统一使用 YAML 文件来指代它们。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入剖析Kubernetes》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(64)

  • gogo
    推荐使用replica=1而不使用单独pod的主要原因是pod所在的节点出故障的时候 pod可以调度到健康的节点上,单独的pod只能在节点健康的情况下由kubelet保证pod的健康状况吧

    作者回复: 对的

    2018-09-19
    62
  • D
    这里关于describe有一点要注意,就是如果namespace不是default的话,就需要加上-n younamespace才能看到相应的内容
    2018-12-25
    16
  • shao
    下面的写法有问题
    hostPath: /var/data
    建议改成:
    volumes:
            - name: nginx-vol
              hostPath:
                path: "/home/vagrant/mykube/firstapp/html"

    作者回复: 已修正

    2018-09-19
    10
  • 巩夫建
    yaml文件中如何使用变量,不是环境变量env那种,而是我在yaml定义一个版本号的变量,当版本发生变更,我只需要修改版本号变量,或者外部传参就行了。不希望频繁修改yaml文件。

    作者回复: 可以使用placeholder,或者yaml模板jinja

    2018-09-20
    6
  • wilder
    赞一个,已经跟了好多期了,讲得形象生动又不失深度。
    2018-09-19
    5
  • 千寻
    emptyDir创建一个临时目录,pod删除之后临时目录也会被删除。在平时的使用下,有哪些场景会用到这种类型volume呢?

    作者回复: 临时写文件,又不想提交到镜像里。另外,volume并不跟pod同生命周期,不会删的这么快。

    2018-09-19
    5
  • Jeff.W
    replicas=1代表是始终有1个实例可用,而单独的pod就真的是单独的pod了~
    2018-09-30
    4
  • 西堤小筑
    老师您好,咨询一个问题:
    对于一些需要科学上网才能pull下来的docker image,通常是使用docker hub上的私人image pull到本地再改tag来完成。但k8s上用yaml写的image地址,运行的时候就直接从网上pull了,什么写法可以做到使用本地image,不让k8s从网上pull呢?

    作者回复: 一样的啊,写private registry不就可以了。密码可以用Secret保存。

    2018-10-10
    1
    3
  • V V
    您好,老师。您评论中说deployment的好处是宕机的时候,会重新pod会在另外的node上重启。可是,我关机了其中一个node之后,pod并没有重启。我是通过命令 kubectl get pods -o wide来查看的。STATUS显示还是running。

    作者回复: 你确定关的是原来pod在run的那个机器么

    2018-09-27
    1
    3
  • 落叶
    请问,业务为了负载,起相同两个pod,属于同一个service里面,这个有负载功能会把请求负载到两个pod上面吗?我测试对于长链接,只有一个pod在接受请求,另一个什么都没有

    作者回复: 你都说了是长链接了……

    2018-09-20
    3
  • fiisio
    想问下大规模集群使用怎样的部署方式比较好,主要考虑到后期的运维,更新?例如2000节点以上。

    作者回复: 2k节点一般得用saltstack等专业武器了,毕竟管2k个机器已经可以排除大部分工具了……

    2018-09-19
    3
  • hhh
    从best practice的角度,一个pod是推荐运行一个容器还是多个容器?

    作者回复: 正是下一篇的内容

    2018-09-19
    3
  • 发挥哥
    如果镜像仓库里的镜像更新了,镜像拉取策略是always,deployment文件没有变化,kubectl apply命令会更新应用吗?
    2019-03-16
    2
  • 草莓/mg
    张老师,安装kubectl kubelet kubeadm都有问题呀,你安装的版本是怎么样的?难受啊

    作者回复: 我所有的版本都装过。安装这不会有问题啊。

    2018-10-25
    2
  • 北卡
    Deployment管理replicaSet,replicaSet管理pod,使pod始终保持期望状态。
    使用deployment的方式,方便后面有扩容,更新,回滚等需求。也可以在pod down掉时自动重启。
    2018-09-23
    2
  • 送普选
    先给这专栏赞一个!如何在yml中的镜像版本号使用变量,这样开发修改后修改了代码递增了镜像版本,在yml中自动使用,不用修改yml文件?谢谢

    作者回复: sed替换,或者用yaml模板jinjia

    2018-09-22
    2
  • @Yang
    deployment的方式能控制pod,比如扩容缩容,升级回滚,节点间调度,等等~
    pod是节点上孤立的,不组织状态。没有上面doploynent的特性吧。

    不对之处,请指正~
    2018-09-20
    2
  • hjt353
    kubernetes 有很多资源对象:包括 configmap Deployment Namespace 等资源,我在编写这些资源 yaml 文件时,比如:deployment.yaml 文件,怎么查阅 deployment 资源包括哪些属性(比如:apivseresion kind spec等),这些属性又包含哪些配置信息(比如:.spec.replicas 配置)

    作者回复: 看kubernetes api文档

    2019-05-17
    1
  • 周萝卜
    老师问一下,deployment和node的关系是啥
    2018-12-07
    1
  • Ryan
    你好,pod视为一个应用,假设pod跑的一个分布式数据库之类的应用,如果worker因为某些原因需要缩减,k8s有没有什么机制保证缩减的机器上的数据和内存信息同步到其他的work上?还是需要应用本身来做这个事情?谢谢🙏

    作者回复: 这就是有状态应用啊。看statefulset 部分。

    2018-11-08
    1
收起评论
64
返回
顶部