Kubernetes-基于Rancher进行Kubernetes的离线安装

1、环境准备

在进行Kubernetes部署之前,需要提供其要求的软硬件环境。此文档描述的场景:在无法直接连接互联网的情况下,如何进行安装部署Kubernetes。

1.1 操作系统

操作系统推荐使用:

  • Ubuntu 16.04 (64-bit)
  • Red Hat Enterprise Linux 7.5 (64-bit)
序号 主机 角色 软硬件环境 硬件配置 备注
1 k8s-master 主节点
  • 操作系统:CentOS Linux release 7.2.1511 (Core)
  • 容器环境:Docker version 1.13.1
  • CPU:8核
  • 内存:8GB
  • 磁盘:
    • 根磁盘:500GB
    • 所有磁盘:1TB
部署Kunbernetes集群主节点和etcd,用于管理和监控Kubernetes其它的工作节点和存在状态信息。
2 k8s-worker01 工作节点
  • 操作系统:CentOS Linux release 7.2.1511 (Core)
  • 容器环境:Docker version 1.13.1
  • CPU:8核
  • 内存:8GB
  • 磁盘:
    • 根磁盘:500GB
    • 所有磁盘:1TB
部署Kubernetes集群的工作节点,用于运行容器化的应用。
3 k8s-worker02 工作节点
  • 操作系统:CentOS Linux release 7.2.1511 (Core)
  • 容器环境:Docker version 1.13.1
  • CPU:8核
  • 内存:8GB
  • 磁盘:
    • 根磁盘:500GB
    • 所有磁盘:1TB
部署Kubernetes集群的工作节点,用于运行容器化的应用。
4 k8s-worker03 工作节点
  • 操作系统:CentOS Linux release 7.2.1511 (Core)
  • 容器环境:Docker version 1.13.1
  • CPU:8核
  • 内存:8GB
  • 磁盘:
    • 根磁盘:500GB
    • 所有磁盘:1TB
部署Kubernetes集群的工作节点,用于运行容器化的应用。
5 nfs-server NFS服务器
  • 操作系统:CentOS Linux release 7.2.1511 (Core)
  • NFS:nfs v4
  • CPU:8核
  • 内存:8GB
  • 磁盘:
    • 根磁盘:1TB
    • 所有磁盘:2TB
部署nfs服务,用于为上层所有的应用提供持久化存储。
6 registry-server 私有镜像仓库
  • 操作系统:CentOS Linux release 7.2.1511 (Core)
  • 容器环境:Docker version 1.13.1
  • 镜像仓库:sonatype/nexus3
  • CPU:8核
  • 内存:8GB
  • 磁盘:
    • 根磁盘:1TB
    • 所有磁盘:2TB
部署镜像仓库,用于提供镜像的存储和拉取。
7 kubectl/helm 工具节点
  • 操作系统:Windows
  • 命令行工具:kubectl
  • 包安装工具:helm
  • CPU:8核
  • 内存:8GB
  • 磁盘:500GB
8 public 下载资源
  • 操作系统:CentOS Linux release 7.2.1511 (Core)
  • 容器环境:Docker version 1.13.1
  • CPU:8核
  • 内存:8GB
  • 磁盘:
    • 根磁盘:500GB
    • 所有磁盘:1TB

1.2 设置防火墙策略

需要开放如下的端口:

协议 端口 描述
TCP 80 Rancher UI/API when external SSL termination is used
TCP 443 Rancher agent, Rancher UI/API, kubectl
TCP 6443 Kubernetes apiserver
TCP 22 SSH provisioning of nodes using Node Driver
TCP 2379 etcd client requests
TCP 2380 etcd peer communication
UDP 8472 Canal/Flannel VXLAN overlay networking
TCP 10250 kubelet
TCP/UDP 30000-32767 NodePort port range
TCP 8081 Nexus Port
TCP 5001 Registry Port

如果是刚开始试用,可以先关闭防火墙:

$ systemctl stop firewalld

Ubuntu默认未启用UFW防火墙,无需设置。也可手工关闭:

$ sudo ufw disable

1.3 环境清理(可选)

1)请检查有没有/var/lib/rancher/state/这个文件夹,如果有则删除;

2)如果以前有通过Rancher安装过kubernetes,请执行命令:

#删除正在运行的容器

$ docker rm -f -v $(docker ps -aq)

# 删除存储卷

$ docker volume rm $(docker volume ls)

#删除遗留的目录

$ rm -rf /etc/kubernetes/ssl
$ rm -rf /var/lib/etcd
$ rm -rf /etc/cni
$ rm -rf /opt/cni
$ rm -rf /var/run/calico

2、安装介质下载和准备

1)docker

下载docker的安装文件docker-engine-1.12.6-1.el7.centos.x86_64.rpm和docker-engine-selinux-1.12.6-1.el7.centos.noarch.rpm:

$ wget https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.6-1.el7.centos.x86_64.rpm
$ wget https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.12.6-1.el7.centos.noarch.rpm

2)私有镜像仓库

下载nexus3的镜像,后续将以nexus3作为私有镜像仓库:

$ docker pull sonatype/nexus3:latest
$ docker save sonatype/nexus3:latest > nexus3.tar

3)rancher镜像

下载拉取镜像的脚本:rancher-save-images.sh和上传镜像至镜像仓库的脚本:rancher-load-images.sh

$ wget https://github.com/rancher/rancher/releases/tag/v2.0.0/rancher-save-images.sh
$ wget https://github.com/rancher/rancher/releases/tag/v2.0.0/rancher-load-images.sh

通过执行rancher-save-images.sh拉取镜像:

$ . rancher-save-images.sh

此脚本用以下载部署时所需的所有镜像,并将这些镜像压缩到rancher-images.tar.gz中。

4)kubectl

下载在windows下使用的kubectl工具:

$ wget https://storage.googleapis.com/kubernetes-release/release/v1.9.0/bin/windows/amd64/kubectl.exe

5)helm

下载helm客户端,此处下载的是Windows下的2.8.0版本:

$ wget https://storage.googleapis.com/kubernetes-helm/helm-v2.8.0-windows-amd64.tar.gz

下载helm服务端tiller,此处下载的是Windows下的2.8.0版本:

$ docker pull rancher/tiller:v2.8.2 
$ docker save rancher/tiller:v2.8.2 > tiller.tar

 

3、Docker

Kubernetes1.8需要Docker 1.12.6、1.13.1、17.03;Kubernetes1.8不支持更高版本的Docker。

3.1 Docker安装

将下载的docker-engine-1.12.6-1.el7.centos.x86_64.rpm和docker-engine-selinux-1.12.6-1.el7.centos.noarch.rpm拷贝至各台需要安装Docker的机器上,通过yum localinstall命令进行安装:

$ yum localinstall -y docker-engine-1.12.6-1.el7.centos.x86_64.rpm docker-engine-selinux-1.12.6-1.el7.centos.noarch.rpm

3.2 设置根目录(可选)

在docker安装成功后,通过执行如下的命令可以查看docker的信息:

$ docker info

默认情况,docker的根目录为/var/lib/docker,它将会占据大量的磁盘空间。因此需要预先为其提供足够的磁盘空间,此处为其挂接一块专用的磁盘。假设这里存在一个新增的/dev/vdc磁盘。

1)创建新的专用的根目录:

$ mkdir /docker-root

2)将磁盘挂接至新的根目录

$ mount /dev/vdc /docker-root

3)设置挂接永久有效

$ echo “/dev/vdc  /docker-root  ext4   defaults  0 0”  >  /etc/fstab

4)将docker设置为使用新的根目录

$ vi /etc/docker/daemon.json

添加:”graph": "/docker-root"

{
"graph":"/docker-root"
}

5)重启docker

$ systemctl daemon-reload
$ systemctl restart docker

4、提供网络存储(可选)

此处以nfs中文网络存储。

4.1 配置共享目录

在nfs服务器中为客户端配置共享目录:

# 创建共享根目录
$ mkdir /nfs-share
# 创建私有镜像仓库目录
$ mkdir /nfs-share/docker-registry
$ echo "/nfs-share *(rw,async,no_root_squash)" >> /etc/exports

通过执行如下命令是配置生效:

$exportfs -r

4.2 启动服务

1)由于必须先启动rpcbind服务,再启动nfs服务,这样才能让nfs服务在rpcbind服务上注册成功:

$ systemctl start rpcbind

2)启动nfs服务:

$ systemctl start nfs-server

3)设置rpcbind和nfs-server开机启动:

$ systemctl enable rpcbind
$ systemctl enable nfs-server

4.3 检查nfs服务是否正常启动

$ showmount -e localhost
$ mount -t nfs 127.0.0.1:/data /mnt

5、安装私有镜像仓库

1)导入镜像

复制nexus.tar文件到需要安装镜像仓库的机器,并通过docker load命令导入镜像:

$ docker load < nexus.tar

2)设置存储目录

创建持久化目录,并挂接nfs的共享目录:

$ mkdir /mnt/nexus-data && chmod 777 /mnt/nexus-data
$ mount -t nfs {nfs-server}:/nfs-share/docker-registry /mnt/nexus-data

3)运行私有镜像仓库

运行nexus3容器,并8081端口和5001端口,5001端口为docker私有镜像仓库的对外端口:

$ docker run -d -p 8081:8081 -p 5001:5001 -v /mnt/nexus-data:/nexus-data --name nexus sonatype/nexus3

4)创建docker镜像仓库

在nexus3中创建一个名称为docker的镜像仓库,端口为5001。

6 安装部署

拷贝tiller.tar、rancher-images.tar.gz和rancher-load-images.sh到安装rancher服务的机器上。

1)上传rancher相关镜像至私有镜像仓库

执行rancher-load-images.sh:

$ . rancher-load-images.sh

系统会导入所有的镜像,并将其打上私有镜像仓库的标签,并上传至私有镜像仓库。

2)上传tiller镜像至私有镜像仓库

# 导入tiller镜像
$ docker load < tiller.tar
# 将tiller打上私有镜像的标签
$ docker tag rancher/tiller:v2.8.2 {registry-ip}/rancher/tiller:v2.8.2
# 上传至私有镜像仓库
$ docker push 10.10.30.190:5001/rancher/tiller:v2.8.2

6.1 安装rancher服务

通过执行docker run的命令,进行rancher服务的安装:

$ sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 {registry-ip}/rancher/rancher:2.0.0

6.2 创建集群

6.2.1 登录系统

1)登录rancher

在rancher服务正常启动后,通过浏览器访问rancher。

2)设置管理员密码

在此次登录时,根据提示设置管理员的密码。

3)设置访问地址

在设置好管理员的密码后,设置rancher的对外访问地址。

4)设置私有镜像仓库

将system-default-registry设置为本文前面创建的私有镜像仓库,此处为10.10.30.190:5001。

6.2.2 创建集群

进入rancher后,创建名称为demo的custom类型集群。

6.3 添加节点

6.3.1 添加Master和etcd

在添加创建集群的页面,选择node角色为“etcd”和“control”,即添加的为Master和etcd节点:

并在集群上执行如下的命令,以将机器添加到集群中作为Master和etcd节点。

$ sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes \
-v /var/run:/var/run {registry-ip}/rancher/rancher-agent:v2.0.0 --server https://10.0.32.172 \
--token pn7g52q7htck8s5pgmpdvbsq2lrplw8cxnvhjm4rp5kvf2k9ntx7tt \
--ca-checksum d8be0a0b9f16c3238836e23b338630ab0c737051ceb14ccc35afd13c2898369a --etcd --controlplane

6.3 添加worker

在添加创建集群的页面,选择node角色为“worker”,即添加的为Worker节点:

并在集群上执行如下的命令,以将机器添加到集群中作为Worker节点。

$ sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes \
-v /var/run:/var/run {registry-ip}/rancher/rancher-agent:v2.0.0 --server https://10.0.32.172 \
--token pn7g52q7htck8s5pgmpdvbsq2lrplw8cxnvhjm4rp5kvf2k9ntx7tt \
--ca-checksum d8be0a0b9f16c3238836e23b338630ab0c737051ceb14ccc35afd13c2898369a --worker

7 安装kubectl

此处的kubectl安装在Windows操作系统中:

1)安装部署kubectl

拷贝kubectl,并将kubectl.exe所在的地址添加至Windows的环境变量的Path中。

2)配置kubeconfig文件

在当前用户的目录下,创建./kube文件夹,并创建config文件。

rancher系统中,进入所创建的集群的主页,通过点击“Kube config File”进入kubeconfig信息页面。并将kubeconfig文件的内容拷贝到~/.kube/config中。

3)验证

通过执行如下的命令,验证kubectl配置是否成功:

$ kubectl get nodes

8 安装helm

此处的kubectl安装在Windows操作系统中,并与kubectl处于同一台机器:

8.1 安装Helm客户端

拷贝helm-v2.8.0-windows-amd64.tar.gz,并将其解压缩到本地,并将helm.exe所在的地址添加至Windows的环境变量的Path中。

 

8.2 安装Tiller服务器

1)创建一个名为tiller的Service Account

$ kubectl create serviceaccount tiller --namespace kube-system

2)授予名为tiller的Service Account集群管理员角色cluster-admin:

将tiller绑定至集群管理员角色的的yaml文件如下所示:

apiVersion: rbac.authorization.k8s.io/v1beta1 
kind: ClusterRoleBinding 
metadata: 
  name: tiller 
roleRef: 
  apiGroup: rbac.authorization.k8s.io 
  kind: ClusterRole 
  name: cluster-admin 
subjects: 
- kind: ServiceAccount 
  name: tiller 
  namespace: kube-system

通过执行kubectl create -f将授予tiller集群管理员角色:

$ kubectl create -f rbac-config.yaml

3)安装Tiller服务器

由于是离线安装,先启动本地的chart仓库:

$ helm serve

通过helm init命令在Kubernetes集群中安装Tiller服务器端,在这里通过–service-account字段设置访问用户为tiller,通过–stable-repo-url字段设置所使用的仓库为本地仓库,通过–tiller-image字段指定使用私有镜像仓库中的tiller:v2.8.2镜像。

$ helm init --service-account=tiller --stable-repo-url=http://127.0.0.1:8879 \
-–tiller-image={registry-ip}/rancher/tiller:v2.8.2

8.3 验证安装

在安装完成后,可以通过执行如下命令来检查是安装成功:

$ helm version

如果正确显示Helm客户端和Tiller服务器的版本,这表示安装成功。

或者通过执行kubectl的如下命令来查看是否已正常按照Tiller服务器:

$ kubectl get pods -n kube-system

参考资料

1.《Single Node Installation》地址:https://rancher.com/docs/rancher/v2.x/en/installation/single-node-install

2.《Quick Start Guide》地址:https://rancher.com/docs/rancher/v2.x/en/quick-start-guide/

3. 《Installation》地址:https://rancher.com/docs/rancher/v2.x/en/installation/

作者简介:
季向远,北京神舟航天软件技术有限公司产品经理。本文版权归原作者所有。

微信公众号:ik8s

K8S中文社区微信公众号

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址