本文主要介绍了基于Rancher的K8S集群快速搭建,方便中小企业充分利用每台机器的性能,更快捷的部署自己的应用,更简单的水平扩展自己的服务。也包含了Harbor管理Docker本地镜像,整合K8S一套。

1.集群规划

主机

ip

部署环境

s101

192.168.80.101

docker、k8s-all

s102

192.168.80.101

docker、k8s-worker

s103

192.168.80.101

docker、k8s-worker

s201

192.168.80.201

docker、rancher、docker-compose、harbor

2.集群基础环境准备

  • 1.jdk8安装。
  • 2.防火墙问题解决。
  • 3.所有机器可以访问外网。
  • 4.节点时间同步,否则在rencher中安装k8s会报错,可以参考这篇博客解决。
  • 5.全文操作都基于centos7的root用户。

3.docker安装(每个节点)

3.1docker旧版本的卸载

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

3.2docker安装

通过docker官网的安装脚本安装最新的docker,后面的harbor需要比较新版本的docker,否者无法安装。这里可以翻墙操作,否则可能安装失败。

curl -fsSL https://get.docker.com/ | sh

3.3镜像加速

获取阿里云加速地址,在阿里云控制台的容器镜像服务中找到

rancher 配置docker镜像源 rancher docker集群_容器

vi /etc/docker/daemon.json

rancher 配置docker镜像源 rancher docker集群_rancher 配置docker镜像源_02

3.4重启全部docker

systemctl restart docker

4.rancher安装

在s201上执行下面命令

#这里也可以指定对应版本
docker pull rancher/rancher
docker image ls
docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:stable

webUI访问 https://192.168.80.201/

5.k8s安装

5.1使用rancher安装k8s集群

rancher 配置docker镜像源 rancher docker集群_rancher 配置docker镜像源_03


在设置集群名字后点击下一步后来到以下界面选中三个角色后在s101主机上执行,仅仅选择worker在s102和s103上执行。

rancher 配置docker镜像源 rancher docker集群_k8s_04


rancher 配置docker镜像源 rancher docker集群_容器_05


一段时间后可以看到下面界面(由于我这里网络原因等待了30min)。

rancher 配置docker镜像源 rancher docker集群_docker_06

5.2常见问题的解决

  1. 中途可能遇到网络原因下载中断,如果在rancher中出现注册字样说明只需要等待即可,可能持续半小时,可以通过网络监视来判断是否rancher下载。如果一直未不限注册字样,在rancher中复制的命令没有执行完可以crtl+c结束后重新执行。
  2. 要是rancher中有报红可能需要清理docker了,如果docker中有其他服务可以筛选后删除(下面命令亲测过)
docker stop $(docker ps -aq)
docker system prune -f
docker volume rm $(docker volume ls -q)
docker image rm $(docker image ls -q)
rm -rf /etc/ceph \
       /etc/cni \
       /etc/kubernetes \
       /opt/cni \
       /opt/rke \
       /run/secrets/kubernetes.io \
       /run/calico \
       /run/flannel \
       /var/lib/calico \
       /var/lib/etcd \
       /var/lib/cni \
       /var/lib/kubelet \
       /var/lib/rancher/rke/log \
       /var/log/containers \
       /var/log/pods \
       /var/run/calico

6.harbor安装

6.1下载离线安装包

  • Harbor的官方仓库 可能需要翻墙
  • docker-compose官方仓库
  • harbor版本1.10.4
  • docker-compose版本1.26.2
  • docker版本19.03.12

6.2配置docker-compose

把下载好的docker-compose直接放在解压后的harbor的HOME下即配置完成

6.3配置harbor.yml

只需要修改下面三点

rancher 配置docker镜像源 rancher docker集群_容器_07

6.4安装

#准备环境
./prepare 

#安装harbor
./install.sh

rancher 配置docker镜像源 rancher docker集群_rancher 配置docker镜像源_08

安装成功,重启即可

关闭Harbor 
./docker-compose down

启动Harbor 
./docker-compose up -d

6.5访问webUI

192.168.80.201:88

账号密码默认是
admin
Harbor12345

7.k8s集成harbor

7.1docker中配置私有仓库harbor的授权(4台全部配置)

vim /etc/docker/daemon.json

{
"registry-mirrors": [
        "https://tgh5c2qz.mirror.aliyuncs.com",
        "https://hub-mirror.c.163.com"
        ],
"insecure-registries": [
    "192.168.80.201:88"
        ]
}

7.2重启全部节点的Docker

systemctl restart docker

rancher 配置docker镜像源 rancher docker集群_容器_09


执行以下命令

kubectl create secret docker-registry registry-secret --namespace=default  \
--docker-server=http://192.168.80.201:88 \
--docker-username=admin \
--docker-password=Harbor12345

其他有关命令

kubectl get secret
kubectl delete secret registry-secret

8.Dockerfile制作镜像推送到harbor

8.1下载java基础镜像

docker pull frolvlad/alpine-oraclejdk8
vim Dockerfile

FROM frolvlad/alpine-oraclejdk8
ADD common-0.1.jar common-0.1.jar
ADD data_dispose-0.1.jar data_dispose-0.1.jar
ENTRYPOINT ["/bin/sh", "-c", "java $JAVA_OPTS -jar /data_dispose-0.1.jar"]

k8s-1.0-SNAPSHOT.jar放在Dockerfile所在目录下
执行得到demo:latest本地镜像

在rancher中新建一个项目

rancher 配置docker镜像源 rancher docker集群_linux_10

docker build -t demo:latest .
本地打包的镜像修改成一个符合 harbor格式的镜像名,之后上传这个镜像。
docker tag demo:latest 192.168.80.201:88/dmr/demo:v1.0
docker login --username=admin http://192.168.80.201:88
docker push 192.168.80.201:88/dmr/demo:v1.0

当然这里也可以利用Maven直接打包到Harbor上

9.rencher操作k8s拉取镜像并运行

指定镜像地址和服务名字

rancher 配置docker镜像源 rancher docker集群_rancher 配置docker镜像源_11


大约1s后可能就会部署成功便成Active状态

rancher 配置docker镜像源 rancher docker集群_docker_12

至此,Rancher管理K8s的一套搭建完成。可以简单的理解为Rancher是一个可以简单的搭建,管理,监控K8s的服务,而Harbor只是一个私有的镜像仓库而已。


总结

随着当前工艺水平越来越高,集成化的程度越来越好,单台机器的资源越来越充足,资源利用不充分是必然的结果。合理的管理这些硬件资源,虚拟化,容器化技术可以理解为最佳方案。K8s强大而稳定的资源编排能力被各大公司广泛应用。但是要想直接使用k8s还是要有一定的运维能力,而Rancher这个开源的企业级容器管理平台中有丰富组件,大大简化了容器化的过程,部署一套K8s的集群仅仅需要几分钟,可视化部署,监控,管理大大简化了开发,每个人都可以在几分钟内上手。

技术有限,文章有误还望批评指正,欢迎大家留言讨论