• Kubernetes系列(一)


    1. 基本概念

    1.1 什么是 Kubernetes 集群

    1. Kubernetes用于协调高度可用的计算机集群,这些计算机群集被连接作为单个单元工作
    2. Kubernetes在一个集群上以更有效的方式自动分发和调度容器应用程序

    1.2 Kubernetes集群资源组成:

    • Master是集群的调度节点
    • Nodes是应用程序实际运行的工作节点
    1. Master 负责管理集群
    2. Node是Kubernetes集群中的工作机器,可以是物理机或虚拟机
    • 每个工作节点都有一个Kubelet,它是管理 节点 并与 Kubernetes Master 节点进行通信的代理。节点上还应具有处理容器操作的工作,例如 Docker。一个 Kubernetes 工作集群至少有三个节点

    • 节点 使用 Master 公开的 Kubernetes APIMaster 通信

    1.3 无状态和有状态的区别

    1.3.1 无状态服务

    1. 是指该服务运行的实例不会在本地存储需要持久化的数据,并且多个实例对于同一个请求响应的结果是完全一致的。
    2. 多个实例可以共享相同的持久化数据。例如:nginx实例,tomcat实例等
    3. 相关的k8s资源有:ReplicaSet, ReplicationController、Deployment等,由于是无状态服务,所以这些控制器创建的pod序号都是随机值。并且在缩容的时候并不会明确缩容某一个pod,而是随机的,因为所有实例得到的返回值都是一样,所以缩容任何一个pod都可以。

    1.3.2 有状态服务

    1. 有状态服务可以说是需要数据存储功能的服务、或者指多线程类型的服务,队列等。(mysql数据库、kafka、zookeeper等)
    2. 每个实例都需要有自己独立的持久化存储,并且在k8s中是通过申明模板来进行定义。持久卷申明模板在创建pod之前创建,绑定到pod中,模板可以定义多个。

    2. Kubernetes结构划分

    2.1 Kubernetes总体结构划分

    1. 只有中间的是k8s的部分
    2. 左边是管理master的
    3. 右边的是镜像仓库

    2.2 Master结构划分

    1. API Server

    负责与外部通信,有:接口,GUI,命令行

    1. Scheduler

    调度器,容器调度

    1. Controller

    控制器,负责具体工作: 还有容器监控等等

    1. etcd

    第三方的,保存应用程序配置信息的守护进程,K/V存储

    2.3 Node结构划分

    1. kubelet

    管理node,而且是负责与master API Server通信

    1. pod

    k8s运行的核心基本单元,也是被编排对象

    • k8s上不会直接运行容器,而是运行pod
    • 说白了pod是容器的外壳
    • 但是一个pod可能会包含多个容器,在这种情况下,多个容器被当作一个原子单位管理
    • pod运行在一个私有的隔离的网络上,默认情况下在同一集群的其他pod和service中可见,但是外部不可见,需要借助service暴露给外部

    1. node还应该具有处理容器操作的工具

    例如docker或者rkt,一般是docker

    3. Kubernetes的组件组成

    3.1 Master Components

    1. kube-apiserver
    2. etcd
    3. kube-scheduler
    4. kube-controller-manager
    5. cloud-controller-manager

    3.2 Node Components

    1. kubelet

    与API server进行交互的

    1. kube-proxy
    2. Container Runtime

    docker等

    3.3 Addons拓展

    1. DNS

    服务注册和服务发现

    1. CNI

    必须要一个,容器网络接口实现,flannel,calico。。。

    1. Web UI(Dashboard)

    GUI界面

    1. Container Resource Monitoring
    2. Cluster-level Logging

    4. Kubernetes的一些对象(资源)

    4.1 Kubernetes基础对象

    1. pod
    2. service

    可以认为是pod的反向代理,负责接收客户端请求,把请求转给pod

    • 因为每个pod都有自己的内部ip,但是针对一个deployment的pod是有可能变的【pod挂掉或者复制】,所以需要一个service来做一个类似中间者的一个抽象的存在
    • 通过typeServiceSpec中指定可以以不同的方式公开服务
      • ClusterIP(默认): 在集群的内部ip上公开服务。这种类型使得只能从集群内访问服务
      • NodePort:在每个node上的相同端口上公开服务,可以从集群外部访问服务。ClusterIP的超集, 最常用
      • LoadBalancer: 在当前云中创建一个外部负载平衡器(如果支持),并为该服务分配一个固定的外部IP。NodePort的超集。
      • ExternalName-externalName: 通过返回具有该名称的CNAME记录,使用任意名称(在规范中指定)公开服务。不使用代理。此类型需要v1.7或更高版本kube-dns
    1. pod controller(统称)

    Deployment最常见

    1. Namespace
    2. Volume

    4.2 高级对象

    建立在基础对象之上,提供额外功能

    1. pod controller(抽象概念):Deployment(具体实现)【负责操作pod】

    5. 部署相关

    5.1 部署高可用要点

    5.2 部署工具

    5.3 安装和部署K8S的两种方式

    1. 二进制部署

    让基础程序运行为守护进程

    1. 让基础程序运行为容器

    自动化部署工具kubeadm

    其他章节
    kubernetes系列(二) - kubectl的入门操作

  • 相关阅读:
    一个有趣的C语言问题
    PHP 管理树莓派
    JeeSite | 保存信息修改记录封装
    SQL Server学习内容(一)
    Java面试题大汇总
    Spring框架快速入门
    单例模式
    简要分析一下java中线程的生命周期
    mybatis中的高级查询
    mybatis中的分页插件
  • 原文地址:https://www.cnblogs.com/baoshu/p/13068727.html
Copyright © 2020-2023  润新知