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
```
';