Kubernetes 相关基础知识点

两个应用在物理意义上的隔离需要满足

  1. PID 进程号
  2. NET 网络设备、网络协议栈、端口等
  3. IPC 信号量、消息队列,共享内存
  4. MOUNT 文件系统,挂载点
  5. UTS 主机名和主机域
  6. USER 操作进程的用户和用户组

Docker 封装应用程序的的优点

  1. Docker 引擎统一了基础设施环境,应用程序跑在docker容器内,不用再关系基础的硬件配置,操作系统版本等。
  2. Docker 引擎统一了程序的打包方式。所有程序,不管是java程序还是python程序,都可以做成docker镜像。
  3. Docker 引擎统一了程序的运行方式。如java程序需要执行 java -jar …,python程序需要执行 python sss.py runserver,而将程序放在docker镜像中,执行docker run 指令,就可以执行任何程序。

Docker 的缺点

  1. 单机使用,无法有效集群
  2. 没有有效的容灾、自愈机制
  3. 没有预设编排模板,无法实现快速、大规模容器调度
  4. 没有统一的配置管理中心
  5. 没有容器生命周期管理的工具
  6. 没有图形化运维工具

容器编排工具

  1. docker compose:docker公司发布的基于docker的单机容器编排引擎。
  2. docker swarm:容器编排引擎
  3. Kubernetes:Google开源的容器编排工具,目前最流行的容器编排工具。

Kubernetes 的优点

Docker 的缺点,Kubernetes都解决了。

  1. 自动装箱,水平扩展,自我修复
  2. 服务发现和负载均衡
  3. 自动发布(默认滚动发布模式)和回滚
  4. 集中化配置管理和密钥管理
  5. 存储编排
  6. 任务批处理等

Kubernetes 相关概念

  1. Pod
    • Pod是K8S里能够被运行的最小的逻辑单元
    • 一个Pod里面可用运行多个容器,它们共享UTS + NET + IPC名称空间
  2. Pod控制器
    • Pod控制器时Pod启动的一种模板,用来保证在K8S里启动的Pod应始终按照人们的预期运行(副本数、生命周期、监控状态…)
    • K8S内提供了众多的Pod控制器,常用的有以下几种:Deployment、DaemonSet、ReplicaSet、StatefulSet、Job、Cronjob
  3. Name
    • 给K8S内部的资源一个名字,就用Name
    • K8S在资源有 apiVersion,Kind、metadata、spec、status等配置信息,而Name一般定义在资源的metadata中
  4. Namespace
    • 随着项目增多、人员增加、集群规模的扩大,需要一种能够隔离K8S内各种“资源”的方法,这个就是Namespace
    • 不同名称空间内的资源名称可用相同;相同名称空间下,资源不同同名。
    • K8S中默认的名称空间有:default、kube-system、kube-public
  5. Label
    • 标签是K8S特色的管理资源的方式,便于分类管理资源对象。
    • 一个标签可以对应多个资源,一个资源也可以有多个标签,它们是多对多关系。
    • 一个资源拥有多个标签,可以实现不同维度的管理。
  6. Label 标签选择器
    • 给资源打上标签后,可以使用标签选择器过滤指定的标签
    • 标签选择器目前有两个:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在)
  7. Service
    • 在K8S中,虽然每隔Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁个消失。
    • 一个Service可以看作是一组提供相同服务的Pod的对外访问接口
    • Service作用于哪些Pod通过标签选择器来定义。
  8. Ingress

Kubernetes 核心组件

  1. 存储配置中心etcd服务,存储集群数据
  2. 主控节点 master
    • kube-apiserver:提供了集群管理的REST API接口(包括鉴权、数据校验以及集群状态变更);负责其它模块之间的数据交互,承担通信枢纽功能;资源配额控制的入口;提供完备的集群安全机制。
    • kube-controller-manager:由一系列控制器(Node Controller、Deployment Controller、Service Controller、Volume Controller、Endpoint Controller、Garbage Controller、Namespace Controller、Job Controller、Resource quta Controller…)组成,通过apiserver监控整个集群的状态,并确保集群处于预期的工作状态。
    • kube-scheduler:主要功能是通过预算策略或优选策略调度pod到合适的运算节点上。
  3. 运算节点 node
    • kube-kubelet:a. 简单地说,kubelet的主要功能就是定时从某个地方获取节点上pod的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置),并调用对应的容器平台接口达到这个状态;b. 定时汇报当前节点的状态给apiserver,以供调度的时候使用;c. 镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多的资源。
    • kube-proxy:a. 是K8S在每隔节点上运行网络代理、service资源的载体;b. 建立了pod网络和集群网络的关系;c. 负责建立、删除、更新调度规则、通知apiserver更新。

K8S 安装部署方式

  1. Minikube 单节点微型K8S(仅供学习、预览使用),直接在网页上可以使用 https://kubernetes.io/docs/tutorials/hello-minikube/
  2. 二进制部署方式
  3. 使用kubeadmin进行部署,K8S的部署工具,跑在K8S里

你可能感兴趣的:(Kubernetes,kubernetes)