一个可以快速安装和管理多K8S集群强大工具Rancher,虽然也有其他如Openshift、Kubesphere、Sealos,还是强烈推荐生产环境直接选用Rancher,本篇从部署Rancher本身开始,一步步基于Rancher搭建一个新的K8S集群的详细操作步骤和常见功能介绍,最后部署一个Deployment的Nginx应用和动态扩缩容的演示示例。
@
目录
- 概述
- 定义
- 为何使用
- 其他产品
- 安装
- 简述
- 规划
- 基础环境
- Docker安装
- Rancher安装
- 创建用户
- 创建集群
- 添加Node节点
- 配置kubectl
- 创建项目和名称空间
- 发布应用
- 偏好设置
概述
定义
Rancher 官网 https://rancher.com/
Rancher 官网文档 https://rancher.com/docs/
Rancher 最新版本2.6官网文档 https://rancher.com/docs/
Rancher GitHub源码地址 https://github.com/apache/incubator-seatunnel
Rancher是一个为在生产中部署容器的组织构建的完备开源容器管理平台,Rancher使Kubernetes在任何地方都可以轻松运行,满足it需求并授权给DevOps团队,从数据中心到云端再到边缘,Rancher提供Kubernetes-as-a-Service服务。目前docker镜像最新版本为v2.6.8
Rancher是一个全栈式管理各地的所有Kubernetes集群,同时可以管理多个K8S集群,将它们统一在集中式RBAC下,监控它们,并让您轻松部署和管理。与Rancher同样快速安装和管理K8S集群,还有Openshift、Kubesphere、sealos,本篇主要实战Rancher的使用。
为何使用
- Rancher支持集中化认证、权限控制、监控和管理所有的Kubernetes集群。
- 提供一个简单直接的用户界面给DevOps工程师管理应用程序。
- 解决企业痛点问题包括多机房跨区域的容器调度,
- 是规模化生产级Kubernetes的优秀实践。
- Rancher托管Kubernetes集群操作,部署Kubernetes集群——在本地、在云端和在边缘。
- Rancher将这些集群统一起来,以确保一致的操作、工作量管理和企业级安全。是一个真正经过实战锤炼过的推荐生产使用Kubernetes集群管理工具。Rancher解决了DevOps团队与Kubernetes部署应用程序和IT人员交付企业关键服务的需求。
- 对于本地工作负载,我们提供RKE。对于公有云,我们支持所有主要的发行版,包括EKS、AKS和GKE。对于边缘、分支和桌面工作负载,我们提供K3s,一个经过认证的Kubernetes轻量级分发版
- 简化集群操作,Rancher提供简单、一致的集群操作,包括供应、版本管理、可见性和诊断、监控和警报,以及集中审计。
- 安全、策略和用户管理,Rancher自动化处理过程并为所有集群应用一组一致的用户访问和安全策略。
- 共享工具和服务,Rancher提供了丰富的服务目录,用于构建、部署和扩展容器化应用程序,包括应用程序打包装、CI/CD、日志、监控和服务网格。
其他产品
- RKE:Rancher Kubernetes Engine (RKE)是一个cncf认证的Kubernetes发行版,完全运行在Docker容器中。它可以在裸机和虚拟化服务器上工作。RKE解决了安装复杂性的问题,这是Kubernetes社区的一个常见问题。通过RKE, Kubernetes的安装和操作既简化又易于自动化,它完全独立于您正在运行的操作系统和平台。只要你能运行一个支持的Docker版本,你就可以用RKE部署和运行Kubernetes;只用几分钟就能从一个命令构建一个集群,它的声明式配置使Kubernetes的升级是原子的、安全的。
- K3S:相信不少人对K8S已经了解很多,而Rancher官方还提供一个产品K3S,其为一个轻量级Kubernetes,安装方便,资源消耗小只占原来一半内存,所有二进制文件小于100mb。
- Rancher与K3s一起使用时配备了一个简单而完整的解决方案来运行Kubernetes。
- K3s简化了边缘部署,能够快速启动数千个集群,Rancher通过Rancher Continuous Delivery帮助K3s用户管理大量集群,为用户提供了一个控制器,使他们能够有效地管理边缘的Kubernetes。
- 使用场景
- Edge
- IoT
- CI
- 开发和测试
- ARM
- 嵌入K8s
- Longhorn:是100%开源的,为Kubernetes构建的分布式块存储。虽然由Rancher Labs启动,Longhorn现在是cncf管理的项目。当与Rancher一起使用时,Longhorn可以提高开发人员和ITOps的效率,通过使持久存储易于部署,只需一次点击,而且没有专有替代方案的成本开销。它还减少了管理数据和操作环境所需的资源,使团队能够专注于更快地交付代码,交付更好的应用程序。
安装
简述
- Rancher可以从托管提供商提供Kubernetes和计算节点,然后在其上安装Kubernetes,或者导入运行在任何地方的现有Kubernetes集群。
- Rancher在Kubernetes之上增加了巨大的价值,首先通过为所有集群集中身份验证和基于角色的访问控制(RBAC),使全局管理员能够从一个位置控制集群访问。
- Rancher可以对集群及其资源进行详细的监控和警报,将日志发送给外部提供商,并通过应用目录直接与Helm集成。如果有外部CI/CD系统,可以把它插入Rancher,但如果没有Rancher甚至帮助自动部署和升级工作负载。
规划
从Rancher开始只需2个简单的步骤就可以看出其极简单部署方式
- 安装dokcer的主机
- 通过docker直接部署Rancher
使用四台服务器,一台单独安装Rancher,然后通过Rancher部署一个K8S集群,其中一台安装K8S的master和node,剩余两台安装node。
基础环境
- 设置主机名
# 设置主机名,可以根据规划名称部署如rancher,k8s-master01,k8s-node01,k8s-node02,我这里就不配置了
hostnamectl set-hostname rancher
- 主机和IP的Host配置
- 主机安全配置
- 关闭防火墙
- SELINUX=disabled
- 配置时间同步
# 配置crond任务
0 */1 * * * ntpdate time1.aliyun.com
- 关闭swap(K8S集群节点)
# 默认开启,注释掉
vim /etc/fstab
# /dev/mapper/centos-swap swap swap defaults 0 0
# 临时关闭
swapoff -a
- 配置路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
# 修改完执行
sysctl -p
Docker安装
- Rancher本身的安装和基于Rancher安装K8S集群都需要依赖底层容器引擎如Docker,关于Docker知识可以看前面的文章,四台服务器都安装好docker
#更新yum
sudo yum update
#安装依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#设置镜像仓库为国内的阿里云仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装docker
sudo yum install -y docker-ce
#启动docker
sudo systemctl start docker
#设置开机启动docker
sudo systemctl enable docker
Docker也提供下面简化部署脚本
# 下载部署脚本
curl -fsSL get.docker.com -o get-docker.sh
# 部署docker
sh get-docker.sh
Rancher安装
docker hub官网查找需要安装版本,这里使用最新的2.6.8
# dockcer拉取镜像,通常选择amd,也可以选择docker pull rancher/rancher:v2.6.8-rc1
docker pull rancher/rancher:v2.6.8-rc1-linux-amd64
# 创建挂载目录
mkdir -p /home/commons/rancher/data
# 运行rancher
docker run -d --privileged -p 80:80 -p 443:443 -v /home/commons/rancher/data:/var/lib/rancher/ --restart=always --name rancher-v.2.6.8 rancher/rancher:v2.6.8-rc1-linux-amd64
登录Rancher的web UI,访问http://hadoop2/ 跳转到https://hadoop2
# 通过上面docker ps找到运行后的容器container-id 7eb2c11302a2的日志找到启动登录的密码,如果是docker run安装运行
docker logs 7eb2c11302a2 2>&1 | grep "Bootstrap Password:"
# 如果是Helm安装运行
kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}{{"\n"}}'
进入后有一个默认local集群,这个集群就是是用K3S。创建集群可以点击集群管理,create按钮,左边import存在支持对已存在集群的导入
创建用户
点击配置栏目,点击用户和授权,创建用户,给开发使用可以勾选Standard Users,确认后提交
创建集群
选择custom自定义
其他基本按照默认即可,还有高级选项里NodePort端口可以适当给大一点如30000-50000,进入下一步,先装一台包含所有节点即master和node都有,全选3个
复制后在要安装master的docker宿主机的命令行执行
返回Rancher的web UI的集群管理页面,可以看到刚才创建的集群已经在安装中
等待一段时间安装,看网络情况这里5-10分钟左右,等待时间完毕后可以看下k8s-cluster1集群已经处于active即激活状态
点击左上角的菜单找EXPLORE CLUSTER即探索集群中的k8s-cluster1,或者点击列表后面的EXPLORE,可以显示当前集群的概况信息
添加Node节点
在集群管理页面Clusters的列表中找到name列的k8s-cluster1,点击进入在注册Tab框中只勾选worker节点
拷贝docker run语句后到所有需要安装worker节点机器运行,查看容器节点rancher-agent
等待5-10分钟后查看worker节点容器信息如下
在Rancher的web UI的集群管理页面的机器列表(node名称用的原来hostname没有修改,因此不以hostname为主,可以看下后面roles角色)就已经有刚才安装好处于active激活状态的2台Worker节点
也可以通过集群管理入口查看相关配置
配置kubectl
如果要操作kubectl命令可以直接通过Rancher管理页面的Kubectl Shell来执行
另外如要要在节点主机上直接运行需要如下操作,用Rancher安装好的k8s集群的master节点默认是没有cubectl的命令
通过如下添加kubernetes yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
执行kubectl安装
yum install -y kubectl
kubectl get nodes
安装完直接执行kubectl使用连接被拒绝,通过rancher管理页面下载刚创建k8s-cluster1的KubeConfig文件,或者点击下面一个直接拷贝KubeConfig到剪贴板
粘贴配置信息到kube配置路径
# 创建目录
mkdir ~/.kube
# 将k8s-cluster1.yaml里面的内容粘贴到下面文件
vi ~/.kube/config
# 查询所有节点信息
kubectl get pods
创建项目和名称空间
发布应用需要先创建项目和名称空间,找到集群项目和名称管理,创建项目,输入项目名称test,其它4项可以按需配置包括容器资源限制,点击创建项目
在test项目记录点击创建命名空间
这里命名空间是针对k8s的,没有创建新的命名空间是查询只有下面几个默认的命名空间
输入命名空间testns,其他2项可以按需配置包括容器资源限制,点击创建
创建后页面中也有testns这个命名空间,从k8s集群中也可以查找testns命名空间
发布应用
这里以发布一个nginx的Deployments应用为主
选择testns命名空间,发布Deployment的名称testnginx,镜像为nginx:latest,副本数为2
也设置Ports的配置,选择Node Port类型,注意名称不能超过15个字符,nginx容器内部端口80,35000为暴露端口
创建后返回页面,过一会就下载完nginx并运行处理活跃状态
点击testnginx进入可以后可以查看部署的信息,如Pods、Services、Ingresses等,目前有两个副本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vNGUoQAg-1661956704467)(http://www.itxiaoshen.com:3001/assets/1661943335968kbERCAW1.png)]
通过其中一个pod部署节点ckserver1也即是192.168.5.52的IP去访问nginx ,http://ckserver1:35000/ ,成功返回信息(host对应ip配置hosts文件里)
可以很方便调整扩容和缩容的数量
通过kubectl也可以查看对应的信息
偏好设置
比如通过偏好设置可以设置深色主题