Kubernetes快速入门

学习Kubernetes最权威的知识来源就是Kubernetes官方文档,而且对于初学者来说,官方文档可能不是最佳选择。本章将带你循循序渐进的学习Kubernetes,后面章节会通过大量的实践案例来理解和掌握Kubernetes的知识。

Kubernetes架构介绍

Kubernetes 源于希腊语,意为 “舵手” 或 “飞行员”,是用于自动部署,扩展和管理容器化应用程序的开源系统,由于K和S之间有8个字母,被简称为K8S。Kubernetes 构建在 Google 15 年生产环境经验基础之上,可以将Kubernetes看作为Google内部的容器管理平台Brog的开源版本,当然他们之间是有一些差异的。

Kubernetes系统架构

Kubernetes被设计为Master和Node两个角色,这类似于OpenStack的架构理念,Master为控制节点,Node为计算节点或者叫工作节点,在Master节点上有一个API Server服务,对外提供标准的RestAPI,这也是Kubernetes集群的入口,意外着只要和集群进行交互必须连接到API Server上。

Master节点介绍

Kubernetes Master节点主要有4个组件,API Server、Scheduler、Controller、etcd。如下图所示:

  • API Server:提供Kubernetes API接口,主要处理 Rest操作以及更新Etcd中的对象。是所有资源增删改查的唯一入口。

  • Scheduler:绑定Pod到Node上,主要做资源调度。

  • Controller Manager:所有其他群集级别的功能,目前由控制器Manager执行。资源对象的自动化控制中心,Kubernetes集群有很多控制器。

  • Etcd:所有持久化的状态信息存储在Etcd中,这个是Kubernetes集群的数据库。

Node节点介绍

Node节点是Kubernetes集群的工作节点,在Node节点上主要运行了Docker、Kubelet、kube-proxy三个服务(Fluentd请先忽略),如下图所示:

  • Docker Engine:负责节点的容器的管理工作,最终创建出来的是一个Docker容器。

  • Kubelet:安装在Node上的代理服务,用来管理Pods以及容器、镜像、Volume等,实现对集群对节点的管理。

  • Kube-proxy:安装在Node上的网络代理服务,提供网络代理以及负载均衡,实现与Service通讯。

Kubernetes逻辑架构

在上面的介绍中提到像Pod、Service这些概念,在Kubernetes的系统架构图中并没有体现出来,这些可以理解为Kubernetes逻辑架构中的组件。也就是在Master和Node上并不具体存在的一个服务或者进程,但却是Kubernetes的组件,也是我们的管理对象。主要有Pod、Service和各种控制器等。

Pod

Pod是Kubernetes的最小管理单元,一个Pod可以包含一组容器和卷。虽然一个Pod里面可以包含一个或者多个容器,但是Pod只有一个IP地址,而且Pod重启后,IP地址会发生变化。

Controller

一个应用如果可以有一个或者多个Pod,就像你给某一个应用做集群,集群中的所有Pod是一模一样的。Kubernetes中有很多控制器可以来管理Pod,例如下图的Replication Controller可以控制Pod的副本数量,从而实现横向扩展。

Kubernetes中有很多控制器,后面的章节我们会一一讲到,常用的控制器如下:

  • Replication Controller(新版本已经被ReplicaSet所替代)

  • ReplicaSet(新版本被封装在Deployment中)

  • Deployment:封装了Pod的副本管理、部署更新、回滚、扩容、缩容等功能。

  • DaemonSet:保证所有的Node上有且只有一个Pod在运行。

  • StatefulSet:有状态的应用,为 Pod 提供唯一的标识,它可以保证部署和 scale 的顺序。

  • Job:使用Kubernetes运行单一任务。

  • CronJob:使用Kubernetes运行定时任务。

Service

由于Pod的生命周期是短暂的,而且每次重启Pod的IP地址都会发生变化,而且一个Pod有多个副本,也就是说一个集群中有了多个节点,就需要考虑负载均衡的问题。Kubernetes使用Service来实现Pod的访问,而且Service有一个Cluster IP,通常也称之为VIP,是固定不变的。

Kubernetes网络介绍

在Kubernetes集群中存在着三种网络,分别是Node网络、Pod网络和Service网络,这几种网络之间的通信需要依靠网络插件,Kubernetes本身并没有提供,社区提供了像Flannel、Calico、Cannal等,后面章节会详述。

Node网络

Node网络指的是Kubernetes Node节点本地的网络,在本实验环境中使用的是192.168.56.0/24这个网段,所有的Node和Master在该网段都可以正常通信。

Pod网络

后面创建的Pod,每一个Pod都会有一个IP地址,这个IP地址网络段被称之为Pod网络,如下图所示。

[root@linux-node1 ~]# kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

nginx-54458cd494-hpn68 1/1 Running 0 9m7s 10.2.1.2 linux-node2.linuxhot.com
<none> <none>

nginx-54458cd494-r4mfq 1/1 Running 0 7m46s 10.2.1.3 linux-node2.linuxhot.com
<none> <none>

Service网络

Service是为Pod提供访问和负载均衡的网络地址段,如下图所示。

[root@linux-node1 ~]# kubectl get service

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 64m

nginx NodePort 10.1.216.23 <none> 80:30893/TCP 8m3s

Kubernetes的组件和知识绝非如此,快速入门可以先了解这么多,下一章节,我们先快速的部署一个Kubernetes集群。

Copyright © 赵班长@新运维社区 2019 all right reserved,powered by Gitbook该文件修订时间: 2019-02-22 15:33:18

results matching ""

    No results matching ""