3.2.2 kubernetes

最后更新于:2022-04-02 07:37:08

#### 为什么需要k8s ``` 一个容器集群管理系统,高效(扩容,缩容,部署) ``` #### 中文文档 ``` https://kubernetes.io/zh/docs/home/ ``` #### 功能 ``` 容器编排工具,是谷歌内部系统Borg的开源实现 以服务为中心,自动化,以Docker为标准,实现了分布式架构 ``` #### 局限 ``` 在 v1.19 版本中, Kubernetes 支持的最大节点数为 5000。更具体地说,我们支持满足以下_所有_条件的配置: * 节点数不超过 5000 * Pod 总数不超过 150000 * 容器总数不超过 300000 * 每个节点的 pod 数量不超过 100 ``` #### K8s对象 ``` # Pod K8s中的最小对象,可以拥有多个容器,容器间共享网络 会有一个Pause容器 # Pause容器 链接Pod中其他容器,对容器进行健康检查,报告Pod # ReplicaSet(RS) 副本集 管理应用会有几个副本集,并负责维持副本数量(重建Pod) # Deployment(部署容器) 部署、更新容器 # Labes(标签) 便于选择、配置、管理 # Service(管理) 通过标签管理服务,客户端通过ClusterIP来进行管理 ``` #### K8s架构 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a9/c8/a9c8e10f2bf520a1e7a9218c9e53fc85_1216x518.png) ``` # Master 管理Work节点 # API Server 对外提供接口,管理K8s集群,负责和Etcd交互 # Scheduler调度器 命令的调度系统,收集Work资源信息,通过预审和优选策略,通过API Server通知Etcd # ControllerManager 负责管理集群中的各个对象,有不同的Manager工具,通过API Server获取集群内对象的变化 # Work 运行具体服务 # Kubelet 每个Work都存在,维护Pod的声明周期、Volume、网络等,调用本地Docker,运行Pod # Etcd 分布式键值配置管理 ``` #### 加密算法基础 对称加密 ``` 基于标准算法或密钥进行加密和解密 ``` 非对称加密 ``` 公钥加密,私钥解密 1. 服务端发布公钥 2. 客户端用公钥加密数据,发送到服务端 ``` SSL/TSL协议 ``` 1. 客户端用服务端的公钥,加密的对称加密的密钥,发送到服务端 1.1 客户端那到服务端公钥后,去CA进行认证,来判断是否可信 2. 服务端用私钥解密,获得对称加密密钥 3. 使用对称加密进行通讯 ``` CA证书 ``` 避免SSL/TSL步骤1发送公钥过程中的公钥伪造,通过CA证书认证机构,对证书进行认证,防止数据传输过程中被篡改 ``` #### K8s认证 认证方式 ``` CA证书(k8s自有) BearerToken(强密钥) ServiceAccount(k8s和容器认证) - namespace - token - ca ``` 鉴权机制 ``` # ABAC # WebHook # RBAC(Role Based Access Control 1.16后支持) ``` #### RBAC详解 user分类 ``` User ServiceAccount ``` Role ``` name resource verbs ``` Authority ``` Resource Verbs:CURD ``` 定义对NameSpace的授权 ``` # Role默认只属于一个namespace RoleBinding 保存用户和规则的关系,将Role放到RoleBinding中,可多个 ``` 如果权限是整个集群 ``` ClusterRole ClusterRoleBinding ``` #### 准入控制(AdmisionControl) ``` ``` 客户端证书认证(TLS双向认证) ``` kubectl->APIServer->K8s集群 ``` 滚动升级 ``` 由Deployment负责发起创建新版本容器,调整一个旧版本的Pod路由到新版本,并删除一个旧版本,循环至所有旧版本都被替换 ``` #### Kubernetes Master功能 ``` # API 通过UI和CLI进行控制 # Scheduler # Controller 容器的实际控制 # Etcd 存储K8s的集群的状态和配置 ``` #### Kubernetes Node功能 ``` # Pod 容器中的最小调度单位,具有相同namespace的容器组合 # Kubelet Master节点控制容器的管理 # Kube-proxy 容器的代理、负载均衡、转发 # Fluentd 日志采集、存储、查询 # Image Registry 容器镜像仓库 # Optional(插件) DNS UI etc ``` #### 快速搭建k8s集群 ``` # minikube 单节点k8s,适合测试 https://minikube.sigs.k8s.io/docs/start/windows/ # kubeadm 多节点k8s集群,适合测试 # kops 云上的k8s集群 # Tectonic 小于10节点免费 # Play with Kubernetes 平台测试,2节点,4小时自动销毁,类似Play with Docker ```
';