Rancher-Kubernetes容器化部署方案
1 Rancher简介
Rancher是一套容器管理平台,它可以帮助组织在生产环境中轻松快捷的部署和管理容器。 Rancher可以轻松地管理各种环境的Kubernetes,满足IT需求并为DevOps团队提供支持。
Kubernetes手动部署非常复杂,Rancher容器化部署相对来说比较简单,并且Rancher支持Web端管理Kubernetes,而Kubernetes原生的Dashboard只提供监控。
2 Kubernetes简介
Kubernetes已成为容器集群管理标准,通过YAML文件来管理配置应用程序容器和其他资源。Kubernetes执行诸如调度,扩展,服务发现,健康检查,密文管理和配置管理等功能。
3 组件
一个Rancher-Kubernetes集群由多个节点组成:
- Etcd database:通常在一个节点上运行一个etcd实例,存储K8s中IP地址等信息
- Rancher-server:Rancher管理平台,用户通过Rancher Web端配置K8s集群
- Master nodes:K8s主节点是无状态的,用于运行API Server,调度服务和控制器服务
- Worker nodes:K8s工作负载节点,运行容器
4 Rancher-K8s对比源码K8s
优点:
- 采用图形化方式:易用的Web管理界面,在Docker易用性的基础上,再一次降低了使用容器技术部署容器应用的难度
- 支持多种调度器:通过环境模板,很容易地创建和部署Swarm、K8S容器集群管理调度平台
- 管理主机集群:管理对象是多台主机的集群,而不仅仅是单台容器主机,创建和管理几台、几十台应用服务器集群,只需要复制粘贴就解决了
- 内置应用商店:使用其中的应用模板,创建一个WordPress博客系统,只需点点鼠标,部署简单
- 资源弹性分配:内置应用负载均衡器,“服务”最小只需1个容器实例,当负载不够/或过剩时,只需点点鼠标,增加/减少“服务”中容器的实例数,即可解决问题,应用系统具有天生的弹性扩容能力。
缺点:
- K8S部署的问题:由于国内网络和国外网络访问的问题,在国内部署K8S集群,有点不方便
- 应用商店的问题:默认的Rancher官方认证和社区贡献的应用商店内容有限,应用还不够丰富,基本上都是网络和存储等基础的应用;个别应用部署后,无法通过相同的操作,再部署同样的另一套应用,比如Rancher NFS
- 故障拍错的问题:因为Rancher-K8s是一键打包部署好的,组件容器化,如果遇到问题会为排障带来很大的困难
5 环境准备
本次部署三台Server,一台作为Rancher-server,一台作为Master,另一台为Worker节点。服务器具体配置如下:
- 1个千兆网口
- 至少8G内存
- 磁盘至少40G
- Rancher-server:192.168.4.210
- Master:192.168.4.211
- Worker:192.168.4.212
6 部署过程
6.1 关闭SELinux 【所有节点】
SeLinux不关闭会发生无法访问的情况。
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
6.2 关闭防火墙【所有节点】
防止安装时出现各个组件的端口不能访问的问题。
[root@localhost ~]#systemctl stop firewalld && systemctl disable firewalld
6.3 设置主机名【所有节点】
Rancher-server。
[root@localhost ~]# hostname rancher
[root@localhost ~]# echo “rancher” > /etc/hostname
Master
[root@localhost ~]# hostname master
[root@localhost ~]# echo “master” > /etc/hostname
Worker
[root@localhost ~]# hostname worker
[root@localhost ~]# echo “worker” > /etc/hostname
6.4 安装Git【Rancher节点】
安装Git拉取GitHub文件。
[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum -y install git
[root@localhost ~]# git clone https://github.com/yx464050145/Ansible-Rancher.git
6.5 安装Ansible【Rancher节点】
Rancher使用Ansible脚本自动化安装,并且修改Ansible配置文件。
[root@localhost ~]# yum -y install ansible
[root@localhost ~]# vi /etc/ansible/ansible.cfg
[defaults]
host_key_checking = False
6.6 修改Rancher-ansible配置文件【Rancher节点】
[root@localhost ~]# vi /root/Ansible-Rancher/inventory/hosts
[rancher]
192.168.4.210 ansible_ssh_user='root' ansible_ssh_pass='tera123'
[master]
192.168.4.211 ansible_ssh_user='root' ansible_ssh_pass='tera123'
[worker]
192.168.4.212 ansible_ssh_user='root' ansible_ssh_pass='tera123'
[root@localhost ~]# vi /root/Ansible-Rancher/rancher_server/vars/main.yml
# defaults file for rancher
rancher_name: 'rancher_server'
rancher_port: 80
rancher_image: rancher/rancher:stable
rancher_data: /var/rancher
rancher_ssl_ports: 443
rancher_url: https://192.168.4.210
rancher_admin_password: "tera123"
validate_certs: false
[root@localhost ~]# vi /root/Ansible-Rancher/rancher_master/vars/main.yml
# defaults file for rancher
rancher_url: https://192.168.4.210
rancher_admin_password: "tera123"
validate_certs: false
rancher_network_provider: "calico"
rancher_cluster_name: asterfusion
rancher_master_role: "--etcd --controlplane"
rancher_project_name: "asterfusion"
[root@localhost ~]# vi /root/Ansible-Rancher/rancher_worker/vars/main.yml
rancher_url: "https://192.168.4.210"
rancher_admin_password: "tera123"
validate_certs: false
rancher_network_provider: "calico"
rancher_cluster_name: asterfusion
rancher_worker_role: "--worker"
6.7 Ansible-playbook部署Rancher集群【Rancher节点】
[root@localhost ~]# cd /root/Ansible-Rancher
[root@localhost ~]# ansible-playbook -i inventory/hosts rancher.yml
6.8 Rancher Web
6.9 Rancher K8s集群
图中可以看出K8s集群部署完成,Master上部署了etcd、control,Worker部署容器。
6.10 部署Pod
- 名称:Pod名字(必填)
- Docker镜像:容器镜像(必填)
- 端口映射:端口映射规则和网络模式,如果不需要外网访问可以不填(选填)
- 类型:Pod类型(必填)
下图Nginx Pod已经部署好了
6.11 Kubelet命令行
6.12 报错问题
部署过程中如果速度太慢并且报错,是因为网络原因导致拉取镜像失败或者超时。可以选择拷贝镜像到各个节点中免去拉取镜像的过程。在部署完成后耐心等待所有容器组件状态正常才可部署Pod。
7 参考资料
- Rancher官网:https://rancher.com/docs/rancher/v2.x/en
- Kubernetes官网:https://kubernetes.io/
更多内容请参考:A-Lab