介绍
介绍
前面我们学会了使用docker-compose部署一整套网站运行环境,在大部分场景下docker-compose完全可以应付各种运维需求了,基本上只要是在一台服务器可以满足的情况下都可以用docker-compose搞定!
那么问题来了,如果是多台服务器的情况下用什么软件来做运维管理呢?相信很多朋友已经想到了,没错,就是主流服务器集群方案——kubernetes(k8s)。k8s可以实现将多台服务器连接成一个服务器的集群环境,通过k8s可以在服务器集群里面部署我们的服务。不仅如此,k8s还提供了各种辅助功能,可以实现更加安全可靠的服务运行环境。
rancher是一套通过docker方式搭建k8s服务器集群环境的解决方案,rancher/rancher是一个管理平台,可以界面化地管理k8s的各个节点、各种服务!rancher/rancher-agent是配置k8s节点的,包括etcd、apiserver、kubelet等等的k8s需要的服务都可以通过rancher/rancher-agent安装起来!
今天福哥就带着大家一起学习如何使用rancher搭建一个k8s服务器集群环境~
注意:以下的教程里面需要在服务器上面操作的都是在TFCentOS7x64服务器上执行,除非有特别说明的才会去TFCentOS7x64Node1上执行!
环境
镜像版本 | rancher/rancher:v2.5.17-rc4 |
操作系统 | CentOS 7 x86_64 2009 |
服务器 | TFCentOS7x64、TFCentOS7x64Node1 |
IP | 192.168.168.68、192.168.168.69 |
端口 | 9443 |
安装
TFCentOS7x64Node1
创建虚拟机
k8s架构需要至少一个节点,这个节点服务器最好是干净的空系统,因为整个服务器的CPU、内存资源都会被k8s直接管理。如果我们在这个节点里面安装了其他服务,就会导致k8s管理后台对节点服务器的可用资源的判断出现问题,明明服务器已经没有资源了还是会被k8s管理后台分配负载。
所以福哥又重新搭建了一个CentOS7x64的虚拟机TFCentOS7x64Node1,主机名设置为tfcentos7x64node1,IP地址设置为192.168.168.69,大家可以参考前面的课程自己搭建起来!
docker-ce
虚拟机TFCentOS7x64Node1服务器只需要安装一个docker-ce就可以了。
yum -y install yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum -y install docker-ce-18.06.3.ce-3.el7 systemctl start docker systemctl enable docker
关闭防火墙
虚拟机TFCentOS7x64Node1服务器需要把默认的防火墙关闭掉。
systemctl stop firewalld systemctl disable firewalld
配置registry.tongfu.net
在TFCentOS7x64Node1的/etc/hosts里面增加registry.tongfu.net域名的解析记录。
192.168.168.68 registry.tongfu.net
在TFCentOS7x64Node1的/etc/docker/daemon.json里面添加insecure-registries记录。
{ "insecure-registries": [ "registry.tongfu.net:5000" ] }
在TFCentOS7x64Node1里面重启docker服务。
systemctl restart docker
测试registry.tongfu.net
在TFCentOS7x64Node1里再把之前push到私有仓库里的centos:centos7.9.2009镜像给pull下来。
docker pull registry.tongfu.net:5000/centos:centos7.9.2009
镜像
rancher/rancher
福哥选择的是rancher/rancher:v2.5.17-rc4这个基础镜像。
https://hub.docker.com/r/rancher/rancher/tags?page=1&name=v2.5.17-rc4&ordering=-last_updated
现在hub.docker.com依然打不开,大家就选这个版本吧!
在TFCentOS7x64里面拉取镜像rancher/rancher:v2.5.17-rc4并且添加到registry.tongfu.net:5000私有仓库里面。
docker pull rancher/rancher:v2.5.17-rc4 docker tag rancher/rancher:v2.5.17-rc4 registry.tongfu.net:5000/rancher/rancher:v2.5.17-rc4 docker rmi rancher/rancher:v2.5.17-rc4 docker images | grep 'rancher/rancher'
k8s
这个k8s镜像就是kubernetes架构用到的一系列相关功能的镜像了。k8s的镜像非常多,如果我们一个一个的拉取非常麻烦。而且docker官方镜像的速度慢的不行,还经常拉取卡死、拉取失败。
为了解决这个问题,福哥打算把k8s镜像都放到之前搭建的私有镜像仓库registry.tongfu.net:5000里面。福哥写了一个shell脚本用来将官方的镜像拉取下来再推送到私有镜像仓库里面,大家可以拿去使用。
#!/bin/sh # argv # function function _main() { local image=$1 if [ "" = "${image}" ] ; then echo "Usage: imagePTP IMAGE" exit 1 fi myImageTest="`docker images | awk '{printf(\"%s:%s \n\",$1,$2)}' | grep 'registry.tongfu.net:5000/'${image}' '`" if [ "" = "${myImageTest}" ] ; then echo "Pulling image ${image}..." docker pull $image echo "Tag image ${image}..." docker tag $image registry.tongfu.net:5000/$image docker rmi $image fi myImageName="`echo \"${image}\" | sed 's/\([^:]\+\):.*/\1/'`" myImageTag="`echo \"${image}\" | sed 's/[^:]\+:\(.*\)/\1/'`" myImageNameTest="`curl -sS registry.tongfu.net:5000/v2/_catalog | grep '\"'${myImageName}'\"'`" myImageTagTest="`curl -sS registry.tongfu.net:5000/v2/${myImageName}/tags/list | grep '\"'${myImageTag}'\"'`" if [[ "" = "${myImageNameTest}" || "" = "${myImageTagTest}" ]] ; then echo "Pushing image ${image}..." docker push registry.tongfu.net:5000/$image fi } # main _main "$@"
这是k8s镜像列表,大家可以直接执行。
/tongfu.net/bin/imagePTP.sh rancher/hyperkube:v1.20.15-rancher2 /tongfu.net/bin/imagePTP.sh rancher/kube-api-auth:v0.1.4 /tongfu.net/bin/imagePTP.sh rancher/mirrored-calico-cni:v3.17.2 /tongfu.net/bin/imagePTP.sh rancher/mirrored-calico-kube-controllers:v3.17.2 /tongfu.net/bin/imagePTP.sh rancher/mirrored-calico-node:v3.17.2 /tongfu.net/bin/imagePTP.sh rancher/mirrored-calico-pod2daemon-flexvol:v3.17.2 /tongfu.net/bin/imagePTP.sh rancher/mirrored-cluster-proportional-autoscaler:1.8.1 /tongfu.net/bin/imagePTP.sh rancher/mirrored-coredns-coredns:1.8.0 /tongfu.net/bin/imagePTP.sh rancher/mirrored-coreos-etcd:v3.4.15-rancher1 /tongfu.net/bin/imagePTP.sh rancher/mirrored-coreos-flannel:v0.15.1 /tongfu.net/bin/imagePTP.sh rancher/mirrored-ingress-nginx-kube-webhook-certgen:v1.1.1 /tongfu.net/bin/imagePTP.sh rancher/mirrored-metrics-server:v0.5.0 /tongfu.net/bin/imagePTP.sh rancher/mirrored-pause:3.6 /tongfu.net/bin/imagePTP.sh rancher/nginx-ingress-controller:nginx-1.2.1-rancher1 /tongfu.net/bin/imagePTP.sh rancher/rancher-agent:v2.5.17-rc4 /tongfu.net/bin/imagePTP.sh rancher/rke-tools:v0.1.80 /tongfu.net/bin/imagePTP.sh rancher/shell:v0.1.13
启动容器
默认情况下rancher/rancher会占用80和443端口,不过我们的80和443端口已经分配给了nginx服务了。所以福哥把rancher/rancher的443端口改成了9443,而rancher/rancher的80端口就不映射出来了。
rancher/rancher负责管理各个k8s节点服务器,还需要根据服务器运行情况进行报警,还需要根据服务器资源使用情况进行动态调整。所以这里面需要赋予“--privileged”特权,这个特权允许rancher/rancher访问宿主机,便于rancher/rancher管理服务器。
在TFCentOS7x64里面运行下面的命令启动rancher容器。
docker run -tid \ --name tfrancher \ -h tfrancher \ --net tfnet \ -p 9443:443 \ --privileged \ registry.tongfu.net:5000/rancher/rancher:v2.5.17-rc4
使用
初始化
打开浏览器输入网址https://192.168.168.68:9443/,可以看到提示不安全,这是因为我们用了HTTPS又没有合法的SSL证书的关系。这里不用管它,直接“继续访问”即可。
第一步让我们设置管理员密码,以及选择默认视图!
接下来让我们设置服务器URL,这里就是TFCentOS7x64的IP地址和9443端口了!
点击右下角的“English”按钮,选中语言为简体中文!
创建集群
点击“添加集群”按钮。
点击“自定义”类型。
输入集群名称“tfrancher”。
私有镜像仓库这里设置为启用,并把我们之前搭建的registry.tongfu.net:5000设置进去。
然后点击“下一步”按钮继续,这时候其实集群就已经创建好了,后面就是要往这个集群里面添加节点服务器了!
添加节点
节点功能
节点功能包括Etcd、Control Plane和Worker,一个集群里面至少要有一个Etcd节点和一个Control Plane节点,而Worker节点可以根据要部署的服务所需要的服务器资源进行配置。
因为福哥这里就是一个TFCentOS7x64服务器,所以这里每个功能都是一个!
接下来按照提示复制“docker run”命令在TFCentOS7x64Node1上面执行这段命令!
补全依赖镜像
添加节点过程中如果提示缺少镜像,就去TFCentOS7x64上面用imagePTP.sh拉一下就可以了!
/tongfu.net/bin/imagePTP.sh rancher/rke-tools:v0.1.80
除了rancher界面上提示的找不到的镜像需要手动拉取外,rancher启动的kubelet容器里找不到的镜像也需要手动拉取一下。可以在TFCentOS7x64Node1里面执行下面的命令查看kubelet容器里缺少什么镜像,然后在TFCentOS7x64里面用imagePTP.sh拉一下就好了!
docker logs kubelet -f 2>&1 | grep 'registry.tongfu.net:5000' | grep 'not found'
/tongfu.net/data/bin/imagePTP.sh rancher/mirrored-pause:3.6
添加成功
费了好大的劲终于添加成功了!
点击“tfrancher”集群名称进入集群界面!
点击“执行 kubectl 命令行”按钮进入kubectl命令行模式。
点击“主机”菜单进入集群主机列表界面,可以看到唯一的主机就是我们的TFCentOS7x64啦!
其他功能福哥会在后面的课程陆续给大家讲解的,敬请期待~~
问题
rancher管理后台打不开
如果发现rancher管理后台打不开了!可以查看日志看看是什么问题!
docker logs tfrancher --tail 10
如果发现是这个错误信息,就表示我们的电脑可用资源不足了。可以关闭一些其他应用程序,然后重新启动tfrancher容器!
[FATAL] k3s exited with: exit status 255
docker start tfrancher
总结
今天福哥带着大家学习了Docker容器集群解决方案kubernetes(k8s)的基本使用技巧,k8s相比较docker-compose要复杂的多得多,后面福哥会一点一点地教给大家k8s的各个功能的使用技巧,敬请期待~~
安装kubernetes(k8s)需要大量的docker服务协同在一起工作,下载镜像成为了最为艰辛的一个环节。福哥前前后后折腾了三遍,还是失败了!最后福哥就把依赖的全部镜像都一口气拉取下来,然后再通过私有镜像仓库添加k8s节点,这样才算顺利添加成功!真是不容易啊~~