郭良帅 百度基础架构部资深工程师 负责云原生产品研发
本文基于百度云原生团队『云原生基础知识概述及实践』系列视频课程——『Kubernetes入门—Kubernetes应用部署』梳理.
视频课程可点击:https://cloud.baidu.com/video-center/video.html?id=608进行学习。

导读
在前两节课,我们学习了Docker(Kubernetes入门——深入浅出讲Docker)和Kubernetes(Kubernetes入门——Kubernetes工作原理及使用)相关基础知识。Docker 实现了应用程序的镜像化和容器化,但是它的能力局限于单机。当应用规模特别大、需要部署在多台机器上时,则需要借助 Kubernetes 实现容器的集群化编排与生命周期管理,使得开发者可以更加关注应用本身而不需过多关注 DevOps。

本节课将带领大家进一步学习Kubernetes。通过实践与学习,了解Kubernetes的应用部署。 课程主要分为以下四个部分:
第一部分:环境准备
第二部分:应用的组成与描述
第三部分:应用的部署与访问
第四部分:常见问题排查

01 环境准备

  • 搭建Kubernetes集群的三种方法

一般来说,搭建Kubernetes集群主要有三种方法:

minikube:单机的Demo环境,只能用来做一些演示。
官方链接:https://minikube.sigs.k8s.io./docs/start/

kubeadm:可以自建集群,各个组件可定制化,需要对kube有深入的了解,这个方法推荐高阶用户使用。
官方链接:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

CCE:生产环境下,建议尽量采用公有云的成熟产品,比如百度的CCE。
官方链接:https://cloud.baidu.com/product/cce.html

02 应用的组成与描述

这一部分,主要介绍Kubernetes对应用的抽象与定义。

- 应用组成

在Kubernetes上,一个典型的无状态应用由三部分组成:
Deployment:即对应用规格的描述。包括应用的镜像(对应的是应用的程序)、启动命令、资源配额(规定了应用在运行中需要用多少资源,包括cpu/memory等)、实例数量(规定应用需要有几个实例来支撑)。

Configmap :应用的配置,分为两种,一是简单的kvalue对,另一种是配置文件。

Service :应用对外暴露的服务地址(是在集群内访问还是集群外)
以上三个对象互相解耦,创建顺序可以随意。

  • 应用描述

以下结合代码具体阐述三个部分的内容:

1. Deployment

元数据:metadata,包括name和namespace。Namespace 是k8s 对对象隔离的基本单位,即同一个namespace下不可以有同样name的对象,不同namespace中可以有相同name的对象。

副本数:spec 中的replicas 字段。即你的应用将来要部署几个实例。

镜像地址:image。可以来自dockerhub 或其他镜像仓库。

服务端口号:每个应用程序可以暴露一个或多个端口,以此被外界访问。

启动命令:应用程序是如何启动的。
这个yaml里面并没有写启动命令,这就是k8s的方便之处:如果你不写的话,那么应用程序就默认按照其Dockerfile里指定的启动命令来启动。

资源配额:resources包括limits和requests,代表对资源使用的上限和下限。每个里面其实都包含了cpu和memory两种资源。

挂载目录: 分为两个部分,分别是volumeMounts,volumes。volumeMounts代表容器内想如何使用存储,例如挂载到哪个目录;volumes代表存储的来源,比如主机目录,网络存储等。两者都是数组形式,通过name字段做元素对应。

2. Configmap

元数据:metadata

配置数据:data

技巧:如果直接手写yaml文件,可以看到有很多缩进比较麻烦,可以使用–from-file将本地的文件直接创建成一个 Configmap。
例如kubectl create configmap hello --from-file=<文件路径>

3. Service

元数据: metadata。
实例标签:即spec里面的selector字段,通过app:nginx标签找到对应的实例(Pod)。

端口号映射:targerPort是容器实际监听的端口,port是Service产生的虚拟IP所对应的端口,它并不是将来的NodePort,NodePort的取值是随机的。

服务暴露方式:也就是type字段。如果是NodePort的话,意味着容器所在的宿主机会开一个端口并映射给容器内的端口。

03 应用的部署与访问

应用如何被外界访问?

比如,上面我们部署了一个nginx应用在集群中,一般而言有三种访问方式:

集群内访问:ClusterIP
这种方式意味着客户端和服务端都在K8S集群内。

集群外访问:NodePort
如果客户端在集群外,可以将Node节点的IP暴露给外界,同时将NodePort告知对方,用Node IP+NodePort的方式实现访问。

本地代理
通过kubectl的port-forward进行访问,一般用于调试,不适用于生产环境。
详细的操作过程大家从13:01处开始回看课件
https://cloud.baidu.com/video-center/video.html?id=608

04 常见问题排查

在最后部分,讲师将对上述内容进行实操,并手把手带你排查常见问题,包括:
•镜像下载失败
•应用启动失败
•服务访问不通
•应用异常退出

详细的操作过程大家从22:13处开始回看课件
https://cloud.baidu.com/video-center/video.html?id=608

Kubernetes入门——Kubernetes应用部署相关推荐

  1. Kubernetes入门——Kubernetes日志采集与监控告警

    作者简介: 郭川磊 百度基础架构部研发工程师 负责云原生产品的研发 本文基于百度云原生团队『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门-Kubernetes实现应用高可用』梳 ...

  2. Kubernetes入门——Kubernetes实现应用的高可用

    作者简介: 胡家靖 百度基础架构部研发工程师 负责函数计算与云原生产品的研发 本文基于百度云原生团队『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门-Kubernetes实现应用 ...

  3. Kubernetes入门——Kubernetes工作原理及使用

    作者简介: 星龙 百度基础架构部研发工程师 负责混部调度系统研发 本文基于百度云原生团队『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门-Kubernetes工作原理』梳理. 视 ...

  4. Kubernetes入门--搭建Kubernetes集群,并启动容器服务

    英文原作者:Ben Cane  翻译作者:Miazzy 翻译&转载:https://blog.codeship.com/getting-started-with-kubernetes/ Kub ...

  5. Kubernetes(k8s)快速入门和环境部署

    目录 1. Kubernetes介绍 1.1 应用部署方式演变 1.2 kubernetes简介 1.3 kubernetes组件 1.4 kubernetes概念 2. kubernetes集群环境 ...

  6. Kubernetes入门——深入浅出讲Docker

    作者简介: 李子昂 百度基础架构部研发工程师 负责百度分布式Redis平台的研发和运维 专注于基础架构中间件的研发和优化 本文基于『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门 ...

  7. 零基础入门 Kubernetes,你需要知道这些

    Kubernetes是什么? 大概很多人对此都有疑问,不过在容器领域,Kubernetes却无人不晓. 阿里.字节跳动.腾讯.百度等中国互联网行业巨擘们,近年来都在深耕容器领域,而Kubernetes ...

  8. 容器编排技术 -- Kubernetes入门概述

    容器编排技术 -- Kubernetes入门概述 简介 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powe ...

  9. Kubernetes入门培训(内含PPT)-(转)

    Kubernetes入门培训(内含PPT) https://mp.weixin.qq.com/s/T6vzHupm1oqcznrCd13xDg 原创 半夏透心凉 云原生技术爱好者社区 2月2日 来自专 ...

最新文章

  1. python流程控制语句-python 流程控制语句
  2. Cleaver快速制作网页PPT
  3. ROS学习之URDF
  4. 一文读懂 Shell 中各种括号的作用
  5. how is value displayed in BSP UI from model node data binding
  6. wps出现安装installer_为什么不能安装WPS
  7. 微服务介绍及Asp.net Core实战项目系列之微服务介绍
  8. jzoj3362,bzoj3758-[NOI2013模拟]数数【分段打表,背包,状压】
  9. JavaFX UI控件教程(四)之Button
  10. Mysql数据库设计规范之二数据库字段设计规范
  11. android 坐标布局变形,Android:scrollBy实现view随意移动并显示坐标
  12. 关于request.getParameter(java.lang.String name)
  13. ServletContextListener使用详解
  14. 互联网日报 | 腾讯地图全国上线聚合打车服务;国庆档首日票房突破7亿;特斯拉国产Model3再降价...
  15. 自考科目列表,自考本科,题库,自学考试,历年真题
  16. 54_集合类库(上)
  17. 2017年 Python工程师面试经历分享(七家)
  18. 拳皇重生服务器维护,用Kaillera打造拳皇等街机服务器教程
  19. 滴滴在HBase性能与可用性上的探索与实践
  20. 今天开始弄c++,copy下人家的文章来看看参考一下哈哈

热门文章

  1. pandas(五) -- 文本处理
  2. 完整版使用Shell脚本在多个服务器同时实现Mysql建表语句和删除表
  3. reactjs npm start运行报错:Error: ENOSPC: System limit for number of file watchers reached
  4. makefile常见伪目标(.PHONY 不会去检查目标文件)
  5. linux deepin ubuntu apt安装openjdk-8-jdk
  6. vue-element-admin后台管理模板脚手架
  7. 【收藏】OGC标准服务 WMS WCS WFS WPS
  8. k8s kubesphere启用可插拔组件(安装前、后均可)
  9. 解决ubuntu16.E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
  10. 使用id_rsa进行ssh连接minikube