导图社区 7.Paas平台即服务(中间件)(K8s)
学习 K8s 相关技能,Kubernetes是自动部署、扩展和管理容器化应用程序开源系统,Kubernetes是当下最流行的容器编排平台,不管是生产环境的采用率,还是云原生生态都很强大。
编辑于2023-07-03 11:10:54 天津市Kubernetes
是什么(介绍)
介绍
自动部署、扩展和管理容器化应用程序开源系统
功能
服务发现与负载均衡
存储编排
Secret和配置管理
部署更新Secrets和应用程序的配置时不必重新构建容器镜像,且不必将软件堆栈配置中的秘密信息暴露出来
批量执行
水平扩缩
自动化上线和回滚
自动装箱
根据资源需求和其他约束自动放置容器,同时避免影响可用性
自我修复
重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器
机器坏掉,自动重新部署到其他节点
核心概念
  A
Node
Master
负责管理整个集群。协调集群中的所有活动
Node
都有Kubelet
具有用于处理容器操作的工具(Docker&Rkt)--K8S才是容器生态的中心
Deployment
名词解释:https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/ apiVersion: extensions/v1beta1 kind: Deployment metadata: <Object> spec: <Object> minReadySeconds: <integer> #设置pod准备就绪的最小秒数 paused: <boolean> #表示部署已暂停并且deploy控制器不会处理该部署 progressDeadlineSeconds: <integer> strategy: <Object> #将现有pod替换为新pod的部署策略 rollingUpdate: <Object> #滚动更新配置参数,仅当类型为RollingUpdate maxSurge: <string> #滚动更新过程产生的最大pod数量,可以是个数,也可以是百分比 maxUnavailable: <string> # type: <string> #部署类型,Recreate,RollingUpdate replicas: <integer> #pods的副本数量 selector: <Object> #pod标签选择器,匹配pod标签,默认使用pods的标签 matchLabels: <map[string]string> key1: value1 key2: value2 matchExpressions: <[]Object> operator: <string> -required- #设定标签键与一组值的关系,In, NotIn, Exists and DoesNotExist key: <string> -required- values: <[]string> revisionHistoryLimit: <integer> #设置保留的历史版本个数,默认是10 rollbackTo: <Object> revision: <integer> #设置回滚的版本,设置为0则回滚到上一个版本 template: <Object> -required- metadata: spec: containers: <[]Object> #容器配置 - name: <string> -required- #容器名、DNS_LABEL image: <string> #镜像 imagePullPolicy: <string> #镜像拉取策略,Always、Never、IfNotPresent ports: <[]Object> - name: #定义端口名 containerPort: #容器暴露的端口 protocol: TCP #或UDP volumeMounts: <[]Object> - name: <string> -required- #设置卷名称 mountPath: <string> -required- #设置需要挂载容器内的路径 readOnly: <boolean> #设置是否只读 livenessProbe: <Object> #就绪探测 exec: command: <[]string> httpGet: port: <string> -required- path: <string> host: <string> httpHeaders: <[]Object> name: <string> -required- value: <string> -required- scheme: <string> initialDelaySeconds: <integer> #设置多少秒后开始探测 failureThreshold: <integer> #设置连续探测多少次失败后,标记为失败,默认三次 successThreshold: <integer> #设置失败后探测的最小连续成功次数,默认为1 timeoutSeconds: <integer> #设置探测超时的秒数,默认1s periodSeconds: <integer> #设置执行探测的频率(以秒为单位),默认1s tcpSocket: <Object> #TCPSocket指定涉及TCP端口的操作 port: <string> -required- #容器暴露的端口 host: <string> #默认pod的IP readinessProbe: <Object> #同livenessProbe resources: <Object> #资源配置 requests: <map[string]string> #最小资源配置 memory: "1024Mi" cpu: "500m" #500m代表0.5CPU limits: <map[string]string> #最大资源配置 memory: cpu: volumes: <[]Object> #数据卷配置 - name: <string> -required- #设置卷名称,与volumeMounts名称对应 hostPath: <Object> #设置挂载宿主机路径 path: <string> -required- type: <string> #类型:DirectoryOrCreate、Directory、FileOrCreate、File、Socket、CharDevice、BlockDevice - name: nfs nfs: <Object> #设置NFS服务器 server: <string> -required- #设置NFS服务器地址 path: <string> -required- #设置NFS服务器路径 readOnly: <boolean> #设置是否只读 - name: configmap configMap: name: <string> #configmap名称 defaultMode: <integer> #权限设置0~0777,默认0664 optional: <boolean> #指定是否必须定义configmap或其keys items: <[]Object> - key: <string> -required- path: <string> -required- mode: <integer> restartPolicy: <string> #重启策略,Always、OnFailure、Never nodeName: <string> nodeSelector: <map[string]string> imagePullSecrets: <[]Object> hostname: <string> hostPID: <boolean> status: <Object>
创建和更新应用程序的实例
实现蓝绿、滚动、灰度(金丝雀)
https://blog.csdn.net/xujiamin0022016/article/details/103883933
Pod
逻辑主机的概念,负责托管应用实例
Service
抽象层,它定义了一组Pod的逻辑集,并为这些Pod支持外部流量暴露、负载平衡和服务发现
其他
Labels
Volumes
K8S架构
系统架构
master

API Server
Controller Manager
包括replication、endpoint
Scheduler
etcd
服务发现
配置中心
Leader选举
Master
slave
node

kube-proxy
运行在集群各个主机上,管理网络通信,如服务发现、负载均衡
kubelet
监控数据库变化,管理后续pod的生命周期
Docker Engine
逻辑架构
Service
Controller Manager
pod
网络架构
Node IP
Cluster IP
POD IP
为什么(对比)
Kubernetes是当下最流行的容器编排平台,不管是生产环境的采用率,还是云原生生态都很强大
Docker Swarm
Docker企业版本Kubernetes与Swarm集成在一起
Docker Compose
Minikube
K3S
...
K8S发行版
目前Kubernetes网站上列出了大约30种不同的发行版。这并不一定完全,可能还有其他未在网站上发布的发行版。
主要区别
托管它的基础设施
本地
云
主机基础设施是否捆绑到发行版本身
有些是带有OS
使用哪个主机操作系统
使用哪种网络框架
是商业版还是社区开发版
示例
Minikube
专为本地部署而设计。Minikube由Kubernetes开源社区开发
K3S(史上最轻量级Kubernetes)【LAST】

介绍
K3s是由业界应用最为广泛的Kubernetes管理平台创建者Rancher Labs开发的轻量级Kubernetes发行版,通过了CNCF(云原生计算基金会)一致性认证。它是为生产环境设计的
二进制程序不足50MB,占用资源更少,只需要512MB内存即可运行
完全可以使用k3s代替k8s,k3s包含了k8s的所有基础功能,而k8s附加功能其实大多数情况也用不到
和使用k8s一样使用k3s
裁剪优化区别
裁剪功能5个
过时的功能和非默认功能
Alpha功能
内置的云提供商插件
内置的存储驱动
Docker
详细描述
使用内嵌轻量级数据库SQLite作为默认数据存储替代etcd,当然etcd仍然是支持的
内置了local storage provider、service load balancer、helm controller、Traefik ingress controller,开箱即用
所有Kubernetes控制平面组件如api-server、scheduler等封装成为一个精简二进制程序,控制平面只需要一个进程即可运行(K3S进程)
删除内置插件(比如cloudprovider插件和存储插件)
减少外部依赖,操作系统只需要安装较新的内核以及支持cgroup即可,k3s安装包已经包含了containerd、Flannel、CoreDNS,非常方便地一键式安装,不需要额外安装Docker、Flannel等组件
(服务发现)CoreDNS 是一个灵活的,可扩展的DNS服务器,它能够作为Pod集群内的DNS进行安装
(服务发现)Ingress 提供基于Http协议的路由转发机制
(网络)Flannel 是一个overlay的网络提供者
场景
Edge
IoT
CI
ARM
怎么用(使用)
UI(基于APIServer)
Dashboard
Prometheus
Rancher UI
ember前端开发
...
CLI
kubectl

用于操作kubernetes集群的命令行接口
随用随百度
K9s(Go)
K8s集群管理工具
一款管理员们喜欢的 “单一屏幕” 实用程序,K9s 提供了一个基于 curses 的全屏终端 UI,可与您的 Kubernetes 集群进行交互
通过包管理器
Helm &Chart
 https://github.com/traefik/traefik-helm-chart/tree/master/traefik 
帮助您管理 Kubernetes 应用程序
npm&jsmodule|yum&rpm
示例:helm template traefik/traefik
相关问题(其他)
整体生态

运行流程

1.用户提交创建Pod的请求,可以通过API Server的REST API ,也可用Kubectl命令行工具,支持Json和Yaml两种格式;
2.API Server 处理用户请求,存储Pod数据到Etcd;
3. Schedule通过和 API Server的watch机制,查看到新的pod,尝试为Pod绑定Node;
4. 过滤主机:调度器用一组规则过滤掉不符合要求的主机,比如Pod指定了所需要的资源,那么就要过滤掉资源不够的主机;
5. 主机打分:对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略,比如把一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等;
6. 选择主机:选择打分最高的主机,进行binding操作,结果存储到Etcd中;
7. kubelet根据调度结果执行Pod创建操作: 绑定成功后,会启动container, docker run, scheduler会调用API Server的API在etcd中创建一个bound pod对象,描述在一个工作节点上绑定运行的所有pod信息。运行在每个工作节点上的kubelet也会定期与etcd同步bound pod信息,一旦发现应该在该工作节点上运行的bound pod对象没有更新,则调用Docker API创建并启动pod内的容器。
其他
Rancher Labs(供容器技术基础设施的初创企业)
Rancher
打造领先的Kubernetes管理平台,成为业界唯一一个可以管理所有云上、所有发行版、所有Kubernetes集群的平台
初始化方式
关联现有厂商集群
导入K8S集群
RKE
模式
单个容器(non-HA)
Rancher服务 - 单个容器(non-HA) - 外部数据库
多活HA模式
....
配置映射
变相的映射持久化
数据映射卷用
HPA
容器水平伸缩
日志
ELK
日志收集分析查询
RKE
Rancher Kubernetes Engine
CIS扫描
根据CIS基准测试,失败的结果提供了描述以及补救步骤。这十分有效,因为你不仅可以根据CIS基准了解集群中哪些东西会崩溃,而且还可以根据建议来修复集群
K3S
OS
Istio

Service Mesh(服务网格)

必然的趋势还没有用到没有深入了解
Kiali 可视化管理工具
Jaeger 是Uber推出的一款开源分布式追踪系统
微服务
Spring凉了立即转Go
微服务全套解决方案
docker、k8s、服务网格化Istio都是通过Go语言来实现的
更好更轻的解决服务治理问题
详细查看微服务思维导图
CoreOS
etcd
用于共享配置和服务发现的分布式、一致性的 KV 存储系统
Rkt
Prometheus
Docker与Rkt容器
docker、containerd
Docker 作为 k8s 容器运行时,调用关系如下: kubelet --> docker shim (在 kubelet 进程中) --> dockerd --> containerd Containerd 作为 k8s 容器运行时,调用关系如下: kubelet --> cri plugin(在 containerd 进程中) --> containerd