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入门教程的更多相关文章

  1. 反手来个K8S入门到跑路

    layout: post title: 反手来个K8S入门到跑路 category: linux date: 2019-06-09 tags: linux k8s 反手来个K8S入门到跑路 前言 放假 ...

  2. k8s入门你至少需要会哪些

    body { margin: 0; overflow: auto; font: normal 14px Verdana; background: rgba(255, 255, 255, 1); pad ...

  3. k8s入门之集群搭建(二)

    一.准备三台节点 从上篇文章 k8s入门之基础环境准备(一)安装的Ubuntu虚拟机克隆出三台虚拟机,如图所示 启动这三台虚拟机节点,分别做如下配置 虚拟机名称 IP HostName k8sMast ...

  4. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  5. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  6. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

  7. Content Security Policy 入门教程

    阮一峰文章:Content Security Policy 入门教程

  8. gulp详细入门教程

    本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

  9. UE4新手引导入门教程

    请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf

随机推荐

  1. MYSQL学习笔记——连接以及存储过程

    连接 当我们需要从多个表查询数据时,我们就需要使用到连接操作,mysql支持内连接,左连接以及右连接三种连接方式. 数据库准备 首先我们创建两个表t1, t2: create table t1(i1 ...

  2. idea 配置自动编译 livereload

    1 pom中添加 spring-boot-devtools 依赖 <dependency> <groupId>org.springframework.boot</grou ...

  3. Java8 的一些新特性的学习理解

    近期在学习队列相关的一些知识,在学习过程中发现Iterable<T>接口中新增了两个新的方法,出于好奇,就想知道这是什么东东,干什么用的.俗话说:实践出真知,所以就有了以下反复的测试. 先 ...

  4. bzoj2402 陶陶的难题II 分数规划+树剖+线段树维护凸壳+二分

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2402 题解 看上去很像分数规划的模型.于是就二分吧.令 \[ \begin{align*}\f ...

  5. [洛谷P1709] 隐藏的口令

    问题描述 有时候程序员有很奇怪的方法来隐藏他们的口令.Binny会选择一个字符串S(由N个小写字母组成,5<=N<=5,000,000),然后他把S顺时针绕成一个圈,每次取一个做开头字母并 ...

  6. 简单的使用redis

    心不慌手不抖我们跟着大哥走 https://blog.csdn.net/zhangcongyi420/article/details/82686702

  7. linux运维、架构之路-MySQL主从复制

    一.MySQL主从复制原理图  MySQL主从复制原理:实现主从复制原理是三个线程完成的,主的I/O线程,备的I/O线程与SQL线程 1.首先主库db01需要开启binlog.授权一个replicat ...

  8. 【HDOJ6667】Roundgod and Milk Tea(模拟)

    题意:有n个班级,每个班级有a[i]个人,b[i]杯奶茶 每个人至多喝一杯奶茶,且不能喝自己班的 问能喝到奶茶的最多总人数 n<=1e6,a[i],b[i]<=1e9 思路: 做法一: # ...

  9. Delphi 清理程序内存

    procedure ClearMemory;begin        if Win32Platform = VER_PLATFORM_WIN32_NT then        begin        ...

  10. 银联高校极客挑战赛 初赛 第一场 B

    自学图论的码队弟弟 试图写非递归求解,然后TLE了一下午==,全程找不到bug,换成递归,一发AC 判断环写得很丑== #include<bits/stdc++.h> using name ...