RC部署

举报
yd_246355293 发表于 2022/12/17 11:33:05 2022/12/17
【摘要】 RC部署

格式化硬盘

 mkfs

安装NFS

 yum install -y nfs-utils rpcbind
 ​
 /nfs/code *(rw)
 ​
 权限不够,后面打开权限就可以

wordpress

 yum isntall -y mariadb-server php php-fpm php-mysql php-gd
 记不住写php*号
 ​
 rpm -ivh gpmall-repo/packages/nginx
 修改nginx配置文件  外网ip添加默认访问index.php和php方式访问  修改成工作目录
 ​
 修改php配置文件/etc/php-fpm.d/www.conf    修改apache用户和组
 ​
 启动各服务 “数据库 nginx php-fpm”
 ​
 导入数据 授权
 ​
 替换前端文件,修改config文件名并修改内容
 ​
 ​
 报错查看/var/log/nginx/error.log

放通NFS端口

 UDP:123

部署MongoDB数据库服务

 [root@mysql-1 ~]# yum install -y mongodb-org 
 [root@mysql-2 ~]# yum install -y mongodb-org 
 [root@mysql-1 ~]# systemctl restart mongod
 [root@mysql-2 ~]# systemctl restart mongod

mongodb 主从数据库,配置MongoDB 集群名称为 rs

 vim /etc/yum.repos.d/mongodb-org.repo
 [mongodb-org]
 name=MongoDB Repository
 baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/3.4/x86_64/
 gpgcheck=0
 enabled=1
 yum install -y mongodb-org
 ​
 systemctl start mongod
 systemctl enable mongod
 ​
 ​
 修改MongoDB配置文件 (两个都要改)
 [root@mysql-1 ~]# vi /etc/mongod.conf
 net:
   port: 27017
   bindIp: 0.0.0.0  # 修改
 ​
 replication:
   replSetName: rs   #添加
   
 启动服务
 启动systemctl start mongod
 systemctl enable mongod
 ​
 进入
 mongo --host ip地址 --port 端口号 的命令进行登录
 数据库配置( 在mysql-1配置就可以了 )
 登陆过后输入show dbs查看库会发现报错,是由于在更改命令之后并未进行初始化数据库的主从绑定
 > use admin 
 switched to db admin
 > config={ _id:"rs", members:[ {_id:0,host:'10.10.16.30:27017',priority:2}, {_id:1,host:'10.10.16.40:27017',priority:1}] };     #一定要写引号和端口
 {
         "_id" : "rs",
         "members" : [
                 {
                         "_id" : 0,
                         "host" : "172.16.1.88:27017",
                         "priority" : 2   #可以不写
                 },
                 {
                         "_id" : 1,
                         "host" : "172.16.1.89:27017",
                         "priority" : 1
                 }
         ]
 }
 > rs.initiate(config)   初始化数据库
 { "ok" : 1 }   要显示ok 1
 ​
 #报错把从配置文件主从配置去掉重启服务在从上进入库后执行db.dropDatabase(),清空所有的数据库,一个也不要留,直到show dbs为空
 ​
 rs:SECONDARY> rs.status()

image-20221122200045724

image-20221122200442705

node 环境管理

 使用提供的压缩文件 rocketchat-cloud.tar.gz 中软件包源,在 ChinaSkill-node-1 部署 nodejs,
 根据 所提供 的 rocket.chat 所 需要求 安 装 nodejs 对 应版本。
 tar xf node-v12.16.1-linux-x64.tar.gz 
 mv node-v12.16.1-linux-x64 /usr/local/node
 ln -s /usr/local/node/bin/* /usr/bin/
 node -v

RocketChat 上云

 使用 http 服务器提供的压缩文件 rocketchat-cloud.tar.gz 中的 RocketChat 软件包,在ChinaSkill-node-1 中部署 RocketChat 的 Web 服务。使用 chinaskill-sql-1 的 MongoDB 为后端数据库,设置 RocketChat 服务访问端口为 3000。
 ​

数据库主从同步

 (3)、修改主库配置文件
 ​
  log-bin:设置logbin文件名称,最好不要改动位置。
 ​
  server-id:该id主从之间必须是唯一,唯一的标识。
 ​
  binlog-ignore-db:指定不可以主从同步的数据库,多数据库则配置多行
 ​
 ​
 /etc/my.cnf.d/server.cnf
 [msyqld]
 server-id=1
 log-bin=mysql-bin
 ​
 从库
 [msyqld]
 server-id=1
 log-bin=mysql-bin
 slave-skip-errors=all
 ​
 登录主数据库设置主从同步用户
 ​
 登录从数据库配置从配置         #help  change           #help change master to
 change master to master_host='',master_user='',master_password='';
 ​
 #记不住用help去搜
 ​
 start slave;          #help  slave
 ​
 查看 show status slave \G;            
 ​
  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  看到这两个Yes就是正确了

读写分离

 创建中间节点
 安装java环境(服务器默认有,但不全,要重新下)
 上传mycat包解压到/usr/loacl/下
 上传schema.xml(比赛时提供)更换原有文件
 ​
 修改mycat访问用户
 /usr/local/mycat/conf/server.xml的最后删除user部分更改root密码用户,修改逻辑库名称
 ​
 修改schema.xml逻辑库名称,读写分离库,读写IP用户密码(记得授予用户远程权限,并创建读写分离库)
 ​
 ​
 验证(后面全是验证)
 yum install mariadb -y
 ​
 修改配置文件
 ​
 ​
 #若题目要求数据库指向中间节点
 修改nginx配置文件改成中间节点
 ​
 ​
 登录本机8066端口访问读写分离库
 mysql -h127.0.0.1 -P8066 -uroot -p000000
 9066端口查看详情
 mysql -h127.0.0.1 -P9066 -uroot -p000000 -e 'show @@datasource;'

数据库迁移至公有云实例

 修改配置文件改成公有云数据库实例
 ​
 远程登录数据库导入库

备份数据库/result

 msyqldump -uroot -pAbc@1234 wordpress > /result/mysql_bak.sql

扩容云硬盘

 还需要进入Linux系统,进行文件系统的扩容
 resize2fs /dev/vdb
 df -TH

网上商城

 域名解析
 ​
 修改nginx配置文件   注:修改成公网地址
 ​
 执行jar包  ps -ef 

修改mysql密码

 登录后
 use mysql;
 ​
 update user set password=password('Root12345') where user='root' and host='localhost';

部署 nodejs

 安 装  nodejs  对 应 版 本 
 解压后建立node和npm软链接

部署Rocket.Chat

 添加mongodb yum 源仓库
  cat << EOF | sudo tee -a /etc/yum.repos.d/mongodb-org-4.0.repo
 [mongodb-org-4.0]
 name=MongoDB Repository
 baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/
 gpgcheck=1
 enabled=1
 gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
 EOF
 ​
 sudo yum install -y curl && curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -
 ​
 安装mongodb, nodejs, graphicsmagick
 yum install -y gcc-c++ make mongodb-org nodejs
 yum install -y epel-release && sudo yum install -y GraphicsMagick
 ​
 安装Rocket.Chat
 下载源码
 curl -L https://releases.rocket.chat/latest/download -o /tmp/rocket.chat.tgz
 tar -xzvf /tmp/rocket.chat.tgz -C /tmp
 ​
 查看README  使用npm 安装inherits,n和Rocket.Chat要求的node版本    
 sudo npm install -g inherits n && sudo n 14.19.3
 ​
 cd /tmp/bundle/programs/server && npm installs
 sudo mv /tmp/bundle /opt/Rocket.Chath   #可以考虑一开始安在/opt下
 ​
 配置Rocket.Chat
 sudo useradd  rocketchat 
 sudo chown -R rocketchat:rocketchat /opt/Rocket.Chat
 cat << EOF |sudo tee -a /lib/systemd/system/rocketchat.service
 [Unit]
 Description=The Rocket.Chat server
 After=network.target remote-fs.target nss-lookup.target nginx.service mongod.service
 [Service]
 ExecStart=/usr/local/bin/node /opt/Rocket.Chat/main.js
 StandardOutput=syslog
 StandardError=syslog
 SyslogIdentifier=rocketchat
 User=rocketchat
 Environment=MONGO_URL=mongodb://localhost:27017/rocketchat?replicaSet=rs01 MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=rs01 ROOT_URL=http://localhost:3000/ PORT=3000
 [Install]
 WantedBy=multi-user.target
 EOFash
 说明: 主要涉及的环境变量修改:MONGO_URL, MONGO_OPLOG_URL, ROOT_URL, PORT,可以将3000替换为选择的端口
 ​
 vi /usr/lib/systemd/system/rocketchat.service
 MONGO_URL=mongodb://localhost:27017/rocketchat?replicaSet=rs01
 MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=rs01
 ROOT_URL=http://your-host-name:3000
 PORT=3000
 ​
 将mongodb设为存储引擎,并启动mongodb和rocket.chat
 sudo sed -i "s/^#  engine:/  engine: mmapv1/"  /etc/mongod.conf
 #mongod数据库的存储引擎,指定为mmapv1引擎
 sudo sed -i "s/^#replication:/replication:\n  replSetName: rs01/" /etc/mongod.conf
 ​
 sudo systemctl enable mongod && sudo systemctl start mongod
 mongo --eval "printjson(rs.initiate())"
 sudo systemctl enable rocketchat && sudo systemctl start rocketchat
 ​
 ​
 查看README简单部署方式
   $ (cd programs/server && npm install)
   $ export MONGO_URL='mongodb://user:password@host:port/databasename'
   $ export ROOT_URL='http://example.com'
   $ export MAIL_URL='smtp://user:password@mailhost:port/'
   $ node main.js

公有云安全:入侵检测系统

 yum install gcc gcc-c++ make
 yum install glibc-static
 ​
 tar zxvf chkrootkit.tar.gz
 ​
 安装 make sense 
 ​
 mv chkrootkit-0.52 /usr/local/chkrootkit #拷贝到安装目录
  
 ./chkrootkit | grep INFECTED
 ​
 备注:CentOS 7.x 可能会出现下面的提示,原因是系统默认缺少netstat命令
 chkrootkit: can't find `netstat'.
 yum whatprovides *netstat #查看命令所在的安装包
 yum install net-snmp-utils net-tools #安装netstat命令即可
 ​
 安装完毕后使用 chkrootkit 工具扫描系统, 并将扫描结果保到/var/log/chkrootkit/chkrootkit.log
 ./chkrootkit > /var/log/chkrootkit/chkrootkit.log

helm

 helm show valies chart名   #查看依赖 例如pv之类
 helm install  名 chart名   #安装chart
 helm package              #打包

rpm下载到本地

 yum install 包名 -y --downloadonly --downloaddir=/usr/local/src
 ​
 或以下方法
 yum install yum-utils
 yumdownloader ksh
 ​
 指定目录
 yumdownloader --resolve --destdir=/root/mypackages/ ksh
 或者
 yumdownloader --resolve --destdir /root/mypackages/ ksh
 ​
 安装离线rpm
 yum install *.rpm
 或者
 rpm -ivh *.rpm

hartmuseum 是一个开源的 Helm Chart Repository,支持多种后端存储,包括 GCS,S3 等。

# 这里是直接使用宿主机的目录,因而有两个注意的地方:
# 1. 存放 chart 的目录需要额外授权
# 2. 在 K8S 中需要固定 pod 所在宿主机,我这里选择的是 k8s-node01 

# 在 k8s-node01 上执行
mkdir /data/charts && cd /data/ && chmod 777 charts

# 创建 deployment.yaml 文件
mkdir -p /data/chartmuseum/ && cd /data/chartmuseum/

vi deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: chartmuseum
  name: chartmuseum
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: chartmuseum
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: chartmuseum
    spec:
      containers:
      - image: chartmuseum/chartmuseum:latest
        name: chartmuseum
        ports:
        - containerPort: 8080
          protocol: TCP
        env:
        - name: DEBUG
          value: "1"
        - name: STORAGE
          value: local
        - name: STORAGE_LOCAL_ROOTDIR
          value: /charts
        resources:
          limits:
            cpu: 500m
            memory: 256Mi
          requests:
            cpu: 100m
            memory: 64Mi
        volumeMounts:
        - mountPath: /charts
          name: charts-volume
      nodeSelector:
        kubernetes.io/hostname: k8s-node01
      volumes:
      - name: charts-volume
        hostPath:
          path: /data/charts
          type: DirectoryOrCreate
      restartPolicy: Always

# 创建 service
vi service.yaml 

apiVersion: v1
kind: Service
metadata:
  name: chartmuseum
  namespace: kube-system
spec:
  ports:
    - port: 8080
      protocol: TCP
      targetPort: 8080
  selector:
    app: chartmuseum

# 启动
kubectl apply -f .

# 检查
kubectl get pods -n kube-system
NAME                                   READY   STATUS    RESTARTS   AGE
chartmuseum-7c976bc4c9-m2cdc           1/1     Running   0          57m

kubectl get svc -n kube-system
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
chartmuseum     ClusterIP   10.104.6.194    <none>        8080/TCP                 57m

# 成功显示欢迎信息
curl 10.104.6.194:8080

# 添加 helm repo
helm repo add chartmuseum http://10.104.6.194:8080
helm repo list

创建应用并上传到 chartmuseum
mkdir /root/helm && cd /root/helm

helm create myapp

# 留下有用的模板
cd /root/helm/myapp/templates

rm -rf ingress.yaml serviceaccount.yaml tests

# 修改 values.yaml
cd /root/helm/myapp

vi values.yaml

# serviceAccount 下的 create 改成 false 
serviceAccount:
  # Specifies whether a service account should be created
  create: false

# service 下的 type 改成 NodePort
service:
  type: NodePort

# 检查语法
cd /root/helm
helm lint myapp

# 打包 
helm package myapp

# 上传
curl --data-binary "@myapp-0.1.0.tgz" http://10.104.6.194:8080/api/charts

通过 chartmuseum 安装软件
# 查找版本
helm search myapp

# 安装
helm install --name myapp chartmuseum/myapp

# 查看
helm list
helm status myapp

# 删除
helm del --purge myapp 

更新 charts 并上传到 chartmuseum
cd /root/helm/myapp

vi values.yaml
# 调整 replicaCount 为 2
replicaCount: 2

vi Chart.yaml
# 把 version 改为 0.2.0
version: 0.2.0

# 测试,打包
cd /root/helm
helm lint myapp
helm package myapp

# 上传
curl --data-binary "@myapp-0.2.0.tgz" http://10.104.6.194:8080/api/charts

# 更新本地缓存然后可以查看已有的 charts:
helm repo update
helm search chartmuseum/

# 若之前没有删除,可以进行更新
helm upgrade myapp chartmuseum/myapp

# 回滚
helm rollback myapp 1

chartmuseum 通过 Ingress 对外提供服务
mkdir /data/ingress && cd /data/ingress
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
kubectl apply -f mandatory.yaml

# 检查
kubectl get pods -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx --watch

# 创建 chartmuseum ingress.yaml 文件
cd /data/chartmuseum/
vi ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: chartmuseum
  namespace: kube-system
spec:
  rules:
  - host: charts.test.klvchen.com
    http:
      paths:
      - path: /
        backend:
          serviceName: chartmuseum
          servicePort: 8080

kubectl apply -f ingress.yaml 

# 测试
kubectl get pod -n ingress-nginx -o wide
NAME                                        READY   STATUS    RESTARTS   AGE   IP            NODE           NOMINATED NODE   READINESS GATES
nginx-ingress-controller-7f74f657bd-wzhlr   1/1     Running   0          10m   10.244.0.10   k8s-master01   <none>           <none>

# 添加一条记录
vi /etc/hosts
10.244.0.10 charts.test.klvchen.com

curl charts.test.klvchen.com
# 看到 Welcome to ChartMuseum! 证明 ingress-nginx 已生效

# 创建一个 svc,给 ingress-controller 接入流量
cd /data/ingress

vi service-nodeport.yaml 
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: NodePort
  ports:
    - name: http
      port: 80
      targetPort: 80
      protocol: TCP
      nodePort: 30080
    - name: https
      port: 443
      targetPort: 443
      protocol: TCP
      nodePort: 30443
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  externalTrafficPolicy: Cluster

kubectl apply -f service-nodeport.yaml 

# 测试, 获取私有 IP
ifconfig eth0
curl -H 'host:charts.test.klvchen.com' 172.18.89.61:30080

# 最后可以安装一个 nginx,监听域名把流量转发到 K8S worker 上的 30080 端口上

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。