没有合适的资源?快使用搜索试试~ 我知道了~
首页基于kubernetes的DevOps平台实践直播分享-马松林.pdf
基于kubernetes的DevOps平台实践直播分享-马松林.pdf
需积分: 50 10 下载量 73 浏览量
更新于2023-05-11
收藏 917KB PDF 举报
基于kubernetes的DevOps平台实践直播分享-马松林,写的非常好,非常适合入门和实战使用,里面有一些细节写的非常好
资源详情
资源推荐
基于 kubernetes 的 DevOps 平台实践直播分享
作者:马松林
整理:冉勇
1. 序
大家好,我叫马松林,现任 DaoCloud 交付架构师,今天给大家分享基于 kubernetes 的 DevOps 平台
实践。
kubernetes 的出现让容器的调度管理变的简单,但是 kubernetes 本身的“部署难”又让很多人止步,对
该技术的普及也有一定的影响。首先,从 kubernetes 的架构角度,为大家讲解一下从零部署一个生产可用
的 kubernetes 集群,并对 kubelet TLS Bootstrapping 的原理进行讲解。
先说一下我们生产环境 kubernets 集群部署,为方便后期维护及减少一层 docker 封装,我们选择采用
二进制方式部署 kubernetes 集群。(kubeadm 方式部署全部运行在 docker 容器中、证书时长限制等;虽然
降低部署门槛,但屏蔽了很多细节,遇到问题很难排查等。)
2. kubernets 集群部署流程
kubernets 集群部署流程:
- 网络、主机等规划
- 规划集群网络
- 规划主机集群架构(如节点多机房灾备等)
- 主机系统初始化
- 主机名
- 软件源
- 关闭 swap
- 关闭防火墙
- 关闭 selinux
- 配置 chrony
- 安装依赖软件包
- 加载相关内核模块
- 内核优化
- 配置数据盘
- 签发集群证书
- 签发 ca 证书
- 签发 etcd 证书
- 签发 admin 证书
- 签发 apiserver 证书
- 签发 metrics-server 证书
- 签发 controller-manager 证书
- 签发 scheduler 证书
- 签发 kube-proxy 证书
- 部署 etcd 高可用集群
- etcd 集群部署
- etcd 数据备份
- apiserver 的高可用配置
- haproxy+keepalived
- 部署 master 节点
- 生成 kuberctl kubeconfig,配置 kubectl
- 安装配置 kube-apiserver
- 安装配置 kube-controller-mannager
- 安装配置 kube-scheduler
- 部署 node 节点
- 安装配置 docker
- 安装配置 kubelet
- 安装配置 kube-proxy
- 部署 calico
3. kubernetes 集群部署要点
kubernetes 集群部署要点:
- 关闭非安全端口,通过--anonymous-auth=false 关闭匿名请求,所有通信使用证书认证,防止请求
被篡改;通过证书认证和授权策略(x509、token、RBAC)。
- 开启 bootstrap token 认证,动态创建 token,而不是在 apiserver 中静态配置。
- 使用 TLS bootstrap 机制自动生成 kubelet client 和 server 证书,过期自动轮转(部分集群部署使用
admin 证书签发 kubelet.kubeconfig,这样集群非常不安全)。
- etcd、master 证书指定节点 IP,限制访问,即便某个节点证书泄漏,在其他机器上也无法使用。
- 网络使用 calico ipip
我已经将 kubernetes 集群安装过程写成 ansible-playbook,实现一键部署、扩容 kubernets 高可用集群
(https://github.com/k8sre/k8s_init.git)。 playbook 包含了系统初始化、签发证书、部署 etcd、部署 k8s、替
换集群证书等。
我们 Devops 平台对接了 Ansible Playbook,可在 DevOps 平台上操作部署、扩容,配合工单系统,完
成全自动化流程。
DevOps 平台操作部署、扩容 kubernets 集群流程:
- 填写申请机器工单
- 选择用途为 kubernetes 新建或者扩容
- 选择对应角色
- 工单审批通过后,自动申请机器
- 调用 Ansible Playbook 开始进行系统初始化
- 调用 Ansible Playbook 开始进行证书签发
- 调用 Ansible Playbook 开始进行 etcd 集群部署
- 调用 Ansible Playbook 开始进行节点扩容
同时也可以使用以下命令进行操作:
通过以下命令即可将一批刚刚安装好系统、配置好网络的机器部署为一套生产可用的 k8s 集群:
```
ansible-playbook k8s.yml -i inventory
```
扩容 master 节点
```
ansible-playbook k8s.yml -i inventory -t init -l master
ansible-playbook k8s.yml -i inventory -t cert,install_master
```
扩容 node 节点
```
ansible-playbook k8s.yml -i inventory -t init -l node
ansible-playbook k8s.yml -i inventory -t cert,install_node
```
通过本 playbook 部署集群,可以在很短的时间内完成集群扩容。生产上使用本 Playbook 最高一次性扩
容过 50 个 node 节点。
因为时间关系,这里先简单介绍下 kubelet TLS Bootstrapping 和 etcd 的自动备份,其他部分就不再进
一步讲解,具体详细部署大家可参考(https://github.com/k8sre/docs/blob/master/kubernetes/kubernetes 高
可用集群之二进制部署.md)
**Kubelet TLS Bootstrapping**
在 Kubernetes 集群中,工作节点上的组件(kubelet 和 kube-proxy)需要与 Kubernetes 主组件通信,
特别是 kube-apiserver。为了确保通信保持私密,不受干扰,并确保群集的每个组件与另一个受信任组件通
信,我们强烈建议在节点上使用客户端 TLS 证书。
引导这些组件的正常过程,特别是需要证书的工作节点,因此它们可以与 kube-apiserver 安全地通信,
这可能是一个具有挑战性的过程,因为它通常超出了 Kubernetes 的范围,需要大量的额外工作。反过来,
这可能会使初始化或扩展集群变得具有挑战性。
为了简化流程,从版本 1.4 开始,Kubernetes 引入了证书请求和签名 API 以简化流程。
kubernetes 开启 TLS 认证后,每个 node 节点的 kubelet 都要使用由 kube-apiserver 的 ca 签发证书,才能与
kube-apiserver 进行通信,如果接入比较多的节点,为每个节点生成证书不太现实,Bootstrapping 就是让
kubelet 先使用一个低权限用户连接到 kube-apiserver,然后由 kube-controller-manager 为 kubelet 动态签
发证书。再配合 RBAC 指定用户拥有访问哪些 API 的权限。
**CSR 请求**
kubelet 启动后会发起 CSR 请求,kube-apiserver 收到 CSR 请求后,对其中的 Token 进行认证,认证
通过后将请求的 user 设置为 `system:bootstrap:<Token ID>`,group 设置为 `system:bootstrappers`,这一
过程称为 Bootstrap Token Auth。
kubelet 发起的 CSR 请求都是由 kube-controller-manager 来做实际签发的,对于 kube-controller-
manager 来说,TLS bootstrapping 下 kubelet 发起的 CSR 请求大致分为以下三种
- nodeclient: kubelet 以 `O=system:nodes` 和 `CN=system:node:(node name)` 形式发起的 CSR 请求
- selfnodeclient: kubelet client renew 自己的证书发起的 CSR 请求(与上一个证书就有相同的 O 和
CN)
- selfnodeserver: kubelet server renew 自己的证书发起的 CSR 请求
使用 Bootstrap Token 时整个启动引导过程:
- 配置 apiserver 使用 `Bootstrap Token Secret`,替换以前使用`token.csv`文件
- 在集群内创建首次 TLS Bootstrap 申请证书的 ClusterRole、后续 renew Kubelet client/server 的
ClusterRole,以及其相关对应的 ClusterRoleBinding;并绑定到对应的组或用户
- 配置 controller-manager,使其可以自动签发相关证书和自动清理过期的 TLS Bootstrapping Token
- 生成特定的包含 TLS Bootstrapping Token 的 `bootstrap.kubeconfig` 以供 kubelet 启动时使用
- 配置 kubelet,使其首次启动加载 `bootstrap.kubeconfig` 并使用其中的 TLS Bootstrapping Token
完成首次证书申请
- controller-manager 签发证书,并生成 kubelet.kubeconfig,kubelet 自动重载完成引导流程
- 后续 kubelet 自动 renew 相关证书
- 集群搭建成功后立即清除 `Bootstrap Token Secret` ,或等待 Controller Manager 待其过期后删除,
以防止被恶意利用
4. ETCD 备份
下面讲一下 etcd 备份
**ETCD 备份**
剩余15页未读,继续阅读
chenyan_vip
- 粉丝: 1
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功