Kubernetes系列(一) - kubernetes入门基本概念
1. 基本概念
1.1 什么是 Kubernetes 集群
- Kubernetes用于协调高度可用的计算机集群,这些计算机群集被连接作为单个单元工作
- Kubernetes在一个集群上以更有效的方式自动分发和调度容器应用程序
1.2 Kubernetes集群资源组成:
- Master是集群的调度节点
- Nodes是应用程序实际运行的工作节点
- Master 负责管理集群
- Node是Kubernetes集群中的工作机器,可以是物理机或虚拟机
每个工作节点都有一个Kubelet,它是管理 节点 并与 Kubernetes Master 节点进行通信的代理。节点上还应具有处理容器操作的工作,例如 Docker。一个 Kubernetes 工作集群至少有三个节点
节点 使用 Master 公开的 Kubernetes API 与 Master 通信
1.3 无状态和有状态的区别
1.3.1 无状态服务
- 是指该服务运行的实例不会在本地存储需要持久化的数据,并且多个实例对于同一个请求响应的结果是完全一致的。
- 多个实例可以共享相同的持久化数据。例如:nginx实例,tomcat实例等
- 相关的k8s资源有:ReplicaSet, ReplicationController、Deployment等,由于是无状态服务,所以这些控制器创建的pod序号都是随机值。并且在缩容的时候并不会明确缩容某一个pod,而是随机的,因为所有实例得到的返回值都是一样,所以缩容任何一个pod都可以。
1.3.2 有状态服务
- 有状态服务可以说是需要数据存储功能的服务、或者指多线程类型的服务,队列等。(mysql数据库、kafka、zookeeper等)
- 每个实例都需要有自己独立的持久化存储,并且在k8s中是通过申明模板来进行定义。持久卷申明模板在创建pod之前创建,绑定到pod中,模板可以定义多个。
2. Kubernetes结构划分
2.1 Kubernetes总体结构划分
- 只有中间的是k8s的部分
- 左边是管理master的
- 右边的是镜像仓库

2.2 Master结构划分
- API Server
负责与外部通信,有:接口,GUI,命令行
- Scheduler
调度器,容器调度
- Controller
控制器,负责具体工作: 还有容器监控等等
- etcd
第三方的,保存应用程序配置信息的守护进程,K/V存储

2.3 Node结构划分
- kubelet
管理node,而且是负责与master API Server通信
- pod
k8s运行的核心基本单元,也是被编排对象
- k8s上不会直接运行容器,而是运行pod
- 说白了pod是容器的外壳
- 但是一个pod可能会包含多个容器,在这种情况下,多个容器被当作一个原子单位管理
- pod运行在一个私有的隔离的网络上,默认情况下在同一集群的其他pod和service中可见,但是外部不可见,需要借助service暴露给外部

- node还应该具有处理容器操作的工具
例如
docker或者rkt,一般是docker


3. Kubernetes的组件组成
3.1 Master Components
- kube-apiserver
- etcd
- kube-scheduler
- kube-controller-manager
- cloud-controller-manager
3.2 Node Components
- kubelet
与API server进行交互的
- kube-proxy
- Container Runtime
docker等
3.3 Addons拓展
- DNS
服务注册和服务发现
- CNI
必须要一个,容器网络接口实现,flannel,calico。。。
- Web UI(Dashboard)
GUI界面
- Container Resource Monitoring
- Cluster-level Logging
4. Kubernetes的一些对象(资源)
4.1 Kubernetes基础对象
- pod
- service
可以认为是pod的反向代理,负责接收客户端请求,把请求转给pod
- 因为每个pod都有自己的内部ip,但是针对一个deployment的pod是有可能变的【pod挂掉或者复制】,所以需要一个service来做一个类似中间者的一个抽象的存在
- 通过
type在ServiceSpec中指定可以以不同的方式公开服务ClusterIP(默认): 在集群的内部ip上公开服务。这种类型使得只能从集群内访问服务NodePort:在每个node上的相同端口上公开服务,可以从集群外部访问服务。ClusterIP的超集, 最常用LoadBalancer: 在当前云中创建一个外部负载平衡器(如果支持),并为该服务分配一个固定的外部IP。NodePort的超集。ExternalName-externalName: 通过返回具有该名称的CNAME记录,使用任意名称(在规范中指定)公开服务。不使用代理。此类型需要v1.7或更高版本kube-dns
- pod controller(统称)
Deployment最常见
- Namespace
- Volume
4.2 高级对象
建立在基础对象之上,提供额外功能
- pod controller(抽象概念):Deployment(具体实现)【负责操作pod】

5. 部署相关
5.1 部署高可用要点

5.2 部署工具

5.3 安装和部署K8S的两种方式
- 二进制部署
让基础程序运行为守护进程
- 让基础程序运行为容器
自动化部署工具kubeadm
其他章节
kubernetes系列(二) - kubectl的入门操作
Kubernetes系列(一) - kubernetes入门基本概念的更多相关文章
- Kubernetes系列02—Kubernetes设计架构和设计理念
本文收录在容器技术学习系列文章总目录 1.Kubernetes设计架构 Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分 ...
- kubernetes系列06—kubernetes资源清单定义入门
本文收录在容器技术学习系列文章总目录 1.认识kubernetes资源 1.1 常用资源/对象 workload工作负载型资源:pod,ReplicaSet,Deployment,StatefulSe ...
- Kubernetes系列:Kubernetes Dashboard
15.1.Dashboard 作为Kube认得Web用户界面,用户可以通过Dashboard在Kubernetes集群中部署容器化的应用,对应用进行问题处理和管理,并对集群本身进行管理.通过Dashb ...
- K8S从入门到放弃系列-(16)Kubernetes集群Prometheus-operator监控部署
Prometheus Operator不同于Prometheus,Prometheus Operator是 CoreOS 开源的一套用于管理在 Kubernetes 集群上的 Prometheus 控 ...
- 从0到1使用Kubernetes系列——Kubernetes入门
基本概念 Docker 是什么 Docker 起初是 dotCloud 公司创始人 Solomon Hykes 在法国的时候发起的一项公司内部项目,Docker 是基于 dotCloud 公司多年云服 ...
- K8S从入门到放弃系列-(10)kubernetes集群之kube-proxy部署
摘要: kube-proxy的作用主要是负责service的实现,具体来说,就是实现了内部从pod到service和外部的从node port向service的访问 新版本目前 kube-proxy ...
- K8S从入门到放弃系列-(9)kubernetes集群之kubelet部署
摘要: Kubelet组件运行在Node节点上,维持运行中的Pods以及提供kuberntes运行时环境,主要完成以下使命: 1.监视分配给该Node节点的pods 2.挂载pod所需要的volume ...
- K8S从入门到放弃系列-(7)kubernetes集群之kube-scheduler部署
摘要: 1.Kube-scheduler作为组件运行在master节点,主要任务是把从kube-apiserver中获取的未被调度的pod通过一系列调度算法找到最适合的node,最终通过向kube-a ...
- K8S从入门到放弃系列-(6)kubernetes集群之kube-controller-manager部署
摘要: 1.Kubernetes控制器管理器是一个守护进程它通过apiserver监视集群的共享状态,并进行更改以尝试将当前状态移向所需状态. 2.kube-controller-manager是有状 ...
- K8S从入门到放弃系列-(5)kubernetes集群之kube-apiserver部署
摘要: 1.kube-apiserver为是整个k8s集群中的数据总线和数据中心,提供了对集群的增删改查及watch等HTTP Rest接口 2.kube-apiserver是无状态的,虽然客户端如k ...
随机推荐
- [NOI Online 2022 入门组] 数学游戏
P8255 [NOI Online 2022 入门组] 数学游戏 注:妙哉,此题可以理解为数学题. 思路 由题易得: \[\notag z=d_x\times d_y\times \gcd(x,y)^ ...
- C++内存模型实践探索
前言 C++对象模型是个常见.且复杂的话题,本文基于Itanium C++ ABI通过程序实践介绍了几种 简单C++继承 场景下对象模型,尤其是存在虚函数的场景,并通过图的方式直观表达内存布局.本文展 ...
- python将html批量转换为md
一.安装依赖 pip install html2text 代码实现 import os import shutil import html2text def convert_html2md(src_h ...
- 一个docker容器中只运行一个Service
基于单一原则,一个容器里只运行一个主进程,即一个service(进程)做成一个docker镜像.多个进程在一个容器里有很多弊端,比如一个主进程更新时,其他进程也被迫重启.容器=应用+执行应用的环境 而 ...
- Java高并发之线程的实现方式,含Lamabda表达式
Java中线程实现的方式 在 Java 中实现多线程有4种手段: 1.继承 Thread 类 2.实现 Runnable 接口 3.匿名内部类 4.Lambda表达式实现 实现 Runnable 接口 ...
- BootStrap5应用时tooltips的添加
BootStrap5应用时tooltips的添加 官方示例 <button type="button" class="btn btn-secondary" ...
- [转载] Ubuntu上Firefox字体太小--高分屏背锅——高清分辨率屏幕下浏览器设置
版权声明:本文为CSDN博主「mythinker2」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/myth ...
- games101_Homework1
本次作业的任务是填写一个旋转矩阵和一个透视投影矩阵.给定三维下三个 点 v0(2.0, 0.0, −2.0), v1(0.0, 2.0, −2.0), v2(−2.0, 0.0, −2.0), 你需要 ...
- SpringBoot进阶教程(八十三)Kaptcha
Kaptcha是谷歌开源的一个可高度配置的比较老旧的实用验证码生成工具.它可以实现:(1)验证码的字体/大小颜色:(2)验证码内容的范围(数字,字母,中文汉字):(3)验证码图片的大小,边框,边框粗细 ...
- pycharm生成的allure测试报告如何查看本地的index.html文件?
pycharm生成的allure测试报告应该是通过服务启动查看,但是如果把这个文件保存到本地查看,直接打开页面无内容 可以使用allure-combine工具实现本地正常打开 `from allure ...