type
status
date
summary
slug
tags
category
password
icon
一、前置准备
准备三台服务器,操作系统centos7.x
硬件配置:CPU2核、内存2GB、硬盘30GB
确保机器间网络互通,时钟同步,所需镜像及资源包下载链接:点击下载
规划:
节点名称 | IP | 安装组件 |
k8s-master | 192.168.14.101 | docker、etcd、kubelet、kube-proxy、kube-apiserver、kube-controller-manager、kube-scheduler |
k8s-node1 | 192.168.14.102 | docker、etcd、kubelet、kube-proxy |
k8s-node2 | 192.168.14.103 | docker、etcd、kubelet、kube-proxy |
docker私有仓库 | 192.168.14.100 | docker(服务器配置可以低点) |
三台服务器初始化操作
- 部署docker本地私有镜像仓库 (192.168.14.100)
- 上传资源包里面的镜像
- 本地镜像仓库及资源准备完成
二、安装docker(每个节点都要)
- 解压资源包 (docker_绿色免安装版.tar.gz),将docker_inspkg下的所有文件放到 /usr/sbin/目录下
- 修改镜像源地址
- 使用 systemd 管理 docker
- 启动并设置开机启动
三、部署Etcd集群
注:为了节省机器,这里与 K8s 节点机器复用 , 也可以独立于 k8s 集群之外部署,只要 apiserver 能连接到就行
- 准备 cfssl 证书生成工具 , 找任意一台服务器操作,这里用 Master 节点
进入下载下来的资源包路径下,将cfssl_linux-amd64目录中的所有文件复制到 /usr/local/bin/ 下
- 创建Etcd目录并解压二进制包
- 创建配置文件
- 生成自签 CA证书
- 使用自签 CA 签发 Etcd HTTPS 证书
注: 上述文件 hosts 字段中 IP 为所有 etcd 节点的集群内部通信 IP,一个都不能少!为了方便 后期扩容可以多写几个预留的 IP
- 拷贝刚才生成的证书到配置文件中的路径
- systemd 管理 Etcd
- 设置开机启动
- 将上面节点 所有生成的文件拷贝到 另外两个节点
- 分别修改另外两个节点的 etcd.conf 配置文件中的节点名称和当前服务器 IP
- 设置开机启动
- 查看集群状态
如果输出healthy: successfully 等字样, 就说明Etcd集群部署成功 。如果有问题第一步先看日志:/var/log/message
四、部署Master节点
1、部署 kube-apiserver
- 生成 kube-apiserver自签CA证书
- 使用自签 CA 签发 kube-apiserver HTTPS 证书
注:上述文件 hosts 字段中 IP 为所有 Master/LB/VIP IP,一个都不能少!为了方便后期扩容 可以多写几个预留的 IP
- 创建kube-apiserver目录并解压二进制包
- 创建配置文件
- 证书拷贝到配置文件中的路径
1.1、使用 TLS bootstraping 机制来自动颁发客户端证书
TLS Bootstraping:Master apiserver 启用 TLS 认证后,Node 节点 kubelet 和 kube-proxy 要 与 kube-apiserver 进行通信,必须使用 CA 签发的有效证书才可以,当 Node 节点很多时,这 种客户端证书颁发需要大量工作,同样也会增加集群扩展复杂度。为了简化流程,Kubernetes 引入了 TLS bootstraping 机制来自动颁发客户端证书,kubelet 会以一个低权限用户自动向 apiserver 申请证书,kubelet 的证书由 apiserver 动态签署。所以强烈建议在 Node 上使用这 种方式,目前主要用于 kubelet,kube-proxy 还是由我们统一颁发一个证书。
- 创建 token 文件
- systemd 管理 kube-apiserver
- 启动并设置开机启动
1.2、 授权 kubelet-bootstrap 用户允许请求证书
2、 部署 kube-controller-manager
- 创建配置文件
- systemd 管理 kube-controller-manager
- 启动并设置开机启动
3、 部署 kube-scheduler
- 创建配置文件
- systemd 管理 kube-scheduler
- 启动并设置开机启动
- 查看集群状态 , 如下输出说明 Master 节点组件运行正常
- 为master添加禁止调度污点,不让pod调度到master上
五、 部署 Worker节点
- 在所有 worker node 创建工作目录
1、部署 kubelet
- 配置参数文件
- 生成 bootstrap.kubeconfig 文件
- systemd 管理 kubelet
- 启动并设置开机启动
2、部署 kube-proxy
- 配置参数文件 (注意hostnameOverride对应的hostname)
- 生成 kube-proxy 证书 (master节点操作)
- 生成 kube-proxy.kubeconfig 文件
- systemd 管理 kube-proxy
- 启动并设置开机启动
- 批准 kubelet 证书申请并加入集群 (在master上操作)
3、 部署 CNI 网络
- 解压二进制包并移动到默认工作目录
- 修改flannel.yaml
- 应用资源配置文件(资源包路径下yaml目录下的 kube-flannel.yaml )
- 授权 apiserver 访问 kubelet (资源包路径下yaml目录下的 apiserver-to-kubelet-rbac.yaml)
4、新增加 Worker Node
- 拷贝已部署好的 Node 相关文件到新节点
- 删除 kubelet 证书和 kubeconfig 文件
- 修改配置文件主机名
- 启动并设置开机启动
- 批准 kubelet 证书申请并加入集群 (在master上操作)
- 修改节点roles名
六、 部署 Dashboard 和 CoreDNS (在master上操作)
1、部署Dashboard
- 复制woker节点上的kubelet和kube-proxy所有相关文件到master上
- 指定Dashboad的pod只部署到master节点(如果不想指定可忽略这步)
- 默认 Dashboard 只能集群内部访问,修改 Service 为 NodePort 类型,暴露到外部
- 应用资源配置文件,生成pod
- 访问地址:https://NodeIP:30001
- 创建 service account 并绑定默认 cluster-admin 管理员集群角色
2、 部署 CoreDNS
CoreDNS 用于集群内部 Service 名称解析
- 修改资源包路径下yaml目录下的 coredns.yaml
a、修改集群域名
b、 修改coredns 容器资源限制
c、 修改集群使用的dnsip
- 应用资源配置文件coredns.yaml
- DNS解析测试
- 作者:zoehuawang
- 链接:https://www.zoehuawang.eu.org/article/ed6739b9-f936-40bf-a68f-968a933d064c
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章