引言

最近开周会的时候接触到了k8s的东西,可是作为一个小白,决定还是将这方面的知识补全补全,对以后也会有些帮助~

预备知识

软件开发最麻烦的事情就是配置环境,经常会被弄得吐血。

软件能够运行起来用户必须要保证两件事:操作系统的设置、各种库和组件的安装,只有都正确了,软件才能够正确地运行。

通常的解决方案是以下几种:

虚拟机

虚拟机是带环境安装的一种解决方案,它可以在一种操作系用里面运行另一种操作系统,应用程序对此毫无感知。用户可以通过虚拟机来还原系统的原始环境。

缺点:

  1. 资源占用多(虚拟机会占用部分内存和硬盘控件)
  2. 冗余步骤多
  3. 启动步骤多,启动较慢

Linux容器

lunux容器是对进程进行隔离,在正常进程外面套了一个保护层,对于容器里面的进程来说,它接触到的资源都是虚拟的,和底层的操作系统进行了一个隔离。

容器是进程级别的

相比虚拟机的很多优势

  1. 启动快:启动容器就相当于启动本机的一个进程
  2. 资源占用少:只占用需要的资源
  3. 体积小:容器只要包含用到的组件即可

docker

docker属于Linux容器的一种封装,提供简单易用的容器使用接口。

docker将应用程序与该程序的依赖打包在一个文件里,运行这个文件,就会生成一个虚拟容器。程序在这个容器里面运行,就像是在真实的物理机上运行一样。

docker的接口十分简单,用户可以方便地创建和使用容器,应用放进容器可以进行版本管理、复制、分享、修改,就和管理普通代码一样。

主要用途

  1. 提供一次性的环境
  2. 提供弹性的云服务:因为docker容器可以随开随关,很适合动态地扩容和缩容
  3. 组建微服务架构:通过多个容器,一台机器就可以跑多个服务

需要了解:

  • docker hub
  • Dockerfile文件的写法
  • 创建img文件
  • 生成容器做法
  • cmd命令

kubernets

docker容器技术虽然被炒的热火朝天,但是想要应用于具体的业务在编排、管理和调度等各个方面,都不容易,人们迫切需要一套管理系统,对docker及其容器进行更高级更灵活的管理

k8s是基于容器的集群管理平台;

首先几个名词的概念:

  • 节点:Kubernetes集群中的一台物理机或者虚拟机。
  • 集群:位于Internet防火墙后的节点,这是kubernetes管理的主要计算资源。
  • 边界路由器:为集群强制执行防火墙策略的路由器。 这可能是由云提供商或物理硬件管理的网关。
  • 集群网络:一组逻辑或物理链接,可根据Kubernetes网络模型实现群集内的通信。 集群网络的实现包括Overlay模型的 flannel 和基于SDN的OVS
  • 服务:使用标签选择器标识一组pod成为的Kubernetes服务。 除非另有说明,否则服务假定在集群网络内仅可通过虚拟IP访问。

一个k8s系统,通常也称为k8s集群:

master节点主要负责管理和控制,node节点是工作负载节点,里面是具体的容器

master节点

  • API Server是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”;
  • Scheduler负责对集群内部的资源进行调用,相当于“调度室”;
  • Controller manage负责管理控制器,相当于“大总管”

Node节点

  • service是指一组提供相同服务的对外访问接口
  • pod是kubernetes最基本的擦欧总单元,一个pod代表着一个进程,内部封装了一个or多个紧密相关的容器
  • docker容器
  • kubelet负责监视派到他所在node上的pod,包括创建、修改、监控、删除等
  • kube-proxy,主要负责为pod对象提供代理
  • fluenttd负责日志收集、存储与查询

kubernetes ingress解析

通常情况下service和pod只可以在集群内部网络中通过IP地址访问,所有达到边界路由器的流量或被丢弃或被转发到其他地方。

     internet
        |
  ------------
   [ Services ]

ingress是授权入站链接到达集群服务的规则集合。

    internet
        |
   [ Ingress ]
   --|-----|--
   [ Services ]

可以在里面配置URL、负载均衡、SSL、基于名称的虚拟主机等,利用post访问api server访问ingress资源。

ingress->service->pod(k8s操作的基本单位)->container(一般都是使用docker)
istio一般是在pod里面进行更加细致的流量控制

注意:

  • 你请求自己的服务是到ingress ,请求k8s的配置是api server
  • ingress(可局部配置)配合ingress controller(必须全局配置)使用。

参考

Docker 入门教程

10分钟看懂Docker和K8S

kubernetes ingress解析(包括配置教程)

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐