文档章节

快速建立Kubernetes集群,从零开始

openthings
 openthings
发布于 2018/10/05 11:12
字数 2122
阅读 330
收藏 0

入坑靠师傅,出坑靠自己!

CI/CD是大规模数据中心不可缺少的基础设施,也是构建集群化系统的第一步。

这里介绍如何从零开始基于Kubernetes建立CI/CD集群,以满足软件企业和数据中心的软件开发和部署的需要。

我们先建立一个“母机”,安装的软件包括:

  1. MAAS 装机服务,通过网络启动进行裸机操作系统安装。
    • 需要联机时将操作系统镜像提前同步下来,或者直接拷贝到目录里面去。
    • 或者建立自己的mirror(参见 Select and Import Images
  2. ownCloud 自建云盘,用于安装过程中各种文件的下载,包括Kubernetes的容器镜像离线包。
    • 预先上传*.iso、etcher等启动盘制作工具。
  3. apt mirror 镜像服务,提供各个节点apt安装时需要用的软件包,定期从archive.ubuntu.com更新。
    • 以及使用cron/kubernetes cronjob/rsync等定期同步,nginx/apache提供服务。
  4. IPFS 传输系统,用于快速传输、下载大的软件包,如容器镜像、大型数据文件等等。
    • 以及使用bt/aria/rsync传输和同步目录。
  5. Harbor 容器镜像服务,各个节点部署容器时直接从这里获取,避免从互联网拉取镜像耗费时间。
    • 可以使用docker save/load来直接复制images文件,docker export/import复制container文件。
  6. Kubernetes Master,集群主控机,可以通过上面ownCloud下载离线包快速安装。
  7. ansible工具,用于远程操作节点主机,进行软件安装和版本更新。
  8. qTox,即时通讯,用于各个节点间传输配置参数、软件包等等。

有了上面的八样神器,都配置在“母机上”,基本上可以解决Kubernetes集群部署中的任何问题。

一、创建操作主机

操作主机是我们建立集群的原点。

需要创建一个启动U盘,然后通过U盘启动计算机,安装Ubuntu操作系统。

  1. 下载 Ubuntu Desktop 18.04.01 LTS的ISO镜像。
  2. Ubuntu的启动U盘制作。可以使用Ubuntu自带的启动盘制作工具,Unetboot或者Etcher来制作。
  3. U盘启动,初始主机安装Ubuntu。
    • 插入制作好的启动U盘。
    • 开机时,按住del或者F2/F8(根据主板不同),设置启动盘为USB。
    • 启动后,按照正常程序安装Ubuntu操作系统。

二、创建集群主机

创建集群的多个个节点的初始系统有几种方法:

  • 定制U盘。
    • 使用U盘启动,自动化安装,然后使用cloud-init来初始化系统。
  • 系统盘克隆。优点是速度快。
    • 先使用一个机器装好,然后把系统盘克隆很多份,装到其它的机器上。
    • 这样系统网卡的MAC地址和IP地址是一样的,直接启动后无法访问网络。
    • 需要在启动后立即修改MAC地址和IP地址,并连接到中心服务器更新系统和参数。
  • 网络启动,安装系统。
    • 可以使用KickStart、Cobbler或者Ubuntu的MAAS系统,原理和内核基本是一样的。
    • 但是不同的版本兼容性不大一样,有的版本会有些坑,需要源码做些修改。

1、网络装机,MAAS安装、配置、启用。

MAAS是Canonical为Ubuntu开发的一个集中化装机系统,可以通过WebUI安装基础操作系统到多个节点上,然后通过cloud-init来初始化系统的配置。下一步,我们可以通过ansible来控制各个节点。

2、安装Ansible,操作、配置多个节点。

Amsible可以集中地控制多个节点,批量地执行ssh命令。

3、容器引擎,安装Docker CE。

  • 设置apt的proxy参数:

$ nano /etc/apt/apt.conf
Acquire::http::Proxy "http://192.168.199.99:9999";
Acquire::https::Proxy "http://192.168.199.99:9999";
  • 添加key:
https_proxy=192.168.199.99:9999 wget https://download.docker.com/linux/ubuntu/gpg -O docker.key
sudo apt-key add docker.key
  • 添加安装源:
sudo echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic edge" > /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install docker-ce
  • 确保kubelet使用的cgroup driver 与 Docker的一致。要么使用下面的方法更新 Docker:
cat << EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
  • 然后重启Docker服务,运行:
sudo systemctl daemon-reload
sudo systemctl restart docker

三、安装Kubernetes集群主节点

1、安装集群管理服务,设置版本锁定。

首先,安装Kubeadm、Kubectl、Kubelet基础工具和服务。

  • 添加安装源的key:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 6A030B21BA07F4FB
  • 添加安装源:
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
  • 安装Kubernetes 1.11.3:
sudo apt update
sudo apt install kubeadm=1.11.3-00 kubectl=1.11.3-00 kubelet=1.11.3-00
sudo echo "kubeadm hold" | sudo dpkg --set-selections
sudo echo "kubectl hold" | sudo dpkg --set-selections
sudo echo "kubelet hold" | sudo dpkg --set-selections

然后,就可以安装Kubernetes容器集群管理系统了。

2、系统工具,网络、管理面板与应用管理

  • 容器网络,Flannel安装。提供容器集群内部的虚拟化网络支持,容器网络的隔离和互通。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#启用主控机同时作为工作节点
kubectl taint nodes --all node-role.kubernetes.io/master-
  • 应用管理,Helm安装。
  • 系统面板,Dashboard安装。
  • 负载均衡,MetalLB,对外服务IP地址分配。
  • 服务入口,Ingress安装。

3、基础服务,网络存储、Ubuntu镜像服务

A、为了让集群中所有节点都可以访问同一个存储设备,需要配置网络存储,可以使用NFS/Ceph/Gluster或其它的存储系统(如SAN/iSCSI等)。对于小型的系统,这里使用NFS。

B、多个节点都需要访问apt安装源来更新系统软件包,将带来较大的并发网络流量并拖慢安装的速度。通过建立局域网络的apt镜像,为网内所有节点提供缓存的apt安装源,全部镜像下来需要1个多T的磁盘空间。我将其做成为一个Kubernetes的定期任务来执行,然后在Kubernetes中创建apt mirror服务,存储使用NFS服务。以后,考虑使用IPFS来建立apt mirror站点,提供更快、全球规模的加速服务。

4、持续交付,源码管理、构建工具、容器仓库

这里建立一个最小的集合,包括GitLab源码管理系统、Jenkins X持续交付系统、Harbor镜像存储系统。

  • GitLab,使用Git进行版本管理和源码仓库存储,可以与Github.com/oschina.net等交换代码库。
  • Jenkins X,支持基于流程的代码构建,并推送到容器镜像仓库,供Kubernetes部署时使用。
  • Harbor,容器镜像服务用于建立本地的镜像仓库,是Kubernetes部署的必备服务。
    • 最新的Harbor包含有一个Helm Chart仓库管理模块。
    • 也可以使用其它的方式(如Github.com)来管理Helm Charts。

更多的参考:

© 著作权归作者所有

openthings
粉丝 322
博文 1138
码字总数 687611
作品 1
东城
架构师
私信 提问
多网卡Ubuntu服务器安装Kubernetes

多网卡服务器安装Kubernetes如何指定集群选用的IP地址呢? 指定--apiserver-advertise-address参数即可。如下: 可以指定多端口聚合的网址,参考: NetPlan: https://netplan.io/examples U...

openthings
2018/11/25
207
0
Kubernetes 1.13.0的快速升级

Kubernetes 1.13.0已经正式发布,快速升级(含国内镜像快速下载链接)包括升级kubeadm/kubectl/kubelet版本、拉取镜像、升级Kubernetes集群三个主要步骤。 注意: Kubernetes 1.13.0使用ETCDC...

openthings
2018/12/10
399
0
Kubernetes 1.13.3快速升级

是的,老外没有过春节,Kubernetes 1.13.3已经正式发布,快速升级(含国内镜像快速下载链接)包括升级kubeadm/kubectl/kubelet版本、拉取镜像、升级Kubernetes集群三个主要步骤。注意Kuberne...

openthings
02/10
294
0
Kubernetes 1.12.3快速升级

Kubernetes 1.12.3已经正式发布,快速升级(含国内镜像快速下载链接)包括升级kubeadm/kubectl/kubelet版本、拉取镜像、升级Kubernetes集群三个主要步骤。注意Kubernetes 1.12.3版本暂时不支...

openthings
2018/11/25
408
0
Kubernetes 1.13.1快速升级

Kubernetes 1.13.1已经正式发布,快速升级(含国内镜像快速下载链接)包括升级kubeadm/kubectl/kubelet版本、拉取镜像、升级Kubernetes集群三个主要步骤。注意Kubernetes 1.12.3版本暂时不支...

openthings
2018/12/14
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot 操作ActiveMQ

一、消息队列中间件介绍 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的...

zw965
29分钟前
4
0
本地化存储Storage

为什么会引入Storage(sessionStorage,localStorage,globalStorage) Web storage的目的是克服由cookie带来的限制,当数据需要严格控制在客户端上时,无须持续将数据发回服务器。主要是提供一...

五公里
38分钟前
8
0
Qt编写自定义控件57-直方波形图

一、前言 直方波形图控件非原创控件,控件大全中大概有20-30个控件非自己原创,而是参考了网上开源的代码,自己加以整理和完善,新增了插件的代码使得可以直接集成到QtDesigner或者QtCreator...

飞扬青云
38分钟前
4
0
或许你不知道的10条SQL技巧

这几天在写索引,想到一些有意思的TIPS,希望大家有收获。 一、一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不...

mskk
44分钟前
7
0
IntelliJ IDEA (Mac) 运行速度优化(JVM+localhost)

1.1. JVM 参数配置 打开 idea,菜单 –> help –> edit custom vm options,调整参数,重启即可。 具体调整参数: -Xms2g -Xmx2g -XX:ReservedCodeCacheSize=1024m -XX:+UseCompressedOops 1......

指尖Coding
53分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部