[K8S] 01 - What is Kubernetes

热身知识

一、基础知识

前置课程:[Docker] 00 - What is Docker?

Ref: 马哥Kubernetes教学视频完整版【貌似更好】

Docker --> SWARM (自家原生的),但k8s是可以自我独立的一套体系,替代SWARM。

 

Borg 内部系统 --> Go 语言版本的就是K8S。

1 轻量级,消耗小;
2 开源;
3 弹性伸缩;
4 内部实现 IPVS

 

Pod 概念,最小管理单位,是个控制器。

Pod 的生命周期。  

先定义一组pod,再定义统一的访问入口。

 

二、组件说明

scheduler, replication controller, api server, etcd,键值对数据库;v2 再k8s v1.11中弃用,建议使用etcd v3。 

 

  • Master

CCM, cloud-controller manager, 是个插件,对接各个云供应商。彼此独立,各自发展。

有别于 kube-controller manager,是平行的关系。

使用golang以支持其他云,可使用其他云供应商的接口。

接口对象里包含有 load balancer, instance, zoon, cluster, root, provider name。

 

  • node 

kubelet:维护容器的生命周期,volumn的网络管理。

Kube-proxy:service内部的服务发现,IPTABLES, IPVS 实现服务映射访问。

 

  • etcd

etcd 用于存储重要的“参数信息”。

Raft: 读写信息。

WAL: 预写日志。定时对其进行备份 <---- Snapshot

 

node 节点的三部分:kubelet, firewall, container。

CRI: Container Runtime Interface

 

三、基本框架

“Master服务” 的组件们:

API Server:服务访问入口。

Controller Manager:维持副本的期望数。

Scheduler:负责介绍任务,选择合适的节点进行分配任务。

ETCD:直接跟容器引擎交互实现容器的生命周期管理。

Kube-proxy:IPTABLES, IPVS 实现服务映射访问。

 

其他重要 “插件”:

COREDNS:DNS服务,可以为集群中的SVC创建一个域名IP的对应关系解析。

DASHBOARD:给 k8s 集群提供一个 b/s 结构访问体系。

INGRESS CONTROLLER:可以实现多达七层代理。

FEDETATION:提供一个可以跨集群中心多K8S统一管理功能。

PROMETHEUS:提供K8S集群的监控能力。

ELK:提供K8S集群日志统一分析介入平台。

 

  Controller 挂了怎么办?Controller确保container的健康。

  Controller Manager 监控 Controller。

  Controller Manager 也被做了冗余。

 

 

Pod

一、Pod概念

** 涉及到的知识点 **

逻辑组件 Pod,可包含多个container,共享网络空间。

有标签,Label, Label Selector。

调度的结果,由kubelet执行。

共享 net uts, ipc。

user, mnt, pad 互相隔离。

 

** k8s 基本概念 **

讲得相对清晰:青云QingCloud 解决方案

Master's deployment 通过 “标签” 来知道 监控哪些个 pod。

 

前端 pod --> "后端在ip哪里, backend service在哪里” --> DNS Server: 返回后台服务的IP地址。

后台服务的IP地址,可能同时代表了两个 pod。

Kube proxy 发送请求到任意一个。

 

Ingress 控制器 把内部的server 配置成 “外部可访问的URL”。

复制代码
apiVersion: apps/v1
kind: Deployment

metadata:
  name: nginx-deployment
  labels: 
    app: nginx
spec:
  replicas: 3
  selector:    # 该deployment可以监控和管理哪些 port
    matchLabels:
      app: nginx
  template: 
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx: 1.7.9
        ports:
            - containerPort: 80
复制代码

 

[Pod 分类]

1) 不被控制器管理的 Pod(自主式 Pod),能够自我管理,如果器械故障,没法全局调度。

2) 控制器管理的 Pod(推荐),ReplicationController就是最早的一类控制器,展开下面的故事。

 

  • ReplicationController & ReplicaSet & Deployment

(为无状态服务而设计)

ReplicationController 定义有多少个 Pod 副本存在 according to user requirements。

ReplicaSet 支持集合式的 selector。

一般建议,使用 Deployment 自动管理 ReplicaSet(因为 Deployment 支持 rolling-update)。

 

    • 滚动更新 rolling-update

Deployment --> RS。

Deployment --> 创建若干 pod。

若要更新 image的版本。详见视频:Click me

 

    • Horizontal Pod Autoscaling (HPA)

仅适用于 Deployment 和 ReplicaSet。 

根据cpu内存等自动扩容。

 

如果其中一个pod 宕机了呢?

“服务发现”:监控pod是不是宕机了,毕竟pod是不稳定的。

 

[Service]

新 pod 替换 旧 pod,service 通过 label 来识别 pod,新的 pod 会立刻被service发现。

 

AddOns:附件,一种特殊的pod,给系统架构服务的。

NMT

Ref: kubernets部署说明

LBaaS

 

  • StatefulSet

 

(为了解决“有状态服务”的问题)

稳定的之持久化存储,基于PVC实现;

稳定的网络标志,基于 Headless Service 来实现;

有序部署,有序扩展,即 Pod 是有顺序的;

有序收缩,有序删除;

 

  • DaemonSet

一个node上运行多个pod。

每个计算节点后台运行 “日志收集任务”,且该任务可以 被自动调度到新加入的节点。

 

  • Job, Cron Job

负责批处理任务。保证批处理任务的一个或多个pod成功结束。

Job, 例如备份操作,清除操作等,为的是特定的任务。

 

 

二、网络通讯方式

假定所有的Pod都在一个可以直接连通的扁平的网络空间。

 

[网络]

02 kubernetes基础概念, 43:03 / 1:16:24 

3 --> 2 --> 1

(1) pod 网络:service 与 pod的地址不同。

(2) 集群网络:service 的地址是假的。

(3) 节点网络:入口。

pod虽然在不同的主机node上,但仍然可以在同一个网络,相互通信。

 

  • 单机网络

172.16.1.0/24 是默认网关。

Docker0是虚拟网桥。

eth0, veth 虚拟网卡,veth加入到虚拟网桥中。

 

  • 多机网络

实现原理分类:直接路由,桥接,overlay隧道方式。

实现方法分类:docker1.9版本 引入的 Libnetwork项目,插件方式。

 

但是,NAT可能不太好,还不如利用 such as “隧道方式” 来解决。

IPtable就实现了负载均衡,更方便了许多。

 

  Container Network Interface,即容器网络的 API 接口 与 “集群网络方案”

 

隧道方案 (Overlay Networking)

1) Weave, 2) Open vSwitch, 3) Flannel

Ref: 隧道技术 与 Overlay

隧道技术,一种数据包封装技术,它是将原始IP包(其报头包含原始发送者和最终目的地)封装在另一个数据包(称为封装的IP包)的数据净荷中进行传输。使用隧道的原因是在不兼容的网络上传输数据,或在不安全网络上提供一个安全路径。

Overlay,在传统网络上虚拟出一个虚拟网络来,传统网络不需要在做任何适配。

 

Flannel 示范如下,其实就是“虚拟的二层网路”。

 

路由方案

1) Calico 对混合云的亲和度比较高, 2) Macvlan

每个node就看做是个路由器,所有的node,组成了一个路由器构成的网络。

始终根据IPTABLE规则进行转发,并没有分包解包的过程。比Flannel,效率更高

 

 

有pause的容器就要被启动。

1) 共享,网络栈。

2) 共享挂载的存储。

 

 

K8S Storage

Ref: https://activity.qingcloud.com/course/k8s/

Docker 可以通过插件,扩展 存储 Volume 和网络 Network 的边界。 

 

 

 

  

安装配置

Ref: 10、Kubernetes 集群安装准备 说明

 

 

 

 

/* continue */

 

posted @   郝壹贰叁  阅读(149)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示