Kubernetes基础知识笔记

作者&投稿:充晴 (若有异议请与网页底部的电邮联系)
~

大背景就先不记了(CloudNative、康威定律这些了解一下就好了),先写之前已经学习理解的内容
那就在之前的笔记上面做补充吧

Static pod : 在Node上手动创建的(未通过Master的api server创建的pod),也未存储于etcd当中

endpoint : pod的ip+容器暴露的端口

pause容器 :每一个POD里面都会有一个Pause容器(Pod内所有容器共享Pause容器的ip以及Volume),方便实现容器之间的网络通信以及卷共享,同时Pause容器一般比业务容器要稳定可靠,可以作为Pod的状态标识向Kube-master反映整个Pod的状态
资源: K8s当中管理的对象都叫做K8s的资源,从pod、RC、Server、Node到Cluster(相应的在Yaml或者Json的配置文件当中,根据资源的类型来创建不同的对象)

Replicate描述 :相当于期望Pod的一个运行状态,在其中会定义好Pod的副本数量,Pod使用的容器(容器repository、端口、容器的限额),Pod的label(replicate controller和Service controller后续都会通过label-select来定位到具体的pod进行管理)
也就是说 Service是通过label来关联它的所有POD的

三种IP地址 : Node IP、Cluster IP、Pod IP,其中Node IP即为宿主机的IP地址,就是实际的物理ip地址,Cluster IP为K8s内部为每一个Service分配的唯一虚拟IP地址,Cluster IP无法用来与外部进行网络交互,只能在K8s内部使用;Pod IP为Docker0网桥网段里拿到的ip; 需要注意的是这三种IP在互相交互的时候使用的不是通常的路由规则,而是由K8s内部自定义的规则来进行网络通信的

service关联Pod :在通常情况下,Service当中定义的属性是通过Linux环境变量的方式"注入"到Pod当中的(在容器创建的时候自动引入这些环境变量,主要是Service地址),这些变量已ServiceName_变量属性的方式进行命名;在最新的k8s版本当中,已经引入了DNS来根据Service的名称做Service地址获取(Service域名发现)

NameSpace :在K8s集群当中也有Namespace的概念,其实就是为了方便多租户共同使用同一套K8s集群所设定的规则,所以在创建任何资源的时候都可以带上--namespace标签来定义对应的租户,如果不带标签的话,或将这些资源挂到default namespace下面

APIServer : 本质上是一个Restful Server(对外提供k8s当中的各类资源的各种API),同时将这些资源的信息存储于Master上面的etcd当中;
Controller Manager、Scheduler都是通过访问这些API来知晓当前Node上面的资源的状态的,同时采取相应的管理动作,指的一提的是,apiserver本身也是k8s当中的一个Service,其他进程访问Apiserver相当于访问一个Service

Controller Manager :包含了各种资源、状态的Controller, Replication Controller、Node Controller、ResourceQuota Controller、Namespace、Service Account、Token、Service、Endpoint Controller

Schedule Controller : 接收由Replicate Controller创建的Pod,将其安置到合适的Node,交给后面Node上面的Kubelet来创建实际的POD;
Schedule Controller会按照一定的规则来针对当前集群中的所有Node进行打分(资源消耗最小原则、资源消耗均衡原则、标签优先原则),然后根据打分以及POD定义当中的一些属性来选择出合适的Node

kubelet : Node上面的kubelet有几种方式获取Pod清单:

容器健康管理 : kubelet定期会调用容器的Liveness探针来确定容器的健康状况,liveness探针包括三种方式:

kube-proxy : kube-porxy作为Service的反向代理与负载均衡器,Service外部以Service的Cluster-ip+port或者node ip+Nodeport的方式访问Service业务的时候,这些访问请求会首先被重定向到kube-porxy,然后经过kube-porxy的路由再到达最终的POD
kube-porxy是通过添加iptables来实现重定向的,具体实现是首先kube-porxy会获取一个随机端口作为自己的重定向监听端口,然后添加从外部容器、主机通过Cluster-ip访问的iptables,以及本地的容器、主机通过Nodeport访问的iptables(对于本地容器,重定向目的为kube-porxy的端口,对于外部对象,目的为proxy的ip+proxy的port)
kube-porxy中使用的负载均衡规则为Round Robin算法,除了通常的负载均衡功能之外,还可以配置会话保持(未超时的session一直重定向到同一个Pod),以及配置亲和性(比如按Client ip配置亲和性,让同一个Client ip过来的请求一直访问同一个Pod)

安全管理 :安全管理分几个阶段,首先是认证,再是授权,最后是准入控制;认证阶段有三种方式进行认证,分别是SSL认证(就是HTTPS),HTTP Token,以及使用用户名+密码来认证;
这里一并写一下HTTPS的认证,HTTPS认证是依赖于CA证书的一种认证方式,Web服务方会向第三方机构申请CA证书(默认这个第三方机构是可信的),然后服务方就有这个CA证书了,然后在服务方接收到请求方的请求之后,会将证书发送给请求方(这个发送过程需要确保这个CA证书不会被中间窃听修改),发送前会用CA证书的私钥进行计算生成数字签名(对于证书的任何篡改都会改变这个数字签名,可以将这个数字签名理解为证书的指纹),请求方收到之后使用CA证书的公钥来解密数字签名,然后按照证书的HASH算法计算出HASH值对证书里的HASH值进行对比,通过之后就算是认证通过服务方是可信的了;后面双方还是进行协商生成一个加密的key用于实际HTTP请求报文的加密,保证HTTP内容不会被中间者窃听获取
授权阶段其实就是Master上面配置的user权限,可以访问哪些资源,是否有读写权限,允许访问哪个Namespace等等配置
最后是准入控制,就是Apiserver针对每一个kubelet的请求去匹配准入控制的列表,比如常用的安全控制(比如禁止使用Security Context),配合ResourceQuota、LimiteRanger进根据资源限制进行调控
其中还有一个比较重要的概念是Service Account,上面说的授权是针对Kubernetes内的user账号的,这里的Service Account相当于是针对Pod内进程的账号(比User账号更加灵活、轻量级,添加也更加简单),配合Secret对象进行工作(Secret对象为保存Token、SSH key、SSL key等凭证的对象,在创建Service Account的时候会声明此Service account拥有的Secret);Pod进程使用Service Account的方式其实就是获取Secret的过程(使用Secret对象以通过apiserver进行鉴权); Pod获取Secret也有三种方式:

k8s网络原理 :终于来到了重中之重的知识点了,在总结k8s的网络之前,要先回忆一下原生Docker网络的一些原理了
首先原生的Docker在Docker engine启动之后会创建一个Docker0虚拟网桥(作为虚拟交换机),Docker0拥有一个16位的网段,它将会从这个网段当中抠出地址分配给新建的容器使用,同一台宿主机上面的容器网络交互都是通过Docker0进行交换的(具体原理就是创建容器的时候容器的端口也会在Docker0上面创建一个veth端口,相当于容器与虚拟交换机有了一个连线,这样容器的收发流量都能流过Docker0),但是原生的Docker不支持不同主机之间容器的网络通信,最明显的一个点就是,每一台宿主机的Docker0的网段都是一样的,同样的网段如何进行通信
具体的实现原理就是,Docker会针对Docker0的网段创建相应的ip route以及iptables(iptables这个东西就先不细写了),实现一个效果就是所有本地访问Docker容器的ip包都会被转到Docker0上面去(通过iptable进行forward),以及非本地的访问经过iptables的dnat转换也会走到Docker0上面去,这样就实现了ip报文的重定向
对于k8s来说,它致力于解决的几个主要问题就是解决容器与容器之间、Pod与Pod之间的通信问题

kubeadm init -- 启动kubernetes集群的命令,在集群启动之后,会提示添加一些环节变量,同时会生成token,需要在Node上面的启动命令携带token完成鉴权
kubeadm reset -- 重启kube集群




首个K8s大数据平台开源,一键部署真的免费吗?
首个Kubernetes大数据平台开源!一键部署,免费使用!智领云自主研发的创新成果——Kubernetes Data Platform (KDP),已正式开源,旨在简化开发者在Kubernetes上部署和管理大数据组件的流程。只需基本命令行工具,开发者就能轻松创建以前昂贵的大数据平台,无需重复研发,节省大量时间和资金。在高级安装模式下,KDP...

Kubernetes cgroups详解
kubernetes 中有三种 QoS,分别为: 三者的优先级如下所示,依次递增: BestEffort -> Burstable -> Guaranteed 如果指定了 --cgroups-per-qos 也会为每个QoS也会对应一个cgroup,该功能默认开启,这样就可以利用cgroup来做一些QoS级别的资源统计,必要时也可以通过该cgroup限制某个QoS级别的pod能使用的资源总和。此时...

Kubernetes:默认调度器三大机制
在Kubernetes 项目中,默认调度器(default scheduler)的主要职责,就是为一个新创建出来的 Pod,寻找一个最合适的节点(Node)。 而这里“最合适”的含义,包括三层: 所以在具体的调度流程中,默认调度器会首先调用一组叫作 Predicate 的调度算法,来检查每个 Node。然后,再调用一组叫作 Priority 的调度算法,来给上一步...

kubernetes缩写是什么?
kubernetes,简称K8s,是用8代替8个字符"ubernete"而成的缩写。kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术...

简述Kubernetes如何保证集群的安全性?
Kubernetes通过一系列机制来实现集群的安全控制,主要有如下不同的维度:基础设施方面:保证容器与其所在宿主机的隔离;权限方面:最小权限原则:合理限制所有组件的权限,确保组件只执行它被授权的行为,通过限制单个组件的能力来限制它的权限范围。用户权限:划分普通用户和管理员的角色。集群方面:API Server...

Kubernetes笔记8-Kubernetes的标签和选择器
在 kubernetes.io\/ 和 k8s.io\/ 前缀 保留 用于Kubernetes核心组件。有效标签值:例如,这是一个 Pod 的配置文件,它有两个标签 environment: production 和 app: nginx :与 名称和 UID 不同,标签不提供唯一性。通常,我们希望许多对象带有相同的标签。通过 标签选择器 ,客户端\/用户可以识别一组...

docker 入门(二):docker 和 沙盒、虚拟机以及 Kubernetes 的关系...
那么为什么需要 Kubernetes 呢?就在 Docker 容器技术被炒得热火朝天之时,大家发现,如果想要将 Docker 应用于具体的业务实现(当 容器和服务器的数量达到一定规模 的时候,就会碰到管理的 问题,即 如何有效管理大量的服务器和容器 ,保证 应用的稳定运行、方便升级和故障的快速解决 ),是存在困难的...

如何学习kubernetes,学习kubernetes需要代码基础吗?
一:学习kuberneteskubernetes,又称K8s,是用8代替8个字符“ubernete”而成的缩写。是用于管理云平台中多个主机上的容器化的应用,它支持可移植,可扩展,自动化的容器化管理,这样一个复杂的东西,学习起来也复杂,我认为学习kubernetes需要三个步骤,一了解它,二动手操作它,三学习思考它的用处...

kubernetes 提供什么功能
Kubernetes是一个开源项目,它把谷歌的集群管理工具引入到虚拟机和裸机场景中。它可以完美运行在现代的操作系统环境(比如CoreOS 和Red Hat Atomic),并提供可以被你管控的轻量级的计算节点。Kubernetes使用Golang开发,具有轻量化、模块化、便携以及可扩展的特点。我们 (Kubernetes开发团队)正在和一些不同...

kubernetes— 记一次用kubeadm搭建kubernetes v1.9.0集群
目标:使用kubeadm搭建kubernetes v1.9.0集群 操作系统:Ubuntu 16.04.3 Ubuntu-001 :192.168.1.110 ubuntu-002 : 192.168.1.106 步骤总结: 1、安装Docker CE 2、安装kubeadm、kubectl、kubelet 3、利用kubeadm init初始化kubernetes集群 4、利用kubeadm join加入node节点到集群 具体操作步骤: 在Ubuntu 16.04安装Docker CE...

玉树藏族自治州15379363075: 如何学习,了解kubernetes -
梁软安得: 我们先从整体上看一下Kubernetes的一些理念和基本架构,然后从网络、资源管理、存储、服务发现、负载均衡、高可用、rollingupgrade、安全、监控等方面向大家简单介绍Kubernetes的这些主要特性. 当然也会包括一些需要注意的问题.主要目的是帮助大家快速理解Kubernetes的主要功能,今后在研究和使用这个具的时候有所参考和帮助. 1.Kubernetes的一些理念: 用户不需要关心需要多少台机器,只需要关心软件(服务)运行所需的环境.以服务为中心,你需要关心的是api,如何把大服务拆分成小服务,如何使用api去整合它们.

玉树藏族自治州15379363075: kubernetes中有哪些组件? -
梁软安得: 组件如下:Kube-apiserver、etcd、kube-scheduler、flannel/calico、controller-manager、kubelet、kube-proxy不知道题主是不是在学习运维,如果是学习运维,那可以看黑马程序员的基础视频哦,老师讲的很好哦!

玉树藏族自治州15379363075: Kubernetes为什么那么重要 -
梁软安得: Kubernetes旨在作为你容器的管理层.然而,它的重点是无缝提供给你的应用程序真实实在的需要,满足你的应用程序所依赖的需要.举个例子,这些应用所需就是由Kubernetes提供的:访问与供应商无关的数据卷、负载均衡、冗余控制、弹性...

玉树藏族自治州15379363075: 如何在Kubernetes上进行微服务部署
梁软安得: 使用Rancher来运行Kubernetes有很多优势.大多数情况下能使用户和IT团队部署和管理工作更加方便.Rancher自动在Kubernetes后端实现etcd 的HA,并且将所需要的服务部署到此环境下的任何主机中.在设置访问控制,可以轻易连接到现有...

玉树藏族自治州15379363075: kubernetes 是什么语言开发的 -
梁软安得: kubernetes 是什么语言开发的Kubernetes是一个开源项目,它把谷歌的集群管理工具引入到虚拟机和裸机场景中.它可以完美运行在现代的操作系统环境(比如CoreOS和Red HatAtomic),并提供可以被你管控的轻量级的计算节点....

玉树藏族自治州15379363075: kubernetes调度算法提供了哪些功能 -
梁软安得: Kubernetes是一个开源项目,它把谷歌的集群管理工具引入到虚拟机和裸机场景中.它可以完美运行在现代的操作系统环境(比如CoreOS 和Red Hat Atomic),并提供可以被你管控的轻量级的计算节点.Kubernetes使用Golang开发,具有轻...

玉树藏族自治州15379363075: 如何在Kubernetes中暴露服务访问 -
梁软安得: 一、暴露给Kubernetes集群内部的其他容器,提供Service IP来访问 创建Service对象即可得到Service IP 二、暴露给Kubernetes集群内部的其他容器,提供Service名称来访问 需安装kube-dns组件,再创建Service对象 二、暴露到Kubernetes集群外部 需安装nginx-ingress-controller组件,再创建Service对象,再创建Ingress对象

玉树藏族自治州15379363075: Kubernetes和OpenStack到底是什么关系 -
梁软安得: openstack在云计算体系里属于IAAS层,用于管理云计算基础设施,如存储、网络等等.kubernetes属于PAAS层,用来管理容器(例如docker container)的运行.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网