typora-root
模块三 公有云(40)
任务1 公有云服务搭建(5分)
3.1.1 私有网络管理
在公有云中完成虚拟私有云网络的创建。
3.1.2 云实例管理
登录公有云平台,创建两台云实例虚拟机。
3.1.3 管理数据库
利用intnetX-mysql网络创建两台chinaskill-sql-1和chinaskill-sql-2云服务器,并完成MongoDB安装。
- ##创建云服务器与上一步一样
- ##node1与node2进行一样的操作
- [root@node1 ~]# vi /etc/yum.repos.d/
- CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo epel.repo.rpmnew
- CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo epel.repo epel-testing.repo
- [root@node1 ~]# vi /etc/yum.repos.d/mongodb-org-4.0.repo
- [root@node1 ~]# cat /etc/yum.repos.d/mongodb-org-4.0.repo
- [mngodb-org]
- name=MongoDB Repository
- baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/4.0/x86_64/
- gpgcheck=0
- enabled=1
- [root@node1 ~]# yum install mongodb-org -y
- [root@node1 ~]# systemctl start mongod
- [root@node1 ~]# systemctl enable mongod
- [root@node1 ~]# systemctl status mongod
- ● mongod.service - MongoDB Database Server
- Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
- Active: active (running) since Thu 2023-04-27 10:26:16 CST; 12s ago
- Docs: https://docs.mongodb.org/manual
- Main PID: 8365 (mongod)
- CGroup: /system.slice/mongod.service
- └─8365 /usr/bin/mongod -f /etc/mongod.conf
- Apr 27 10:26:15 node1 systemd[1]: Starting MongoDB Database Server...
- Apr 27 10:26:15 node1 mongod[8362]: about to fork child process, waiting until server is ready for connections.
- Apr 27 10:26:15 node1 mongod[8362]: forked process: 8365
- Apr 27 10:26:16 node1 mongod[8362]: child process started successfully, parent exiting
- Apr 27 10:26:16 node1 systemd[1]: Started MongoDB Database Server.
复制代码 3.1.4 主从数据库
在chinaskill-sql-1和chinaskill-sql-2云服务器中配置MongoDB主从数据库。
- #修改配置文件
- [root@node1 ~]# vi /etc/mongod.conf
- bindIp: 0.0.0.0
- replication:
- replSetName: test
- #重启服务
- [root@node1 ~]# systemctl restart mongod.service
- #查看集群状态
- [root@node1 ~]# mongo
- > rs.status()
- {
- "ok" : 0,
- "errmsg" : "no replset config has been received",
- "code" : 94,
- "codeName" : "NotYetInitialized"
- }
- >
- 两个节点都和上图一样说明复制集正常启动了
- #定义一个有关于主从同步的变量
- > var config={_id:"test",members:
- ... [{_id:0,host:"172.16.2.197:27017"},
- ... {_id:1,host:"172.16.2.145:27017"}]}
- > rs.initiate(config)
- #初始化MongoDB的主从配置
- > rs.initiate(config)
- { "ok" : 1 }
- #查看状态
- > rs.status()
- {
- "set" : "test",
- "date" : ISODate("2023-04-27T02:38:55.312Z"),
- "myState" : 2,
- "term" : NumberLong(1),
- "syncingTo" : "172.16.2.197:27017",
- "syncSourceHost" : "172.16.2.197:27017",
- "syncSourceId" : 0,
- "heartbeatIntervalMillis" : NumberLong(2000),
- "optimes" : {
- "lastCommittedOpTime" : {
- "ts" : Timestamp(1682563127, 1),
- "t" : NumberLong(1)
- },
- "readConcernMajorityOpTime" : {
- "ts" : Timestamp(1682563127, 1),
- "t" : NumberLong(1)
- },
- "appliedOpTime" : {
- "ts" : Timestamp(1682563127, 1),
- "t" : NumberLong(1)
- },
- "durableOpTime" : {
- "ts" : Timestamp(1682563127, 1),
- "t" : NumberLong(1)
- }
- },
- "lastStableCheckpointTimestamp" : Timestamp(1682563087, 6),
- "electionParticipantMetrics" : {
- "votedForCandidate" : true,
- "electionTerm" : NumberLong(1),
- "lastVoteDate" : ISODate("2023-04-27T02:38:07.656Z"),
- "electionCandidateMemberId" : 0,
- "voteReason" : "",
- "lastAppliedOpTimeAtElection" : {
- "ts" : Timestamp(1682563077, 1),
- "t" : NumberLong(-1)
- },
- "maxAppliedOpTimeInSet" : {
- "ts" : Timestamp(1682563077, 1),
- "t" : NumberLong(-1)
- },
- "priorityAtElection" : 1,
- "newTermStartDate" : ISODate("2023-04-27T02:38:07.657Z"),
- "newTermAppliedDate" : ISODate("2023-04-27T02:38:08.145Z")
- },
- "members" : [
- {
- "_id" : 0,
- "name" : "172.16.2.197:27017",
- "health" : 1,
- "state" : 1,
- "stateStr" : "PRIMARY",
- "uptime" : 56,
- "optime" : {
- "ts" : Timestamp(1682563127, 1),
- "t" : NumberLong(1)
- },
- "optimeDurable" : {
- "ts" : Timestamp(1682563127, 1),
- "t" : NumberLong(1)
- },
- "optimeDate" : ISODate("2023-04-27T02:38:47Z"),
- "optimeDurableDate" : ISODate("2023-04-27T02:38:47Z"),
- "lastHeartbeat" : ISODate("2023-04-27T02:38:54.642Z"),
- "lastHeartbeatRecv" : ISODate("2023-04-27T02:38:53.657Z"),
- "pingMs" : NumberLong(0),
- "lastHeartbeatMessage" : "",
- "syncingTo" : "",
- "syncSourceHost" : "",
- "syncSourceId" : -1,
- "infoMessage" : "",
- "electionTime" : Timestamp(1682563087, 1),
- "electionDate" : ISODate("2023-04-27T02:38:07Z"),
- "configVersion" : 1
- },
- {
- "_id" : 1,
- "name" : "172.16.2.145:27017",
- "health" : 1,
- "state" : 2,
- "stateStr" : "SECONDARY",
- "uptime" : 323,
- "optime" : {
- "ts" : Timestamp(1682563127, 1),
- "t" : NumberLong(1)
- },
- "optimeDate" : ISODate("2023-04-27T02:38:47Z"),
- "syncingTo" : "172.16.2.197:27017",
- "syncSourceHost" : "172.16.2.197:27017",
- "syncSourceId" : 0,
- "infoMessage" : "",
- "configVersion" : 1,
- "self" : true,
- "lastHeartbeatMessage" : ""
- }
- ],
- "ok" : 1,
- "operationTime" : Timestamp(1682563127, 1),
- "$clusterTime" : {
- "clusterTime" : Timestamp(1682563127, 1),
- "signature" : {
- "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
- "keyId" : NumberLong(0)
- }
- }
- }
- test:SECONDARY>
- #从节点查看
- [root@node2]# mongo
- > rs.status()
- {
- "set" : "test",
- "date" : ISODate("2022-09-25T07:55:18.477Z"),
- "myState" : 2,
- "term" : NumberLong(1),
- "syncingTo" : "192.168.200.11:27017",
- "syncSourceHost" : "192.168.200.11:27017",
- "syncSourceId" : 0,
- "heartbeatIntervalMillis" : NumberLong(2000),
- "optimes" : {
- "lastCommittedOpTime" : {
- "ts" : Timestamp(1664092517, 1),
- "t" : NumberLong(1)
- },
- "readConcernMajorityOpTime" : {
- "ts" : Timestamp(1664092517, 1),
- "t" : NumberLong(1)
- },
- "appliedOpTime" : {
- "ts" : Timestamp(1664092517, 1),
- "t" : NumberLong(1)
- },
- "durableOpTime" : {
- "ts" : Timestamp(1664092517, 1),
- "t" : NumberLong(1)
- }
- },
- "lastStableCheckpointTimestamp" : Timestamp(1664092457, 7),
- "electionParticipantMetrics" : {
- "votedForCandidate" : true,
- "electionTerm" : NumberLong(1),
- "lastVoteDate" : ISODate("2022-09-25T07:54:17.523Z"),
- "electionCandidateMemberId" : 0,
- "voteReason" : "",
- "lastAppliedOpTimeAtElection" : {
- "ts" : Timestamp(1664092447, 1),
- "t" : NumberLong(-1)
- },
- "maxAppliedOpTimeInSet" : {
- "ts" : Timestamp(1664092447, 1),
- "t" : NumberLong(-1)
- },
- "priorityAtElection" : 1,
- "newTermStartDate" : ISODate("2022-09-25T07:54:17.525Z"),
- "newTermAppliedDate" : ISODate("2022-09-25T07:54:18.396Z")
- },
- "members" : [
- {
- "_id" : 0,
- "name" : "192.168.200.11:27017",
- "health" : 1,
- "state" : 1,
- "stateStr" : "PRIMARY",
- "uptime" : 69,
- "optime" : {
- "ts" : Timestamp(1664092507, 1),
- "t" : NumberLong(1)
- },
- "optimeDurable" : {
- "ts" : Timestamp(1664092507, 1),
- "t" : NumberLong(1)
- },
- "optimeDate" : ISODate("2022-09-25T07:55:07Z"),
- "optimeDurableDate" : ISODate("2022-09-25T07:55:07Z"),
- "lastHeartbeat" : ISODate("2022-09-25T07:55:16.508Z"),
- "lastHeartbeatRecv" : ISODate("2022-09-25T07:55:17.618Z"),
- "pingMs" : NumberLong(0),
- "lastHeartbeatMessage" : "",
- "syncingTo" : "",
- "syncSourceHost" : "",
- "syncSourceId" : -1,
- "infoMessage" : "",
- "electionTime" : Timestamp(1664092457, 1),
- "electionDate" : ISODate("2022-09-25T07:54:17Z"),
- "configVersion" : 1
- },
- {
- "_id" : 1,
- "name" : "192.168.200.12:27017",
- "health" : 1,
- "state" : 2,
- "stateStr" : "SECONDARY",
- "uptime" : 669,
- "optime" : {
- "ts" : Timestamp(1664092517, 1),
- "t" : NumberLong(1)
- },
- "optimeDate" : ISODate("2022-09-25T07:55:17Z"),
- "syncingTo" : "192.168.200.11:27017",
- "syncSourceHost" : "192.168.200.11:27017",
- "syncSourceId" : 0,
- "infoMessage" : "",
- "configVersion" : 1,
- "self" : true,
- "lastHeartbeatMessage" : ""
- }
- ],
- "ok" : 1,
- "operationTime" : Timestamp(1664092517, 1),
- "$clusterTime" : {
- "clusterTime" : Timestamp(1664092517, 1),
- "signature" : {
- "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
- "keyId" : NumberLong(0)
- }
- }
- }
- test:SECONDARY>
- #验证主从
- ##在主库上,我们来创建数据
- test:PRIMARY> use test
- switched to db test
- test:PRIMARY> db.createCollection("test")
- {
- "ok" : 1,
- "operationTime" : Timestamp(1664092674, 1),
- "$clusterTime" : {
- "clusterTime" : Timestamp(1664092674, 1),
- "signature" : {
- "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
- "keyId" : NumberLong(0)
- }
- }
- }
- test:PRIMARY> show databases
- admin 0.000GB
- config 0.000GB
- local 0.000GB
- test 0.000GB
- #接下来,我们来到从库上,来查看我们在主库上创建的结果是否出现在了从库上。
- test:SECONDARY> show dbs
- 2022-09-25T15:58:54.336+0800 E QUERY [js] Error: listDatabases failed:{
- "operationTime" : Timestamp(1664092727, 1),
- "ok" : 0,
- "errmsg" : "not master and slaveOk=false",
- "code" : 13435,
- "codeName" : "NotMasterNoSlaveOk",
- "$clusterTime" : {
- "clusterTime" : Timestamp(1664092727, 1),
- "signature" : {
- "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
- "keyId" : NumberLong(0)
- }
- }
- } :
- _getErrorWithCode@src/mongo/shell/utils.js:25:13
- Mongo.prototype.getDBs@src/mongo/shell/mongo.js:151:1
- shellHelper.show@src/mongo/shell/utils.js:882:13
- shellHelper@src/mongo/shell/utils.js:766:15
- @(shellhelp2):1:1
- #从上图可以看出,我们在从库上查询的操作失败,这是因为在配置了MongoDB的主从同步后,在MongoDB的从库上,没有读和写的权限,因此我们无法查看数据。
- #设置从节点可读
- test:SECONDARY> db.getMongo().setSlaveOk()
- #同步成功
- test:SECONDARY> show dbs
- admin 0.000GB
- config 0.000GB
- local 0.000GB
- test 0.000
-
复制代码 3.1.5 node情况管理
利用提供的压缩文件,安装Node.js情况。
- [root@chinaskill-node-1-0002 ~]# wget https://nodejs.org/dist/v13.11.0/node-v13.11.0-linux-x64.tar.xz
- --2023-05-04 08:41:12-- https://nodejs.org/dist/v13.11.0/node-v13.11.0-linux-x64.tar.xz
- Resolving nodejs.org (nodejs.org)... 104.20.22.46, 104.20.23.46, 2606:4700:10::6814:172e, ...
- Connecting to nodejs.org (nodejs.org)|104.20.22.46|:443... connected.
- HTTP request sent, awaiting response... 200 OK
- Length: 21225324 (20M) [application/x-xz]
- Saving to: ‘node-v13.11.0-linux-x64.tar.xz’
- 100%[==================================================================>] 21,225,324 1.36MB/s in 16s
- 2023-05-04 08:41:29 (1.30 MB/s) - ‘node-v13.11.0-linux-x64.tar.xz’ saved [21225324/21225324]
- [root@chinaskill-node-1-0002 ~]# ll
- total 20728
- -rw-r--r-- 1 root root 21225324 Mar 12 2020 node-v13.11.0-linux-x64.tar.xz
- [root@chinaskill-node-1-0002 ~]# tar -xvf node-v13.11.0-linux-x64.tar.xz
- [root@chinaskill-node-1-0002 ~]# ll
- total 20732
- drwxr-xr-x 6 1001 1001 4096 Mar 12 2020 node-v13.11.0-linux-x64
- -rw-r--r-- 1 root root 21225324 Mar 12 2020 node-v13.11.0-linux-x64.tar.xz
- [root@chinaskill-node-1-0002 ~]# cd node-v13.11.0-linux-x64
- [root@chinaskill-node-1-0002 node-v13.11.0-linux-x64]# ll
- total 176
- drwxr-xr-x 2 1001 1001 4096 Mar 12 2020 bin
- -rw-r--r-- 1 1001 1001 54110 Mar 12 2020 CHANGELOG.md
- drwxr-xr-x 3 1001 1001 4096 Mar 12 2020 include
- drwxr-xr-x 3 1001 1001 4096 Mar 12 2020 lib
- -rw-r--r-- 1 1001 1001 77130 Mar 12 2020 LICENSE
- -rw-r--r-- 1 1001 1001 26524 Mar 12 2020 README.md
- drwxr-xr-x 5 1001 1001 4096 Mar 12 2020 share
- [root@chinaskill-node-1-0002 node-v13.11.0-linux-x64]# cd bin/
- [root@chinaskill-node-1-0002 bin]# ./node -v
- v13.11.0
- [root@chinaskill-node-1-0002 ~]# ln -s /root/node-v13.11.0-linux-x64/bin/node /usr/local/bin/node
- [root@chinaskill-node-1-0002 ~]# ln -s /root/node-v13.11.0-linux-x64/bin/npm /usr/local/bin/npm
- [root@chinaskill-node-1-0002 ~]# node -v
- v13.11.0
复制代码 3.1.6 安全组管理
3.1.7 RocketChat上云
利用http服务器提供文件,将Rocket.Chat应用部署上云。
- ##上传rocketchat-cloud.tar.gz,进行解压
- [root@chinaskill-node-1-0002 ~]# tar -xvf rocketchat-cloud.tar.gz
- [root@chinaskill-node-1-0002 ~]# cd rocketchat
- [root@chinaskill-node-1-0002 rocketchat]# ll
- total 304780
- drwxr-xr-x 2 root root 4096 Sep 28 2022 mongodb
- drwxr-xr-x 2 root root 4096 Sep 28 2022 node
- -rw-r--r-- 1 root root 167869971 Sep 28 2022 rocket.chat.tgz
- -rw-r--r-- 1 root root 144210495 Sep 28 2022 yum.tar.gz
- [root@chinaskill-node-1-0002 rocketchat]# cd node/
- [root@chinaskill-node-1-0002 node]# ll
- total 22592
- -rw-r--r-- 1 root root 23131523 Apr 5 2022 node-v12.22.12-linux-x64.tar.gz
- [root@chinaskill-node-1-0002 node]#
- [root@chinaskill-node-1-0002 node]# tar -zxvf node-v12.22.12-linux-x64.tar.gz -C /root/node
- ##修改环境变量S
- [root@chinaskill-node-1-0002 node]# tail -1 /etc/profile
- export PATH=/root/node/node-v12.22.12-linux-x64/bin:$PATH
- [root@chinaskill-node-1-0002 node]# node -v
- v12.22.12
- [root@chinaskill-node-1-0002 node]#
- #安装依赖
- [root@chinaskill-node-1-0002 ~]# yum install -y gcc-c++ make
- [root@chinaskill-node-1-0002 ~]# yum install -y epel-release GraphicsMagick
- ##解压rocket.chat.tgz软件包
- [root@chinaskill-node-1-0002 rocketchat]# npm config set registry https://registry.npmmirror.com/
- [root@chinaskill-node-1-0002 rocketchat]# npm config set ELECTRON_MIRROR https://cdn.npmmirror.com/dist/electron/
- #打包
- cd /tmp/bundle/programs/server/
- npm install
- #移到/opt并命名Rocket.Chat
- mv /tmp/bundle /opt/Rocket.Chat
- #添加用户
- useradd -M rocketchat && usermod -L rocketchat
- #赋予权限
- chown -R rocketchat:rocketchat /opt/Rocket.Chat
- #
- [root@rocket Rocket.Chat]# vi /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/node/bin/node /opt/Rocket.Chat/main.js
- StandardOutput=syslog
- StandardError=syslog
- SyslogIdentifier=rocketchat
- User=rocketchat
- Environment=MONGO_URL=mongodb://192.168.1.182:27017/rocketchat?replicaSet=rs01 MONGO_OPLOG_URL=mongodb://192.168.1.182:27017/local?replicaSet=rs01 ROOT_URL=http://localhost:3000/ PORT=3000
- [Install]
- WantedBy=multi-user.target
- #启动
- [root@rocket Rocket.Chat]# systemctl start rocketchat
- [root@rocket Rocket.Chat]# systemctl status rocketchat
- ● rocketchat.service - The Rocket.Chat server
- Loaded: loaded (/usr/lib/systemd/system/rocketchat.service; disabled; vendor preset: disabled)
- Active: active (running) since Mon 2022-10-03 14:43:40 CST; 1min 54s ago
- Main PID: 8973 (node)
- CGroup: /system.slice/rocketchat.service
- └─8973 /usr/local/node/bin/node /opt/Rocket.Chat/main.js
- Oct 03 14:44:00 rocket rocketchat[8973]: | MongoDB Engine: wiredTiger |
- Oct 03 14:44:00 rocket rocketchat[8973]: | Platform: linux |
- Oct 03 14:44:00 rocket rocketchat[8973]: | Process Port: 3000 |
- Oct 03 14:44:00 rocket rocketchat[8973]: | Site URL: http://localhost:3000/ |
- Oct 03 14:44:00 rocket rocketchat[8973]: | ReplicaSet OpLog: Enabled |
- Oct 03 14:44:00 rocket rocketchat[8973]: | Commit Hash: 9b685693fb |
- Oct 03 14:44:00 rocket rocketchat[8973]: | Commit Branch: HEAD |
- Oct 03 14:44:00 rocket rocketchat[8973]: | |
- Oct 03 14:44:00 rocket rocketchat[8973]: +-----------------------------------------------+
- Oct 03 14:44:26 rocket rocketchat[8973]: (node:8973) [DEP0005] DeprecationWarning: Buffer() is deprecated due to sec...stead.
- Hint: Some lines were ellipsized, use -l to show in full.
复制代码 3.1.8 NAT网关
根据要求创建一个公网NAT网关。
3.1.9云服务器备份
创建一个云服务器备份存储库名为server_backup,容量为100G。将ChinaSkill-node-1云服务器制作镜像文件chinaskill-image。
3.1.10 负载均衡器
根据要求创建一个负载均衡器chinaskill-elb。
3.1.11 弹性伸缩管理
根据要求新建一个弹性伸缩启动配置。
任务2 公有云服务运维(10分)
3.2.1 云容器引擎
在公有云上,按照要求创建一个x86架构的容器云集群。
3.2.2 云容器管理
利用插件管理在kcloud容器集群中安装Dashboard可视化监控界面。
3.2.3 利用kubectl操纵集群
在kcloud集群中安装kubectl命令,利用kubectl命令管理kcloud集群。
- #1 安装kubectl
- 其实node上是已经安装了kubectl的,但是会报这个错:
- [root@kcloud-server ~]# kubectl get node
- The connection to the server localhost:8080 was refused - did you specify the right host or port?
- #这个其实是因为没有配置文件和环境变量的原因,为了记录整个过程,我把node节点上原有的kubectl卸载了。
- 然后重新安装:
- 先配置yum源(建议使用阿里的源,华为的不好用,期待完善)
- cat <<EOF > /etc/yum.repos.d/kubernetes.repo
- [kubernetes]
- name=Kubernetes
- baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
- enabled=1
- gpgcheck=1
- repo_gpgcheck=1
- gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
- EOF
- 然后开始安装,注意,版本一定要和集群的版本对应
- [root@kcloud-server ~]# yum install -y kubectl-1.25.1
- 2 下载配置文件
- 这个在官网的页面按照操作进行就行(链接:https://console.huaweicloud.com/cce2.0/?agencyId=07fb10cb020026b81f90c00e0ba587f6®ion=cn-east-3&locale=zh-cn#/app/resource/cluster/detail/accessAPI?clusterName=test&clusterId=7631fcee-894f-11ec-b434-0255ac1002c7&type=api)
- 点这里:
- 3 安装和配置kubectl
- mkdir -p $HOME/.kube
- mv -f kubeconfig.json $HOME/.kube/config
- 4 切换kubectl的访问模式
- [root@kcloud-server home]# kubectl get node
- NAME STATUS ROLES AGE VERSION
- 172.16.1.25 Ready <none> 14m v1.25.3-r0-25.1.23
- [root@kcloud-server home]#
复制代码 [外链图片转存失败,源站大概有防盗链机制,建议将图片保存下来直接上传(img-E0IY6a7l-1686127383485)(/k8s1.png)]
[外链图片转存失败,源站大概有防盗链机制,建议将图片保存下来直接上传(img-ZJQFQg5W-1686127383486)(/k8s2.png)]
3.2.4 安装Helm
利用提供的Helm软件包,在kcloud集群中安装Helm服务。
- [root@kcloud-21836 ~]# tar -zxvf helm-v3.10.1-linux-amd64.tar.gz
- linux-amd64/
- linux-amd64/helm
- linux-amd64/LICENSE
- linux-amd64/README.md
- [root@kcloud-21836 ~]# helm version
- version.BuildInfo{Version:"v3.10.1", GitCommit:"9f88ccb6aee40b9a0535fcc7efea6055e1ef72c9", GitTreeState:"clean", GoVersion:"go1.18.7"}
复制代码 3.2.5 根据提供的chart包mariadb-7.3.14.tgz部署mariadb服务,修改mariadb利用NodePort模式对其举行访问。
- [root@kcloud-21836 ~]# helm install mariadb mariadb/
- NAME: mariadb
- LAST DEPLOYED: Wed May 31 14:53:45 2023
- NAMESPACE: default
- STATUS: deployed
- REVISION: 1
- TEST SUITE: None
- [root@kcloud-21836 ~]# kubectl get pods
- NAME READY STATUS RESTARTS AGE
- mariadb-848b94c775-d8np4 1/1 Running 0 29s
- mysql-5c6c7986f5-4kr5b 1/1 Running 0 16m
- nginx-d5f959df4-4lm2s 1/1 Running 0 6m26s
- wordpress-7f9587fb4f-rrncz 1/1 Running 0 16m
- [root@kcloud-21836 ~]# kubectl get svc |grep mariadb
- mariadb NodePort 10.247.206.107 <none> 3306:32334/TCP 11m
复制代码 [外链图片转存失败,源站大概有防盗链机制,建议将图片保存下来直接上传(img-EXoqGGhZ-1686127383486)(/mariadb1.png)]
3.2.6 在k8s集群中创建mariadb定名空间,根据提供的chart包mariadb-7.3.14.tgz修改其配置,利用NodePort模式对其举行访问。
- [root@kcloud-21836 ~]# cat mariadbnamespace.yaml
- apiVersion: v1
- kind: Namespace
- metadata:
- name: mariadb
- [root@kcloud-21836 ~]# kubectl create -f mariadbnamespace.yaml
- namespace/mariadb created
- [root@kcloud-21836 ~]# helm install mariadb mariadb/ -n mariadb
- NAME: mariadb
- LAST DEPLOYED: Wed May 31 15:09:27 2023
- NAMESPACE: mariadb
- STATUS: deployed
- REVISION: 1
- TEST SUITE: None
- [root@kcloud-21836 ~]# kubectl get svc
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- kubernetes ClusterIP 10.247.0.1 <none> 443/TCP 46m
- mariadb NodePort 10.247.206.107 <none> 3306:32334/TCP 15m
- mysql ClusterIP 10.247.202.181 <none> 3306/TCP 31m
- nginx NodePort 10.247.77.152 <none> 80:30880/TCP 21m
- wordpress NodePort 10.247.202.57 <none> 80:30417/TCP 31m
- [root@kcloud-21836 ~]# kubectl get namespace
- NAME STATUS AGE
- default Active 46m
- kube-node-lease Active 46m
- kube-public Active 46m
- kube-system Active 46m
- mariadb Active 6m4s
- [root@kcloud-21836 ~]# kubectl get svc -n mariadb
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- mariadb NodePort 10.247.14.17 <none> 3306:32304/TCP 37s
复制代码 3.2.7 云硬盘存储卷
按照要求购买云硬盘存储卷。
[外链图片转存失败,源站大概有防盗链机制,建议将图片保存下来直接上传(img-IYSsUO5j-1686127383487)(/云硬盘1.png)]
[外链图片转存失败,源站大概有防盗链机制,建议将图片保存下来直接上传(img-qknboSop-1686127383487)(/云硬盘2.png)]
3.2.8 多容器Pod管理
在kcloud集群节点/root目次下编写YAML文件mu-pod.yaml,要求一个pod中包含两个容器。
- [root@kcloud-server ~]# vi mu-pod.yaml
- apiVersion: v1
- kind: Pod
- metadata:
- name: mu-pod
- namespace: default
- spec:
- containers:
- - name: containers01
- image: nginx
- ports:
- - name: http
- containerPort: 80
- - name: containers02
- image: tomcat
- ports:
- - name: tomcat
- containerPort: 80
复制代码 3.2.9 Namespace管理
在kcloud集群节点/root目次下编写YAML文件my-namespace.yaml并创建namespace。
- [root@kcloud-server ~]# vi my-namespace.yaml
- apiVersion: v1
- kind: Namespace
- metadata:
- name: test
复制代码 3.2.10 Secrets管理–Opaque
在master节点/root目次下编写YAML文件secret.yaml,要求执行文件创建密钥。
- [root@kcloud-server ~]# vi secret.yaml
- apiVersion: v1
- kind: Secret
- metadata:
- name: mysecret
- namespace: default
- data:
- username: YWRtaW4=
- password: MWYyZDFlMmU2N2Rm
- type: Opaque
复制代码 3.2.11 私有仓库管理
在master节点添加搭建的当地私有chart仓库源,并上传wordpress-13.0.23.tgz包至chartmuseum私有仓库中。可以利用当地仓库chart源部署应用。
- #为/data/charts授予777权限
- chmod 777 /data/charts/
- #查看svc
- [root@kcloud-server ~]# kubectl get svc -n chartmuseum
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- chartmuseum ClusterIP 10.247.199.133 <none> 8080/TCP 24m
- #添加本地仓库源,name 为 chartmuseum
- [root@kcloud-server ~]# helm repo add chartmuseum http://10.247.199.133:8080
- "chartmuseum" has been added to your repositories
- [root@kcloud-server ~]# helm repo list
- NAME URL
- chartmuseum http://10.247.199.133:8080
- #上传wordpress-13.0.23.tgz 包至 chartmuseum 私有仓库中
- [root@kcloud-server ~]# curl --data-binary "@wordpress-13.0.23.tgz" http://10.247.199.133:8080/api/charts
- {"saved":true}[root@kcloud-server ~]#
- #更新仓库
- [root@kcloud-server ~]# helm repo update
- Hang tight while we grab the latest from your chart repositories...
- ...Successfully got an update from the "chartmuseum" chart repository
- Update Complete. ⎈ Happy Helming!⎈
- #列出
- [root@kcloud-server ~]# helm search repo wordpress
- NAME CHART VERSION APP VERSION DESCRIPTION
- chartmuseum/wordpress 13.0.23 5.9.2 WordPress is the world's most popular blogging ...
- #/data/charts/目录查看
- [root@kcloud-server charts]# ls
- index-cache.yaml wordpress-13.0.23.tgz
复制代码 3.2.12 公有云安全:入侵检测体系
利用提供的makechk.tar.gz包安装chkrootkit入侵检测工具,安装完毕后利用chkrootkit工具扫描系。
3.2.13 公有云安全:日志分析服务
然后利用提供的sepb_elk_latest.tar镜像安装ELK服务。
- #上传docker-repo.tar.gz,sepb_elk_latest.tar
- #解压docker-repo.tar.gz
- #配置yum源安装docker
- [root@ecs-cecc ~]# cat /etc/yum.repos.d/local.repo
- [local]
- name=local
- baseurl=file:///opt/docker-repo
- gpgcheck=0
- enabled=1
- [root@ecs-cecc ~]# yum clean all
- [root@ecs-cecc ~]# yum makecache
- #安装docker
- [root@ecs-cecc ~]# yum install -y docker-ce
- #启动docker,设置为开机自启
- [root@ecs-cecc ~]# systemctl start docker && systemctl enable docker
- Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
- #查看状态
- [root@ecs-cecc ~]# systemctl status docker
- #导入镜像
- [root@ecs-cecc ~]# docker load -i sepb_elk_latest.tar
- #启动elk容器(由于Elasticsearch启动需要最大虚拟内存区域数量,修改sysctl.conf文件追加vm.max_map_count=262144)
- [root@ecs-cecc ~]# docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -e ES_MIN_MEM=128m -e ES_MAX_MEM=1024m -it --name elk sebp/elk:latest
- [root@ecs-cecc ~]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 1bf5111a8a0c sebp/elk:latest "/usr/local/bin/star…" About a minute ago Up About a minute 0.0.0.0:5044->5044/tcp, 0.0.0.0:5601->5601/tcp, 9300/tcp, 0.0.0.0:9200->9200/tcp, 9600/tcp elk
- [root@ecs-cecc ~]#
复制代码- #上传filebeat-7.13.2-x86_64.rpm
- #安装filebeat
- [root@ecs-cecc ~]# yum install -y filebeat-7.13.2-x86_64.rpm
- #启动
- [root@ecs-cecc ~]# systemctl start filebeat
- #查看状态
- [root@ecs-cecc ~]# systemctl status filebeat
- #应用filebeat
- 方式一:(收集yum数据到本地文件)
- [root@ecs-cecc ~]# vi /etc/filebeat/filebeat.yml
- filebeat.inputs:
- - type: log
- enabled: True
- paths:
- - /var/log/yum.log
- output.file:
- path: "/tmp"
- filename: "filebeat-test.txt"
- #重启filebeat服务
- [root@ecs-cecc ~]# systemctl restart filebeat
- #安装httpd服务
- [root@ecs-cecc ~]# yum install -y httpd
- #验证
- [root@ecs-cecc tmp]# cat /tmp/filebeat-test.txt
- {"@timestamp":"2022-10-16T09:20:03.410Z","@metadata":{"beat":"filebeat","type":"_doc","version":"7.13.2"},"log":{"offset":2213,"file":{"path":"/var/log/yum.log"}},"message":"Oct 16 17:20:02 Installed: httpd-2.4.6-97.el7.centos.5.x86_64","input":{"type":"log"},"host":{"hostname":"ecs-cecc","architecture":"x86_64","name":"ecs-cecc","os":{"family":"redhat","name":"CentOS Linux","kernel":"3.10.0-1160.53.1.el7.x86_64","codename":"Core","type":"linux","platform":"centos","version":"7 (Core)"},"id":"acca19161ce94d449c58923b12797030","containerized":false,"ip":["192.168.1.151","fe80::f816:3eff:fe79:d168","172.17.0.1","fe80::42:40ff:fef4:5e7","fe80::14fb:49ff:feec:ffad"],"mac":["fa:16:3e:79:d1:68","02:42:40:f4:05:e7","16:fb:49:ec:ff:ad"]},"agent":{"version":"7.13.2","hostname":"ecs-cecc","ephemeral_id":"a522699e-3e6b-44a7-b833-d14b43d2edba","id":"67d653cb-908e-418f-9356-5b7f2461dbe8","name":"ecs-cecc","type":"filebeat"},"ecs":{"version":"1.8.0"},"cloud":{"machine":{"type":"c6s.xlarge.2"},"service":{"name":"Nova"},"provider":"openstack","instance":{"name":"ecs-cecc.novalocal","id":"i-0129dc00"},"availability_zone":"cn-east-2c"}}
- 方式二:(收集yum数据到Elasticsearch中)
- #修改配置文件
- [root@ecs-cecc ~]# cat /etc/filebeat/filebeat.yml
- filebeat.inputs:
- - type: log
- enabled: True
- paths:
- - /var/log/yum.log
- output.elasticsearch:
- hosts: ["localhost:9200"]
- #重启
- [root@ecs-cecc ~]# systemctl restart filebeat
-
复制代码 3.2.14 WordPress应用部署
根据提供的chart包wordpress-13.0.23.tgz部署WordPress服务。
- [root@kcloud-21836 ~]# ll
- total 17768
- -rw-r----- 1 root root 1532 May 31 14:25 check_env.sh
- -rw-r----- 1 root root 1935 May 31 14:25 disk_filter.sh
- -rw------- 1 root root 14565908 May 31 14:30 helm-v3.10.1-linux-amd64.tar.gz
- drwxr-xr-x 2 3434 3434 4096 May 31 14:33 linux-amd64
- drwx------ 4 root root 4096 May 31 14:36 mariadb
- drwx------ 4 root root 4096 May 31 14:34 nginx
- -rw-r----- 1 root root 722 May 31 14:25 print_log.sh
- -rw-r----- 1 root root 3595678 Nov 29 2022 socat.tgz
- drwx------ 4 root root 4096 May 31 14:34 wordpress
- [root@kcloud-21836 ~]# helm install wordpress wordpress/
- NAME: wordpress
- LAST DEPLOYED: Wed May 31 14:37:44 2023
- NAMESPACE: default
- STATUS: deployed
- REVISION: 1
- TEST SUITE: None
- [root@kcloud-21836 ~]# kubectl get pod
- NAME READY STATUS RESTARTS AGE
- mysql-5c6c7986f5-4kr5b 1/1 Running 0 84s
- wordpress-7f9587fb4f-rrncz 1/1 Running 0 84s
- [root@kcloud-21836 ~]# kubectl get svc
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- kubernetes ClusterIP 10.247.0.1 <none> 443/TCP 46m
- mariadb NodePort 10.247.206.107 <none> 3306:32334/TCP 15m
- mysql ClusterIP 10.247.202.181 <none> 3306/TCP 31m
- nginx NodePort 10.247.77.152 <none> 80:30880/TCP 21m
- wordpress NodePort 10.247.202.57 <none> 80:30417/TCP 31m
复制代码 3.2.15 ChartMuseum仓库部署
在k8s集群中创建chartmuseum定名空间,编写yaml文件在chartmuseum定名空间中利用chartmuseum:latest镜像创建当地私有chart仓库。
- apiVersion: v1
- kind: Namespace
- metadata:
- name: chartmuseum
- ---
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- labels:
- app: chartmuseum
- name: chartmuseum
- namespace: chartmuseum
- 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
- imagePullPolicy: IfNotPresent
- 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
- volumes:
- - name: charts-volume
- nfs:
- path: /data/charts
- server: 192.168.200.10
- restartPolicy: Always
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: chartmuseum
- namespace: chartmuseum
- spec:
- ports:
- - port: 8080
- protocol: TCP
- targetPort: 8080
- selector:
- app: chartmuseum
复制代码 3.2.16 生命周期管理-配置Pod生命周期
登录kcloud集群节点,在default定名空间下创建一个名Pod,并举行Pod生命周期管理。
- ##nginx为例
- apiVersion: v1
- kind: Pod
- metadata:
- name: pod-hook-exec
- namespace: dev
- spec:
- containers:
- - name: main-container
- image: nginx:1.17.1
- ports:
- - name: nginx-port
- containerPort: 80
- lifecycle:
- postStart:
- exec: #在容器启动的时候执行一个命令,修改掉nginx的默认首页内容
- command: ["/bin/sh","-c","echo postStart... > /usr/share/nginx/html/index.html"]
- preStop: #在容器停止之前停止nginx服务
- exec:
- command: ["/usr/sbin/nginx","-s","quit"]
复制代码 3.2.17 定时任务管理—创建定时任务
在kcloud集群节点/root目次下编写yaml文件date.yaml完成定时管理任务。
- apiversion: batch/vl beta
- kind: CronJob
- metadata:
- name: hello
- spec:
- schedule: "*/1 * * * *"
- jobTemplate:
- spec:
- template:
- spec:
- containers:
- - name:hello
- image:busybox
- args:
- - /bin/sh
- - -C
- - date;echo Hello from the Kubernetes cluster restartPolicy:OnFailure
复制代码 3.2.18 HPA管理—创建HPA规则
在kcloud集群节点/root目次下编写YAML文件hpa.yaml,完成HPA管理。
- [root@k8s-master-node1 ~]# cat web.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: web
- namespace: default
- spec:
- replicas: 1
- selector:
- matchLabels:
- app: web
- template:
- metadata:
- labels:
- app: web
- spec:
- containers:
- - name: nginx
- image: nginx:latest
- imagePullPolicy: IfNotPresent
- ports:
- - containerPort: 80
- [root@k8s-master-node1 ~]# cat deployment.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: web
- spec:
- replicas: 1
- selector:
- matchLabels:
- app: web
- template:
- metadata:
- labels:
- app: web
- spec:
- containers:
- - name: nginx
- image: nginx:latest
- imagePullPolicy: IfNotPresent
- resources:
- requests:
- cpu: 500m # 指定所需的 CPU 资源 request
- [root@k8s-master-node1 ~]# cat hpa.yaml
- apiVersion: autoscaling/v2beta2
- kind: HorizontalPodAutoscaler
- metadata:
- name: web
- namespace: default
- spec:
- scaleTargetRef:
- apiVersion: apps/v1
- kind: Deployment
- name: web
- minReplicas: 1
- maxReplicas: 1000 #指定伸缩范围为 1–1000
- metrics:
- - type: Resource
- resource:
- name: cpu
- target:
- type: Utilization
- averageUtilization: 80
- behavior:
- scaleUp:
- stabilizationWindowSeconds: 5
- policies:
- - type: Pods
- value: 9 #9倍数量的副本数
- periodSeconds: 1
- scaleDown:
- stabilizationWindowSeconds: 5 #时间窗口为 5s
- policies:
- - type: Pods
- value: 1
- periodSeconds: 1
- [root@k8s-master-node1 ~]# kubectl apply -f web.yaml
- [root@k8s-master-node1 ~]# kubectl apply -f deployment.yaml
- [root@k8s-master-node1 ~]# kubectl apply -f hpa.yaml
复制代码 3.2.19 利用Helm模板
利用赛项提供的mychart-0.1.0.tgz模板包,在kcloud集群中安装名为nginx的模板实例。
- [root@kcloud-21836 ~]# helm install nginx nginx/
- NAME: nginx
- LAST DEPLOYED: Wed May 31 14:47:47 2023
- NAMESPACE: default
- STATUS: deployed
- REVISION: 1
- TEST SUITE: None
- [root@kcloud-21836 ~]# kubectl get pod
- NAME READY STATUS RESTARTS AGE
- mysql-5c6c7986f5-4kr5b 1/1 Running 0 10m
- nginx-d5f959df4-4lm2s 1/1 Running 0 9s
- wordpress-7f9587fb4f-rrncz 1/1 Running 0 10m
- [root@kcloud-21836 ~]# kubectl get svc
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- kubernetes ClusterIP 10.247.0.1 <none> 443/TCP 46m
- mariadb NodePort 10.247.206.107 <none> 3306:32334/TCP 15m
- mysql ClusterIP 10.247.202.181 <none> 3306/TCP 31m
- nginx NodePort 10.247.77.152 <none> 80:30880/TCP 21m
- wordpress NodePort 10.247.202.57 <none> 80:30417/TCP 31m
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |