k8s入门教程
1. k8s概述
Kubernetes(简称K8S) 是Google开源的分布式的容器管理平台,方便我们在服务器集群中管理我们容器化应用。
教程主要介绍怎么使用阿里云容器服务(kubernetes版本)。
2. k8s常用概念介绍
- 节点 (Master node and Worker node)
节点通常指的就是服务器,在k8s中有两种节点:管理节点(Master Node)和工作节点(Worker Node)
管理节点(Master Node):负责管理整个k8s集群,一般由3个管理节点组成HA的架构。
工作节点(Worker Node):主要负责运行容器。
- 命名空间 (Namespace)
k8s命名空间主要用于隔离集群资源、隔离容器等,为集群提供了一种虚拟隔离的策略;默认存在3个名字空间,分别是默认命名空间 default、系统命名空间 kube-system 和 kube-public。
- Object
k8s 对象(Object)是一种持久化存储并且用于表示集群状态的实体。k8s 对象其实就是k8s自己的配置协议,总之我们可以通过定义一个object让k8s根据object定义执行一些部署任务、监控任务等等。
- POD
Pod是 Kubernetes 部署应用或服务的最小的基本单位。一个Pod 封装多个应用容器(也可以只有一个容器)、存储资源、一个独立的网络 IP 以及管理控制容器运行方式的策略选项。
- 副本集 (Replica Set,RS)
是一种控制器,负责监控和维护集群中pod的副本(replicas)数,确保pod的副本数是我们期望的样子。
- 部署 (Deployment)
表示对k8s集群的一次更新操作,是k8s集群中最常用的Object,主要用于部署应用。支持滚动升级。
- 服务 (service)
是对应用的抽象,也是k8s中的基本操作单元,一个服务背后由多个pod支持,服务通过负载均衡策略将请求转发到容器中。
- Ingress
是一种网关服务,可以将k8s服务通过http协议暴露到外部。
- 无状态应用 & 有状态应用
- 无状态应用指的是应用在容器中运行时候不会在容器中持久化存储数据,应用容器可以随意创建、销毁;如果一个应用有多个容器实例,对于无状态应用,请求转发给任何一个容器实例都可以正确运行。例如:web应用
- 有状态应用指的是应用在容器中运行时候需要稳定的持久化存储、稳定的网络标识、固定的pod启动和停止次序。例如:mysql数据库
3. k8s架构
通过上图可以看出k8s整体架构主要由左边的master节点和右边的worker组成,master节点负责对整个集群进行管理,右边的电脑表示worker节点负责运行我们部署的容器。
4. 基于k8s的常见web应用部署架构
从上往下看,ingress作为http请求入口接收客户端请求,ingress根据路由规则将请求转发给对应的服务,服务再根据负载均衡策略将请求转发给对应的容器实例,底层基础云服务由所有容器实例共享。
5. 部署应用
下面是通过阿里云容器服务后台以可视化的方式部署应用。
阿里云部署应用连接。
https://help.aliyun.com/document_detail/87784.html?spm=a2c4g.11186623.6.631.6ca67d26RVHzA4
6. 容器之间共享文件存储
在集群环境中,默认情况如果应用在容器A创建了一个文件,容器B无法读取这个文件。
在k8s中提供了持久卷(Persistent Volumes)解决持久化存储问题,持久卷将存储细节和存储数据访问分离,对于用户而言使用同统一的接口访问不同存储系统上的数据。
根据存储方式不同,k8s支持多种持久卷(Persistent Volumes)类型,阿里云也对k8s进行一些扩展支持,目前支持NAS、OSS、云盘三种持久卷类型。
下面是关于阿里云支持的持久卷类型的介绍:
- NAS - 阿里云高性能分布式文件系统,支持共享存储。
- OSS - 阿里云对象存储, 也是一个分布式文件系统,支持共享存储。
- 云盘 - 阿里云云盘,不支持共享存储。
根据上面的介绍我们可以选择NAS或者OSS实现共享文件数据,OSS主要用于图片,视频存储场景可以支持文件直接对外提供访问服务,在容器共享文件数据,我们一般选择NAS, 下面是K8S使用NAS的教程:
https://help.aliyun.com/document_detail/88940.html?spm=a2c4g.11186623.6.680.18656b80CZtc9r
关于云盘,不能多个容器共享,每个POD独占自己的云盘实例,适合用于为部署有状态应用提供持久化存储,例如部署mysql, 将mysql数据保存到云盘中。
提示:无论使用何种持久卷类型,最终都是以挂载的方式,关联到容器中。 对用户来讲,最终看到的就是一个目录。
7. k8s配置管理
如果希望一个镜像(image)更具有通用性,与环境无关,那么应该将环境相关的配置参数从镜像中分离出来。
举个例子:
我们将一个web应用的代码打包到一个镜像中,如果web应用关于数据库的连接地址、帐号、密码也一同打包到镜像中,那么如果我们希望这个镜像换一个数据库配置信息怎么办? 只能重新打包镜像。
k8s为我们提供了两种配置管理的方式:configMap和secret。
他们都是键值对的形式,区别就是secret专门用于管理铭感信息配置,例如:密码。
无论使用那种方式管理配置,最终配置信息都需要注入到容器中。
目前有两种方式将配置信息注入到容器中:环境变量和挂载(mount)数据卷
- 通过环境变量方式注入容器,容器中的程序只要通过读取环境变量值就可以获取配置信息。
- 通过挂载数据卷的方式注入,一般都是挂载到某个目录,只要读取这个目录中的数据就可以获取配置信息。
下面是阿里云使用配置的例子:
首先是创建配置项:
接下来是配置注入到容器中,先看通过环境变量注入:
在阿里云后台新建应用或者编辑应用,都会出现下面的窗口
下面是通过挂载的方式注入配置信息:
同样是在新建应用或者编辑应用窗口中,设置数据卷。
阿里云后台操作详细说明连接:
https://help.aliyun.com/document_detail/86769.html?spm=a2c4g.11186623.6.671.667f142e1EUHo4
k8s入门教程的更多相关文章
- 反手来个K8S入门到跑路
layout: post title: 反手来个K8S入门到跑路 category: linux date: 2019-06-09 tags: linux k8s 反手来个K8S入门到跑路 前言 放假 ...
- k8s入门你至少需要会哪些
body { margin: 0; overflow: auto; font: normal 14px Verdana; background: rgba(255, 255, 255, 1); pad ...
- k8s入门之集群搭建(二)
一.准备三台节点 从上篇文章 k8s入门之基础环境准备(一)安装的Ubuntu虚拟机克隆出三台虚拟机,如图所示 启动这三台虚拟机节点,分别做如下配置 虚拟机名称 IP HostName k8sMast ...
- wepack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
- wepack+sass+vue 入门教程(二)
六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...
- wepack+sass+vue 入门教程(一)
一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...
- Content Security Policy 入门教程
阮一峰文章:Content Security Policy 入门教程
- gulp详细入门教程
本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...
- UE4新手引导入门教程
请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf
随机推荐
- 查询sql server占用内存的情况
se master go select * from sysperfinfo where counter_name like '%Total Server Memory (KB)%' go
- mv 移动或重命名文件
1. 命令功能 mv:移动或改文件名 2. 语法格式 mv [option] source dest mv 选项 源文件 目标文件 参数 参数说明 -f 如果目标文件存在,则不会询问而是直接覆 ...
- Linux下python pip手动安装笔记
今天查问题, 从redis集群中模糊查询某个key, 用一些重复的命令, 链接不同的node, redis-cli 去查, 感觉不舒服. 考虑写一些shell或py来简化一下. 一查环境, 安装了py ...
- [BZOJ1826] 缓存交换
问题描述 在计算机中,CPU只能和高速缓存Cache直接交换数据.当所需的内存单元不在Cache中时,则需要从主存里把数据调入Cache.此时,如果Cache容量已满,则必须先从中删除一个. 例如,当 ...
- (arm板子tensorflow安装)armv7板子pip安装的wheel
树莓派之类的armv7板子在,安装 numpy,scipy时经常失败,因为安装过程是下载源码包到本地编译,然后再安装的,编译过程中往往就会失败. https://www.piwheels.org/si ...
- Eclipse 4.9 创建springboot项目步骤
上一篇文章写了eclipse安装STS. 现在创建Spring Starter Project 具体步骤如下: 1.等你安装好STS后,就在Eclipse > File >New 选择 ...
- Eclipse安装STS插件两种方式
spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...
- Arithmetic Sequence
Arithmetic Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- 前端每日实战:124# 视频演示如何用纯 CSS 创作一只纸鹤
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/xagoYb 可交互视频 此视频是可 ...
- Flask学习 3 url_for的使用
#!/usr/bin/env python # encoding: utf-8 """ @version: v1.0 @author: cxa @file: flask0 ...