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 使 ...
随机推荐
- vue3开发饿了么商城2020年新版本
带手机验证码登陆, 带全套购物车系统 带数据库 前后端分离开发 带定位用户功能 数据库代码为本地制作好了 带支付宝支付系统 带django开发服务器接口教程 地址: https://www.dua ...
- 带你玩linux集成环境
据我现在知道的,在linux一键部署集成环境的应用有: “宝塔面板” “LNMP" "XRDP" 参考:http://www.ampnmp.com/ 具体什么安装就直接百 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第一周作业
Linux学习随笔 Linux 是一个操作系统,我们的 Linux 主要是系统调用和内核那两层. UNIX前身是Multics,但 UNIX 的商业版本非常昂贵,于是Linus Torvalds(Li ...
- UVALive 7509 Dome and Steles
三分 #include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;++i) #d ...
- 关于Pandownload和百度网盘
本周,百度网盘第三方客户端 Pandownload 被查,开发者被“跨省追捕”:百度网盘“用户激励计划”在未充分告知用户的情况下,利用用户自己的电脑做 P2P 上传节点.这两件事再度引发了对百度网盘的 ...
- TCP链接的三次握手与四次断开
一直总觉得三次握手和四次断开,之前老师讲的有问题,经过自己再次琢磨,发现是的,老师讲的没毛病,这次也把自己的理解总结一下,让对这个知识模糊的小伙伴再换种思路去理解 首先看一下TCP三次握手发生了哪些: ...
- 自动安装带nginx_upstream_check_module模块的Nginx脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #!/bin/bash useradd -s /sbin/no ...
- VS Code 全部快捷键一览表(巨TM全)
常用 General 按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Quick O ...
- POJ - 2251 Dungeon Master (搜索)
You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...
- RF(元素定位)
1.id 定位 Open Browser https://www.baidu.com gc Input Text id=kw selenium #注意 id 的值 kw 没有用引号括起来 Close ...