芯が強い人になるESTJ-A

# Kubenetes(K8S)--2022--章节1

IT開発 Tags: 无标签 阅读: 243

听课:
link1
link2
一小时讲明白k8s油管视频
k8s完整版4小时--youtube
听课笔记:link

Kubernetes (K8S) 是什么
它是一个为 容器化 应用提供集群部署和管理的开源工具,由 Google 开发。
Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目

主要特性:

高可用,不宕机,自动灾难恢复
灰度更新,不影响业务正常运转
一键回滚到历史版本
方便的伸缩扩展(应用伸缩,机器加减)、提供负载均衡
有一个完善的生态

截屏2022-01-04 20.17.34.jpg

传统物理机,传统部署方式:

应用直接在物理机上部署,机器资源分配不好控制,出现Bug时,可能机器的大部分资源被某个应用占用,导致其他应用无法正常运行,无法做到应用隔离。

虚拟机部署vmware
在单个物理机上运行多个虚拟机,每个虚拟机都是完整独立的系统,性能损耗大。

容器部署
所有容器共享主机的系统,轻量级的虚拟机,性能损耗小,资源隔离,CPU和内存可按需分配

什么时候需要 Kubernetes
当你的应用只是跑在一台机器,直接一个 docker + docker-compose 就够了,方便轻松;
当你的应用需要跑在 3,4 台机器上,你依旧可以每台机器单独配置运行环境 + 负载均衡器;
当你应用访问数不断增加,机器逐渐增加到十几台、上百台、上千台时,每次加机器、软件更新、版本回滚,都会变得非常麻烦、痛不欲生,再也不能好好的摸鱼了,人生浪费在那些没技术含量的重复性工作上。

这时候,Kubernetes 就可以一展身手了,让你轻松管理百万千万台机器的集群。“谈笑间,樯橹灰飞烟灭”,享受着一手掌控所有,年薪百万指日可待。

Kubernates 可以为你提供集中式的管理集群机器和应用,加机器、版本升级、版本回滚,那都是一个命令就搞定的事,不停机的灰度更新,确保高可用、高性能、高扩展。

Kubernetes 集群架构

截屏2022-01-04 20.19.25.jpg

master
主节点,控制平台,不需要很高性能,不跑任务,通常一个就行了,也可以开多个主节点来提高集群可用度。

worker
工作节点,可以是虚拟机或物理计算机,任务都在这里跑,机器性能需要好点;通常都有很多个,可以不断加机器扩大集群;每个工作节点由主节点管理

重要概念 Pod
豆荚,K8S 调度、管理的最小单位,一个 Pod 可以包含一个或多个容器,每个 Pod 有自己的虚拟IP。一个工作节点可以有多个 pod,主节点会考量负载自动调度 pod 到哪个节点运行。

截屏2022-01-04 20.20.06.jpg

Kubernetes 组件
kube-apiserver API 服务器,公开了 Kubernetes API
etcd 键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库
kube-scheduler 调度 Pod 到哪个节点运行
kube-controller 集群控制器
cloud-controller 与云服务商交互
截屏2022-07-12 23.09.16.jpg
截屏2022-01-04 20.20.39.jpg

中文官方:link

安装 Kubernetes 集群

安装方式介绍

minikube

只是一个 K8S 集群模拟器,只有一个节点的集群,只为测试用,master 和 worker 都在一起

直接用云平台 Kubernetes

可视化搭建,只需简单几步就可以创建好一个集群。
优点:安装简单,生态齐全,负载均衡器、存储等都给你配套好,简单操作就搞定

裸机安装(Bare Metal)

至少需要两台机器(主节点、工作节点个一台),需要自己安装 Kubernetes 组件,配置会稍微麻烦点。
可以到各云厂商按时租用服务器,费用低,用完就销毁。
缺点:配置麻烦,缺少生态支持,例如负载均衡器、云存储。

以前的部署方式

截屏2022-01-27 22.36.22.jpg

k8s发展历史

截屏2022-02-06 20.09.06.jpg

k8s组件

截屏2022-02-09 20.11.48.jpg
截屏2022-02-09 20.10.57.jpg
截屏2022-02-09 20.21.54.jpg

k8s组件说明

截屏2022-02-06 20.58.46.jpg
截屏2022-02-06 20.59.47.jpg
截屏2022-02-06 21.02.19.jpg

k8s持久化存储,StatefulSet,里面的PVC来实现数据持久化(=docker里面的volume)
Job负责,批处理任务。

Cron Job,负责批处理,只执行一次,可以保证批处理任务一个或者多个pod成功。
1在给定的时间,运行,*分时日月周
2周期性,定时运行

无状态应用

通用型:
RC:副本数量与期望值之间的管理
RS:功能相似=RC,多了集合式的标签选择器
Deployment:支持滚动更新,以及回滚。

特殊场景:(目标是成功推出 返回值0)
批处理:Job(保障任务,一次or多次成功)和Cron Job(在轮训计划下,定期执行job,实现批处理任务的运行),负责批处理
每个节点,有且只有一个,用DaemonSet

自动扩容缩:
HPA

截屏2022-02-07 21.25.16.jpg

3.3.1 命令式对象管理

kubectl命令

kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。kubectl命令的语法如下:


kubectl [command] [type] [name] [flags]
comand:指定要对资源执行的操作,例如create、get、delete

type:指定资源类型,比如deployment、pod、service

name:指定资源的名称,名称大小写敏感

flags:指定额外的可选参数

# 查看所有pod
kubectl get pod 

# 查看某个pod
kubectl get pod pod_name

# 查看某个pod,以yaml格式展示结果
kubectl get pod pod_name -o yaml

kubectl 常见操作命令


#kubectl 常见操作命令
kuberctl --help

经常使用的操作有下面这些:

命令分类    命令    翻译    命令作用
基本命令    create    创建    创建一个资源
edit    编辑    编辑一个资源
get    获取    获取一个资源
patch    更新    更新一个资源
delete    删除    删除一个资源
explain    解释    展示资源文档
运行和调试    run    运行    在集群中运行一个指定的镜像
expose    暴露    暴露资源为Service
describe    描述    显示资源内部信息
logs    日志输出容器在 pod 中的日志    输出容器在 pod 中的日志
attach    缠绕进入运行中的容器    进入运行中的容器
exec    执行容器中的一个命令    执行容器中的一个命令
cp    复制    在Pod内外复制文件
rollout    首次展示    管理资源的发布
scale    规模    扩(缩)容Pod的数量
autoscale    自动调整    自动调整Pod的数量
高级命令    apply    rc    通过文件对资源进行配置
label    标签    更新资源上的标签
其他命令    cluster-info    集群信息    显示集群信息
version    版本    显示当前Server和Client的版本

截屏2022-02-10 20.40.46.jpg

截屏2022-02-10 20.40.56.jpg

资源类型

kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看:

kubectl api-resources

截屏2022-02-10 20.46.40.jpg
截屏2022-02-10 20.46.48.jpg