一、api-server

  基本概念

  • 该端口默认值为6443,可通过启动参数“--secure-port”的值来修改默认值。
  • 默认IP地址为非本地(Non-Localhost)网络端口,通过启动参数“--bind-address”设置该值。
  • 该端口用于接收客户端、dashboard等外部HTTPS请求。
  • 用于基于Tocken文件或客户端证书及HTTP Base的认证。
  • 用于基于策略的授权。

  kubernetes API测试:

curl --cacert /etc/kubernetes/ssl/ca.pem -H "Authorization: Bearer ${TOKEN}" https://127.0.0.1:6443
curl 127.0.0.1:6443/ #返回所有的API列表
curl 127.0.0.1:6443/apis #分组API
curl 127.0.0.1:6443/api/v1 #带具体版本号的API
curl 127.0.0.1:6443/version #API版本信息
curl 127.0.0.1:6443/healthz/etcd #与etcd的心跳监测
curl 127.0.0.1:6443/apis/autoscaling/v1 #API的详细信息
curl 127.0.0.1:6443/metrics #指标数据

  API的版本:

  Alpha:预览版,可能包含bug或错误,后期版本会修复且不兼容之前的版本,不建议使用。

  Beta:测试版,如storage.k8s.io/v1beta1,该版本可能存在不稳定或者潜在的bug,不建议生产使用

  v1: 稳定版,如apps/v1,经过验证的stable版本,可以生产环境使用

二、kube-scheduler

  官网介绍:

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-scheduler/

  Kubernetes 调度器是一个控制面进程,负责将 Pods 指派到节点上。

  通过调度算法为待调度Pod列表的每个Pod从可用Node列表中选择一个最适合的Node,并将信息写入etcd中。node节点上的kubelet通过API Server监听到kubernetes Scheduler产生的Pod绑定信息,然后获取对应的Pod清单,下载Image,并启动容器。

  调度策略:

  LeastRequestedPriority:优先从备选节点列表中选择资源消耗最小的节点(CPU+内存)。

  CalculateNodeLabelPriority:优先选择含有指定Label的节点。

  BalancedResourceAllocation:优先从备选节点列表中选择各项资源使用率最均衡的节点。

三、controller-manager

  官网介绍:

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-controller-manager

  kube-controller-manager:Controller Manager还包括一些子控制器(副本控制器、节点控制器、命名空间控制器 和服务账号控制器等),控制器作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群中的pod副本始终处于预期的工作状态。

  controller-manager控制器每间隔5秒检查一次节点的状态。

  如果controller-manager控制器没有收到自节点的心跳,则将该node节点被标记为不可达。

  controller-manager将在标记为无法访问之前等待40秒。

  如果该node节点被标记为无法访问后5分钟还没有恢复,controller-manager会删除当前node节点的所有pod并在其它可用节点重建这些pod。

  pod高可用机制:

  node monitor period: 节点监视周期,5s

  node monitor grace period: 节点监视器宽限期,40s

  pod eviction timeout: pod驱逐超时时间,5m

四、kube-proxy

  官网信息:

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-proxy/

  kube-proxy:Kubernetes网络代理运行在node上,它反映了node上Kubernetes API中定义的服务,并可以通过一组后端进行简单的TCP、UDP和SCTP流转发或者在一组后端进行循环TCP、UDP和SCTP转发,用户必须使用apiserver API 创建一个服务来配置代理,其实就是kube-proxy通过在主机上维护网络规则并执行连接转发来实 现Kubernetes服务访问。

  kube-proxy运行在每个节点上,监听API Server中服务对象的变化,再通过管理IPtables或者IPVS规则来实现网络的转发。

  

  Kube-Proxy 不同的版本可支持三种工作模式:

  UserSpace:k8s v1.1之前使用,k8s 1.2及以后就已经淘汰

  IPtables : k8s 1.1版本开始支持,1.2开始为默认

  IPVS: k8s 1.9引入到1.11为正式版本,需要安装ipvsadm、ipset 工具包和加载 ip_vs 内核模块

  使用iptables模式请求转发图:

  使用ipvs模式请求转发图:

  

  IPVS相对IPtables效率会更高一些,使用IPVS模式需要在运行Kube-Proxy的节点上安装ipvsadm、ipset工具包和加载ip_vs内核模块,当Kube-Proxy以 IPVS代理模式启动时,Kube-Proxy将验证节点上是否安装了IPVS模块,如果未安装,则Kube-Proxy将回退到IPtables代理模式。

  使用IPVS模式,Kube-Proxy会监视Kubernetes Service对象和Endpoints,调用宿主机内核Netlink接口以相应地创建IPVS规则并定期与Kubernetes Service对象Endpoints对象同步IPVS规则,以确保IPVS状态与期望一致,访问服务时,流量将被重定向到其中一个后端 Pod,IPVS使用哈希表作为底层数据结构并在内核空间中工作,这意味着IPVS可以更快地重定向流量,并且在同步代理规则时具有更好的性能,此外,IPVS为负载均衡算法提供了更多选项,例如:rr (轮询调度)、lc (最小连接数)、dh (目标哈希)、sh (源哈希)、sed (最短期望延迟)、nq(不排队调度)等。

  

  配置使用IPVS及指定调度算法:

  官网示例:

  https://kubernetes.io/zh/docs/reference/config-api/kube-proxy-config.v1alpha1/#ClientConnectionConfiguration

  如果k8s集群需要修改调度算法,则每个节点kube-proxy-config都需要修改

cat /var/lib/kube-proxy/kube-proxy-config.yaml
kind: KubeProxyConfiguration
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 172.16.0.120
clientConnection:
kubeconfig: "/etc/kubernetes/kube-proxy.kubeconfig"
clusterCIDR: "10.224.0.0/16"
conntrack:
maxPerCore: 32768
min: 131072
tcpCloseWaitTimeout: 1h0m0s
tcpEstablishedTimeout: 24h0m0s
healthzBindAddress: 172.16.0.120:10256
hostnameOverride: "172.16.0.120"
metricsBindAddress: 172.16.0.120:10249
mode: "ipvs" #指定使用ipvs及调度算法
ipvs:
scheduler: sh

会话保持:service(svc)yaml文件中修改

定义1800s内将同一个客户端请求都转发到某个固定的pod

[root@master01 ~]# kubectl edit svc nginx-deployment  #编辑SVC配置文件
spec:
clusterIP: 10.105.139.198
externalTrafficPolicy: Cluster
ports:
- nodePort: 30401
port: 8080
protocol: TCP
targetPort: 80
selector:
run: nginx-deployment
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 1800
type: NodePort
五、kubelet

  官网介绍:

  https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet/

  kubelet是运行在每个worker节点的代理组件,它会监视已分配给节点的pod,具体功能如下:

  • 向master汇报node节点的状态信息
  • 接受指令并在Pod中创建 docker容器
  • 准备Pod所需的数据卷
  • 返回pod的运行状态
  • 在node节点执行容器健康检查
六、kubectl

  官网链接:

  https://kubernetes.io/zh/docs/reference/kubectl/kubectl/

  是一个通过命令行对kubernetes集群进行管理的客户端工具。

七、etcd

  kubernetes官网介绍:

  https://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/

  etcd官网:

  https://etcd.io/

  etcd github项目

  https://github.com/etcd-io/etcd #github

  etcd 是CoreOS公司开发目前是Kubernetes默认使用的key-value数据存储系统,用于保存 kubernetes的所有集群数据,etcd支持分布式集群功能,生产环境使用时需要为etcd数据提 供定期备份机制。

八、DNS:

  官网链接:

  https://kubernetes.io/zh/docs/tasks/administer-cluster/dns-custom-nameservers/

  目前使用的DNS空间主要是coredns,在以往的历史版本使用的是sky-dns(已被淘汰)

  DNS组件负责为整个集群的pod提供DNS解析服务,从而实现服务之间的访问。可以为集群中的service(SVC)创建一个域名ip的对应关系。也可以为pod提供一个外部网络访问的一个DNS服务解析

九、Pod概念

  Pod分为自主式Pod和控制器管理的Pod

  自主式Pod不被控制器管理的Pod,一旦Pod崩溃,则无法自动拉起。

  控制器管理的Pod被控制器所管理的Pod

  注意:Pod 内的容器之间端口不能冲突,容器间通过Pod可以互相访问

Pod代表一个deployment单元:a single instance of an application in Kubernetes。

运行单个容器的Pod:将pod看作是单个容器的包装器,kubernetes不直接管理容器,而是管理pods。

运行多个容器的Pod:pod可以将多个容器封装一个单个应用。pod中的多个容器作为整体调度到集群中同一物理机或虚拟机上。pod中多个容器共享资源和依赖项,彼此通信。

pod将这些容器、网络资源和存储资源作为一个单一的可管理实体包装在一起。每个pod分配唯一的ip地址,pod中容器共享netns,包括ip地址和port端口。多个容器之间使用localhost通信。当pod中容器与其他pod通信,需要使用共享的网络资源。pod可以使用多个volume,pod中所有容器都可以访问这些卷。

例如:web容器提供文件共享,另外一个容器负责更新文件内容。

Pod是Kubernetes的最重要的概念,每一个pod都有一个特殊的被称为“根容器”的Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或多个紧密相关的用户业务容器。通过pause容器,把其他业务容器加入到Pause容器里面,让所有业务容器在同一名称空间内,可以实现网络共享。

  Pod status

  ContainerCreating 正在创建

  Running 正在运行

  Completed 运行完成

  Error 运行错误

  CrashLoopBackOff 重新创建

  ErrImagePull 获取镜像错误

  ImagePullBackOff 重新获取镜像

  Pending 正在等待某个条件

  container states

  Waiting: 等待某个条件满足变成Running状态,例如下载镜像,更新secrets等。

  通过describe pod查看message和reason详细信息。

  Running: 容器正在运行,没有问题。同时记录Running开始时间。

  Terminated: 容器运行完成,也有可能是运行失败终止

  restartPolicy,针对pod中所有容器生效。

  Always,除了running状态,其他状态总是重启,默认值。

  OnFailure,失败了才重启。

  Never,从不重启。

  imagePullPolicy,镜像下载策略。

  Always,总是从仓库下载镜像,默认值。

  Never,只使用本地镜像,不下载。

  IfNotPresent,优先使用本地镜像,如果没有才从仓库下载镜像。

  以上是kubernetes的基组件介绍。如果对你有帮助或有建议疑问可以评论区留言!

Kubernetes组件介绍的更多相关文章

  1. k8s功能、各组件介绍以及pod创建流程

    一.什么是Kubernetes Kubernetes(k跟s中间隔了8个字母又称k8s) 是谷歌开源的容器集群管理系统,是 Google 多年大规模容器管理技术Borg 的开源版本,主要功能包括: 基 ...

  2. Kubernetes组件与架构

    转载请标明出处: 文章首发于>https://www.fangzhipeng.com/kubernetes/2018/09/30/k8s-basic1/ 本文出自方志朋的博客 Kubernete ...

  3. ceph-csi组件源码分析(1)-组件介绍与部署yaml分析

    更多ceph-csi其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 ceph-csi组件源码分析(1)-组件介绍与部署yaml分析 基于tag v3.0.0 ht ...

  4. Kubernetes 组件简介

    关于Kubernetes是什么??? Kubernetes是致力于提供跨主机集群的自动部署.扩展.高可用以及运行应用程序容器的平台. Kubernets集群组成有哪些??? k8s由master和no ...

  5. 使用 C# 开发 Kubernetes 组件,获取集群资源信息

    写什么呢 前段时间使用 C# 写了个项目,使用 Kubernetes API Server,获取信息以及监控 Kubernetes 资源,然后结合 Neting 做 API 网关. 体验地址 http ...

  6. 三十五、kubernetes NameSpace介绍

    Kubernetes NameSpace 介绍 Kubernetes使用命名空间的概念帮助解决集群中在管理对象时的复杂性问题.命名空间允许将对象分组到一起,便于将它们作为一个单元进行筛选和控制.无论是 ...

  7. 三十四、kubernetes证书介绍

    Kubernetes 证书介绍 一.证书机制说明 Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务.API Server 是集群内部各个组件通信的中介,也是外部控 ...

  8. 开源免费且稳定实用的.NET PDF打印组件itextSharp(.NET组件介绍之八)

    在这个.NET组件的介绍系列中,受到了很多园友的支持,一些园友(如:数据之巅. [秦时明月]等等这些大神 )也给我提出了对应的建议,我正在努力去改正,有不足之处还望大家多多包涵.在传播一些简单的知识的 ...

  9. 免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)

    前面介绍了六种.NET组件,其中有一种组件是写文件的压缩和解压,现在介绍另一种文件的解压缩组件SharpZipLib.在这个组件介绍系列中,只为简单的介绍组件的背景和简单的应用,读者在阅读时可以结合官 ...

随机推荐

  1. 沁恒CH32V103C8T6开发环境笔记

    CH32V103C8T6 CH32V103C8T6是沁恒的RISC-V内核MCU, 基于RISC-V3A处理器, 内核采用2级流水线处理,设置了静态分支预测.指令预取机制,支持DMA. 主要参数如下 ...

  2. ThinkPHP V6.0.12在php8.1下验证码出现问题

    一.问题描述 1.项目需求要求使用PHP8.1.*版本 2.运行程序发现验证码不生效报错如下: 二.错误描述 1.报错信息得出:从浮点(数字)到整数的隐式转换将失去精度 三.解决流程 1.找到报错文件 ...

  3. 软件开发架构,网络编程简介,OSI七层协议,TCP和UDP协议

    软件开发架构 什么是软件开发架构 1.软件架构是一个系统的草图. 2.软件架构描述的对象是直接构成系统的抽象组件. 3.各个组件之间的连接则明确和相对细致地描述组件之间的通讯. 4.在实现阶段,这些抽 ...

  4. kvm 虚拟化技术 1.2之kvm基础操作

    1.虚拟机基础操作 (1).查看.编辑.备份kvm配置文件以及查看kvm状态 [root@hd1 ~]# cd /etc/libvirt/qemu [root@hd1 qemu]# ls centos ...

  5. 438. Find All Anagrams in a String - LeetCode

    Question 438. Find All Anagrams in a String Solution 题目大意:给两个字符串,s和p,求p在s中出现的位置,p串中的字符无序,ab=ba 思路:起初 ...

  6. MySQL启动与多实例安装

    启动方式及故障排查 一.几个问题 1.1 /etc/init.d/mysql 从哪来 cp /usr/local/mysql/support-files/mysql.server /etc/init. ...

  7. awk应用场景之过滤举例

    以/etc/passwd举例,passwd文本 [root@196 tmp]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bi ...

  8. CSAPP 之 ShellLab 详解

    前言 本篇博客将会详细介绍 CSAPP 之 ShellLab 的完成过程,实现一个简易(lou)的 shell.tsh 拥有以下功能: 可以执行外部程序 支持四个内建命令,名称和功能为: quit:退 ...

  9. SmartIDE v0.1.18 已经发布 - 助力阿里国产IDE OpenSumi 插件安装提速10倍、Dapr和Jupyter支持、CLI k8s支持

    SmartIDE v0.1.18 (cli build 3538) 已经发布,在过去的Sprint 18中,我们集中精力推进对 k8s 远程工作区 的支持,同时继续扩展SmartIDE对不同技术栈的支 ...

  10. vue面试总结-2022

    1.vue生命周期及各周期得特点 beforCreate 特点: 初始化实例,不能使用data和methods.ref 示例 beforeCreate: function () { console.g ...