Rancher 2.x 快速入门部署 nginx

Docker & K8S 1144 字

本文的目的是帮助开发者快速了解 基于 Rancher 的 k8s 管理以及部署工作,我们将介绍 Rancher2.x 的基本使用,目前暂不涉及运维层面,请不要将这个文章中所涉及的内容直接搬运到生产环境,毕竟部署起来和稳定运行时两回事,

k8s 本身部署还是很复杂的,部署起来会碰到很多坑,如果使用 Rancher 那就特别简单了,即使你不去特意学习 k8s 也能部署。

先说一下环境,我们先准备三台虚拟主机,如果有钱的话,也可以买两台服务器,我这里使用的是 17 年生成的小米 Pro 笔记本,I7 处理器,16G 内存,已经满足了试验环境的搭建。

机器ip配置备注
CentOS7192.168.0.1992cpu 4G ramRancher
CentOS7192.168.0.2102cpu 4G ramMaster
CentOS7192.168.0.2112cpu 4G ramNode

这里建议一台机器专门跑 Rancher ,跑 k8s 的节点,最好配4G 以上的内存,要不然会很卡。这三台节点,需要内网可以进行访问。

我们接下来开始准备工作,在每个节点上分别执行下面的命令

#0. 安装必备软件
yum -y install wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate
#1. 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
#2. 关闭 SElinux
sed -i  's/SELINUX=enforcing/SELINUX=disabled/'  /etc/sysconfig/selinux
sed -i  's/SELINUX=enforcing/SELINUX=disabled/g'  /etc/selinux/config
#3. 关闭 swap
sed -i 's/.*swap.*/#&/' /etc/fstab
#4. 重启
reboot -f
#5. 安装 docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#6. 启动并且设置自启动
systemctl enable docker
systemctl start docker

#7. 配置阿里云代理,这里我隐藏了自己的,这东西免费,自己可以去阿里云进行申请。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 8.编辑时间同步,要不然 etcd 可能会报错,很麻烦
crontab -e
 
* */1 * * * /usr/sbin/ntpdate   cn.pool.ntp.org

在 rancher 虚拟机上部署单节点 rancher。


# 创建目录
mkdir -p /data/rancher
# 创建 docker 容器
docker run -d --restart=unless-stopped -p 8080:80 -p 8843:443 -v /data/rancher:/var/lib/rancher rancher/rancher:v2.4.5
在这里,我们使用的 rancher 单节点模式,如果是用于生产,请使用高可用的 rancher,要不然 rancher 也是有可能出现故障的。
我这里使用的 2.4.5 版本,这是因为我在工作和学习中使用的都是这个版本,就目前文章截止最新版本应该是已经到了 2.6。

启动时我们需要等待一会。我们可以用 docker logs -f 命令来监控日志输出。

访问https://192.168.0.199:8843/ 即可看到这个页面。

2023-03-04T08:07:31.png

我们设置自己的密码,就会跳转到主页,接下来,我们创建集群。

2023-03-04T08:07:57.png

我们在右下角可以更改系统语言。

2023-03-04T08:08:07.png

接下来,我们点击添加集群。

2023-03-04T08:08:50.png

Rancher 不光可以帮助我们建立新的集群,还可以在已有集群的基础上进行导入。

2023-03-04T08:08:23.png

在这里,我们选择自定义后填写集群名称,直接点击下一步,我们使用默认配置即可。

2023-03-04T08:09:29.png

2023-03-04T08:09:42.png

如果是增加 Master 节点,那么这三个我们都需要勾上。

这里需要注意,复制的时候要把 localhost 改成能够进行通信的 ip。

sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.4.5 --server https://192.168.0.106:8843 --token 8bgdphz9mk9xbbdkrhvsqh6v5zh9gkc55276w5l7m8xlwkgr8xmz4w --ca-checksum 3db552d02da1618d971233431766d57485777d558395dbba6dc2c185ca3bc1b8 --etcd --controlplane

2023-03-04T08:10:04.png

我们分别添加完成后需要等待片刻,如果中途卡在 etcd 上,可以尝试下面的方法。

docker stop $(docker ps -aq)
docker system prune -f
docker volume rm $(docker volume ls -q)
docker image rm $(docker image ls -q)
rm -rf /etc/ceph \
       /etc/cni \
       /etc/kubernetes \
       /opt/cni \
       /opt/rke \
       /run/secrets/kubernetes.io \
       /run/calico \
       /run/flannel \
       /var/lib/calico \
       /var/lib/etcd \
       /var/lib/cni \
       /var/lib/kubelet \
       /var/lib/rancher/rke/log \
       /var/log/containers \
       /var/log/pods \
       /var/run/calico

这块我第一次安装的时候折腾了将近两个小时。

2023-03-04T08:10:17.png

当环境没有问题后,我们来部署一个 nginx,首先我们来创建一个项目

2023-03-04T08:10:39.png

2023-03-04T08:10:49.png

我们可以看到有几个默认的 Project,在这里我们就需要来了解一下什么是 namespace 了。

Namespace 是对一组资源和对象的抽象几何,用来将系统内部的对象划分为不同的项目组或者用户组。常用来隔离不同的用户,比如 k8s 自带的服务一般都运行在 kube-system namespace中。

2023-03-04T08:10:59.png

我们先创建一个项目。

2023-03-04T08:12:55.png

接着再增加一个 namespace,之后在左上角我们就可以进入到自己的项目了。

2023-03-04T08:11:41.png
2023-03-04T08:11:49.png

在这里我们可以创建四个内容:Workloads,Load Balancing, Service Discovery,Volumes。

workloads

工作负载是在 Kubernetes 上运行的应用程序。

在 Kubernetes 中,无论你的负载是由单个组件还是由多个一同工作的组件构成, 你都可以在一组 Pod 中运行它。 在 Kubernetes 中,Pod 代表的是集群上处于运行状态的一组 容器 的集合。

2023-03-04T07:55:54.png

Pod 是所有业务类型的基础,也是 k8s 管理的最小单位,可以理解为它是一个或多个容器的组合。

接下来,我们利用 workloads 来创建 nginx。

在这里我们先使用 NodePort,这代表在所有节点(虚拟机)上开放一个特定的端口,任何发送到该端口的流量都被转发到对应的服务上,端口范围胡思 30000~32767。

2023-03-04T07:55:41.png

2023-03-04T07:55:27.png

当显示 Active 的时候就证明已经部署好了,我们可以到 work 节点查看一下。

2023-03-04T07:55:06.png

访问 ip 查看是否能够访问。

2023-03-04T07:54:49.png

如果说访问不了可以尝试一下解决方案

# 安装 iptables
yum install iptables-services -y
# 关闭 iptables 防火墙
service iptables stop   && systemctl disable iptables

# 修改内核参数
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 生效配置
sysctl --system

#设置网桥包 iptables

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 >/proc/sys/net/bridge/bridge-nf-call-ip6tables

echo """
vm.swappiness = 0
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
""" > /etc/sysctl.conf

#生效配置
sysctl -p

#开启ipvs,不开启ipvs将会使用iptables,但是效率低,所以官网推荐需要开通ipvs内核
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in \${ipvs_modules}; do
 /sbin/modinfo -F filename \${kernel_module} > /dev/null 2>&1
 if [ $? -eq 0 ]; then
 /sbin/modprobe \${kernel_module}
 fi
done
EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash
/etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
maksim
Maksim(一笑,吡罗),PHPer,Goper
OωO
开启隐私评论,您的评论仅作者和评论双方可见