同福

使用rancher/rancher:v2.5.17-rc4镜像安装kubernetes环境

介绍

介绍

前面我们学会了使用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
IP192.168.168.68、192.168.168.69
端口9443

安装

TFCentOS7x64Node1

创建虚拟机

k8s架构需要至少一个节点,这个节点服务器最好是干净的空系统,因为整个服务器的CPU、内存资源都会被k8s直接管理。如果我们在这个节点里面安装了其他服务,就会导致k8s管理后台对节点服务器的可用资源的判断出现问题,明明服务器已经没有资源了还是会被k8s管理后台分配负载。

所以福哥又重新搭建了一个CentOS7x64的虚拟机TFCentOS7x64Node1,主机名设置为tfcentos7x64node1,IP地址设置为192.168.168.69,大家可以参考前面的课程自己搭建起来!

home/topic/2023/0828/20/276ecc218c4560ba647746f09d515349.png

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

home/topic/2023/0828/20/8ac4716586eba83889a821137a9c0dbb.png

关闭防火墙

虚拟机TFCentOS7x64Node1服务器需要把默认的防火墙关闭掉。

systemctl stop firewalld
systemctl disable firewalld

home/topic/2023/0828/20/470cbea58da86560266602bdf11dcf98.png

配置registry.tongfu.net

在TFCentOS7x64Node1的/etc/hosts里面增加registry.tongfu.net域名的解析记录。

192.168.168.68   registry.tongfu.net

home/topic/2023/0828/20/5c72a30f6309cbe9a5f676771d547c87.png

在TFCentOS7x64Node1的/etc/docker/daemon.json里面添加insecure-registries记录。

{
  "insecure-registries": [
    "registry.tongfu.net:5000"
  ]
}

home/topic/2023/0828/20/e3a489716469cb1d76023a5039bbc887.png

在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

home/topic/2023/0828/20/bcf29706f477e81d227386bc100f5bae.png

镜像

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

home/topic/2023/0427/16/a4a0b9ffcfb0410d9d796b2f2af3c4a5.png

现在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'

home/topic/2023/0828/21/43851cc17aeeba7a5a471dc081799374.png

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 "$@"

home/topic/2023/0828/21/8470ab3a076a09f3ccc5960b476a8db9.png

这是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

home/topic/2023/0828/22/1a5ec3b639a5405ae35f4070289f3bee.png

启动容器

默认情况下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

home/topic/2023/0828/22/69cfd2ef40b8d14cb71fcbf2b69f8e28.png

使用

初始化

打开浏览器输入网址https://192.168.168.68:9443/,可以看到提示不安全,这是因为我们用了HTTPS又没有合法的SSL证书的关系。这里不用管它,直接“继续访问”即可。

home/topic/2023/0828/22/fc475fe0f79e3dd43ad60b4665129cea.png

第一步让我们设置管理员密码,以及选择默认视图!

home/topic/2023/0828/22/5c459eff2a551fa3fe46dd8df2bf2b03.png

接下来让我们设置服务器URL,这里就是TFCentOS7x64的IP地址和9443端口了!

home/topic/2023/0828/22/8bd35b1475dbdd563afb8ef642e57b73.png

点击右下角的“English”按钮,选中语言为简体中文!

home/topic/2023/0828/22/f892943282b19381066841a04d74c80f.png

创建集群

点击“添加集群”按钮。

home/topic/2023/0828/22/6adae2484b6d3804aaa643b53092a3ee.png

点击“自定义”类型。

home/topic/2023/0828/22/b5b98dc3d922f4ff25146b6579cec49e.png输入集群名称“tfrancher”。

home/topic/2023/0828/22/9c1402367c26ab22a9d03925bfef908b.png

私有镜像仓库这里设置为启用,并把我们之前搭建的registry.tongfu.net:5000设置进去。

home/topic/2023/0828/22/56675bdeef80d328dbdb675482c42a63.png然后点击“下一步”按钮继续,这时候其实集群就已经创建好了,后面就是要往这个集群里面添加节点服务器了!

添加节点

节点功能

节点功能包括Etcd、Control Plane和Worker,一个集群里面至少要有一个Etcd节点和一个Control Plane节点,而Worker节点可以根据要部署的服务所需要的服务器资源进行配置。

因为福哥这里就是一个TFCentOS7x64服务器,所以这里每个功能都是一个!

home/topic/2023/0828/22/9bab40a181328d4657511d78e208a510.png

接下来按照提示复制“docker run”命令在TFCentOS7x64Node1上面执行这段命令!

home/topic/2023/0828/22/41238753b93b5e77ae0345f5007eb998.png

补全依赖镜像

添加节点过程中如果提示缺少镜像,就去TFCentOS7x64上面用imagePTP.sh拉一下就可以了!

home/topic/2023/0824/20/baf3050311cc8a303f4e9694b17ade9e.png

/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'

home/topic/2023/0824/21/53e861ca566a935578446e2a3ff34cb0.png

/tongfu.net/data/bin/imagePTP.sh rancher/mirrored-pause:3.6

添加成功

费了好大的劲终于添加成功了!

home/topic/2023/0828/22/fb55423c12af2dc3432f147badf23e85.png

点击“tfrancher”集群名称进入集群界面!

home/topic/2023/0828/22/a31b5d9f467fea1d85c7174d4b027924.png点击“执行 kubectl 命令行”按钮进入kubectl命令行模式。

home/topic/2023/0828/22/0005f05e43c7252d06f94794d2165169.png

点击“主机”菜单进入集群主机列表界面,可以看到唯一的主机就是我们的TFCentOS7x64啦!

home/topic/2023/0828/22/67da5db17f51a0a17be62e00f3fc12e4.png

其他功能福哥会在后面的课程陆续给大家讲解的,敬请期待~~

问题

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节点,这样才算顺利添加成功!真是不容易啊~~