zoukankan      html  css  js  c++  java
  • K8s基础知识介绍

    1. K8s介绍

    K8s是源自于谷歌内部的Borg系统(容器编排工具),后经过Go语言重写并捐献给了CNCF基金会开源。
    它的主要作用就是作为容器的开源编排框架工具。
    官网:https://kubernetes.io(一年发布四个大版本)
    GitHub:https://github.com/kubernetes/kubernetes
    

    2. K8s的优势

    - 自动装箱,水平扩展,自我修复
    - 服务发现和负载均衡
    - 自动发布(默认滚动发布模式)和回滚
    - 集中配置管理和秘钥管理
    - 存储编排
    - 任务批量处理运行
    

    3. K8s基本概念

    - Pod/Pod控制器
    - Name/Namespace
    - Label/Label选择器
    - Service/Ingress
    

    3.1 Pod与Pod控制器

    3.1.1 Pod

    - Pod是K8S里能够被运行的最小逻辑单元(原子单元)。
    - 1个Pod里面可以运行多个容器,它们共享UTS+NET+IPC名称空间。
    - 可以把Pod理解成豌豆荚,而同一个Pod内的每个容器都是一颗颗豌豆。
    - 一个Pod里可以运行多个容器,这种模式称为边车(SideCar)模式。
    

    3.1.2 Pod控制器

    - Pod控制器是Pod启动的一种模板,用来保证K8S里启动的Pod应始终按照人们的预期运行(副本数、生命周期、健康状态检查等)。
    - K8S内提供了众多的Pod控制器,常用的有以下几种:
    · Deployment
    · DaemonSet
    · ReplicaSet
    · StatefulSet
    · Job
    · Cronjob
    

    3.2 Name和Namespace

    3.2.1 Name

    - 由于K8S内部,使用“资源”来定义每一种逻辑概念(功能),故每种“资源”,都应该有自己的“名称”。
    - “资源”有api版本(apiVersion)、类别(kind)、元数据(metadata)、定义清单(spec)、状态(status)等配置信息。
    - “名称”通常定义在“资源”的“元数据”信息里。
    

    3.2.2 Namespace

    - 随着项目增多、人员增加、集群规模扩大,需要一种能够隔离K8S内各种“资源”的方法,这就是名称空间。
    - 名称空间可以理解为K8S内部的虚拟集群组。
    - 不同名称空间内的“资源”,名称可以相同,相同名称空间内的同种“资源”,“名称”不能相同。
    - 合理的使用K8S的名称空间,可以让集群管理员更好的对交付到K8S里的服务进行分类管理和浏览。
    - K8S里默认存在的名称空间有:default、kube-system、kube-pulic。
    - 查询K8S里特定“资源”要带上相应的名称空间。
    

    3.3 Label和Label选择器

    3.3.1 Label

    - 标签是K8S特色的管理方式,便于分类管理资源对象。
    - 一个标签可以对应多个资源,一个资源可以有多个标签,它们是多对多的关系。
    - 一个资源拥有多个标签,可以实现不同维度的管理。
    - 标签的组成:key=value。
    - 与标签类似的,还有一种“注解”(annotations)。
    

    3.3.2 Label选择器

    - 给资源打上标签后,可以使用标签选择器过滤指定的标签。
    - 标签选择器目前有两个:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在)。
    - 许多资源支持内嵌标签选择器字段
    · matchLabels
    · matchExpressions
    

    3.4 Service和Ingress

    3.4.1 Service

    - 在K8S的世界里,虽然每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失。
    - Service就是用来解决这个问题的核心概念。
    - 一个Service可以看作一组提供相同服务的Pod的对外访问接口。
    - Service作用于哪些Pod是通过标签选择器来定义的。
    

    3.4.2 Ingress

    - Ingress是K8S集群里工作在OSI网络参考模型下,第7层的应用,对外暴露的接口。
    - Service只能进行L4(4层)流量调度,表现形式是ip+port。
    - Ingress则可以调度不同业务域、不同URL访问路径的业务流量。
    

    4. K8S组件介绍

    4.1 k8s核心组件

    配置存储中心 → etcd服务
    主控节点(master)
        - kube-apiserver服务
        - kube-controller-manager服务
        - kube-scheduler服务
    运算节点(node)
        - kube-kubelet服务
        - kube-proxy服务
    

    4.1.1 核心组件详解

    (1)配置存储中心 → etcd服务
    - 类似于zk这种集群管理中心,用来存放集群的元数据信息,如k8s集群状态、请求、资源配额等。存储方式为键值对。
    
    (2)kube-apiserver服务
    - 提供了集群管理的REST API接口(包括鉴权、数据校验及集群状态变更)。
    - 负责其他模块之间的数据交互,承担通信枢纽功能(集群大脑,所有组件都要通过它来进行通信)。
    - 是资源配额控制的入口。
    - 提供完备的集群安全机制。
    
    (3)kube-controller-manager服务(控制器管理器)
    - 由一系列控制器组成,通过apiserver监控整个集群的状态,并确保集群处于预期的工作状态。
    - Node Controller          # 节点控制器
    - Deployment Controller    # pod控制器
    - Service Controller       # 服务控制器
    - Volume Controller        # 存储卷控制器
    - Endpoint Controller      # 接入点控制器
    - Garbage Controller       # 垃圾回收控制器
    - Namespace Controller     # 名称空间控制器
    - Job Controller           # 任务控制器
    - Resource quta Controller # 资源配额控制器
    - ……………………
    
    (3)kube-scheduler服务
    - 主要功能是接收调度pod到适合的运算节点上,主要用下面两种策略来选择合适的节点调度。
    - 预算策略(predict)
    - 优选策略(priorities)
    
    (4)kube-kubelet服务
    - 简单的说,kubelet的主要功能就是定时从某个地方获取节点上pod的期望状态(运行什么容器、运行的副本数量、网络或存储如何配置等等),并调用对应的容器平台接口达到这个状态。
    - 定时汇报当前节点状态给apiserver,并存储到etcd里,以供调度的时候使用。
    - 镜像和容器的清理工作,保证节点上镜像不会沾满磁盘空间,退出的容器不会占用太多的资源。
    
    (5)kube-proxy服务
    - 是k8s在每个节点上运行的网络代理,service资源的载体、
    - 建立了pod网络和集群网络关系(clusterip → podip)。
    - 常用三种流量调度模式
      · Userspace(废弃)
      · Iptables(濒临废弃)
      · Ipvs(推荐)
    - 负责建立和删除包括更新调度规则,通知apiserver自己的更新,或者从apiserver那里获取其他kube-proxy的调度规则变化,来更新自己的
    

    4.2 核心附件

    CNI网络插件 → flannel/calico
    服务发现用插件 → coredns
    服务暴露用插件 → traefik
    GUI管理插件 → Dashboard
    

    4.3 CLI客户端

    kubectl
    

    5. K8S常见安装方式介绍

    (1)Minikube,单节点微型K8S(仅供学习、预览k8s特性使用)
    (2)二进制安装部署(生产首选,新手推荐,但是安装步骤繁杂)
    (3)kubeadmin,k8s的部署工具,跑在k8s里(相对简单,熟手推荐)
    
  • 相关阅读:
    手机号 验证(正则)
    静态库相关
    添加友盟SDK,实现新浪分享和微信朋友圈分享的关键代码
    删除Mac 系统中多出得MobileBackups 文件夹
    浏览器判断检测手机中是否安装了ios/android客户端程序
    浏览器判断是否安装了ios/android客户端程序
    自定义TextField的删除按钮
    应用崩溃日志解析
    关于UITextView的一些问题
    关于UIColor这个类的一些不知道的事
  • 原文地址:https://www.cnblogs.com/xiets/p/13900011.html
Copyright © 2011-2022 走看看