引入:
kubernetes,简称K8s,是把中间8个字母说成8。是一个开源用来管理云平台中多个主机上的容器化的应用,简而言之就是容器的集群化部署,提供了高可用。Kubernetes的目标是让部署容器化的应用简单并且高效,用来编排容器,Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Rancher,简而言之就是一个用于web界面管理k8s集群的服务,对服务的创建、修改、停用等等一些列操作,方便运维处理,同时可以监控各个微服务以及宿主机本身,功能非常强大,社区也很不错。
一、环境准备
1、准备服务器
搭建K8S集群至少几台服务器(同一局域网),也可以用1台做,但是1台没必要做搭k8s,自己练习或者学习可以使用1台,明白里面的几种角色原理即可。
2、基础环境准备
1、更新yum
yum install
2、安装依赖包工具
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
3、设置阿里镜像地址 (从国内下载速度快,docker官方镜像也不稳定后期貌似关闭访问了)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、linux基础系统配置
1、关闭swap分区 (不关使用虚拟内存会有问题)
swapoff -a # 临时关闭
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab #永久关闭
3、 配置 Docker使用systemd作为默认Cgroup驱动,每台服务器都需要执行(master和node)
cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
4、 桥接的IPv4流量到iptables,每台服务器都需要执行(master和node)
cat <<EOF >> /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF
sysctl -p 让内核重新读取数据,加载生效
4、安装指定版本Docker
1、查看docker-ce支持版本
yum list docker-ce --showduplicates|sort -r
2、查看docker-ce-cli版本
yum list docker-ce-cli --showduplicates|sort -r
3、安装docker
安装指定版本docker 18.09.9
yum install -y docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io
4、启动docker服务,设置开机启
systemctl start docker && systemctl enable docker
5、docker 版本验证
docker version
以下为查询部署指定docker的版本:
二、Rancher部署
在docker部署完成后,就可以通过拉取一个Rancher镜像启动Rancher服务。
1、开始指定版本安装Rancher v2.3.6
# 拉取Rancher v2.3.6 镜像
docker pull rancher/rancher:v2.3.6
2、通过docker inspect 可以看到有个两个数据卷需要挂着的
# 等待下载完成,查看一下镜像包
docker inspect rancher/rancher:v2.3.6
宿主机创建相应的目录用来挂着这两个路径文件
#宿主机下创建volumes目录
mkdir -p /docker/rancher/rancher
mkdir -p /docker/rancher/log
3、启动rancher
docker run --privileged -d --restart=unless-stopped -p 8080:80 -p 4430:443 \
-v /docker/rancher/rancher:/var/lib/rancher \
-v /docker/rancher/log:/var/log/log \
--name rancher rancher/rancher:v2.3.6
4、需要关闭防火墙
(建议开启指定端口,见Centos防火墙配置。最简单的方法就是直接停用防火墙)
打开单个端口:firewall-cmd --zone=public --add-port=4430/tcp --permanent
打开多个端口:firewall-cmd --zone=public --add-port=20000-29999/tcp --permanent
或者直接停用(最简单)
systemctl stop firewalld && systemctl disable firewalld
5、通过web访问 Rancher
首次登录需要设置账号密码
登陆后如下:
此时rancher部署成功 !
三、通过Rancker部署K8S集群
1、登录Rancher首页界面点击右上方,新建集群
2、选择自定义集群
3、配置参数
其它参数默认即可 !
4、点击下一步
选择主机角色功能,再复制一下命令到对应主机。注意主机需要安装docker后。
注意:
1、master节点勾选Etced和Controller两个,工资node节点勾选worker几点就行,把下面对应的命令拷贝到对应的服务器即可!
2、如果只有1台服务器,那就3个都勾选上,再执行到对应服务器上!
以下为只有1台服务器的:
仅供参考,需要拷贝自对应的命令!
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.3.6 --server https://39.103.200.229:4430 --token jkgks8j4njxlfnv5fv2qrlk9q2fdlsj8bsrbgd6jr4gxt92ltc9pd6 --ca-checksum 2ecf277824226c8ab72980079e823e4a722a42e7db986a8b50cec72f975e18c0 --etcd --controlplane --worker
执行完Rancher界面会有以下提示 :
5、此时报错 2380、1337 。
重启docker服务即可解决。(一次性pull多个镜像出现的问题)
6、部署完镜像及docker如下
7、此时报错。是在预拉镜像服务。等待即可
在后台可以看见正在增加镜像
到此时,集群可以正常使用。(后台镜像还在拉取)
到这里,一个基本的单节点1台服务部署的k8s集群完成了,一般集群是多台服务器,上面的界面旧货出现对应的master和node节点服务器
四、NFS存储部署
部署NFS方便在Rancher部署容器服务时候将卷数据挂载到NFS上面。集群环境容器持久化卷到宿主机本身不方便做映射已经共享,高可用重新拉取容器不可用。
1、 下载 nfs 服务
下载 nfs 服务
yum -y install nfs-utils rpcbind
其它三台服务器都安装nfs工具
yum install -y nfs-utils
2、启动服务并加入开机自启
systemctl start nfs && systemctl enable nfs
systemctl start rpcbind && systemctl enable rpcbind
3、创建共享目录并赋予最大权限
mkdir -p /nfs && chmod -R 777 /nfs
4、配置完成后重新加载
#重新加载
exportfs -r
# 查看挂载点信息
showmount -e
5、rancher平台配置
创建持久卷PV
添加完后 nfs-pv为Avilable状态 证明添加成功
6、在命名空间中创建数据卷(PVC)
很快就会绑定完成
PVC
PV
注意:因为是通过外网口挂载nfs,后台需关闭防火墙!!!!!
7、部署服务挂载NFS卷
用docker随便拉取一个服务下来测试(以nginx为例),用来演示挂载NFS卷
docker run -d --privileged --restart=unless-stopped \ -p 80:80 -p 443:443 \ -v /etc/nginx.conf:/etc/nginx/nginx.conf \ nginx:1.14
部署容器时需要映射卷,在映射之前需要先拉去nginx容器拷贝映射文件(或者会报错)
复制命令
通过命令查看容器ID
docker ps
先把需要的nginx文件拷贝下来:
docker cp 2c3f6a87803c:/etc/nginx/conf.d /nfs/nginx/conf.d
docker cp 2c3f6a87803c:/etc/nginx/nginx.conf /nfs/nginx/nginx.conf
docker cp 2c3f6a87803c:/usr/share/nginx/html /nfs/nginx/html
copy后,再开始映射(子路径及nfs路径,省去/nfs,直接从子路径开始)
端口映射
此时保存就可以在Rancher界面看见对应的pod服务了。对应持久化配置文件在NFS卷里面。