k8s入门教程详解(一)

    • 5.4.1 复制控制器(Replication Controller,RC)— 确保预期的Pod副本数量
  • 5.4.2 副本集(Replica Set,RS)— 确保预期的Pod副本数量

  • 5.4.3 HPA

  • 5.4.4 StatefulSet —为了解决有状态服务的问题

  • 5.4.5 部署(Deployment)

  • 5.4.6 Job、Cron Job 负责批处理任务

  • 5.5 服务发现(Service)

  • 5.6 Lable 标签

  • 5.7 Ingress

  • 5.8 NameSpace 命名空间

  • 6.K8S 的网络通讯方式

    • 6.1 同一个Pod 内的多个容器之间通讯:localhost
  • 6.2 各个Pod之间的通讯:Overlay Network

  • 6.3 Pod 与Service 之间的通讯:各节点的Iptables(LVS转发)

  • 6.4 通讯总结

  • 7.K8s里面的三张网络

  • 二、总结

Kubernetes 入门教程详解(一)

==============================================================================

一、 Kubernetes 概述


1. K8S 发展历史由来

  • 它前生是 谷歌的Borg 系统,后经过Go 语言重写,在 2014 年开源了 Kubernetes 项目,并捐献给CNCF 基金会开源,即Kubernetes。

  • 它之所以简称 ‘k8s’,因为Kubernetes中间有 8个字母

  • 在这里插入图片描述

2.K8S官网

  • kubernetes的github地址:

  • https://github.com/kubernetes/kubernetes

  • kubernetes官方站点:

  • 英文官方网址:https://kubernetes.io/

  • z中文官方网站:https://kubernetes.io/zh/

  • 英文官方文档:https://kubernetes.io/docs/

2.K8S 是什么

  • Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。

  • Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”

  • 官网:https://kubernetes.io/

  • GitHub:https://github.com/kubernetes/kubernetes

  • 具有 轻量级消耗资源小开源弹性伸缩负载均衡(IPVS)的特点

3. K8s 优势及特点

3.1 K8S优势
  • 自动装箱,水平扩展,自我修复

  • 服务发现和负载均衡

  • 自动发布和回滚

  • 集中化配置管理和密钥管理

  • 存储编排

  • 批处理:提供一次性任务,定时任务;满足批量数据处理和分析的场景

3.2 K8S 特点
  • 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)

  • 可扩展: 可根据业务流量情况快速扩展kubernetes集群的节点数量。

  • 自愈: 自动发布,自动重启,自动复制,自动扩展

  • 进程协同:利用复合应用保证应用和容器一对一的模型。

4. K8s 集群架构与组件

4.1 K8s 集群架构
  • 集群架构

Kubernetes集群包含有节点代理kubeletMaster组件(APIs, scheduler, etc),一切都基于分布式的存储系统。

一个kubernetes集群主要是由 控制节点(master)、工作节点(node)构成,每个节点上都会安装不同的组件。

下面这张图是Kubernetes的架构图。

  • 在这里插入图片描述

控制节点:

ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制

Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上

ControllerManager : 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等

Etcd :负责存储集群中各种资源对象的信息(默认的数据库,自己可以配置修改的,比如配mysql)

工作节点Node:

Kubelet : 负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器

KubeProxy : 负责提供集群内部的服务发现和负载均衡

Docker : 负责节点上容器的各种操作

大致工作原理

kubectl 和web UI接入我们master节点后,scheduler调度器将任务交给api server, 通过api server 把任务写入 etcd 存储服务器,然后交给node节点执行

控制器,它们就是维护我们的副本的数目的或者叫做我们的期望值的,一旦它的副本数不满足我们的期望值,replication controller就会将它改写成 我们的期望值(创建或删除Pod数)

以安装nginx服务说明K8S组件调用关系:

首先要明确,一旦kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中

  1. 一个nginx服务的安装请求会首先被发送到master节点的apiServer组件

  2. apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上

在此时,Scheduler调度器会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer,分发给那个node

  1. apiServer调用controller-manager(控制器)去调度Node节点安装nginx服务

  2. kubelet接收到指令后,会通知docker,然后由docker来启动一个nginx的pod

pod是kubernetes的最小操作单元,容器必须跑在pod中,此时nginx服务就已经跑起来了。

  1. 一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理
4.2 K8s 核心组件详细说明
  • 核心组件说明

#控制器,它们就是维护我们的副本的数目的或者叫做我们的期望值的,一旦它的副本数不满足我们的期望值,replication controller就会将它改写成 我们的期望值

api 一切服务的访问入口,压力很大,为了减轻压力,每个请求下面就可以生成缓存

etcd 是 paxos 键值对采用go 语言编写的键值对 数据库。

etcd 的官方 将它 定位成一个 可信赖的分布式键值存储服务器,它能够为整个分布式集群存储一些关键数据,协助分布式集群的正常运转。

可信赖:本身可以完成集群化

分布式:扩容缩非常方便

正常运转:保存我们的整个分布式集群的需要持久化的配置文件、配置信息,一旦我们的集群死亡后,我们可以借助到etcd 里面的一些信息,进行数据恢复

ectd 里面有2个版本,一个是 v2版,一个是v3版。v2版会将数据全部写入 内存中,v3 版本会引入本地卷的持久化操作(关机以后并不会造成数据损坏)

推荐使用kubernetes 集群中etcd v3,

V1.11包含之前自带的的etcd是不支持V3的。

ETCD 键值数据库 是基于HTTP,进行的C/S开发的,

他有 这些组件

Raft:存储我们的读写信息的(所有的信息都存在这里)

WAL:预写日志:为了防止Raft里面的信息出现损坏,还有WAL预写日志

(如果想对里面的数据进行更改,需要先生成一个日志,WAL先存一下,并且会定时的对这些日志进行完整的备份[完整+临时备份])

Entry:

Snapshot:日志备份{完整备份+增量备份}

node 节点:安装 kubelet 、kube proxy、 container(Docker)

在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。

kubelet:会跟我们的CRI(C 容器;R 运行环境; I 接口)—这里就是我们的Dokcer表现形式 。它会和我们的Docker进行交互,操作Docker去创建对应的容器[就是Kubelet维持我们Pod的生命周期]

Kube proxy:相当于SVC,可以进行负载操作。也就意味着如何实现Pod与Pod之间如何访问,包括负载均衡。它的默认操作时firewall,操作防火墙,实现对Pod的映射。(新版本中还支持IPVS 实现负载均衡)

总结这些节点

api server:所有服务访问统一入口

CrontrollerManager:维持副本期望数

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

etcd:键值对数据库,存储K8S集群所有重要信息(持久化)

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

kube-proxy:负责写入规则至iptables(firewall)、ipvs(负载均衡) 实现服务映射访问的

  • 其它组件介绍

#CoreDNS :

可以为集群中的svc 创建一个域名IP的对应关系解析

#Dashboard:

给k8s提供一个B/S 结构访问体系

#Ingress controller:

官方实现了四层代理,Ingress 可以实现七层代理

#Federation:

提供一个可以跨越集群中心多k8s 统一管理功能

#Prometheus:

提供k8s 集群的监控能力

#ELK:

提供k8s 集群日志 统一 分析接入平台

5. K8s 核心概念

5.1 Master 集群控制节点
  • 每个集群至少一个master节点负责集群的管理
5.2 Node 工作负载节点
  • 由masster 分配容器到这些node节点上,然后node 节点上的docker 负责容器运行
5.3 Pod kubernetes的最小控制单元
  • **自主式pod **

Pod是在K8s集群中运行部署应用或服务的最小单元(原子单元),它是可以支持多容器的。

只要我们定义了一个Pod,它就会自动启动一个容器—pause的网络栈。也就意味着同一个Pod 容器间的端口不能冲突

一个Pod里封装了很多个容器,他们共用一个pause,共用存储卷

  • 在这里插入图片描述
5.4 Controller 控制器Pod
  • 控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等

  • K8S内核提供了众多的pod控制器,常用的有:

Deployment 部署(暴露在最外面的)

DaemonSet 要求每一个运行节点都启动一个

ReplicaSet

StatefulSet

Job

Cronjob

5.4.1 复制控制器(Replication Controller,RC)— 确保预期的Pod副本数量
  • RC 控制器

Replication Control1er 用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod 来替代;而如果异常多出来的容器也会自动回收。在新版本的Kubernetes 中建议使用ReplicaSet来取代 ReplicationControl1e

5.4.2 副本集(Replica Set,RS)— 确保预期的Pod副本数量
  • RS副本集

ReplicaSet跟Replication Controller没有本质的不同,只是名字不一样,并且ReplicaSet支持集合式的selector

虽然ReplicaSet可以独立使用,但一般还是建议使用

Deployment来自动管理ReplicaSet ,这样就无需担心跟其他机制的不兼容问题(比如 ReplicaSet不支持rolling update {滚动更新}但 Deployment支持)

  • 在这里插入图片描述
5.4.3 HPA
  • HPA

HPA监控我们的RS,当我们的CPU达到80后(CPU>=80),他就会新建Pod,最多创建10个,最少保留2个。

如果高于80,就创建,小于80不在创建。

  • 在这里插入图片描述
5.4.4 StatefulSet —为了解决有状态服务的问题
  • StatefulSet

StatefulSet是为了解决有状态服务的问题(对应 Deployments 和 ReplicaSets是为无状态服务而设计),

其应用场景包括:

1.稳定的持久化存储,即 Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现

2.稳定的网络标志,即 Pod重新调度后其 PodName和 HostName不变,基于 Headless Service(即没有Cluster IP的Service )来实现

3.有序部署,有序扩展,即 Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从О到N-1,在下一个Pod运行之前所有之前的 Pod必须都是Running 和 Ready状态),基于init containers来实现

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

如何快速更新自己的技术积累?

  • 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
  • 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
  • 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
  • 学习以后不知道有没有学成,则可以通过面试去检验。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目

八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享

八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
rc=“https://img-blog.csdnimg.cn/img_convert/fd5408e6aa77a32039a0b99db91b79eb.jpeg” alt=“img” style=“zoom: 33%;” />

如何快速更新自己的技术积累?

  • 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
  • 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
  • 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
  • 学习以后不知道有没有学成,则可以通过面试去检验。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目

[外链图片转存中…(img-8iSmWoqC-1712166581857)]

[外链图片转存中…(img-kX4lJ35s-1712166581857)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值