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。
Kubernetes-基于Rancher进行Kubernetes的离线安装
文章图片
6.2.2 创建集群
进入rancher后,创建名称为demo的custom类型集群。
6.3 添加节点 6.3.1 添加Master和etcd
在添加创建集群的页面,选择node角色为“etcd”和“control”,即添加的为Master和etcd节点:
Kubernetes-基于Rancher进行Kubernetes的离线安装
文章图片


并在集群上执行如下的命令,以将机器添加到集群中作为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节点:
Kubernetes-基于Rancher进行Kubernetes的离线安装
文章图片
并在集群上执行如下的命令,以将机器添加到集群中作为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中。
Kubernetes-基于Rancher进行Kubernetes的离线安装
文章图片
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/
【Kubernetes-基于Rancher进行Kubernetes的离线安装】本文转自中文社区-Kubernetes-基于Rancher进行Kubernetes的离线安装

    推荐阅读