区级管理平台环境部署(含数据中心部署)
区级管理平台环境部署
配置要求:
安装docker、kubernetes(所有k8s节点)
安装前先卸载冲突的软件
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
安装docker
cd docker && yum install -y *.rpm mkdir -pv /data/docker ln -s /data/docker/ /var/lib/docker
安装docker-compose
cd ../docker-compose && yum install -y *.rpm 正常情况下docker和docker-compose就已经安装完成了
可通过查看docker确认是否安装成功
docker -v
系统初始化(所有服务器都要操作)
- 创建用户
系统运行需要创建uid和gid为2049的admin用户,先使用id admin查看是否有admin用户,有admin用户的话用户ID的组ID是多少
如果没有admin用户,则创建admin用户
groupadd -g 2049 admin useradd -g 2049 -G docker admin
如果已存在admin用户且UID和GID不为2049的话,需更改UID和GID
usermod -u 2049 admin && groupmod -g 2049 admin && gpasswd -a admin docker
创建admin用户后UID不为2049的情况,先使用下面命令更改下/home/admin目录的权限,
chown admin.admin /home/admin/ -R
再更改用户UID即可
usermod -u 2049 admin
查看admin用户是否创建成功
id admin uid=2049(admin) gid=2049(admin) groups=2049(admin),946(docker)
图1 查看
- 系统调优
关闭防火墙
setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config systemctl disable --now firewalld chmod a+x /etc/rc.d/rc.local
图2 关闭防火墙配置iptables的ACCEPT规则
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
关闭swap分区
swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab
创建docker服务相关目录
mkdir -pv /data/{backup,cds,contacts,logs,tinyfs,webapps} chown admin.admin /data/{backup,cds,contacts,logs,tinyfs,webapps}
修改docker服务配置文件
mkdir -p /etc/docker cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" } } EOF
使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。
日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。
systemctl daemon-reload systemctl restart docker systemctl enable --now docker systemctl enable --now crond
设置定时清理日志任务
echo "0 0 */1 * * find /data/logs/ -name '*202*' -mtime +1 |xargs gzip &" >> /var/spool/cron/root echo "0 0 */1 * * find /data/logs/ -name '*202*' -mtime +30 |xargs rm -fr &" >> /var/spool/cron/root
安装常用服务
yum install -y net-tools vim wget gdb lsof sysstat iotop wget lrzsz tree unzip nfs-utils tcpdump telnet ntpdate yum-utils
调整内核参数
开启网桥模式,可将网桥的流量传递给iptables链
关闭IPv6协议
cat > /etc/sysctl.d/kubernetes.conf << EOF net.bridge.bridge-nf-call-ip6tables=1 net.bridge.bridge-nf-call-iptables=1 net.IPv6.conf.all.disable_IPv6=1 net.IPv4.ip_forward=1 EOF
加载参数
sysctl --system
配置k8s镜像源(所有节点)
定义kubernetes源
cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=“镜像源地址”/kubernetes-el7-版本号 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=“镜像源地址”/yum-key.gpg EOF
安装kubeadm,kubelet和kubectl(所有节点)
yum install -y kubelet-1.21.3 kubeadm-1.21.3 kubectl-1.21.3
开机自启kubelet
systemctl enable kubelet.service
启动k8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启
systemctl start kubelet.service
初始化master节点(master节点)
kubeadm init \ --apiserver-advertise-address=IP地址 \ --image-repository “镜像源地址”/ \ --kubernetes-version v版本号 \ --service-cidr= IP地址/12 \ --pod-network-cidr= IP地址/16
如果要重新初始化集群状态:kubeadm reset,然后再进行上述操作记得保存好最后的 kubeadm join的信息node节点加入集群需要token!!!
也可以利用kubeadm token create --print-join-command 利用kubeadm命令重新生成token,node 节点加入集群需要token
使用kubectl管理工具(master节点)
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看是否成功,等待一会,同时可发现像etc,controller,scheduler等组件都以pod的方式安装成功
kubectl cluster-info
node节点操作(所有node节点)
在每个节点上执行,加入集群
kubeadm join 10.13.16.61:6443 --token q7glri.mjm2gperz347n99e --discovery-token-ca-cert-hash sha256:869fcc7584845d937a94f2a159a062565b64ac56b33207e2300d61fa2f98e2a7
安装flannel网络插件
下载flannel插件
wget https://gitcode.net/mirrors/flannel-io/flannel/-/blob/v0.20.2/Documentation/kube-flannel.yml
修改字段
net-conf.json: | { "Network": "10.244.0.0/16", ####初始化master节点时设置一样就行 将ip段修改和上文初始化master节点一样即可 "Backend": { "Type": "vxlan" } }
发布网络
kubectl apply -f kube-flannel.yml
查看所有pod
kubectl get pods -A
如果出现Running则表示正常,如果出现Init:0/1执行以下命令,修改 flannel 插件文件,这个版本比较低,高版本 k8s 尽量选择一些高一些的版本 flannel
sed -i -r "s#quay.io/coreos/flannel:.*-amd64#lizhenliang/flannel:v0.12.0-amd64#g" kube-flannel.yaml
检查各节点健康状态
查询master是否正常
kubectl get cs
如果状态为unhealthy
vim /etc/kubernetes/manifests/kube-scheduler.yaml vim /etc/kubernetes/manifests/kube-controller-manager.yaml
将- --port=0注释掉
部署StorageClass
安装nfs
yum install -y nfs-utils rpcbind
手动加载 NFS 共享服务时,应该先启动 rpcbind,再启动 nfs
systemctl start rpcbind && systemctl enable rpcbind systemctl start nfs && systemctl enable nfs
查看 rpcbind 端口是否开启,rpcbind 服务默认使用 tcp 端口 111
netstat -anpt | grep rpcbind
创建共享目录,并授权
mkdir /root/data/nfs chmod 777 /root/data/nfs
编辑 exports 文件
vim /etc/exports /root/data/nfs *(rw,no_root_squash,sync)
保存退出
:wq
重新export一次
exportfs -rv
查看本机的共享目录
showmount -e cd /root kubectl apply -f storageClass.yaml

数据库连接工具(在ops服务器上部署)
- 配置数据库源
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
- 安装数据库连接工具
sudo yum --enablerepo=mysql80-community install mysql-community-server --nogpgcheck
启动mysql服务
service mysqld start
图4 启动查看root临时密码
grep "A temporary password" /var/log/mysqld.log
登录数据库
mysql -uroot -p"数据库密码"
修改数据库密码并授权
ALTER USER 'root'@'localhost' IDENTIFIED BY '数据库密码'; create user 'root'@'%' identified by '数据库密码' ; grant all privileges on *.* to 'root'@'%' with grant option ; flush privileges;
- 启动redis
图5 启动redis
kubectl apply -f redis-1.yaml
进入容器检查redis
redis-cli -h redis哨兵服务器的地址 -p 6379 -a 'redis的密码' info Sentinel
部署seata服务
cd /root kubectl apply -f seata-server.yaml
服务部署
- 修改配置文件
将本地的 user-center-admin.jar复制到的/rhCloud/sjzx/java下
将本地的 developer-center-0.0.1-SNAPSHOT.jar复制到的/rhCloud/kfzzx/java下
将本地的 organization-center-0.0.1-SNAPSHOT.jar复制到的/rhCloud/zzzx/java下
将本地的 permissions-center-0.0.1-SNAPSHOT.jar复制到的/rhCloud/qxzx/java下
将本地的 authentication-center-0.0.1-SNAPSHOT.jar复制到的/rhCloud/rzzx/java下
修改/rhCloud/qxzx/java/java.yaml、Dockerfile配置文件
修改/rhCloud/zzzx/java/java.yaml、Dockerfile配置文件
修改/rhCloud/kfzzx/java/java.yaml、Dockerfile配置文件
修改/rhCloud/sjzx/java/java.yaml、Dockerfile配置文件
修改/rhCloud/rzzx/java/java.yaml、Dockerfile配置文件
- Dockerfile
图6 包名称
修改nginx配置
配置文件在/rhCloud/rzzx/nginx/nginx-configmap.yaml
配置文件在/rhCloud/qxzx/nginx/nginx-configmap.yaml
配置文件在/rhCloud/zzzx/nginx/nginx-configmap.yaml
配置文件在/rhCloud/kfzzx/nginx/nginx-configmap.yaml
配置文件在/rhCloud/sjzx/nginx/nginx-configmap.yaml
配置文件在/rhCloud/zhjy/nginx/nginx-configmap.yaml
图7 修改nginx配置kubectl apply -f nginx-configmap.yaml
修改前端挂载目录
配置文件在/rhCloud/rzzx/nginx/nginx-pvc.yaml
配置文件在/rhCloud/qxzx/nginx/nginx-pvc.yaml
配置文件在/rhCloud/zzzx/nginx/nginx-pvc.yaml
配置文件在/rhCloud/kfzzx/nginx/nginx-pvc.yaml
配置文件在/rhCloud/sjzx/nginx/nginx-pvc.yaml
配置文件在/rhCloud/zhjy/nginx/nginx-pvc.yaml
图8 修改前端挂载目录kubectl apply -f nginx-pvc.yaml
修改nginx.yaml项目配置文件
配置文件在/rhCloud/rzzx/nginx/nginx.yaml
配置文件在/rhCloud/qxzx/nginx/nginx.yaml
配置文件在/rhCloud/zzzx/nginx/nginx.yaml
配置文件在/rhCloud/kfzzx/nginx/nginx.yaml
配置文件在/rhCloud/sjzx/nginx/nginx.yaml
配置文件在/rhCloud/zhjy/nginx/nginx.yaml
图9 修改nginx.yaml项目配置文件kubectl apply -f nginx.yaml
- 启动服务
以数据中心为例:
后端部署方式
cd /rhCloud/sjzx/java bash restart.sh
前端部署方式
将项目打好的包dist包放在对应目录下
cd /root/data/nfs kfzzx-nginx-web-pvc-8db0b2d4-bbe6-46c5-88a6-7e2363b1d033 qxzx-nginx-web-pvc-5d0ccd38-3f7d-4d45-90de-a85fcf78b955 rzzx-nginx-web-pvc-24131e74-ca7a-4634-81ec-47e3f71278a8 sjzx-nginx-web-pvc-69c8c590-8580-40e6-a70b-a8752c40f582 zhjy-nginx-web-pvc-7402ccbb-f828-4247-bc25-f07f9a1d5e5e zzzx-nginx-web-pvc-58e3122b-cbfd-4822-8328-716bccc8f27b
图10 前端部署方式