1、环境准备
在进行Kubernetes部署之前,需要提供其要求的软硬件环境。此文档描述的场景:在无法直接连接互联网的情况下,如何进行安装部署Kubernetes。
1.1 操作系统
操作系统推荐使用:
- Ubuntu 16.04 (64-bit)
- Red Hat Enterprise Linux 7.5 (64-bit)
序号 | 主机 | 角色 | 软硬件环境 | 硬件配置 | 备注 |
---|---|---|---|---|---|
1 | k8s-master | 主节点 |
|
|
部署Kunbernetes集群主节点和etcd,用于管理和监控Kubernetes其它的工作节点和存在状态信息。 |
2 | k8s-worker01 | 工作节点 |
|
|
部署Kubernetes集群的工作节点,用于运行容器化的应用。 |
3 | k8s-worker02 | 工作节点 |
|
|
部署Kubernetes集群的工作节点,用于运行容器化的应用。 |
4 | k8s-worker03 | 工作节点 |
|
|
部署Kubernetes集群的工作节点,用于运行容器化的应用。 |
5 | nfs-server | NFS服务器 |
|
|
部署nfs服务,用于为上层所有的应用提供持久化存储。 |
6 | registry-server | 私有镜像仓库 |
|
|
部署镜像仓库,用于提供镜像的存储和拉取。 |
7 | kubectl/helm | 工具节点 |
|
|
|
8 | public | 下载资源 |
|
|
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/