K8S学习记录 - 基础

K8S学习记录 - 基础

 

一、简介

  容器编排工具。

  K8S 是比容器更上一层的架构,它可以支持多种容器技术,比如我们熟悉的 Docker,K8S 定位是一个容器调度工具。

 

二、基本概念

cluster:一组节点。

node:node 节点的作用是承接 master 分配的工作负载。

master:master 节点也称为控制节点,每个 k8s 集群都有一个 Master 节点负责整个集群的管理控制。

service:service是一种抽象的对象,它定义了一组Pod的逻辑集合( Label Selector )和一个用于访问它们的策略。(四层负载均衡

pod:

pod是容器的一个上层包装结构,

pod 可包含多个容器在里面,每个 pod 至少会有一个 Pause 容器,其它用户定义的容器都共享该 Pause 容器,Pause 容器的主要作用是用于定义 pod 的 ip 和 volume。

可以将 pod 看作是一个环境(包括容器、存储、网络ip:port、容器配置)。

Pod 可以被视作虚拟机或者物理主机。

container:容器。

deployment:是一个定义及管理多副本应用(即多个副本 Pod)的新一代对象,与Replication Controller相比,它提供了更加完善的功能,使用起来更加简单方便。

Ingress:Ingress是为进入集群的请求提供路由规则(反向代理规则)的集合。Ingress可以给service提供集群外部访问的URL、负载均衡、SSL终止、HTTP路由等。

    用于规定HTTP或HTTPS请求应该被转发到哪个Service上。(七层负载均衡

StatefulSet:有状态工作负载。deployment/rc 的一个特殊变种。

  • pod都有稳定、唯一的网络标识;
  • StatefulSet控制的pod副本的启停顺序是受控的;
  • StatefulSet里的pod采用稳定的持久化存储卷,通过PV或PVC来实现。(删除pod时默认不会删除与StatefulSet相关的存储卷,以保证数据安全)

Volume:卷

PersistentVolume:持久卷,对存储资源创建和使用的抽象,使存储作为集群中的资源管理。PV是集群中的一块网络存储,与Node一样,也是集群的资源。

PersistentVolumeClaim:持久卷申请,让用户不需要关心具体的Volume实现细节,PVC是一个用户的请求,与Pod类似。Pod消费Node的资源,PVC消费PV的资源。

Headless Service:

 

 

三、Master 组成

API Server:提供了 HTTP Rest 接口的服务进程,所有资源对象的增、删、改、查等操作的唯一入口;

Controller Manager:k8s 集群所有资源对象的自动化控制中心;

Scheduler:k8s 集群所有资源对象自动化调度控制中心;

ETCD:k8s 集群注册服务发现中心,可以保存 k8s 集群中所有资源对象的数据。

 

四、Node 组成

kubelet:负责 Pod 对应容器的创建、启停等操作,与 Master 节点紧密协作;

kube-porxy:实现 k8s 集群通信与负载均衡的组件。(反向代理)

容器运行环境:比如 docker。

 

五、service 的几种类型(访问模式)

ClusterIp:默认类型,每个Node分配一个集群内部的Ip,内部可以互相访问,外部无法访问集群内部。

NodePort:基于ClusterIp,另外在每个Node上开放一个端口,可以从所有的位置访问这个地址。

LoadBalance:基于NodePort,并且有云服务商在外部创建了一个负载均衡层,将流量导入到对应Port。要收费的。

ExternalName:将外部地址经过集群内部的再一次封装(实际上就是集群DNS服务器将CNAME解析到了外部地址上),实现了集群内部访问即可。

Ingress:通过独立的ingress对象来制定请求转发的规则,把请求路由到一个或多个service中。这样就把服务与请求规则解耦了。

 

 

六、service 的三种代理模式

Userspace:

iptables:

IPVS:ipvs是工作在内核态的4层负载均衡,和iptables一样都是基于内核底层netfilter实现,netfilter主要通过各个链的钩子实现包处理和转发 。

 

七、IP

NodeIP:

ServcieIP(ClusterIP)(VIP)(虚IP):

PodIP:

 

八、Port

1、Port

service中clusterIP 对应的端口。

指该service暴露的端口,用yaml文件创建svc时是必选项,用命令创建时可以不指定,如果不指定,会继承pod中的containerPort。


2、NodePort

指node节点端口(只有当type为NodePort或LoadBalancer时才需要该参数,一般自动生成),用于对外通信。


3、TargetPort

clusterIP作为负载均衡, 后端目标实例(容器)的端口。

指后端pod暴露的端口,就是pod中的containerPort。


如果既不指定port又不指定targetPort,那么port和targetPort都会继承pod中的containerPort。


如果指定了port而没有指定targetPort,那么targetPort会继承port值,

所以此时必须指定targetPort值为pod中的containerPort,不能随便指定端口号,除非port值和pod中的containerPort相同(这种情况可以不指定targetPort)。


当type为ClusterIP时,流量经过的端口走向是:
svc端口(port)----pod端口(targetPort)----容器端口(containerPort)


当type为NodePort时,流量经过的端口走向是:
节点端口(NodePort)----svc端口(port)----pod端口(targetPort)----容器端口(containerPort)

4、ContainerPort

  容器需要暴露的端口。

5、HostPort

  容器暴露的端口映射到的主机端口。

 

 

九、EndPoint

podIP:targetPort

每个Service的Endpoints

 

十、K8S服务发现

1、环境变量

2、DNS 

 

十一、资源

在 Kubernetes 里面, API 编程范式也就是 Custom Resources Definition(CRD)。我们常讲的 CRD,其实指的就是用户自定义资源。

 

 

参考资料

中文官网

Kubernetes中文社区

Docker 与 Kubernetes 的前世今生(上)

干货满满!10分钟看懂Docker和K8S

图解 K8s 核心概念和术语

k8s集群中的service

K8S中的pod、services、容器的概念和区别

k8s之Deployment 资源详解

k8s service的四种类型

详解k8s的4种Service类型

k8s:Service的四种类型和三种代理模式

kube-proxy的三种代理模式

K8s易混点辨析:nodePort、port、targetPort、containerPort

Kubernetes中的端口hostPort、port、nodePort、targetPort

IPVS从入门到精通kube-proxy实现原理

kubernetes核心组件kube-proxy

k8s ingress原理及ingress-nginx部署测试

如何进行 Kubernetes Ingress 控制器的技术选型

Kubernetes中CRD的介绍和使用

[Kubernetes]深入理解StatefulSet

Pod数据持久化(Volume/PV/PVC)

k8s权威指南 - Services笔记

k8s学习系列

k8s中的端口hostPort、port、nodePort、targetPort

posted @ 2020-07-23 17:03  风过无痕521  阅读(190)  评论(0编辑  收藏  举报