本文是介绍 kubernetes-operator 开发的第三篇,前几篇已经提到过 kubernetes-operator 的主要目标是实现以下三种场景中的集群管理:
- kube-on-kube
- kube-to-kube
- kube-to-cloud-kube
目前笔者主要在开发 kube-to-kube,这一节会介绍 kube-to-kube 中如何使用二进制方式部署一个集群,问什么要先支持部署二进制集群呢,可以参考之前的文章。目前 kubernetes-operator 中部署集群是通过 ansible 调用笔者写的一些脚本部署的,由于 kubernetes 二进制文件比较大,暂时仅支持离线部署,部署前请下载好所需的二进制文件,笔者也提供了部署 v1.14 需要的所有二进制文件、镜像、yaml 等。
二进制安装 kubernetes 最困难的地方就在于其复杂的认证(Authentication)及鉴权(Authorization)机制,上篇文章已经介绍了 kubernetes 中的认证与鉴权机制以及其中的证书链,若安装过程中有疑问请参考 浅析 kubernetes 的认证与鉴权机制。
使用 kubernetes-operator 管理集群时首选需要有一个元集群,元集群可以使用 minkube 或者 kind 部署一个单机版集群,然后将 kubernetes-operator 部署到该集群中再通过创建 CR 来部署一个业务集群,最后使用该业务集群作为元集群即可,或者也可以使用 kubernetes-operator 中部署业务集群的方式来部署元集群。
部署集群前请先克隆 https://github.com/gosoon/kubernetes-operator 和 https://github.com/gosoon/kubernetes-utils 项目,部署集群所需要的一些工具、配置以及 bin 文件都存放在这两个项目中,你也可以使用自己的配置。
准备环境
禁用防火墙:
1 | $ systemctl stop firewalld |
禁用 SELinux:
1 | $ setenforce 0 |
关闭 swap:
1 | swapoff -a |
修改内核参数:
1 | cat <<EOF > /etc/sysctl.d/k8s.conf |
配置 CA 及创建 TLS 证书
安装证书生成工具,本文使用 cfssl
1 | $ cp kubernetes-utils/scripts/bin/certs/* /usr/bin/ |
etcd
1 | $ cat << EOF > etcd-root-ca-csr.json |
1 | $ cfssl gencert --initca=true etcd-root-ca-csr.json | cfssljson -bare output/ca |
生成证书后反解 etcd server 和 peer 证书校验 ip 是否正确:
1 | $ cfssl certinfo -cert etcd-peer.pem |
master
由于 master 组件的 CSR 配置与 kubernetes 中的认证与鉴权相关联,需要严格按照 kubernetes 中默认的 RBAC 进行配置,每个组件都有默认的 user 或者 group。
1 | $ cat << EOF > ca-csr.json |
生成 kubeconfig
1 | // 替换 apiserver |
部署
部署 etcd
拷贝证书文件:
1 | $ cp output/* /etc/etcd/ssl/ |
拷贝 bin 文件:
1 | $ cp kubernetes-utils/scripts/bin/etcd_v3.3.13/* /usr/bin/ |
拷贝配置文件,配置文件中的 ip 需要手动替换掉:
1 | $ cp kubernetes-operator/scripts/config/etcd/etcd.conf /etc/etcd/ |
部署 k8s master 组件
拷贝证书文件:
1 | $ cp output/* /etc/kubernetes/ssl/ |
拷贝 bin 文件:
1 | $ cp kubernetes-utils/scripts/bin/kubernetes_v1.14.0/* /usr/bin/ |
拷贝配置文件,配置文件中的 ip 需要手动替换掉:
1 | $ cp kubernetes-operator/scripts/config/master/* /etc/kubernetes/ |
部署 k8s node 组件
部署 docker,拷贝 bin 文件:
1 | $ cp kubernetes-utils/scripts/bin/docker-ce-18.06.1.ce/* /usr/bin/ |
拷贝证书文件:
1 | $ cp output/* /etc/kubernetes/ssl/ |
拷贝配置文件,配置文件中的 ip 需要手动替换掉:
1 | $ cp kubernetes-operator/scripts/config/node/* /etc/kubernetes/ |
创建 systemd 文件
拷贝所有服务的 systemd 文件:
拷贝配置文件,配置文件中的 ip 需要手动替换掉:
1 | $ cp kubernetes-operator/scripts/systemd/* /usr/lib/systemd/system/ |
启动服务
首先启动 etcd 服务,etcd 所部署的几个节点需要同时启动,否则服务会启动失败。
然后依次启动 master 上的组件和 node 上的组件。
总结
本文主要讲述了 kubernetes-operator 中 kube-to-kube 部署集群的方式,介绍了主要的部署步骤,文中部署集群所有的操作都提供了脚本的方式:https://github.com/gosoon/kubernetes-operator/tree/master/scripts。 kube-to-kube 的部署方式暂时是以 ansible + 自定义脚本的方式部署,部署方式也在持续更新与完善中。接下来会继续开发 kube-on-kube 的部署方式,kube-on-kube 会将业务集群的 master 组件部署在元集群中,kube-on-kube 方式暂时会采用对 kubeadm 封装的形式进行部署。