项目名称:基于Docker-K8s的Web集群
网络拓扑图
项目描述
项目名称:基于Docker-K8s的Web集群
项目环境:Docker 20.10.5,CentOS 7.6 (7台 2核2G),Nginx 1.19.8,Ansible 2.9.18,NFS,Prometheus 2.0.0,Grafana 4.2.0
项目描述:
实现一个高可用的负载均衡器的Web服务器集群,使用Kubeadm搭建K8s集群,底层采用K8s管理的Docker集群来提供Web服务,大量使用容器来完成Web服务的扩展性、高可用性。
项目步骤:
1.规划设计整个集群的架构,前端使用Nginx做负载均衡器,后端使用K8s来实现Web容器负载均衡和高可用;
2.部署好Ansible服务器,在所有的机器之间配置SSH免密通道;编写好部署Nginx,NFS,K8s的脚本,编写Ansible的Playbook实现批量部署;
3.后端采用K8s来管理整个Docker集群,基于Kubeadm3个节点的K8s集群,总共启动10个容器来提供Web服务;
4.使用NFS服务为所有的Docker节点提供相同Web数据,实现数据一致性。所有的Docker Nginx容器使用PV,PVC与 数据卷、NFS融合,实现容器Web文件共享;再创建服务,类型为NodePort,达到暴露端口的目的;
5.使用Prometheus进行K8s集群的监控,使用Grafana成图工具进行数据展示。
项目心得:
这次实验是对曾经做过的Docker Swarm项目的推倒与重组;通过这次实验,使我在考虑问题和实践操作时更加细心周全,同时对K8s集群项目有了更加直观的了解。
详细步骤
Ansible批量部署
免密通道
ssh-keygen -t ecdsa
ssh-copy-id -i ~/.ssh/id_ecdsa.pub 192.168.2.72 # master
ssh-copy-id -i ~/.ssh/id_ecdsa.pub 192.168.2.73 # node1
ssh-copy-id -i ~/.ssh/id_ecdsa.pub 192.168.2.94 # node2
ssh-copy-id -i ~/.ssh/id_ecdsa.pub 192.168.2.81 # nfs-server
ssh-copy-id -i ~/.ssh/id_ecdsa.pub 192.168.2.79 # load-balancer
ssh-copy-id -i ~/.ssh/id_ecdsa.pub 192.168.2.75 # prometheus
ansible-playbook
yum install epel-release -y
yum install ansible -y
vim /etc/ansible/hosts
[docker-kubeadm]
192.168.2.72
192.168.2.73
192.168.2.94
[nfs]
192.168.2.81
192.168.2.72
192.168.2.73
192.168.2.94
[loadbalancer]
192.168.2.79
vim ansible_playbook.yaml
- hosts: docker-kubeadm
remote_user: root
tasks:
- name: deploy kubeadm
script: ~/install_kubeadm.sh
- hosts: loadbalancer
remote_user: root
tasks:
- name: deploy nginx
script: ~/onekey_install_nginx.sh
- hosts: nfs
remote_user: root
tasks:
- name: install nfs-utils
script: ~/install_nfs.sh
ansible-playbook ansible_playbook.yaml
脚本 - 使用Kubeadm部署K8s集群
vim install_kubeadm.sh
#!/bin/bash
# 卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum install -y yum-utils
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker
#配置 Docker 使用 systemd 作为默认 Cgroup 驱动
cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors" : [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"https://cr.console.aliyun.com/"]
}
EOF
#重启docker
systemctl restart docker