Docker & k8s 系列三:在k8s中部署单个服务实例
本章将会讲解: pod的概念,以及如何向k8s中部署一个单体应用实例。
在上面的篇幅中,我们了解了docker,并制作、运行了docker镜像,然后将镜像发布至中央仓库了。然后又搭建了本机的k8s环境。本篇将演示如何将单个服务实例部署到k8s。
Pod的含义
k8s的最小部署单元是pod,pod这个单词的意思是“豆荚”,我们可以想象一下豆荚里边包含了一颗颗小豆子。与豆荚相似,k8s中包含了一个个pod,pod中运行着我们的程序,如下图:

在K8s中部署服务
在k8s中部署一个Pod,需要先编写一个Pod的配置文件,配置文件的格式为yml。配置文件描述了api版本信息,pod类型,名称,镜像,端口等信息。本篇要演示的pod.yml内容如下:
在k8s中部署一个Pod,需要先编写一个Pod的配置文件,配置文件的格式为yml。配置文件描述了api版本信息,pod类型,名称,镜像,端口等信息。本篇要演示的pod.yml内容如下:
apiVersion: v1
kind: Pod
metadata:
name: my-first-demo
labels:
app: my-first-demo
spec:
containers:
- name: my-first-demo
image: hellodm/my-first-demo:v1.0
ports:
- containerPort: 80
这里的镜像正是我们第一篇文章中创建并发布至中央仓库的那个镜像。你也可以替换成其他镜像,或者自己制作的镜像。
下面我们将应用部署到k8s,使用如下命令:
$ kubectl create -f pod.yml
pod/my-first-demo created
可以看到,pod created,然后执行kubectl get pods 命令查看一下是否启动成功:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-first-demo 1/1 Running 0 5m55s
可以看到是Running的状态,说明启动没问题。但事情有时候并不是那么顺利,所以这里给出一个错误的案例:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-first-demo 0/1 ImagePullBackOff 0 4m46s
这个status为ImagePullBackOff,这样的错误还有好几个就不一一列举了,我当时确实碰到了,是镜像拉取错误。如果你也碰到了,自行解决即可(比如镜像名称写错了,网络问题等)。
访问K8s内的应用
回归主题,上面我们通过kubectl create -f pod.yml命令,向k8s中部署了一个应用,检查其状态是“Running”状态,那么现在是不是可以直接访问了呢?不能!因为这个pod是运行在k8s内部,可以理解为他是在一个内网中运行的,所以我们访问不了。
为了访问这个应用,我们需要在部署一个类似“反向代理”角色的Pod来帮我们访问应用。这个Pod是Service类型的,其定义如下:
apiVersion: v1
kind: Service
metadata:
name: my-first-demo-svc
labels:
app: my-first-demo
spec:
type: NodePort
ports:
- port: 80
nodePort: 30000
selector:
app: my-first-demo
我们可以逐行看一下这个配置文件,其Kind为Service类型,端口信息中nodePort: 30000是说这个 service 会把容器的 80 端口从 node 的 30050 端口暴露出来。selector 部分的配置决定了请求会被发送给集群里的哪些 pod,这里是通过app:my-first-demo来找的,对应的是我们第一个Pod文件中的labels。下面我们来启动这个Pod,执行如下命令:
$ kubectl create -f svc.yml
service/my-first-demo-svc created
查看这个Pod的启动状态:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 33d
my-first-demo-svc NodePort 10.108.28.171 <none> 80:30000/TCP 27h
可以看到my-first-demo-svc启动成功,那么我们访问一下看看:
$ curl 'http://localhost:30000/'
<h1>Hello world! <h1>
总结
本篇我们一步步完成了一个简单应用的部署,这是一个单体应用。而实际中,我们的项目大多非常复杂且庞大。一单服务的用户多了起来,我们的可用性的要求就高了,单个节点出问题了就等于整个服务不可用,这是不可接受的。怎么做高可用呢?k8s说:我可以的!这个问题后面在写。
Docker & k8s 系列一:快速上手docker
Docker & k8s 系列二:本机k8s环境搭建
Docker & k8s 系列三:在k8s中部署单个服务实例
Docker & Kubenetes 系列四:集群,扩容,升级,回滚

Docker & k8s 系列三:在k8s中部署单个服务实例的更多相关文章
- C# 互操作性入门系列(三):平台调用中的数据封送处理
好文章搬用工模式启动ing ..... { 文章中已经包含了原文链接 就不再次粘贴了 言明 改文章是一个系列,但只收录了2篇,原因是 够用了 } --------------------------- ...
- [转]C# 互操作性入门系列(三):平台调用中的数据封送处理
参考网址:https://www.cnblogs.com/FongLuo/p/4512738.html C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列( ...
- centos6.10中部署percona-mysql双实例的方法
centos6.10中部署percona-mysql双实例的方法 数据库的同步关系:192.168.11.53(master) --> slave(192.168.10.189) --> ...
- log4net保存到数据库系列三、代码中xml配置log4net
园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ...
- 从零开始一步一步搭建Ubuntu Server服务器、修改数据源、安装Docker、配置镜像加速器、Compose部署Gitlab服务
场景 最终目的是使用Docker Compose部署一个Gitlab服务. 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi关注公众号 霸道的程序 ...
- zookeeper系列之:独立模式部署zookeeper服务
一.简述 独立模式是部署zookeeper服务的三种模式中最简单和最基础的模式,只需一台机器即可,独立模式仅适用于学习,开发和生产都不建议使用独立模式.本文介绍以独立模式部署zookeeper服务器的 ...
- tomcat 部署 RESTful 服务实例
1.建立简单restfule服务 参考:java 利用JAX-RS快速开发RESTful 服务实例 简单代码: package com.example; import javax.ws.rs.GET; ...
- rpm,docker,k8s三种方式安装部署GitLab服务
rpm方式 源地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ wget https://mirrors.tuna.tsinghua ...
- K8s 系列(三) - 如何配置 etcd https 证书?
在 K8s 中,kube-apiserver 使用 etcd 对 REST object 资源进行持久化存储,本文介绍如何配置生成自签 https 证书,搭建 etcd 集群给 apiserver 使 ...
随机推荐
- 使用NLP从文章中自动提取关键字
背景 在研究和新闻文章中,关键词构成了一个重要的组成部分,因为它们提供了文章内容的简洁表示.关键词在从信息检索系统,书目数据库和搜索引擎优化中定位文章方面也起着至关重要的作用.关键词还有助于将文章分类 ...
- javascript: Object对象生成URL参数
code: function makeQuery(queryObject) { const query = Object.entries(queryObject) .reduce((result, e ...
- 一不小心实现了RPC
前言 随着最近关注 cim 项目的人越发增多,导致提的问题以及 Bug 也在增加,在修复问题的过程中难免代码洁癖又上来了. 看着一两年前写的东西总是怀疑这真的是出自自己手里嘛?有些地方实在忍不住了便开 ...
- AWR发现TOP Event log file sequential read
对客户DB进行巡检,发现TOP EVENT是LOG FILE Sequential read 等待事件说明 https://www.xuebuyuan.com/zh-hant/1743045.html ...
- 瑞银预计小扎的十年规划可获大回报 上调Facebook股票目标价
瑞银认为马克·扎克伯格(Mark Zuckerberg)为Facebook定制的十年规划将带来丰厚回报,它已将Facebook股票的目标价由之前的155美元上调至165美元. Facebook首席执行 ...
- Clickhosue 强大的函数,argMin() 和argMax()函数
说实话,我喜欢Clickhouse 的函数,简单操作,功能强大.今天需要给大家介绍两个函数,argMin(),argMax() 1.argMax():计算 ‘arg’ 最大值 ‘val’ 价值. 如果 ...
- 8种MySQL分页方法总结
这篇文章主要介绍了8种MySQL分页方法总结,小编现在才知道,MySQL分页竟然有8种实现方法,本文就一一讲解了这些方法,需要的朋友可以参考下 MySQL的分页似乎一直是个问题,有什么优化方法吗?网上 ...
- 图论--网络流--最大流 POJ 2289 Jamie's Contact Groups (二分+限流建图)
Description Jamie is a very popular girl and has quite a lot of friends, so she always keeps a very ...
- Nginx模块开发(3)————使用upstream访问第三方服务
该模块可以完成如下的功能,当我们输入http://你的ip/lcwupstream时,会使用upstream方式访问淘宝搜索,打开淘宝搜索的主页面,代码如下: //start from the ver ...
- 【Java8新特性】一张图带你领略Java8有哪些新特性
写在前面 很多小伙伴留言说,冰河你能不能写一些关于Java8的文章呢,看书看不下去,看视频进度太慢.好吧,看到不少读者对Java8还是比较陌生的,那我就写一些关于Java8的文章吧,希望对大家有所帮助 ...