• 内网环境基于 k8s 的大型网站电商解决方案(一)


    一、环境说明

    1、所有系统为rockylinux8.6最小化安装,所有服务器均为内网,只有manager为双网卡(可访问互联网),提供内网yum源、DNS解析、时间同步等
    2、 k8s搭建高可用集群版本为1.24.6(基于containerd部署) 3台控制节点,2台工作节点
    3、搭建rancher平台管理k8s集群(注:rancher为centos7.9最小化安装)
    4、 mysql版本为8.0.31  搭建MGR
    5、 ceph版本为quincy版,通过cephadm搭建
    6、镜像存放在 harbor 仓库,版本为2.6.0
    8、电商项目使用 LNMP 架构
    9、PHP 和 Nginx 共享同一个 pvc:基于 cephfs 划分 pv
    10、使用 Prometheus 监控电商平台,在 Grafana 可视化展示监控数据
    11、搭建 efk+logstash+kafka 日志收集平台
    12、K8S升级,将k8s升级至1.25.2,备份etcd

    规划如下:

    序号 系统名 IP地址 配置 作用 备注
    1 master1 192.168.8.81 8G /sda 60G K8S控制节点
    2 master2 192.168.8.82 8G /sda 60G K8S控制节点
    3 master3 192.168.8.83 8G /sda 60G K8S控制节点
    4 node1 192.168.8.84 8G /sda 60G K8S工作节点
    5 node2 192.168.8.85 8G /sda 60G K8S工作节点
    6 master 192.168.8.88 8G /sda 60G K8S  VIP
    7 harbor1 192.168.8.91 8G /sda 60G harbor 私有仓库
    8 harbor2 192.168.8.92 8G /sda 60G harbor 私有仓库
    9 rancher 192.168.8.96 8G /sda 60G rancher管理平台 centos7.9
    10 mysqla 192.168.8.51 8G /sda 60G mysql数据库
    11 mysqlb 192.168.8.52 8G /sda 60G mysql数据库
    12 mysqlc 192.168.8.53 8G /sda 60G mysql数据库
    13 mysql 192.168.8.55 8G /sda 60G mysql数据库 vip
    14 cepha 192.168.8.61 8G /sda 60G,/sdb 20G,/sdc 20G ceph集群
    15 cephb 192.168.8.62 8G /sda 60G,/sdb 20G,/sdc 20G ceph集群
    16 cephc 192.168.8.63 8G /sda 60G,/sdb 20G,/sdc 20G ceph集群
    17 nfs 192.168.8.100 8G /sda 60G nfs共享
    18 manager 192.168.8.80 8G /sda 60G yum源、dns、ntp等

    二、基础环境搭建

    1、安装系统rockylinux8.6最小化

    网卡模式为仅主机

    手动分区

    所有服务器配置DNS为192.168.8.80,gateway 192.168.8.1

     关闭selinux

    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

    2、安装基础软件包及chrony(manager)

    设置防火墙

    1. firewall-cmd --add-service=http --add-service=ntp --add-service=dns --permanent
    2. firewall-cmd --reload

    安装基础软件包

    yum install vim net-tools bash-completion wget -y

    安装chronyc

    1. yum install chrony -y
    2. sed -i 's/2.pool.ntp.org/ntp.aliyun.com/g' /etc/chrony.conf
    3. echo 'allow 192.168.8.0/24' >> /etc/chrony.conf
    4. systemctl enable --now chronyd
    5. systemctl status chronyd
    6. chronyc sources

     3、配置manager服务器yum源

    1. yum install httpd -y
    2. systemctl enable --now httpd
    3. mkdir /var/www/html/k8s
    4. mkdir /var/www/html/ceph
    5. mkdir /var/www/html/epel
    6. mkdir /var/www/html/docker
    7. dnf install -y yum-utils device-mapper-persistent-data lvm2
    8. yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    9. sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
    10. cat << EOF > /etc/yum.repos.d/kubernetes.repo
    11. [kubernetes]
    12. name=Kubernetes
    13. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    14. enabled=1
    15. gpgcheck=1
    16. repo_gpgcheck=1
    17. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    18. EOF
    19. cat > /etc/yum.repos.d/ceph.repo << EOF
    20. [ceph-norch]
    21. name=ceph-norch
    22. baseurl=https://mirrors.aliyun.com/ceph/rpm-quincy/el8/noarch/
    23. enable=1
    24. gpgcheck=0
    25. [ceph-x86_64]
    26. name=ceph-x86_64
    27. baseurl=https://mirrors.aliyun.com/ceph/rpm-quincy/el8/x86_64/
    28. enable=1
    29. gpgcheck=0
    30. [ceph-source]
    31. name=ceph-source
    32. baseurl=https://mirrors.aliyun.com/ceph/rpm-quincy/el8/SRPMS/
    33. enable=1
    34. gpgcheck=0
    35. EOF

    4、搭建yum源服务器(manager)

    1. mount /dev/sr0 /mnt/
    2. cp -r /mnt/* /var/www/html/
    3. mv AppStream appstream
    4. mv BaseOS baseos
    5. dnf install -y kubelet-1.24.6 kubeadm-1.24.6 kubectl-1.24.6 --downloadonly --destdir /var/www/html/k8s/
    6. dnf install -y kubelet kubeadm kubectl --downloadonly --destdir /var/www/html/k8s/
    7. dnf install -y docker-ce --downloadonly --destdir /var/www/html/docker/
    8. dnf install -y cephadm --downloadonly --destdir /var/www/html/ceph/
    9. dnf install -y ceph-common --downloadonly --destdir /var/www/html/ceph/
    10. dnf install -y perl --downloadonly --destdir /var/www/html/epel/
    11. yum install createrepo
    12. createrepo /var/www/html/k8s
    13. createrepo /var/www/html/docker
    14. createrepo /var/www/html/ceph
    15. createrepo /var/www/html/epel
    16. systemctl restart httpd

    http://192.168.8.80/appstream/

    5、安装dnsmasq(manager)

    1. yum install dnsmasq -y
    2. echo 'listen-address=192.168.8.80' >> /etc/dnsmasq.conf
    3. cat >> /etc/hosts << EOF
    4. 192.168.8.80 manager
    5. 192.168.8.81 master1
    6. 192.168.8.82 master2
    7. 192.168.8.83 master3
    8. 192.168.8.84 node1
    9. 192.168.8.85 node2
    10. 192.168.8.88 master
    11. 192.168.8.91 harbor1
    12. 192.168.8.92 harbor2
    13. 192.168.8.96 rancher
    14. 192.168.8.51 mysqla
    15. 192.168.8.52 mysqlb
    16. 192.168.8.53 mysqlc
    17. 192.168.8.55 mysql
    18. 192.168.8.61 cepha
    19. 192.168.8.62 cephb
    20. 192.168.8.63 cephc
    21. 192.168.8.100 nfs
    22. EOF
    23. systemctl enable --now dnsmasq

    6、安装docker

     7、配置内网服务器yum源及NTP配置

    除80外所有服务器上执行

    1. rm -rf /etc/yum.repos.d/*
    2. cat > /etc/yum.repos.d/base.repo << EOF
    3. [appstream]
    4. name=appstream
    5. baseurl=http://manager/appstream
    6. enable=1
    7. gpgcheck=0
    8. [baseos]
    9. name=baseos
    10. baseurl=http://manager/baseos
    11. enable=1
    12. gpgcheck=0
    13. [k8s]
    14. name=k8s
    15. baseurl=http://manager/k8s
    16. enable=1
    17. gpgcheck=0
    18. [docker]
    19. name=k8s
    20. baseurl=http://manager/docker
    21. enable=1
    22. gpgcheck=0
    23. [ceph]
    24. name=ceph
    25. baseurl=http://manager/ceph
    26. enable=1
    27. gpgcheck=0
    28. [epel]
    29. name=epel
    30. baseurl=http://manager/epel
    31. enable=1
    32. gpgcheck=0
    33. EOF
    34. yum install -y wget bash-completion vim net-tools chrony
    35. sed -i 's/2.pool.ntp.org/manager/g' /etc/chrony.conf
    36. systemctl enable --now chronyd
    37. chronyc sources

     所有服务器关机,打快照

    三、搭建harbor私有仓库(harbor1、harbor2)

     1、安装docker

    1. yum install -y docker-ce
    2. systemctl start docker && systemctl enable docker

    2、修改内核参数

    1. modprobe br_netfilter
    2. echo "modprobe br_netfilter" >> /etc/profile
    3. cat > /etc/sysctl.d/docker.conf <<EOF
    4. net.bridge.bridge-nf-call-ip6tables = 1
    5. net.bridge.bridge-nf-call-iptables = 1
    6. net.ipv4.ip_forward = 1
    7. EOF
    8. sysctl -p /etc/sysctl.d/docker.conf
    9. systemctl restart docker

    3、安装docker-compose

      上传docker-compose-linux-x86_64至/root

    1. wget https://github.com/goharbor/harbor/releases/download/v2.6.0/harbor-offline-installer-v2.6.0.tgz
    2. wget https://github.com/docker/compose/releases/download/v2.11.0/docker-compose-linux-x86_64
    3. mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
    4. chmod +x /usr/local/bin/docker-compose

    4、生成ca证书

    1. mkdir /data/ssl -p
    2. cd /data/ssl/
    3. openssl genrsa -out ca.key 2048
    4. openssl req -new -x509 -days 365 -key ca.key -out ca.pem

    Country Name (2 letter code) [XX]: CN
    State or Province Name (full name) []:xinjiang
    Locality Name (eg, city) [Default City]:urumqi      
    Organization Name (eg, company) [Default Company Ltd]:myhub
    Organizational Unit Name (eg, section) []:CA
    Common Name (eg, your name or your server's hostname) []:harbor1
    Email Address []:23939296@qq.com

    5、生成域名证书

    1. openssl genrsa -out myhub.key 2048
    2. openssl req -new -key myhub.key -out myhub.csr

    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:xinjiang
    Locality Name (eg, city) [Default City]:urumqi
    Organization Name (eg, company) [Default Company Ltd]:myhub
    Organizational Unit Name (eg, section) []:CA
    Common Name (eg, your name or your server's hostname) []:myhub
    Email Address []:23939296@qq.com

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:

    1. openssl x509 -req -in myhub.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out myhub.pem -days 365
    2. openssl x509 -noout -text -in myhub.pem

    6、安装harbor

    1. mkdir /data/install -p
    2. ll /data/ssl

     

    1. cd
    2. mv harbor-offline-installer-v2.6.0.tgz /data/install/
    3. cd /data/install/
    4. tar -xvf harbor-offline-installer-v2.6.0.tgz
    5. cd harbor
    6. cp harbor.yml.tmpl harbor.yml
    7. vim harbor.yml

    hostname: harbor1  ( harbor2)

    certificate: /data/ssl/myhub.pem

    private_key: /data/ssl/myhub.key

    harbor_admin_password: password

    1. docker load -i harbor.v2.6.0.tar.gz
    2. ./install.sh

    7、 停止harbor

    1. cd /data/install/harbor
    2. docker-compose stop

    8、启动harbor

    1. cd /data/install/harbor
    2. docker-compose start
    3. firewall-cmd --add-service=http --add-service=https --permanent;firewall-cmd --reload

    http://192.168.8.91     http://192.168.8.92

    9、配置镜像自动同步

    新建项目myhub    http://192.168.8.91

     配置仓库

     新建复制规则

    10、在192.168.8.80上测试

    1. cat > /etc/docker/daemon.json << EOF
    2. {
    3. "registry-mirrors": ["http://hub-mirror.c.163.com","https://0x3urqgf.mirror.aliyuncs.com"],
    4. "insecure-registries": [ "192.168.8.91","harbor1" ]
    5. }
    6. EOF
    7. systemctl daemon-reload
    8. systemctl restart docker
    9. docker login 192.168.8.91

     上传镜像至仓库

    1. docker pull nginx
    2. docker pull busybox
    3. docker tag busybox:latest 192.168.8.91/myhub/busybox:latest
    4. docker tag nginx:latest 192.168.8.91/myhub/nginx:latest
    5. docker push 192.168.8.91/myhub/busybox:latest
    6. docker push 192.168.8.91/myhub/nginx:latest

    http://192.168.8.91     http://192.168.8.92登录验证

     

    镜像已自动同步

    四、安装k8s高可用集群(master1-3,node1-2)

    1、修改内核参数(五台设备上执行)

    1. modprobe br_netfilter
    2. lsmod | grep br_netfilter
    3. cat > /etc/sysctl.d/k8s.conf <<EOF
    4. net.bridge.bridge-nf-call-ip6tables = 1
    5. net.bridge.bridge-nf-call-iptables = 1
    6. net.ipv4.ip_forward = 1
    7. EOF
    8. sysctl -p /etc/sysctl.d/k8s.conf

    2、开启Ipvs 五台设备

    1. lsmod|grep ip_vs
    2. modprobe -- ip_vs
    3. modprobe -- ip_vs_rr
    4. modprobe -- ip_vs_wrr
    5. modprobe -- ip_vs_sh
    6. lsmod|grep ip_vs
    7. modprobe br_netfilter
    8. echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
    9. echo 1 > /proc/sys/net/ipv4/ip_forward

  • 相关阅读:
    计算机视觉CV:在自动驾驶方面的应用与C++代码实现
    火山引擎 DataLeap:一家企业,数据体系要怎么搭建?
    C++_重载_指针_引用
    编译安装适用于树梅派4B的android系统
    STM32 定时器定时中断
    springboot读取resources下文件方式
    【MySQL】19-MySQL中如何创建数据库和管理数据库
    来了~worthington组织培养术语第二弹!
    你知道期权和期货有什么关联和区别吗?解析一下!
    MySQL常见面试题
  • 原文地址:https://blog.csdn.net/w975121565/article/details/127693335