1、Kubernetes简介

一、k8s 集群部署

1、k8s 快速入门

1)、简介

Kubernetes 简称 k8s。是用于自动部署,扩展和管理容器化应用程序的开源系统。

中文官网:https://kubernetes.io/zh/

中文社区:https://www.kubernetes.org.cn/

官方文档:https://kubernetes.io/zh/docs/home/

社区文档:http://docs.kubernetes.org.cn/

 部署方式的进化



2)、架构

1、整体主从方式

2、Master 节点架构

 kube-apiserver

 对外暴露 K8S 的 api 接口,是外界进行资源操作的唯一入口

 提供认证、授权、访问控制、API 注册和发现等机制

 etcd

 etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集

群数据的后台数据库。

 Kubernetes 集群的 etcd 数据库通常需要有个备份计划

 kube-scheduler

 主节点上的组件,该组件监视那些新创建的未指定运行节点的 Pod,并选择节点

让 Pod 在上面运行。

 所有对 k8s 的集群操作,都必须经过主节点进行调度

 kube-controller-manager

 在主节点上运行控制器的组件

 这些控制器包括:

 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应。

 副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维

护正确数量的 Pod。

 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service

与 Pod)。

 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名

空间创建默认帐户和 API 访问令牌

3、Node 节点架构

 kubelet

 一个在集群中每个节点上运行的代理。它保证容器都运行在 Pod 中。

 负责维护容器的生命周期,同时也负责 Volume(CSI)和网络(CNI)的管理;

 kube-proxy

 负责为 Service 提供 cluster 内部的服务发现和负载均衡;

 容器运行环境(Container Runtime)

 容器运行环境是负责运行容器的软件。

 Kubernetes 支持多个容器运行环境: Docker、 containerd、cri-o、 rktlet 以及任

何实现 Kubernetes CRI (容器运行环境接口)。

 fluentd

 是一个守护进程,它有助于提供集群层面日志 集群层面的日志

3)、概念

 Container:容器,可以是 docker 启动的一个容器

 Pod:

 k8s 使用 Pod 来组织一组容器

 一个 Pod 中的所有容器共享同一网络。

 Pod 是 k8s 中的最小部署单元

 Volume

 声明在 Pod 容器中可访问的文件目录

 可以被挂载在 Pod 中一个或多个容器指定路径下

 支持多种后端存储抽象(本地存储,分布式存储,云存

储...)

 Controllers:更高层次对象,部署和管理 Pod;

 ReplicaSet:确保预期的 Pod 副本数量

 Deplotment:无状态应用部署

 StatefulSet:有状态应用部署

 DaemonSet:确保所有 Node 都运行一个指定 Pod

 Job:一次性任务

 Cronjob:定时任务

 Deployment:

 定义一组 Pod 的副本数目、版本等

 通过控制器(Controller)维持 Pod 数目(自动回

复失败的 Pod)

 通过控制器以指定的策略控制版本(滚动升级,回滚等)

 Service

 定义一组 Pod 的访问策略

 Pod 的负载均衡,提供一个或者多个 Pod 的稳定

访问地址

 支持多种方式(ClusterIP、NodePort、LoadBalance)

 Label:标签,用于对象资源的查询,筛选

 Namespace:命名空间,逻辑隔离

 一个集群内部的逻辑隔离机制(鉴权,资源)

 每个资源都属于一个 namespace

 同一个 namespace 所有资源名不能重复

 不同 namespace 可以资源名重复

API:

我们通过 kubernetes 的 API 来操作整个集群。

可以通过 kubectl、ui、curl 最终发送 http+json/yaml 方式的请求给 API Server,然后控制 k8s

集群。k8s 里的所有的资源对象都可以采用 yaml 或 JSON 格式的文件定义或描述

4)、快速体验

1、安装 minikube

https://github.com/kubernetes/minikube/releases

下载 minikube-windows-amd64.exe 改名为 minikube.exe

打开 VirtualBox,打开 cmd,

运行

minikube start --vm-driver=virtualbox --registry-mirror=https://registry.docker-cn.com

等待 20 分钟左右即可

2、体验 nginx 部署升级

5)、流程叙述

1、通过 Kubectl 提交一个创建 RC(Replication Controller)的请求,该请求通过 APIServer

被写入 etcd 中

2、此时 Controller Manager 通过 API Server 的监听资源变化的接口监听到此 RC 事件

3、分析之后,发现当前集群中还没有它所对应的 Pod 实例,

4、于是根据 RC 里的 Pod 模板定义生成一个 Pod 对象,通过 APIServer 写入 etcd

5、此事件被 Scheduler 发现,它立即执行一个复杂的调度流程,为这个新 Pod 选定一

个落户的 Node,然后通过 API Server 讲这一结果写入到 etcd 中,

6、目标 Node 上运行的 Kubelet 进程通过 APIServer 监测到这个"新生的"Pod,并按照它

的定义,启动该 Pod 并任劳任怨地负责它的下半生,直到 Pod 的生命结束。

7、随后,我们通过 Kubectl 提交一个新的映射到该 Pod 的 Service 的创建请求

8、ControllerManager 通过 Label 标签查询到关联的 Pod 实例,然后生成 Service 的

Endpoints 信息,并通过 APIServer 写入到 etcd 中,

9、接下来,所有 Node 上运行的 Proxy 进程通过 APIServer 查询并监听 Service 对象与

其对应的 Endpoints 信息,建立一个软件方式的负载均衡器来实现 Service 访问到后端

Pod 的流量转发功能。
k8s 里的所有的资源对象都可以采用 yaml 或 JSON 格式的文件定义或描述

相关推荐
politeboy1 小时前
关于k8s中镜像的服务端口被拒绝的问题
云原生·容器·kubernetes
weixin_438197381 小时前
K8S创建云主机配置docker仓库
linux·云原生·容器·eureka·kubernetes
皮锤打乌龟7 小时前
(干货)Jenkins使用kubernetes插件连接k8s的认证方式
运维·kubernetes·jenkins
南猿北者8 小时前
docker Network(网络)
网络·docker·容器
ggaofeng11 小时前
通过命令学习k8s
云原生·容器·kubernetes
death bell12 小时前
Docker基础概念
运维·docker·容器
想学习java初学者14 小时前
Docker Compose部署Kafka(非Zookeeper)
docker·容器·kafka
qq_道可道15 小时前
K8S升级到1.24后,切换运行时导致 dind 构建镜像慢根因定位与解决
云原生·容器·kubernetes
SONGW201815 小时前
k8s拓扑域 :topologyKey
kubernetes
weixin_4381973816 小时前
K8S实现反向代理,负载均衡
linux·运维·服务器·nginx·kubernetes