做网站如何接单子,iis 网站 红,网站建设需求方案,如何开拓海外市场基于 KubeSphere 的 Kubernetes 生产实践 1.KubeSphere 简介1.1 全栈的 Kubernetes 容器云 PaaS 解决方案1.2 选型理由#xff08;从运维的角度考虑#xff09; 2.部署架构图3.节点规划3.1 软件版本3.2 规划说明3.2.1 K8s 集群规划3.2.2 存储集群3.2.3 中间件集群3.2.4 网络规… 基于 KubeSphere 的 Kubernetes 生产实践 1.KubeSphere 简介1.1 全栈的 Kubernetes 容器云 PaaS 解决方案1.2 选型理由从运维的角度考虑 2.部署架构图3.节点规划3.1 软件版本3.2 规划说明3.2.1 K8s 集群规划3.2.2 存储集群3.2.3 中间件集群3.2.4 网络规划3.2.5 存储选型说明 3.3 Kubernetes 集群节点规划3.4 存储集群节点规划3.5 中间件节点规划 4.K8s 集群服务器基础配置4.1 操作系统基础配置4.2 基本的安全配置4.3 Docker 安装配置 5.安装配置负载均衡5.1 三种解决方案5.2 安装配置5.2.1 安装软件包所有负载均衡节点5.2.2 配置 HAproxy所有负载均衡节点配置相同5.2.3 配置 Keepalived5.2.4 验证 6.KubeSphere 安装 Kubernetes6.1 下载 KubeKey6.2 创建包含默认配置的示例配置文件 config-sample.yaml6.3 根据规划编辑修改配置文件6.4 安装 KubeSphere 和 Kubernetes 集群6.5 验证安装结果 1.KubeSphere 简介
1.1 全栈的 Kubernetes 容器云 PaaS 解决方案
KubeSphere 是在 Kubernetes 之上构建的以应用为中心的 多租户容器平台提供全栈的 IT 自动化运维 的能力简化企业的 DevOps 工作流。KubeSphere 提供了运维友好的向导式操作界面帮助企业快速构建一个强大和功能丰富的容器云平台。
✅ 完全开源通过 CNCF 一致性认证的 Kubernetes 平台 100 100% 100 开源由社区驱动与开发。✅ 简易安装支持部署在任何基础设施环境提供在线与离线安装支持一键升级与扩容集群。✅ 功能丰富在一个平台统一纳管 DevOps、云原生可观测性、服务网格、应用生命周期、多租户、多集群、存储与网络。✅ 模块化 可插拔。✅ 平台中的所有功能都是可插拔与松耦合您可以根据业务场景可选安装所需功能组件。
官网地址https://kubesphere.io/zh/
1.2 选型理由从运维的角度考虑 安装简单使用简单。 具备构建一站式企业级的 DevOps 架构与可视化运维能力省去自己用开源工具手工搭积木。 提供从平台到应用维度的日志、监控、事件、审计、告警与通知实现集中式与多租户隔离的可观测性。 简化应用的持续集成、测试、审核、发布、升级与弹性扩缩容。 为云原生应用提供基于微服务的灰度发布、流量管理、网络拓扑与追踪。 提供易用的界面命令终端与图形化操作面板满足不同使用习惯的运维人员。 可轻松解耦避免厂商绑定。
2.部署架构图 3.节点规划
3.1 软件版本 操作系统版本centos 7.9 KubeSphere: v3.1.1 KubeKey 版本v1.1.1 Kubernetes 版本v1.20.4 Docker 版本v19.03.15
3.2 规划说明
3.2.1 K8s 集群规划
负载均衡 2 2 2 节点HAProxy使用 keepalived 实现高可用。 Master 节点 3 3 3 节点部署 KubeSphere 和 Kubernetes 的管理组件etcd 等服务。本方案并没有把 etcd 单独部署有条件或是规模较大的场景可以单独部署 etcd。 Worker 节点 6 6 6 节点部署应用根据实际需求决定数量。
3.2.2 存储集群 3 3 3 节点GlusterFS每个节点 1 T 1T 1T 数据盘
3.2.3 中间件集群
在 K8s 集群之外独立部署的常见中间件。Nginx 代理节点使用 keepalived 实现高可用不采用 Ingress。MySQL 数据库主从架构中小规模使用大规模需要专业运维人员或是使用云上成熟的产品最好使用云服务商的产品。Ansible单独的自动化运维管理节点执行日常批量运维管理操作。GitLab运维代码管理实现 GitOps。Harbor镜像仓库。Elasticsearch 3 3 3 节点存储日志。Prometheus单独部署用于 K8s 集群和 Pod 的监控。Redis 集群 3 3 3 节点哨兵模式该集群暂时还是部署在 K8s 上后期考虑单独部署因此预先规划预留机器建议考虑云服务商的产品。RocketMQ 集群 3 3 3 节点该集群暂时还是部署在 K8s 上后期考虑单独部署因此预先规划预留机器建议考虑云服务上的产品。
3.2.4 网络规划
我们网络要求比较多。因此不同功能模块规划了不同的网段各位可根据需求合理规划。
功能域网段说明K8s 集群192.168.9.0/24K8s 集群内部节点使用存储集群192.168.10.0/24存储集群内部节点使用中间件集群192.168.11.0/24独立在 K8s 集群外的各种中间件节点使用
3.2.5 存储选型说明
候选者
存储方案优点缺点说明Ceph资源多没有 Ceph 集群故障处理能力最好不要碰曾经经历过 3 3 3 副本全部损坏数据丢失的惨痛经历因此没有能力处理各种故障之前不会再轻易选择GlusterFS部署、维护简单多副本高可用资料少部署和维护简单出了问题找回数据的可能性大一些NFS使用广泛单点、网络抖动据说生产环境用的很多但是单点和网络抖动风险隐患不小暂不考虑MinIO官宣全球领先的对象存储先锋还未实践Longhorn官宣企业级云原生容器存储解决方案还未实践 入选者暂定GlusterFS 说明 以上方案为初期初选属于摸着石头过河选一个先用着后期根据运行情况再重新调整。大家请根据自己的存储需求和团队运维能力选择适合的方案。因为我们的业务场景对于持久化存储的需求也就是存放一些 Log 日志能承受一定的数据损失因此综合选择了 GlusterFS。存储规划中假设 1 T 1T 1T 数据满足需求没考虑扩容后续会做补充。
3.3 Kubernetes 集群节点规划
节点角色主机名CPU(核)内存(GB)系统盘(GB)数据盘(GB)IP备注负载均衡k8s-slb-02450192.168.9.2 / 192.168.9.1负载均衡k8s-slb-12450192.168.9.3 / 192.168.9.1Masterk8s-master-083250500192.168.9.4Masterk8s-master-183250500192.168.9.5Masterk8s-master-283250500192.168.9.6Workerk8s-node-083250500192.168.9.7Workerk8s-node-183250500192.168.9.8Workerk8s-node-283250500192.168.9.9Workerk8s-node-383250500192.168.9.10Workerk8s-node-483250500192.168.9.11Workerk8s-node-583250500192.168.9.12Workerk8s-node-n83250500…根据自己的业务需求增加节点
3.4 存储集群节点规划
节点角色主机名CPU(核)内存(GB)系统盘(GB)数据盘(GB)IP备注存储节点glusterfs-node-0416501000192.168.10.1存储节点glusterfs-node-1416501000192.168.10.2存储节点glusterfs-node-2416501000192.168.10.3
3.5 中间件节点规划
节点角色主机名CPU(核)内存(GB)系统盘(GB)数据盘(GB)IP备注nginx 代理nginx-041650192.168.11.2 / 192.168.11.1自建域名网关不采用 Ingressnginx 代理nginx-141650192.168.11.3 / 192.168.11.1自建域名网关不采用 IngressMySQL-主db-master41650500192.168.11.4MySQL-从db-slave41650500192.168.11.5Elasticsearchelastic-0416501000192.168.11.6Elasticsearchelastic-1416501000192.168.11.7Elasticsearchelastic-2416501000192.168.11.8自动化运维ansible2450192.168.11.9安装 ansible用于自动化运维配置管理harbor41650500192.168.11.10安装 gitlab 和 harborPrometheusmonitor41650500192.168.11.11Redisredis-041650200192.168.11.12预留Redisredis-141650200192.168.11.13预留Redisredis-241650200192.168.11.14预留RocketMQrocketmq-041650200192.168.11.15预留RocketMQrocketmq-141650200192.168.11.16预留RocketMQrocketmq-241650200192.168.11.17预留
4.K8s 集群服务器基础配置
4.1 操作系统基础配置
1以下操作在 K8s 集群的 Master 和 Worker 节点均执行。 2以下操作为了记录博客采用的手工命令的方式实践中都采用的 Ansible 进行的自动化配置。
关闭防火墙和 SELinux
本环境没有考虑更多的安全配置因此关闭了防火墙和 SELinux有更高安全要求的环境不需要关闭而是需要进行更多的安全配置。
[rootk8s-master-0 ~]# systemctl stop firewalld systemctl disable firewalld
[rootk8s-master-0 ~]# sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config配置主机名
[rootk8s-master-0 ~]# hostnamectl set-hostname 规划的主机名配置主机名解析可选 挂载数据盘
# 查看数据盘盘符
[rootk8s-master-0 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
├─vda1 253:1 0 4G 0 part
└─vda2 253:2 0 36G 0 part /
vdb 253:16 0 500G 0 disk# 分区
[rootk8s-master-0 ~]# fdisk /dev/vdb
n
p
一路回车
....
w # 格式化文件系统可选 ext4 或是 xfs
[rootk8s-master-0 ~]# mkfs.ext4 /dev/vdb1# 创建挂载目录
[rootk8s-master-0 ~]# mkdir /data# 挂载磁盘
[rootk8s-master-0 ~]# mount /dev/vdb1 /data# 开机自动挂载
[rootk8s-master-0 ~]# echo /dev/vdb1 /data ext4 defaults 0 0 /etc/fstab更新操作系统并重启
[rootk8s-master-0 ~]# yum update
[rootk8s-master-0 ~]# reboot安装依赖软件包
[rootk8s-master-0 ~]# yum install socat conntrack ebtables ipset4.2 基本的安全配置
基线加固配置
每个企业的基线扫描标准和工具不尽相同因此本节内容请自行根据漏扫报告的整改要求进行配置。如有有需要后期可以分享我们使用的基线加固的自动化配置脚本。
4.3 Docker 安装配置
容器运行时我们生产环境保守的选择了 19.03 版本的 Docker安装时选择最新版的即可。
配置 docker yum 源
[rootk8s-master-0 ~]# vi /etc/yum.repods.d/docker.repo[docker-ce-stable]
baseurlhttps://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/$releasever/$basearch/stable
gpgcheck1
gpgkeyhttps://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
enabled1[rootk8s-master-0 ~]# yum clean all
[rootk8s-master-0 ~]# yum makecache创建 Docker 的配置文件目录和配置文件
[rootk8s-master-0 ~]# mkdir -p /etc/docker/[rootk8s-master-0 ~]# vi /etc/docker/daemon.json{data-root: /data/docker,registry-mirrors:[https://docker.mirrors.ustc.edu.cn],log-opts: {max-size: 5m,max-file:3},exec-opts: [native.cgroupdriversystemd]
}安装 Docker
[rootk8s-master-0 ~]# yum install docker-ce-19.03.15-3.el7 docker-ce-cli-19.03.15-3.el7 -y启动服务并设置开机自启动
[rootk8s-master-0 ~]# systemctl restart docker.service systemctl enable docker.service验证
[rootk8s-master-0 ~]# docker version
Client: Docker Engine - CommunityVersion: 19.03.15API version: 1.40Go version: go1.13.15Git commit: 99e3ed8919Built: Sat Jan 30 03:17:57 2021OS/Arch: linux/amd64Experimental: falseServer: Docker Engine - CommunityEngine:Version: 19.03.15API version: 1.40 (minimum version 1.12)Go version: go1.13.15Git commit: 99e3ed8919Built: Sat Jan 30 03:16:33 2021OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.4.12GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5drunc:Version: 1.0.2GitCommit: v1.0.2-0-g52b36a2docker-init:Version: 0.18.0GitCommit: fec36835.安装配置负载均衡
5.1 三种解决方案
采用公有云或是私有云平台上自带的弹性负载均衡服务
配置监听器监听的端口
服务协议端口apiserverTCP 6443 6443 6443ks-consoleTCP 30880 30880 30880httpTCP 80 80 80httpsTCP 443 443 443 采用 HAProxy 或是 Nginx 自建负载均衡此次选择 使用 KubeSphere 自带的解决方案部署 HAProxy KubeKey v1.2.1 开始支持参考 使用 KubeKey 内置 HAproxy 创建高可用集群
5.2 安装配置
5.2.1 安装软件包所有负载均衡节点
[rootk8s-master-0 ~]# yum install haproxy keepalived5.2.2 配置 HAproxy所有负载均衡节点配置相同
编辑配置文件
[rootk8s-master-0 ~]# vi /etc/haproxy/haproxy.cfg配置示例
globallog /dev/log local0 warningchroot /var/lib/haproxypidfile /var/run/haproxy.pidmaxconn 4000user haproxygroup haproxydaemonstats socket /var/lib/haproxy/statsdefaultslog globaloption httplogoption dontlognulltimeout connect 5000timeout client 50000timeout server 50000frontend kube-apiserverbind *:6443mode tcpoption tcplogdefault_backend kube-apiserverbackend kube-apiservermode tcpoption tcplogoption tcp-checkbalance roundrobindefault-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100server kube-apiserver-1 192.168.9.4:6443 check # Replace the IP address with your own.server kube-apiserver-2 192.168.9.5:6443 check # Replace the IP address with your own.server kube-apiserver-3 192.168.9.6:6443 check # Replace the IP address with your own.frontend ks-consolebind *:30880mode tcpoption tcplogdefault_backend ks-consolebackend ks-consolemode tcpoption tcplogoption tcp-checkbalance roundrobindefault-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100server kube-apiserver-1 192.168.9.4:30880 check # Replace the IP address with your own.server kube-apiserver-2 192.168.9.5:30880 check # Replace the IP address with your own.server kube-apiserver-3 192.168.9.6:30880 check # Replace the IP address with your own.启动服务并设置开机自启动所有负载均衡节点
[rootk8s-master-0 ~]# systemctl restart haproxy systemctl enable haproxy5.2.3 配置 Keepalived
编辑配置文件所有负载均衡节点
[rootk8s-master-0 ~]# vi /etc/keepalived/keepalived.confLB 节点 1 1 1 配置文件示例
global_defs {notification_email {}router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script chk_haproxy {script killall -0 haproxyinterval 2weight 2
}vrrp_instance haproxy-vip {state MASTER # 主服务器的初始状态priority 100 # 优先级主服务器的要高interface eth0 # 网卡名称根据实际情况替换virtual_router_id 60advert_int 1authentication {auth_type PASSauth_pass 1111}unicast_src_ip 192.168.9.2 # 本机eth0网卡的IP地址unicast_peer {192.168.9.3 # SLB节点2的IP地址}virtual_ipaddress {192.168.9.1/24 # VIP地址}track_script {chk_haproxy}
}LB 节点 2 2 2 配置文件示例
global_defs {notification_email {}router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script chk_haproxy {script killall -0 haproxyinterval 2weight 2
}vrrp_instance haproxy-vip {state BACKUP # 从服务器的初始状态priority 99 # 优先级,从服务器的低于主服务器的值interface eth0 # 网卡名称根据实际情况替换virtual_router_id 60advert_int 1authentication {auth_type PASSauth_pass 1111}unicast_src_ip 192.168.9.3 # 本机eth0网卡的IP地址unicast_peer {192.168.9.2 # SLB节点1的IP地址}virtual_ipaddress {192.168.9.1/24 # VIP地址}track_script {chk_haproxy}
}启动服务并设置开机自启动所有负载均衡节点
[rootk8s-master-0 ~]# systemctl restart keepalived systemctl enable keepalived5.2.4 验证
查看 VIP在负载均衡节点
[rootk8s-slb-0 ~]# ip a s
1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: eth0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc mq state UP group default qlen 1000link/ether 52:54:9e:27:38:c8 brd ff:ff:ff:ff:ff:ffinet 192.168.9.2/24 brd 192.168.9.255 scope global noprefixroute dynamic eth0valid_lft 73334sec preferred_lft 73334secinet 192.168.9.1/24 scope global secondary eth0valid_lft forever preferred_lft foreverinet6 fe80::510e:f96:98b2:af40/64 scope link noprefixroutevalid_lft forever preferred_lft forever验证 VIP 的连通性在 k8s-master 其他节点
[rootk8s-master-0 ~]# ping -c 4 192.168.9.1
PING 192.168.9.1 (192.168.9.1) 56(84) bytes of data.
64 bytes from 192.168.9.1: icmp_seq1 ttl64 time0.664 ms
64 bytes from 192.168.9.1: icmp_seq2 ttl64 time0.354 ms
64 bytes from 192.168.9.1: icmp_seq3 ttl64 time0.339 ms
64 bytes from 192.168.9.1: icmp_seq4 ttl64 time0.304 ms--- 192.168.9.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev 0.304/0.415/0.664/0.145 ms6.KubeSphere 安装 Kubernetes
6.1 下载 KubeKey
KubeKey 安装在了 master-0 节点也可以安装在运维管理节点。
# 使用国内环境
[rootk8s-master-0 ~]# export KKZONEcn# 执行以下命令下载 KubeKey
[rootk8s-master-0 ~]# curl -sfL https://get-kk.kubesphere.io | VERSIONv1.1.1 sh -# 为kk添加可执行权限(可选)
[rootk8s-master-0 ~]# chmod x kk6.2 创建包含默认配置的示例配置文件 config-sample.yaml
[rootk8s-master-0 ~]# ./kk create config --with-kubesphere v3.1.1 --with-kubernetes v1.20.4--with-kubesphere 指定 KubeSphere 版本 v3.1.1 --with-kubernetes 指定 Kubernetes 版本 v1.20.4
6.3 根据规划编辑修改配置文件
vi config-sample.yaml
apiVersion: kubekey.kubesphere.io/v1alpha1
kind: Cluster
metadata:name: sample
spec:hosts:- {name: k8s-master-0, address: 192.168.9.3, internalAddress: 192.168.9.3, user: root, password: Pssw0rd123}- {name: k8s-master-1, address: 192.168.9.4, internalAddress: 192.168.9.4, user: root, password: Pssw0rd123}- {name: k8s-master-2, address: 192.168.9.5, internalAddress: 192.168.9.5, user: root, password: Pssw0rd123}- {name: k8s-node-0, address: 192.168.9.6, internalAddress: 192.168.9.6, user: root, password: Pssw0rd123}- {name: k8s-node-1, address: 192.168.9.7, internalAddress: 192.168.9.7, user: root, password: Pssw0rd123}- {name: k8s-node-2, address: 192.168.9.8, internalAddress: 192.168.9.8, user: root, password: Pssw0rd123}roleGroups:etcd:- k8s-master-0- k8s-master-1- k8s-master-2master:- k8s-master-0- k8s-master-1- k8s-master-2worker:- k8s-node-0- k8s-node-1- k8s-node-2controlPlaneEndpoint:domain: lb.kubesphere.localaddress: 192.168.9.1port: 6443kubernetes:version: v1.20.4imageRepo: kubesphereclusterName: cluster.localnetwork:plugin: calicokubePodsCIDR: 10.233.64.0/18kubeServiceCIDR: 10.233.0.0/18registry:registryMirrors: []insecureRegistries: []addons: []---
apiVersion: installer.kubesphere.io/v1alpha1
kind: ClusterConfiguration....(后面太多都是ks的配置本文不涉及先省略)重点配置项说明 hosts 配置 K8s 集群节点的名字、IP、管理用户、管理用户名 roleGroups etcdetcd 节点名称 mastermaster 节点的名称 workerworker 节点的名称 controlPlaneEndpoint domain负载衡器 IP 对应的域名一般形式 lb.clusterName address负载衡器 IP 地址 kubernetes clusterNamekubernetes 集群的集群名称
6.4 安装 KubeSphere 和 Kubernetes 集群
[rootk8s-master-0 ~]# ./kk create cluster -f config-sample.yaml6.5 验证安装结果
验证安装过程
[rootk8s-master-0 ~]# kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l appks-install -o jsonpath{.items[0].metadata.name}) -f验证集群状态
安装完成后您会看到如下内容
#####################################################
### Welcome to KubeSphere! ###
#####################################################Console: http://192.168.9.2:30880
Account: admin
Password: P88w0rdNOTES1. After you log into the console, please check themonitoring status of service components inthe Cluster Management. If any service is notready, please wait patiently until all componentsare up and running.2. Please change the default password after login.#####################################################
https://kubesphere.io 20xx-xx-xx xx:xx:xx
#####################################################