一、理论基础:
1、Docker:
Docker是一个容器引擎,容器是由Docker创建的。
2、Docker-Compose:
Docker-Compose是用来管理容器的,有点像容器的管家,想象一下当Docker中有成百上千的容器需要启动时,如果一
个一个的启动费时费力。有了Docker-Compose只需要编写一个文件,执行一些这个文件,Docker就会按照声明的配置去
把所有的容器启动起来,Docker-Compose只能管理当前主机上的Docker,不能启动其他主机上的Docker容器。
3、Docker Swarm:
Docker Swarm是一款用来管理多主机上的Docker容器的工具,可以负责启动容器、监控容器状态,如果容器的状态
不正常它会重新启动一个新的容器来提供服务,同时也提供服务之间的负载均衡,而这些是Docker-Compose做不到的。
4、Kubernetes:
Kubernetes本身的角色定位和Docker Swarm是相同的,Kubernetes是谷歌公司根据自身多年的运维经验研发的一款跨
主机的容器管理平台。
5、Rancher:
Rancher是更上层的管理框架,更像是一个微容器云的PAAS管理平台,可以帮助企业在生产环境中运行和管理Docker
和Kubernetes,而无需从头开始构建容器服务平台,只需512M RAM即可运行。Rancher简化了使用Kubernetes的流
程,开发者可以随处运行Kubernetes(Run Kubernetes Everywhere),增强DevOps团队的能力。可以把Rancher看做是
相比于Kubernetes更上层的管理平台,对Kubernetes进行了功能的扩展与实现了和Kubernetes集群交互的一些便捷工
具,包括执行命令行、管理多个Kubernetes集群、查看Kubernetes集群节点的运行状态等。
二、搭建Rancher:
1、服务器资源划分:
IP | 配置 | 作用 |
192.168.1.90 | 2C/4G/40G | rancher-server、harbor、nfs |
192.168.1.91 | 2C/4G/40G | etcd、control |
192.168.1.92 | 2C/4G/40G | rancher-agent(worker) |
192.168.1.93 | 2C/4G/40G | rancher-agent(worker |
2、拓扑图:
3、搭建Rancher平台:
- 初始化centos7:
# 1、设置网卡信息
# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
BOOTPROTO=static # 设置静态手动分配ip
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=f60b3b48-1d0d-46b1-ab4e-7d6e27f59d8e
DEVICE=enp0s3
ONBOOT=yes # 系统启动时是否激活网卡 yes表示激活网卡
IPADDR=192.168.1.90 # 系统固定ip
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.1.1 # 网关
DNS=8.8.8.8 # DNS
# 2、重启network
systemctl restart network
# 3、配置主机名
hostnamectl set-hostname distributed-env-90
hostnamectl set-hostname distributed-env-91
hostnamectl set-hostname distributed-env-92
hostnamectl set-hostname distributed-env-93
hostnamectl set-hostname distributed-env-94
# 4、yum源更新
yum -y update
# 5、时间钟同步
yum install ntpdate -y
ntpdate time.windows.com
# 6、关闭SELINUX
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭selinux
setenforce 0 # 临时关闭selinux
# 7、关闭系统防火墙
systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld # 禁用防火墙
# 8、关闭Swap分区
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久关闭swap分区
swapoff -a # 临时关闭swap分区
- 安装docker、docker-compose:
# 1、安装docker yum源
yum -y install yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 2、安装docker
yum install -y docker-ce
# 3、设置docker开机自启动
systemctl enable docker
# 4、启动docker服务
systemctl start docker
# 5、修改docker镜像仓库
# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://d3mf5ikh.mirror.aliyuncs.com/"]
}
# 6、重启docker服务
systemctl restart docker
# 7、下载docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.29.1/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
# 8、配置docker-compose二进制文件可执行权限
sudo chmod +x /usr/local/bin/docker-compose
- 安装harbor、配置私服(192.168.1.90):
# 1、下载harbor安装包
wget https://github.com/goharbor/harbor/releases/download/v2.2.1/harbor-offline-installer-v2.2.1.tgz
# 2、加压harbor安装包
tar -zxvf harbor-offline-installer-v2.2.1.tgz
# 3、修改harbor.yml配置信息
# vim harbor.yml
hostname: 192.168.0.94 # 配置成本机ip
http:
port: 80 # 默认端口号80
harbor_admin_password: Harbon12345 # 默认管理员登录密码
# 4、执行prepare
./prepare
# 5、安装harbo
sh install.sh
# 6、配置docker私服(在需要使用私服的机器上配置)
# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://d3mf5ikh.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.1.94"]
}
# 7、重启docker服务
systemctl restart docker
- 准备
NFS
(192.168.1.90):
# 下载NFS
yum install -y nfs-common nfs-utils rpcbind
# 分配权限
mkdir /nfsdata && chmod 666 /nfsdata && chown nfsnobody /nfsdata
# 配置挂载
vim /etc/exports
/nfsdata *(rw,no_root_squash,no_all_squash,sync)
# 启动
systemctl start rpcbind && systemctl start nfs
- 安装
Rancher Server
(192.168.1.90):
# 1、设置网卡转发
# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
# 重启网卡服务
systemctl restart network
# 查看网卡转发是否配置成功
sysctl net.ipv4.ip_forward
# 2、启动rancher-server
docker run -d --restart=unless-stopped \
-p 8888:80 -p 8443:443 \
-e CATTLE_SYSTEM_CATALOG-bundled \
-e AUDIT_LEVEL=3 \
--privileged \
rancher/rancher:latest
三、使用Rancher搭建K8s集群:
1、设置Rancher登录密码(仅限第一次登录):
2、登录Rancher:
3、创建K8s集群:
在192.168.1.91机器上安装Etcd、Control Plane
:
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.5.7 --server https://192.168.1.90:8443 --token krp7hvb299qpnd9kdv9d8jj5j2tggpq982rjs87hd6lkhst2m2ghc9 --ca-checksum a3e9ed2c5b550f67f4e5012d8cdccbf49a292acc5757802f777fe557159e351a --etcd --controlplane
在192.168.1.92~93机器上安装Worker
:
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.5.7 --server https://192.168.1.90:8443 --token krp7hvb299qpnd9kdv9d8jj5j2tggpq982rjs87hd6lkhst2m2ghc9 --ca-checksum a3e9ed2c5b550f67f4e5012d8cdccbf49a292acc5757802f777fe557159e351a --worker
根据网络及服务器配置情况,集群安装过程中可能会比较耗时。
4、测试K8s集群——部署Nginx:
输入应用名称、Docker镜像构点击保存。
Nginx容器启动后,如何访问?
通过生成的随机端口即可访问部署的nginx容器,如下:
5、PVC挂载:
PVC挂载可以实现每一个Pod容器内特定的目录下的数据同步到指定的外部存储,使用场景最多的就是同步日志数据。
1、先添存储-->持久卷(PV):
2、添加PVC:
3、将nginx容器的某个目录挂载到PVC存储:
验证容器挂载PVC是否成功:
在命令行执行如下命令:
cd /data
touch a
在启动nfs服务的节点进入/nfsdata目录下查看:
四、Spring Cloud应用部署到K8S集群中:
1、编译源码:
mvn clean package -Dmaven.test.skip=true
2、构建docker镜像:
docker build -t gateway-service .
3、给镜像打标签:
docker tag gateway-service 192.168.1.90/pub/gateway-service:1.0
4、将镜像推送到docker私服:
docker login 192.168.1.90
docker push 192.168.1.90/pub/gateway-service:1.0
5、部署应用:
访问部署的Spring Boot应用: