kubernetes基础

云原生简介

云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。

这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。

云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。
https://github.com/cncf/toc/blob/main/DEFINITION.md

云原生技术栈

  • 容器:以docker为代表的容器运行技术 2、服务网格:比如Service Mesh等
  • 微服务:在微服务体系中一个项目是由多个松耦合且可独部署的较小组件或服务组成。
  • 不可变基础设施:不可变基础设施可以理解为一个应用运行所需的基本运行需求,不可变最基本的就是指运行服务的服务器在完成部署后就不在进行更改,比如镜像等。
  • 声明式API:描述应用程序的运行状态,并且由系统来决定如何来创建这个环境,例如声明一个POD,会有k8s执行创建并维持副本。

云原生特征

  • 符合12因素应用,12因素应用程序时一种构建应用程序的方法
  • 面向微服务架构
  • 自服务敏捷架构 自行弹性管理服务伸缩
  • 基于API的协作
  • 抗脆弱性
12因素应用

1、基准代码:一份基准代码,多份部署(用同一个diamond库进行版本控制,并可进行多次部署)
2、依赖:显示的声明和隔离相互之间的依赖
3、配置:在环境中存储配置
4、后端服务:把后端服务当作一种附加资源
5、构建、发布、运行:对程序执行构建或打包,并严格分离构建和运行
6、进程:以一个或多个无状态进程运行应用
7、端口绑定:通过多口绑定提供服务
8、并发:通过进程模型进行扩展
9、易处理:快速地启动,优雅的终止,最大程度上保持健壮性
10、开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同
11、日志:将所有运行中进程和后端服务的输出按照时间顺序统一收集存储和展示
12、管理进程:一次性管理进程(数据备份等)应该和正常的常驻进程使用同样的运行环境

云原生景观图

https://landscape.cncf.io/

kubernetes 简介

组件介绍

在这里插入图片描述

master

  • kube-apiserver:kubernetes API server验证并配置API对象的数据,这些对象包括pods、services、replication、controllers等,API Server为REST操作提供服务,并为集群的共享状态提供前端,所有其他组件都通过该前端进行交互。
    1、编排文件位置:/etc/kubernetes/manifests/kube-apiserver.yaml
    2、该端口的默认值为6443,可通过启动参数“–secure-port”的值来修改默认值
    3、默认IP地址为非本地(Non-Localhost)网络端口,通过启动参数“–bind-address”设置该值
    4、该端口用于接收客户端、dashboard等外部https请求
    5、用于基于Token文件或者客户端证书及http base的认证
    6、用于基于策略饿授权
    7、分为
  • kube-scheduler:kubernetes调度器是一个控制面进程,负责将Pods指派到节点上
    1、通过调度算法为待调度Pod列表的每个Pod从可用Node列表中选择一个最合适的Node,并将信息写入etcd中。pod调度是一个一个的调度,1000个pod会调度1000次。
    2、node节点上的kubelet通过API Server监听到kubernetes Scheduler产生的Pod绑定信息,然后获取对应的Pod清单,下载镜像,启动容器。
    3、调度流程:先预选,再优选。预选(Predicates):输入是所有节点,输出是满足预选条件的节点。kube-scheduler根据预选策略过滤掉不满足策略的Nodes。例如,如果某节点的资源不足或者不满足预选策略的条件如“Node的label必须与Pod的Selector一致”时则无法通过预选。
    优选(Priorities):输入是预选阶段筛选出的节点,优选会根据优先策略为通过预选的Nodes进行打分排名,选择得分最高的Node。例如,资源越富裕、负载越小的Node可能具有越高的排名。
    通俗点说,调度的过程就是在回答两个问题:1. 候选有哪些?2. 其中最适合的是哪个?
    值得一提的是,如果在预选阶段没有节点满足条件,Pod会一直处在Pending状态直到出现满足的节点,在此期间调度器会不断的进行重试。
  • kube-controller-manager:kube-controller-mananer还包括一些子控制器(副本控制器、节点控制器、命名空间控制器和服务账号控制器等),控制器作为集群内部的管理控制中心,负责集群内的Node、Pod副本,服务端点(Endpoint)、命名空间(namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会即使发现并执行自动化修复流程,确保集群中的pod副本始终处于预期的工作状态。
    1、controller-manager控制器每间隔5秒检查一次节点状态
    2、如果controller-manager控制器没有收到来自节点的心跳,则将该node节点标记为不可达。
    3、controller-manager将在标记为无法访问之前等待40秒
    4、如果该node节点被标记为无法访问后5分钟还没有恢复,controller-manager会删除当前node节点的所有pod并在其他可用节点重建这些pod。
    5、pod高可用机制:
    node monitor period:节点监视周期,5s
    node monitor grace period:节点监视宽限期,40s
    pod eviction timeout:pod驱逐超时时间,5m

node

  • kube-proxy:kubernetes网络代理,运行在node上,它反应了node上kubernetes API中定义的服务,并可以通过一组后端进行简单的TCP、UDP和SCTP流转发或者在一组后端进行循环TCP、UDP和SCTP转发,用户必须使用apiserver API创建一个服务来配置代理,其实就是kube-proxy通过在主机上维护网络规则并执行连接转发来实现kubernetes服务访问。
    1、kube-proxy运行在每个节点上,监听Api Server中服务对象的变化,再通过管理Iptables或者IPVS规则来实现网络的转发。
    2、IPVS相对IPtables效率会更高一些,使用IPVS模式需要在运行Kube-Proxy的节点上安装ipvsadm、ipset工具包和加载ip_vs内核模块,当kube-proxy以IPVS代理模式启动时,Kube-Proxy将验证节点上是否安装了IPVS模块,如果未安装,则kube-proxy将回退到IPtables代理模式
    3、使用IPVS模式,kube-proxy会监视kubernetes Service对象和Endpoints,调用宿主机内核Netlink接口以相对应的创建IPVS规则并并定期与kubernetes Service对象、Endpoints对象同步IPVS规则,以确保IPVS状态与期望一致,访问服务时,流量将被重定向到其中一个后端POD,IPVS使用哈希表作为底层数据结构并在内核空间中工作,这意味着IPVS可以更快的重定向流量,并且在同步代理规则时具有更好的性能,此外IPVS为负载均衡算法提供了更多选项,例如rr(轮询)、lc(最小连接数)、dh(目标哈希)、sh(源哈希)、sed(最短期望延迟)、nq(不排队调度)

  • kubelet:kubelet是运行在每个worker节点的代理组件,它会监视分配给节点的pod,具体功能如下:
    1、向master汇报node节点的状态信息
    2、接受指令并在Pod中创建docker容器
    3、准备Pod所需的数据卷
    4、返回Pod的运行状态
    5、在node节点执行容器健康检查(探针)

其他

  • kubectl:是一个通过命令行对kubernetes集群进行管理的客户端工具
  • etcd:是CoreOS公司开发,目前是kubernetes默认使用的key-value数据存储系统,用于保存kubernetes的所有集群数据,etcd支持分布式集群功能,生产环境使用时需要为etcd数据提供定期备份机制
    1、etcd具有一下属性:
    完全复制:集群中的每个节点都可以使用完整的存档
    高可用性:ETCD可用于避免硬件的单点故障或网络问题
    一致性:每次读取都会返回跨多主机的最新写入
    简单:包括一个定义良好、面向用户的API(gRPC)
    安全:实现带有可选的客户端证书身份验证的自动化TLS
    快速:每秒10000次写入的基准速度
    可靠:使用Raft算法实现了存储的合理分布ETCD的工作原理
    2、etcd接口可以使用http工具请求(etcd提供api接口)
    3、提供watch机制供api使用:apiserver一直监听etcd的变化
    4、查看etcd集群状态
for ip in ${NODE_IPS};do ETCDCTL_API=3 /usr/bin/etcdctl --endpoints=https://${ip}:2379  --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem endpoint health;done;
或者
ETCDCTL_API=3 /usr/bin/etcdctl --write-out=table member list --endpoints=https://172.31.7.106:2379 --cacert=/etc/kubernetes/ssl/ca.pem  --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem
或者
for ip in ${NODE_IPS};do ETCDCTL_API=3 /usr/bin/etcdctl --write-out=table endpoint status --endpoints=https://${ip}:2379  --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem endpoint health;done;

5、查看etcd数据

#以路径的方式显示所有key信息
ETCDCTL_API=3 etcdctl get / --prefix --keys-only 
#pod信息
ETCDCTL_API=3 etcdctl get / --prefix --keys-only|grep pod
#namespace信息
ETCDCTL_API=3 etcdctl get / --prefix --key-only|grep namespaces
#控制器信息
ETCDCTL_API=3 etcdctl get / --prefix --key-only|grep deployment
#calico组件信息
ETCDCTL_API=3 etcdctl get / --prefix --key-only|grep calico

6、etcd增删改查数据

#添加数据
ETCDCTL_API=3 /usr/bin/etcctl put /name "tom"
#查询数据
ETCDCTL_API=3 /usr/bin etcdctl get /name
#修改数据(覆盖原理数据)
ETCDCTL_API=3 /usr/bin/etcdctl put /name "jack"
#验证修改结果
ETCDCTL_API=3 /usr/bin/etcdctl get /name
#删除数据
ETCDCTL_API=3 /usr/bin/etcdctl del /name

7、etcd数据watch机制
基于不断监看数据,发生变化就主动触发通知客户端,ETCD v3 的watch机制支持watch某个固定的key,也支持watch一个范围

#在etcd node1上watch一个key,没有此key也可以执行watch,后期可以再创建
ETCDCTL_API=3 /usr/bin/etcdctl watch /data
#在etcd node2上修改数据,验证etcd node1是否发生数据变化
ETCDCTL_API=3 /usr/bin/etcdctl put /data "data v1"
ETCDCTL_API=3 /usr/bin/etcdctl put /data "data v2"

8、etcd V3 API版本数据备份与恢复
WAL是write ahead log的缩写,顾名思义,也就是在执行真正写操作之前先写一个日志,预写日志。
wal:存放预写日志,最大的作用就是记录了整个数据变化的全部历程。在etcd中,所有数据的修改在提交之前,都要写入到wal中

#v2版本数据备份与恢复(目录备份)
ETCDCTL_API=2 etcdctl backup --data-dir /var/lib/etcd/ --backup-dir /opt/etcd_backup
--data-dir value #源数据目录
--wal-dir value 
--backup-dir value#备份目录
--backup-wal-dir value 
#V3版本备份数据(打快照)
 ETCDCTL_API=3 etcdctl snapshot save snapshot.db
 #v3版本恢复数据,将数据恢复到一个新的不存在的目录中
 ETCDCTL_API=3 etcdctl snapshot restore snapshot.db --data-dir=/opt/etcd-testdir
 #自动备份数据
 mkdir /data/etcd-backup-dir/ -p
 cat script.sh
 #!/bin/bash
 source /etc/profile
 DATE=`date +%Y-%m-%d_%H-%M-%S`
 ETCDCTL_API=3 /usr/bin/etcdctl snapshot save /data/etcd-backup-dir/etcd-snapshot-${DATE}.db

9、etcd数据恢复流程
a、恢复服务器系统
b、重新部署ETCD集群
c、停止kube-apiserver、controller-manager、scheduler、kubelet、kube-paoxy
d、停止ETCD集群
e、各etcd节点恢复同一份备份数据
f、启动kube-apiserver、controller-manager、scheduler、kubelet、kube-paoxy
g、验证master状态及pod数据

  • DNS:为整个集群提供DNS服务,从而实现服务之间的访问
    1、coredns:
- apiGroups:
  - discovery.k8s.io
  resources:
  - endpointslices
  verbs:
  - list
  - watch

2、kube-dns:1.18后不使用
3、sky-dns

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值