一、节点分配
文档地址:https://www.rancher.cn/docs/rancher/v2.x/cn/overview/architecture/
- 服务器节点规划
主机名 | 操作系统 | IP地址 |
---|---|---|
master | Centos 7.4-x86_64 | 192.168.247.130 |
node1 | Centos 7.4-x86_64 | 192.168.247.131 |
node2 | Centos 7.4-x86_64 | 192.168.247.132 |
- 主机名修改
[root@localhost ~]# vi /etc/hosts
192.168.247.130 master
192.168.247.131 node1
192.168.247.132 node2
- Kernel性能调优
[root@master ~]# cat >>/etc/sysctl.conf<
- 关闭防火墙(所有节点)
[root@master ~]# systemctl stop firewalld.service
[root@master ~]# systemctl disable firewalld.service
- 添加镜像
[root@master ~]# vi /etc/docker/daemon.json
# 内容
{
"registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com"]
}
# 重载配置,重启docker
- 安装和配置kubectl
kubectl是一个CLI命令行工具,用于运行Kubernetes集群的命令。Rancher 2.x中的许多维护和管理都需要它。
# 下载base,epel
[root@manager ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2523 100 2523 0 0 2773 0 --:--:-- --:--:-- --:--:-- 2772
[root@manager ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@manager ~]# cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 安装Kubernetes
[root@master ~]# yum install -y kubectl
# 同步时间
[root@master ~]# yum install ntp ntpdate -y
# 同步阿里云
[root@master ~]# ntpdate ntp1.aliyun.com
[root@master ~]# yum install -y ntp
[root@master ~]# systemctl enable ntpd && systemctl start ntpd
[root@master ~]# timedatectl set-timezone Asia/Shanghai
[root@master ~]# timedatectl set-ntp yes
[root@master ~]# ntpq -p
二、安装Rancher2.x
- 安装(请安装稳定版)
# 创建目录
[root@master ~]# mkdir -p /opt/rancher
# 安装最新版
[root@localhost ~]# sudo docker run -d -v /opt/rancher:/var/lib/rancher --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:latest
# 安装稳定版
[root@master ~]# sudo docker run -d --restart=unless-stopped -v /opt/rancher:/var/lib/rancher/ -p 80:80 -p 443:443 rancher/rancher:stable
# 使用默认自签名证书(使用此安装方式)
[root@master ~]# docker run -d --restart=unless-stopped -p 80:80 -p 443:443 -v /opt/rancher:/var/lib/rancher/ -v /root/var/log/auditlog:/var/log/auditlog -e AUDIT_LEVEL=3 rancher/rancher:stable
# 证书安装(需生成证书)
[root@master ~]# docker run -d --restart=unless-stopped -p 80:80 -p 443:443 -v /opt/rancher:/var/lib/rancher -v /var/log/rancher/auditlog:/var/log/auditlog -v /home/anrj/ssl/cert.pem:/etc/rancher/ssl/cert.pem -v /home/anrj/ssl/key.pem:/etc/rancher/ssl/key.pem -e AUDIT_LEVEL=3 --name rancher_stable rancher/rancher:stable --no-cacerts
安装后下载镜像为:rancher/rancher stable
-
Web访问
地址:https://192.168.247.130/
注:因为Rancher是自动使用的自签名证书,在第一次登录会提示安全授信问题,信任即可然后设置rancher server的url,这里就直接使用了虚拟机的内网ip了。
默认用户为:admin 密码: admin
-
设置语言(右下角)
二、创建集群
-
创建集群
添加名称,其它默认,点击下一步:
角色选择(一台主机可以对应多个角色,每个集群至少需要一个Etcd角色、一个Control角色、一个Worker角色):
注意:至少保证主机集群里有一个主机角色有etcd和Control2种。所以最好是一台主机的角色是etcd 和 Control,其他主机是work节点。
- 添加主机到集群中
注:如果是多台主机,根据角色的不同,需要复制多次命令。
192.168.247.130--etcd
192.168.247.131--Control
192.168.247.132--work
# 192.168.247.132--work
[root@node2 ~]# sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.2.9 --server https://192.168.247.130 --token f8lvqwhcnzjdm4zrx7xmsw9jqs5zfxz4s46z8l7cghwfvckf9pj6fg --ca-checksum 83926781a69162022869e3b4b80d6b20c905bc2509ea685961bf7604ab6c4220 --worker
Unable to find image 'rancher/rancher-agent:v2.2.9' locally
v2.2.9: Pulling from rancher/rancher-agent
5667fdb72017: Pull complete
d83811f270d5: Pull complete
ee671aafb583: Pull complete
7fc152dfb3a6: Pull complete
0606171659a5: Pull complete
91bb3d25889d: Pull complete
fb492ec03242: Pull complete
48b877ece6ea: Pull complete
915307ab9059: Pull complete
0b10a4dd7756: Pull complete
Digest: sha256:268f8e30b4d26fc4dbe014ec5ac2c34b80842f8450bdc496ae52757e87c64fce
Status: Downloaded newer image for rancher/rancher-agent:v2.2.9
1365663d6cab948ec9f2962e5caf4ce919fae1fe436f947efceaccc225940641
# 下载镜像为:
[root@node2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rancher/rancher-agent v2.2.9 a1bf38ea4f5e 10 days ago 289MB
Universal Control Plane (UCP),基于 Web 的统一集群和应用管理解决方案。
# 192.168.247.131--controlplane
[root@node1 ~]# sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.2.9 --server https://192.168.247.130 --token f8lvqwhcnzjdm4zrx7xmsw9jqs5zfxz4s46z8l7cghwfvckf9pj6fg --ca-checksum 83926781a69162022869e3b4b80d6b20c905bc2509ea685961bf7604ab6c4220 --controlplane
Unable to find image 'rancher/rancher-agent:v2.2.9' locally
v2.2.9: Pulling from rancher/rancher-agent
5667fdb72017: Pull complete
d83811f270d5: Pull complete
ee671aafb583: Pull complete
7fc152dfb3a6: Pull complete
0606171659a5: Pull complete
91bb3d25889d: Pull complete
fb492ec03242: Pull complete
48b877ece6ea: Pull complete
915307ab9059: Pull complete
0b10a4dd7756: Pull complete
Digest: sha256:268f8e30b4d26fc4dbe014ec5ac2c34b80842f8450bdc496ae52757e87c64fce
Status: Downloaded newer image for rancher/rancher-agent:v2.2.9
f331528b9a5d07ec876175776dde397868861fbf8b5b47325af5fae9c508506a
# 下载镜像为
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rancher/rancher-agent v2.2.9 a1bf38ea4f5e 10 days ago 289MB
# 192.168.247.130--Etcd
[root@master ~]# sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.2.9 --server https://192.168.247.130 --token f8lvqwhcnzjdm4zrx7xmsw9jqs5zfxz4s46z8l7cghwfvckf9pj6fg --ca-checksum 83926781a69162022869e3b4b80d6b20c905bc2509ea685961bf7604ab6c4220 --etcd
Unable to find image 'rancher/rancher-agent:v2.2.9' locally
v2.2.9: Pulling from rancher/rancher-agent
5667fdb72017: Already exists
d83811f270d5: Already exists
ee671aafb583: Already exists
7fc152dfb3a6: Already exists
0606171659a5: Pull complete
91bb3d25889d: Pull complete
fb492ec03242: Pull complete
48b877ece6ea: Pull complete
915307ab9059: Pull complete
0b10a4dd7756: Pull complete
Digest: sha256:268f8e30b4d26fc4dbe014ec5ac2c34b80842f8450bdc496ae52757e87c64fce
Status: Downloaded newer image for rancher/rancher-agent:v2.2.9
57e37fc9e50625f4cd004f7e735ffb1450209e3c0088641082c5777fe07c2774
# 下载镜为
[root@master ~]# docker images
rancher/rke-tools v0.1.50 87d2dd9a046a 5 weeks ago 132MB
rancher/coreos-etcd v3.3.10-rancher1 643c21638c1c 12 months ago 39.5MB
rrancher/hyperkube v1.15.5-rancher1 fc2949858e47 11 days ago 1.15GB
此时我们的集群处于等待注册的状态,点击主机下的数字可以查看主机信息:
- 查看集群信息
# master主机
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2f7c1712081e rancher/rancher-agent:v2.3.1 "run.sh --server htt…" 3 minutes ago Up 3 minutes awesome_dhawan
053a460a80da rancher/rancher-agent:v2.3.1 "run.sh -- share-roo…" 3 minutes ago Up 3 minutes share-mnt
f439c7775b6e rancher/rancher-agent:v2.3.1 "run.sh --server htt…" 3 minutes ago Up 3 minutes hardcore_boyd
c1bbb6072fab rancher/rancher:latest "entrypoint.sh" 3 hours ago Up About a minute 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp adoring_yalow
三、Rancher 部署服务
通过 Rancher UI 来一键式部署服务。
Rancher Server 中存在一个项目的概念,默认存在两个项目:default 和 system,类似于 namespaces 但是并不是 namespaces,而且 namespaces 还率属于某项目下,项目可以配置 Pod 安全策略以及资源配额,可以理解为更好的划分各个项目资源隔离。
default 项目可以理解为非系统项目的个人自定义项目;
system 项目可以理解为具有所有 Kubernetes 和 Rancher 系统命名空间的系统项目。
-
部署一个服务
切换到集群 xtsz-k8s 下 default 命令空间下的工作负荷页面来部署一个服务。
以 nginx 为例,在新的 default 命名空间内,启动一个新的 nginx Pod,并配置容器 80 端口映射到 NodePort 30001 端口来配置 Service,其它配置默认即可。
-
启动服务
点击启动,稍等片刻,Rancher Server 就自动在default 命令空间系统内创建了 nginx-test Pod 资源。
-
测试访问
地址:http://192.168.247.132:30001/
之前我们是需要使用 kubectl 命令或者手写 yaml 文件来配置,现在只需要在 UI 页面上就可以完成了。当然 Rancher Server 底层还是将配置的参数转换成 yaml 文件方式,通过页面上也可以看到生成的 yaml 文件。
-
服务发现
四、常见问题:
- iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 6443 -j DNAT --to-destination 172.17.0.2:1337 ! -i docker0: iptables:
解决:
# 重建docker0网络恢复
# pkill 命令和 killall 命令的用法相同,都是通过进程名杀死一类进程
[root@master ~]# pkill docker
# 清空规则
[root@master ~]# iptables -t nat -F
# 关闭网卡
[root@master ~]# ifconfig docker0 down
# 关闭网卡
[root@master ~]# yum -y install bridge-utils
[root@master ~]# brctl delbr docker0
# 重启docker
[root@master ~]# systemctl restart docker
- 停用并删除容器
[root@node2 ~]# docker stop $(docker ps -q)
[root@master ~]# docker rm $(docker ps -aq)
- [etcd] Failed to bring up Etcd Plane: [etcd] Etcd Cluster is not healthy
由于etcd内存数据库问题:
# 安装etcd
[root@master ~]# yum install etcd
# 切换版本
[root@master ~]# etcdctl -version
etcdctl version: 3.3.11
API version: 2
# 配置
vi /etc/etcd/etcd.conf
# 修改ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"为
ETCD_LISTEN_CLIENT_URLS="http://192.168.247.130:2379,http://localhost:2379"
# 修改ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"为
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.247.130:2379,http://localhost:2379"
# 重启系统,请不重启动etcd服务,如果启动请关闭
[root@master ~]# systemctl stop etcd
[root@master ~]# systemctl status etcd
● etcd.service - Etcd Server
Loaded: loaded (/usr/lib/systemd/system/etcd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
- Runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
原因:
因为kubelet配置了network-plugin=cni,但是还没安装,所以状态会是NotReady,不想看这个报错或者不需要网络,就可以修改kubelet配置文件,去掉network-plugin=cni 就可以了。
[root@node2 ~]# systemctl enable kubelet
[root@node2 ~]# systemctl start kubelet
附:
Universal Control Plane(UCP):
UCP 通过提供集成的应用管理平台来扩展 Docker EE 基础版。它既是用户的主要交互点,也是应用的集成点。UCP 在集群中的所有节点上运行代理程序来监视它们,并且在控制器节点上运行一组服务。这些服务包括用于管理用户的身份服务,用于用户和集群 PKI 的认证中心 (CA),提供 Web UI 和 API 的主控制器,用于 UCP 状态的数据存储,以及用于向后兼容的经典 Swarm 服务。
UCP是一个基于Docker的集群管理工具,也即集群中每个节点都应该安装Docker Engine。
UCP集群包含两种节点:
- Controller: 管理集群,并持久化集群配置
- Node:运行容器