美文网首页我的专题Docker容器Awesome Docker
Kubernetes—简介以及部署方案

Kubernetes—简介以及部署方案

作者: Johnnian | 来源:发表于2017-09-09 18:34 被阅读188次

本文同步于个人Github博客:https://github.com/johnnian/Blog/issues/30,欢迎留言。

谈到容器化管理解决方案,Kubernetes 目前应该是比较成熟的,有比较多的落地实施案例。

一、Kubernetes 简介

Kubernetes 是容器自动部署、扩展与管理的开源平台,具体的介绍,可以参考链接: What is Kubernetes?

目前,Kubernetes有比较多的落地实施案例,例如 京东、SAE、网宿科技、时速云、灵雀云、网易蜂巢等等。

参考链接:

二、Kubernetes基本概念

Kubernetes 集群的节点,按照功能,可以划分为 Master Node(控制集群),Worker Node(实际工作)。

Master Node上运行的组件: Master Components + Node components
Worker Node上运行的组件: Node components

2.1 Components(组件)

Master Components

  • kube-apiserver:配置API 对象(pods, services, replicationcontrollers等),并且放出REST 接口,供其他组件进行交互
  • etcd: Kubernetes用于存储API对象的Key-Value存储中心
  • kube-controller-manager/cloud-controller-manager: 处理集群中的运行时任务,正常情况下是通过这些控制器来控制管理集群的
  • kube-scheduler:为Pod分配运行节点
  • addons(DNS、Dashboard、Monitoring、Logging等)

Node Components

  • kubelet: 节点的守护进程,最终工作的执行者
  • kube-proxy: Kubernetes集群的网络代理
  • docker / rkt: 容器
  • supervisord:轻量级的守护进程
  • fluentd: 日志收集

Master node 组件结构

master-node

Worker node 组件结构

worker-node

参考链接:

2.2 API Objects(API 对象)

Kubernetes使用 持久化的Objects对象来展现集群的状态,这些对象存储在 Kubernetes的 Etcd KeyValue存储中。

使用 kubectl命令行客户端来操作 API 对象。

API Object的文档说明,请看这里

通过创建 .yaml格式的文件,使用kubectl命令行创建 API对象, .yaml文件的格式大致是:


apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

可以分为:

  • apiVersion: 需要使用哪个版本的Kubernetes来创建 API对象
  • kind: 需要创建那种类型的 API对象
  • metadata: API对象的一些标志属性,如,name, UID, namespace等
  • spec: API对象的具体属性配置

对于API对象的类型,划分:

  • Pod: Pod可以理解为应用实例特定的逻辑主机,表示一个或多个容器组和这些容器的共享资源,包共用卷、唯一的集群IP和容器运行的信息,如端口等;
  • Controller:Controller可以根据对应的策略创建或者管理Pod,如,Deployment,DaemonSet,StatefulSet等;
  • Service: Service是一组相同逻辑的pods和一个访问它们的策略;
    a. ClusterIP(默认): 只有集群内部访问;
    b. NodePort: 使用NAT方式,在集群中每个选定的节点的同一端口上暴露服务。可以在集群外部访问服务。
    c. LoadBalancer:创建外部负载均衡。
    d. ExternalName:使用任意名称显示服务。
  • Namespace: 命名空间;
  • Node: kubernetes的工作机器(物理机或虚拟机),Node由master管理,可以在一个node上部署多个pod;

2.3 Controller(控制器)

不同类型的控制器,管理Pod的策略是不同的,Controller主要分为下面几种类型:

  • Deployment: Deployments控制器是最常用的,可以用来管理和更新Pods 、ReplicaSets
  • Replication Controller
  • ReplicaSets(Replication Controller的下一个升级版本)
  • DaemonSet
  • Job
  • Cron Job
  • StatefulSets[beta]
  • Garbage collection[beta]

参考链接:

2.4 Service(服务)

Service 可以说是连接 Pods 与外界的桥梁,Service可以建立起 内部 Pod 容器的端口 <--> 外部端口 的映射关系,通过Visual IP,客户端直接连接Service的IP、端口,而无需关注后端的Pods IP地址的变化,这个概念有点儿像微服务。

Service 有下面几种类型:

  • ClusterIP(默认): 仅限于集群内部使用的服务,外部无法访问;
  • NodePort: 支持外部访问的服务,可以通过 [NodeIP]:[NodePort] 来访问对应的服务;
  • LoadBalancer:需要云服务商支持
  • ExternalName:通过域名来访问

每个Node 都会运行 kube-proxy 组件,kube-proxy 组件为Service创建虚拟IP(Visual IP),下面是整个网络代理的拓扑图:

Kubernetes V1.2版本前,网络代理的拓扑图:


qq20170905-152148 2x

Kubernetes V1.2版本后,网络代理的拓扑图:


qq20170905-152210 2x

详细说明,参考:Service

2.5 网络拓扑

Kubernetes 高可用集群拓扑图

default

三、常见的部署方案以及示例

目前市面上有很多部署和实施Kubernete的解决方案,点击这里查看, 总的来说,大致分为下面的几种:

  • Hosted Solutions:托管部署方案,例如直接用谷歌的Google Container Engine
  • Local-machine Solutions: 本地部署方案,一般用于开发测试使用,例如,使用 minikube 部署;
  • Custom Solutions: 自行定制的方案,例如,使用 kubeadm部署;

3.1、本地部署-minikube

minikube安装倒是挺简单的,就是下载镜像的时候会有问题,可以考虑:使用阿里云镜像,或者用Docker Hub 作为中转。

部署示例

操作说明

3.2 集群部署-kubeadm

参考链接

相关文章

网友评论

    本文标题:Kubernetes—简介以及部署方案

    本文链接:https://www.haomeiwen.com/subject/dhdajxtx.html