全国职业技能大赛私有云容器云边缘计算系列学习笔记

Kubernetes容器云服务运维

这是一个系列笔记,欢迎各位大佬给与指导和交流
第一场:模块一 OpenSatck私有云平台搭建
第一场:模块二 OpenStack私有云服务运维
第一场:模块三 私有云Python运维开发
第二场:模块一 Kubernetes容器云平台搭建
第二场:模块二 Kubernetes容器云服务运维
第二场:模块三 Kubernetes容器云运维开发
第三场:模块一 边缘计算系统运维
第三场:模块二 边缘计算云应用开发


前言

本节内容:Kubernetes容器云服务运维

用到的资源和节点规划:

CentOS-7-x86_64-DVD-2009.iso
chinaskills_cloud_iaas_v2.0.3.iso
coreos_production_pxe.vmlinuz

节点名称ip网卡备注
controller192.168.100.10eth0与我们交互用
192.168.200.10eth1(内)填脚本上
compute192.168.100.20eth0与我们交互用
192.168.200.20eth1(内)填脚本上

题目部分

【题目 1】2.2.1 容器化部署 MariaDB [0.5 分]

编写 Dockerfile 文件构建 mysql 镜像,要求基于 centos 完成 MariaDB 数据库的安装和配置,并设置服务开机自启。

编写 Dockerfile 构建镜像 erp-mysql:v1.0,要求使用 centos7.9.2009 镜像作为基础镜像,完成 MariaDB 数据库的安装,设置 root 用户的密码为 tshoperp,新建数据库jsh_erp 并导入数据库文件 jsh_erp.sql,并设置 MariaDB 数据库开机自启。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:ERP.tar.gz)

答:
1,上传包并解压

[root@k8s-master-node1 ~]# ls
anaconda-ks.cfg  chinaskills_cloud_paas_v2.0.2.iso  ERP.tar.gz
[root@k8s-master-node1 ~]# tar -zxvf ERP.tar.gz 
[root@k8s-master-node1 ~]# ls
anaconda-ks.cfg  chinaskills_cloud_paas_v2.0.2.iso  ERP  ERP.tar.gz

2,加载镜像

[root@k8s-master-node1 ~]# cd ERP
[root@k8s-master-node1 ERP]# ls
app.jar  centos_7.9.2009.tar  jsh_erp.sql  nginx  yum

[root@k8s-master-node1 ERP]# docker load -i centos_7.9.2009.tar 
Loaded image: centos:7.9.2009

3,配置yum源
要等待dockerfile处理,所以按下面这个url写

[root@k8s-master-node1 ERP]# vi local.repo
[root@k8s-master-node1 ERP]# cat local.repo 
[ERP]
name=ERP
enabled=1
gpgcheck=0
baseurl=file:///root/yum

4,mysql脚本
要等待dockerfile处理,所以按下面这个路径写

[root@k8s-master-node1 ERP]# vi mysql_init.sh
[root@k8s-master-node1 ERP]# cat mysql_init.sh 
#!/bin/bash
mysql_install_db --user=root
mysqld_safe --user=root &
sleep 8
mysqladmin -u root password 'tshoperp'
mysql -uroot -ptshoperp -e "grant all on *.* to 'root'@'%' identified by 'tshoperp'; flush privileges;"
mysql -uroot -ptshoperp -e "create database jsh_erp;use jsh_erp; source /opt/jsh_erp.sql;"

脚本解释:

#!/bin/bash

# 初始化 MySQL 数据库
mysql_install_db --user=root
mysqld_safe --user=root &
sleep 8

# 设置 root 用户密码
mysqladmin -u root password 'tshoperp'

# 授权 root 用户
mysql -uroot -ptshoperp -e "grant all on *.* to 'root'@'%' identified by 'tshoperp'; flush privileges;"

# 创建数据库并导入数据
mysql -uroot -ptshoperp -e "create database jsh_erp;use jsh_erp; source /opt/jsh_erp.sql;"

5,构建镜像脚本

[root@k8s-master-node1 ERP]# vi docker_mariadb
[root@k8s-master-node1 ERP]# cat docker_mariadb 
FROM centos:centos7.9.2009
MAINTAINER troml1788
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
RUN mkdir /root/yum
COPY yum /root/yum
ENV LC_ALL en_US.UTF-8
RUN yum -y install mariadb-server
COPY jsh_erp.sql /opt/
COPY mysql_init.sh /opt/
RUN bash /opt/mysql_init.sh
EXPOSE 3306
CMD ["mysqld_safe","--user=root"]

脚本解释:

# 使用centos7.9.2009作为基础镜像
FROM centos:centos7.9.2009

# 维护者信息
MAINTAINER troml1788

# 删除/etc/yum.repos.d/目录下所有文件,这个目录通常存放yum仓库配置
RUN rm --rf /etc/yum.repos.d/*

# 将本地的local.repo文件复制到容器的/etc/yum.repos.d/目录下
COPY local.repo /etc/yum.repos.d/

# 在根目录创建一个yum文件夹,用于存放yum仓库
RUN mkdir /root/yum

# 将本地的yum目录复制到容器的/root/yum目录下
COPY yum /root/yum

# 设置环境变量LC_ALL为en_US.UTF-8,这是为了支持多语言字符集
ENV LC_ALL en_US.UTF-8

# 安装MariaDB服务器,这里使用的是yum安装方式,-y参数表示自动回答yes
RUN yum -y install mariadb-server

# 将此处的jsh_erp.sql复制到容器的/opt/目录下
COPY jsh_erp.sql /opt/

# 将本地的mysql_init.sh脚本复制到容器的/opt/目录下
COPY mysql_init.sh /opt/

# 执行mysql_init.sh脚本,这个脚本用于初始化数据库
RUN bash /opt/mysql_init.sh

# 暴露3306端口,这是MySQL/MariaDB默认的端口
EXPOSE 3306

# 容器启动时执行mysqld_safe命令,--user=root表示以root用户运行MySQL服务
CMD ["mysqld_safe", "--user=root"]

6,开始执行
注意命令最后还有个 .

[root@k8s-master-node1 ERP]# docker build -t erp-mysql:v1.0 -f docker_mariadb .
Sending build context to Docker daemon  427.1MB
Step 1/13 : FROM centos:centos7.9.2009
 ---> eeb6ee3f44bd
Step 2/13 : MAINTAINER troml1788
 ---> Using cache
 ---> 8fc24d0ec16f
Step 3/13 : RUN rm -rf /etc/yum.repos.d/*
 ---> Using cache
 ---> 1c6408d963cb
Step 4/13 : COPY local.repo /etc/yum.repos.d/
 ---> Using cache
 ---> d1d06d6e4a53
Step 5/13 : RUN mkdir /root/yum
 ---> Using cache
 ---> db2d565bb737
Step 6/13 : COPY yum /root/yum
 ---> Using cache
 ---> 430ad035b5e8
Step 7/13 : ENV LC_ALL en_US.UTF-8
 ---> Using cache
 ---> 49f69606dfb1
Step 8/13 : RUN yum install -y mariadb-server
 ---> Using cache
 ---> bc342cb44fcf
Step 9/13 : COPY jsh_erp.sql /opt/
 ---> Using cache
 ---> 399934e9e2e3
Step 10/13 : COPY mysql_init.sh /opt/
 ---> d12edc976af2
Step 11/13 : RUN bash /opt/mysql_init.sh
 ---> Running in fa118f238235
Installing MariaDB/MySQL system tables in '/var/lib/mysql' ...
OK


		...省略...
		
Step 12/13 : EXPOSE 3306
 ---> Running in cde4bd6acb23
Removing intermediate container cde4bd6acb23
 ---> 6e7f28fdfdcf
Step 13/13 : CMD ["mysqld_safe","--user=root"]
 ---> Running in d4602d3237fd
Removing intermediate container d4602d3237fd
 ---> 463a19d01457
Successfully built 463a19d01457
Successfully tagged erp-mysql:v1.0

解释

这行命令是使用Docker构建一个新的镜像,并给这个镜像打上标签。让我们逐部分解析这个命令:

docker build: 这是Docker CLI的一个命令,用于构建Docker镜像。

-t erp-mysql:v1.0: 这个选项指定了镜像的名称和标签。在这里,erp-mysql是镜像的名称,v1.0是这个镜像的标签。标签可以帮助你区分同一个镜像的不同版本。

-f docker_mariadb: 这个选项指定了Dockerfile的文件名。默认情况下,Docker会在构建上下文的根目录查找一个名为Dockerfile的文件。如果你的Dockerfile名称不是默认的,或者不在根目录下,你需要使用-f选项来指定Dockerfile的路径。在这个例子中,Dockerfile的名称被假设为docker_mariadb。

.: 构建上下文的路径。在这个例子中,.表示当前目录,也就是说Docker将使用当前目录作为构建上下文。构建上下文是Docker构建镜像时可以访问的文件和目录的集合。当你执行docker build命令时,Docker客户端会将构建上下文(包括Dockerfile和它引用的任何文件)发送到Docker守护进程。

总结起来,这条命令的含义是:使用当前目录作为构建上下文,根据名为docker_mariadb的Dockerfile,构建一个新的Docker镜像,并将这个镜像标记为erp-mysql:v1.0。

在执行这个命令之前,请确保当前目录中存在docker_mariadb文件,并且该文件是有效的Dockerfile。此外,确保所有Dockerfile中引用的文件都位于当前目录或其子目录中。

7,验证

[root@k8s-master-node1 ERP]# docker images 
REPOSITORY                                          TAG              IMAGE ID       CREATED              SIZE
erp-mysql                                           v1.0             463a19d01457   About a minute ago   1.14GB
*****省略*****

【题目 2】2.2.2 容器化部署 Redis [0.5 分]

编写 Dockerfile 文件构建 redis 镜像,要求基于 centos 完成 Redis 服务的安装和配置,并设置服务开机自启。

编写 Dockerfile 构建镜像 erp-redis:v1.0,要求使用 centos7.9.2009 镜像作为基础镜像,完成 Redis 服务的安装,修改其配置文件关闭保护模式,并设置 Redis 服务开机自启。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:ERP.tar.gz)

答:
1,编写脚本

[root@k8s-master-node1 ERP]# vi docker_redis
[root@k8s-master-node1 ERP]# cat docker_redis 
FROM centos:centos7.9.2009
MAINTAINER troml1788
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
RUN mkdir /root/yum
COPY yum /root/yum
RUN yum install -y redis
RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/redis.conf
RUN sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf
EXPOSE 6379
CMD ["/usr/bin/redis-server","/etc/redis.conf"]

2,运行脚本注意最后那个点

[root@k8s-master-node1 ERP]# docker build -t erp-redis:v1.0 -f docker_redis .
Sending build context to Docker daemon  427.1MB
Step 1/11 : FROM centos:centos7.9.2009
 ---> eeb6ee3f44bd
Step 2/11 : MAINTAINER troml1788
 ---> Using cache
 ---> 8fc24d0ec16f
Step 3/11 : RUN rm -rf /etc/yum.repos.d/*
 ---> Using cache
 ---> 1c6408d963cb
Step 4/11 : COPY local.repo /etc/yum.repos.d/
 ---> Using cache
 ---> d1d06d6e4a53
Step 5/11 : RUN mkdir /root/yum
 ---> Using cache
 ---> db2d565bb737
Step 6/11 : COPY yum /root/yum
 ---> Using cache
 ---> 430ad035b5e8
Step 7/11 : RUN yum install -y redis
 ---> Running in baae786eab9c
Loaded plugins: fastestmirror, ovl
*****省略*****
Complete!
Removing intermediate container baae786eab9c
 ---> 9215813e9f66
Step 8/11 : RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/redis.conf
 ---> Running in 46a50097e63e
Removing intermediate container 46a50097e63e
 ---> e7d4e71b7972
Step 9/11 : RUN sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf
 ---> Running in 35dd0bf6ead7
Removing intermediate container 35dd0bf6ead7
 ---> d6e19999c581
Step 10/11 : EXPOSE 6379
 ---> Running in a5fc11360f56
Removing intermediate container a5fc11360f56
 ---> d12fd9d152ff
Step 11/11 : CMD ["/usr/bin/redis-server","/etc/redis.conf"]
 ---> Running in 37ad1a9ac737
Removing intermediate container 37ad1a9ac737
 ---> 295862a5ce88
Successfully built 295862a5ce88
Successfully tagged erp-redis:v1.0

3,验证

[root@k8s-master-node1 ERP]# docker images
REPOSITORY                                          TAG              IMAGE ID       CREATED              SIZE
erp-redis                                           v1.0             295862a5ce88   About a minute ago   542MB
erp-mysql                                           v1.0             463a19d01457   5 minutes ago        1.14GB
*****省略*****

脚本解释

# 使用 CentOS 7.9.2009 作为基础镜像
FROM centos:centos7.9.2009

# 设置镜像的维护者(已弃用,推荐使用 LABEL)
MAINTAINER troml1788

# 删除所有默认的 yum 源配置文件,以便使用自定义 yum 源配置
RUN rm -rf /etc/yum.repos.d/*

# 将自定义的 yum 源配置文件复制到容器中【跟上一题的一样,可自定义位置】
COPY local.repo /etc/yum.repos.d/

# 在根目录创建一个yum文件夹,用于存放yum仓库
RUN mkdir /root/yum

# 将预下载的 yum 包缓存复制到容器中,加速安装过程
COPY yum /root/yum

# 安装 Redis
RUN yum install -y redis

# 修改 Redis 配置文件,将监听地址从 127.0.0.1 更改为 0.0.0.0,允许外部访问
RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/redis.conf

# 修改 Redis 配置文件,关闭保护模式,注意这可能会带来安全风险
RUN sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf

# 暴露 Redis 默认端口 6379,以便外部访问
EXPOSE 6379

# 设置容器启动时执行的命令,启动 Redis 服务并使用上述修改过的配置文件
CMD ["/usr/bin/redis-server", "/etc/redis.conf"]

【题目3】2.2.3容器化部署Nginx[0.5 分]

编写 Dockerfile 文件构建 nginx 镜像,要求基于 centos 完成 Nginx 服务的安装和配置,并设置服务开机自启。

编写 Dockerfile 构建镜像 erp-nginx:v1.0,要求使用 centos7.9.2009 镜像作为基础镜像,完成 Nginx 服务的安装,使用提供的 app.tar.gz 和 nginx.conf 启动 Nginx 服务, 并设置开机自启。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:ERP.tar.gz)

答:

1,编写脚本

[root@k8s-master-node1 ERP]# vi docker_nginx 
[root@k8s-master-node1 ERP]# cat docker_nginx 
FROM centos:centos7.9.2009
MAINTAINER troml
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
RUN mkdir /root/yum
COPY yum /root/yum
RUN yum install -y nginx
RUN mkdir -p /etc/nginx/
COPY nginx/nginx.conf /eitc/nginx/nginx.conf
RUN mkdir -p /usr/share/nginx/html/
COPY nginx/app.tar.gz /usr/share/nginx/html/
RUN cd /usr/share/nginx/html/ && \
    tar -zxvf app.tar.gz && \
    rm -f app.tar.gz
EXPOSE 80
CMD ["nginx","-g","daemon off;"]

2,执行脚本(后添加两条创建文件夹的,没有在回显中显示)

[root@k8s-master-node1 ERP]# docker build -t erp-nginx:v1.0 -f docker_nginx .
Sending build context to Docker daemon  437.9MB
Step 1/14 : FROM centos:centos7.9.2009
 ---> eeb6ee3f44bd
Step 2/14 : MAINTAINER troml
 ---> Using cache
 ---> 0e384b4b20d4
Step 3/14 : RUN rm -rf /etc/yum.repos.d/*
 ---> Using cache
 ---> c958c351502d
Step 4/14 : COPY local.repo /etc/yum.repos.d/
 ---> 795ff37c4865
Step 5/14 : RUN mkdir /root/yum
 ---> Running in 4b2f700ac3be
Removing intermediate container 4b2f700ac3be
 ---> cc73104ffc04
Step 6/14 : COPY yum /root/yum
 ---> f2cc6d53f2cf
Step 7/14 : RUN yum install -y nginx
 ---> Running in b065805cf31d
Loaded plugins: fastestmirror, ovl
*****省略*****
Step 8/14 : RUN mkdir -p /etc/nginx/
 ---> Running in 03aae3814cc5
Removing intermediate container 03aae3814cc5
 ---> 77710502215f
Step 9/14 : COPY nginx/nginx.conf /eitc/nginx/nginx.conf
 ---> b5ece8bcd2b1
Step 10/14 : RUN mkdir -p /usr/share/nginx/html/
 ---> Running in 4293e88bdfd3
Removing intermediate container 4293e88bdfd3
 ---> 2858c4571467
Step 11/14 : COPY nginx/app.tar.gz /usr/share/nginx/html/
 ---> 1b9642213bd7
Step 12/14 : RUN cd /usr/share/nginx/html/ &&     tar -zxvf app.tar.gz &&     rm -f app.tar.gz
 ---> Running in 50803e643bdb

3,验证

[root@k8s-master-node1 ERP]# docker images 
REPOSITORY                                          TAG              IMAGE ID       CREATED          SIZE
erp-nginx                                           v1.0             d30e7428a20f   3 minutes ago    588MB
erp-redis                                           v1.0             295862a5ce88   8 minutes ago    542MB
erp-mysql                                           v1.0             463a19d01457   12 minutes ago   1.14GB
*****省略*****

脚本解释

# 使用 CentOS 7.9.2009 作为基础镜像
FROM centos:centos7.9.2009

# 设置镜像的维护者(MAINTAINER 已弃用,推荐使用 LABEL)
MAINTAINER troml

# 删除所有默认的 yum 源配置文件,以便使用自定义的yum源
RUN rm -rf /etc/yum.repos.d/*

# 将自定义的 yum 源配置文件复制到容器中的/etc/yum.repos.d/目录下
COPY local.repo /etc/yum.repos.d/

# 使用 yum 安装 nginx
RUN yum install -y nginx

# 创建文件夹
RUN mkdir -p /etc/nginx/

# 将自定义的 nginx 配置文件复制到容器中
COPY nginx/nginx.conf /etc/nginx/nginx.conf

# 将压缩过的应用程序文件复制到容器的 nginx 静态文件目录下
COPY nginx/app.tar.gz /usr/share/nginx/html/

# 创建文件夹
RUN mkdir -p /usr/share/nginx/html/

# 解压应用程序压缩包到 nginx 的静态文件目录,并删除压缩包
RUN cd /usr/share/nginx/html/ && \
    tar -zxvf app.tar.gz && \
    rm -f app.tar.gz

# 暴露 80 端口以供外部访问 nginx 服务
EXPOSE 80

# 设置容器启动时执行的命令,以前台模式启动 nginx
CMD ["nginx","-g","daemon off;"]

【题目 4】2.2.4 容器化部署 ERP[0.5 分]

编写 Dockerfile 文件构建 erp 镜像,要求基于 centos 完成 JDK 环境和 ERP 服务的安装与配置,并设置服务开机自启。

编写 Dockerfile 构建镜像 erp-server:v1.0,要求使用 centos7.9.2009 镜像作为基础镜像,完成 JDK 环境的安装,启动提供的 jar 包,并设置服务开机自启。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:
ERP.tar.gz)

答:
1,编写脚本

root@k8s-master-node1 ERP]# vi docker_erp  
[root@k8s-master-node1 ERP]# cat docker_erp 
FROM centos:centos7.9.2009
MAINTAINER troml
COPY app.jar /root
RUN mkdir -p /root/yum
COPY yum /root/yum
RUN rm -rfv /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
EXPOSE 9999
CMD java -jar /root/app.jar

2,运行脚本

[root@k8s-master-node1 ERP]# docker build -t erp-service:v1.0 -f docker_erp .
Sending build context to Docker daemon  427.1MB
Step 1/10 : FROM centos:centos7.9.2009
 ---> eeb6ee3f44bd
Step 2/10 : MAINTAINER troml1788
 ---> Using cache
 ---> 8fc24d0ec16f
Step 3/10 : COPY app.jar /root
 ---> e511d1a9d7e2
Step 4/10 : RUN mkdir -p /root/yum
 ---> Running in 508fd13cb619
Removing intermediate container 508fd13cb619
 ---> 9b34663295e0
Step 5/10 : COPY yum /root/yum
 ---> fb44464567e6
Step 6/10 : RUN rm -rfv /etc/yum.repos.d/*
 ---> Running in 11771040f0ae
removed '/etc/yum.repos.d/CentOS-Base.repo'
removed '/etc/yum.repos.d/CentOS-CR.repo'
removed '/etc/yum.repos.d/CentOS-Debuginfo.repo'
removed '/etc/yum.repos.d/CentOS-Media.repo'
removed '/etc/yum.repos.d/CentOS-Sources.repo'
removed '/etc/yum.repos.d/CentOS-Vault.repo'
removed '/etc/yum.repos.d/CentOS-fasttrack.repo'
removed '/etc/yum.repos.d/CentOS-x86_64-kernel.repo'
Removing intermediate container 11771040f0ae
 ---> 3bf6ff3eb1af
Step 7/10 : COPY local.repo /etc/yum.repos.d/
 ---> d9549e050881
Step 8/10 : RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
 ---> Running in cb6d90d2c8cb
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
Resolving Dependencies
--> Running transaction check

*******省略********                                  




Complete!
Removing intermediate container 647af9c48e46
 ---> c273dfcfe597
Step 9/10 : EXPOSE 9999
 ---> Running in 3cd56de070a0
Removing intermediate container 3cd56de070a0
 ---> aa36c982a0f8
Step 10/10 : CMD java -jar /root/ERP/app.jar
 ---> Running in bb2c15edf271
Removing intermediate container bb2c15edf271
 ---> 27bae0fd4cfe
Successfully built 27bae0fd4cfe
Successfully tagged erp-service:v1.0

3,验证

[root@k8s-master-node1 ERP]# docker images
REPOSITORY                                          TAG              IMAGE ID       CREATED          SIZE
erp-service                                         v1.0             847dab130365   58 seconds ago   818MB
erp-nginx                                           v1.0             d30e7428a20f   11 minutes ago   588MB
erp-redis                                           v1.0             295862a5ce88   16 minutes ago   542MB
erp-mysql                                           v1.0             463a19d01457   20 minutes ago   1.14GB

脚本解释

# 使用 CentOS 7.9.2009 作为基础镜像
FROM centos:centos7.9.2009

# 维护者信息
MAINTAINER troml

# 复制应用程序 jar 文件到 /root 目录
COPY app.jar /root

# 复制 yum 目录到 /root/yum 目录
COPY yum /root/yum

# 清理 /etc/yum.repos.d/ 目录下的所有文件
RUN rm -rfv /etc/yum.repos.d/*

# 复制本地 yum 源配置文件到 /etc/yum.repos.d/local.repo
COPY local.repo /etc/yum.repos.d/local.repo

# 安装 OpenJDK 8
RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

# 暴露容器监听的端口
EXPOSE 9999

# 启动 Java 应用程序
CMD java -jar /root/app.jar

【题目 5】2.2.5 编排部署 ERP

管理系统[1 分]
编写 docker-compose.yaml 文件,要求使用镜像 mysql、redis、nginx 和 erp 完成 ERP管理系统的编排部署。

编写 docker-compose.yaml 完成 ERP 管理系统的部署,要求定义mysql、redis、nginx 和erp 共四个Service,分别使用镜像erp-redis:v1.0、erp-mysql:v1.0、erp-nginx:v1.0 和 erp-server:v1.0,并将 nginx 服务的 80 端口映射到宿主机的 8888 端口。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:
ERP.tar.gz)

答:
1,编写脚本注意缩进services 下面的每个服务都缩进了两个空格

[root@k8s-master-node1 ~]# vi docker-compose.yaml
[root@k8s-master-node1 ~]# cat docker-compose.yaml 
version: '3.8'
services:
  mysql:
    image: erp-mysql:v1.0
  redis:
    image: erp-redis:v1.0
  erp:
    image: erp-server:v1.0
  nginx:
    image: erp-nginx:v1.0
    ports:
      - "8888:80"  # 将宿主机的 8888 端口映射到容器的 80 端口


前提:在包含 docker-compose.yaml 文件的目录中,并且系统中已经安装了 docker-compose 工具
检查环境

[root@k8s-master-node1 ~]# ls
anaconda-ks.cfg  chinaskills_cloud_paas_v2.0.2.iso  coredns-configmap.yaml  docker-compose.yaml  ERP  ERP.tar.gz  kube-dns-service.yaml
[root@k8s-master-node1 ~]# docker-
docker-compose  docker-init     docker-proxy    

2,运行yaml

[root@k8s-master-node1 ~]# docker-compose up -d
[+] Running 4/4
 ⠿ Container root-erp-1    Started                                                                                                                                                     0.3s
 ⠿ Container root-mysql-1  Running                                                                                                                                                     0.0s
 ⠿ Container root-redis-1  Running                                                                                                                                                     0.0s
 ⠿ Container root-nginx-1  Running                                                                                                                                                     0.0s

3,验证(步骤就是这么个步骤,也访问成功了,只是app.jar环境出现了点问题)

[root@k8s-master-node1 ~]# docker ps |grep nginx
7e63d115fbf4   erp-nginx:v1.0                       "nginx -g 'daemon of…"   11 minutes ago   Up 11 seconds          0.0.0.0:8888->80/tcp, :::8888->80/tcp   root-nginx-1
ee671924e2a0   goharbor/nginx-photon:v2.3.4         "nginx -g 'daemon of…"   2 hours ago      Up 2 hours (healthy)   0.0.0.0:80->8080/tcp, :::80->8080/tcp   nginx
7d5d00e073b0   goharbor/harbor-portal:v2.3.4        "nginx -g 'daemon of…"   2 hours ago      Up 2 hours (healthy)                                           harbor-portal

从现在开始建议将快照回退至容器云平台刚搭建好的快照

【题目 6】2.2.6 部署 GitLab [1 分]

将 GitLab 部署到 Kubernetes 集群中,设置 GitLab 服务 root 用户的密码,使用Service 暴露服务,并将提供的项目包导入到 GitLab 中。

在 Kubernetes 集群中新建命名空间 gitlab-ci,将 GitLab 部署到该命名空间下, Deployment 和 Service 名称均为 gitlab,以 NodePort 方式将 80 端口对外暴露为 30880, 设置GitLab 服务root 用户的密码为admin@123,将项目包demo-2048.tar.gz 导入到GitLab 中并名为 demo-2048。
完成后提交 Master 节点的用户名、密码和 IP 地址到答题框。(需要用到的软件包:CICD-Runner.tar.gz)
小提示:本实验只需要master一台机器就够了

注意:因为制作软件包的时候,把CICD错写成了CIDI,所以本题答案中的CIDI软件包实际为均为CICD
软件包已更正名字,现在名字叫CICD-Runner.tar.gz

记录一个新知识 答案在下面
快速编写yaml文件方法

[root@k8s-master-node1 ~]# kubectl create --help
	......
Available Commands:
  clusterrole         Create a cluster role
  clusterrolebinding  Create a cluster role binding for a particular cluster role
  configmap           Create a config map from a local file, directory or literal value
  cronjob             Create a cron job with the specified name
  deployment          Create a deployment with the specified name  《《 本题用
  ingress             Create an ingress with the specified name
  job                 Create a job with the specified name
  namespace           Create a namespace with the specified name
  poddisruptionbudget Create a pod disruption budget with the specified name
  priorityclass       Create a priority class with the specified name
  quota               Create a quota with the specified name
  role                Create a role with single rule
  rolebinding         Create a role binding for a particular role or cluster role
  secret              Create a secret using specified subcommand
  service             Create a service using a specified subcommand  《《 本题用
  serviceaccount      Create a service account with the specified name
	......

答:
1,导入镜像包

上传包并解压
[root@k8s-master-node1 ~]# ls
anaconda-ks.cfg  chinaskills_cloud_paas_v2.0.2.iso  CIDI-Runner.tar.gz
[root@k8s-master-node1 ~]# tar -zxvf CIDI-Runner.tar.gz 
CIDI-Runner/
CIDI-Runner/demo-2048.tar.gz
CIDI-Runner/gitlab-agent-1.1.0.tgz
CIDI-Runner/gitlab-runner-0.43.0.tgz
CIDI-Runner/images/
CIDI-Runner/images/A_readme.txt
CIDI-Runner/images/bitnami_kubectl_1.22.tar
CIDI-Runner/images/docker-18.09.7-dind.tar
CIDI-Runner/images/docker-18.09.7.tar
CIDI-Runner/images/gitlab-gitlab-ce-latest.tar
CIDI-Runner/images/gitlab-org_cluster-integration_gitlab-agent_agentk_v15.1.0.tar
CIDI-Runner/images/gitlab-org_gitlab-runner.tar
CIDI-Runner/images/gitlab-org_gitlab-runner_gitlab-runner-helper.tar
CIDI-Runner/images/load_images.sh
CIDI-Runner/images/maven-3.6-jdk-8.tar
CIDI-Runner/images/tomcat-8.5.64-jdk8.tar

切换至存放镜像的目录下,运行导入脚本
[root@k8s-master-node1 ~]# cd CIDI-Runner/
[root@k8s-master-node1 CIDI-Runner]# ls
demo-2048.tar.gz  gitlab-agent-1.1.0.tgz  gitlab-runner-0.43.0.tgz  images
[root@k8s-master-node1 CIDI-Runner]# cd images/
[root@k8s-master-node1 images]# ls
A_readme.txt              docker-18.09.7.tar                                              gitlab-org_gitlab-runner_gitlab-runner-helper.tar  maven-3.6-jdk-8.tar
bitnami_kubectl_1.22.tar  gitlab-gitlab-ce-latest.tar                                     gitlab-org_gitlab-runner.tar                       tomcat-8.5.64-jdk8.tar
docker-18.09.7-dind.tar   gitlab-org_cluster-integration_gitlab-agent_agentk_v15.1.0.tar  load_images.sh

给脚本添加可执行权限
[root@k8s-master-node1 images]# chmod +x load_images.sh
[root@k8s-master-node1 images]# ./load_images.sh	《《 按回车开始导入镜像

回到根目录
[root@k8s-master-node1 images]# cd
[root@k8s-master-node1 ~]# 

2,编写yaml文件
2.1,编写部署deployment的部分

kubectl create deployment gitlab:使用 kubectl 命令创建一个名为 gitlab 的 Deployment 对象。
–image=gitlab/gitlab-ce:latest:指定 gitlab 的容器镜像为 gitlab/gitlab-ce,并使用 :latest 标签。这将确保使用最新版本的 GitLab Community Edition 容器镜像来运行 Deployment 中的 Pod。
–port=80:指定 gitlab 的容器应该暴露在 80 端口上。
–dry-run:此选项告诉 kubectl 在实际创建资源之前模拟执行操作,以便检查配置是否正确,但不会实际创建、更新或删除资源。
-oyaml:将 Deployment 的配置以 YAML 格式输出。此选项告诉 kubectl 将对象的 YAML 表示形式输出到控制台,以便可以重定向到文件中。
gitlab.yaml:将命令的输出重定向到一个名为 gitlab.yaml 的文件中。这会将生成的 YAML 配置信息保存到 gitlab.yaml 文件中,以便后续可以使用该文件来创建 Deployment。

[root@k8s-master-node1 ~]# kubectl create deployment gitlab --image=gitlab/gitlab-ce:latest --port=80 --dry-run -oyaml > gitlab.yaml
W0306 18:36:12.747995   42002 helpers.go:555] --dry-run is deprecated and can be replaced with --dry-run=client.
[root@k8s-master-node1 ~]# vi gitlab.yaml

*********************************************************************
命令模式下键入dd即可删除光标所在行
插入模式下 Ctrl + K:删除光标后面的所有内容,包括光标所在位置的字符。
*********************************************************************
删除一些用不上的,留下下面那些即可
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: gitlab
  name: gitlab
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gitlab
  template:
    metadata:
      labels:
        app: gitlab
    spec:
      containers:
      - image: gitlab/gitlab-ce:latest
        name: gitlab-ce
        ports:
        - containerPort: 80

再对其添加一些
[root@k8s-master-node1 ~]# vi gitlab.yaml
[root@k8s-master-node1 ~]# cat gitlab.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: gitlab
  name: gitlab
  namespace: gitlab-ci # 添加要部署的命名空间,等会记得先创建
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gitlab
  template:
    metadata:
      labels:
        app: gitlab
    spec:
      containers:
      - image: gitlab/gitlab-ce:latest
        imagePullPolicy: IfNotPresent #添加镜像拉取策略,本地有这个镜像就不用再拉了
        name: gitlab-ce
        ports:
        - containerPort: 80
        env:
        - name: GITLAB_ROOT_PASSWORD    # 添加root用户密码
# 注意这里,因为我们用的最新版gitlab镜像,严格要求不能是弱密码
# 所以此处先不按题目的admin@123来,比赛时要填admin@123
          value: QazWsxEdc781 # 设置root用户密码
#下面这几个不指定也可以,本来就是默认的
        - name: GITLAB_HOST # 添加master主机
          value: 192.168.100.20 # 添加IP
        - name: GITLAB_PORT 
          value: "80"


2.2,编写部署service的部分添加了注释,下面的yaml文件可直接复制

追加至刚刚写好的部署deployment的yaml文件
[root@k8s-master-node1 ~]# kubectl create service nodeport gitlab --tcp=80:80 --dry-run -oyaml >> gitlab.yaml
W0306 18:57:30.422614   76164 helpers.go:555] --dry-run is deprecated and can be replaced with --dry-run=client.
[root@k8s-master-node1 ~]# 
*******************************************************
注意:一个yaml部署两个资源,需要用横杠隔开,也就是三个减号 ---
*******************************************************
[root@k8s-master-node1 ~]# vi gitlab.yaml 
[root@k8s-master-node1 ~]# cat gitlab.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: gitlab
  name: gitlab
  namespace: gitlab-ci # 添加要部署的命名空间,等会记得先创建
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gitlab
  template:
    metadata:
      labels:
        app: gitlab
    spec:
      containers:
      - image: gitlab/gitlab-ce:latest
        imagePullPolicy: IfNotPresent #添加镜像拉取策略,本地有这个镜像就不用再拉了
        name: gitlab-ce
        ports:
        - containerPort: 80
        env:
        - name: GITLAB_ROOT_PASSWORD    # 添加root用户密码
# 注意这里,因为我们用的最新版gitlab镜像,严格要求不能是弱密码
# 所以此处先不按题目的admin@123来,比赛时要填admin@123
          value: QazWsxEdc781 # 设置root用户密码
#下面这几个不指定也可以,本来就是默认的
        - name: GITLAB_HOST # 添加master主机
          value: 192.168.25.100 # 添加MASTER IP
        - name: GITLAB_PORT 
          value: "80"
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: gitlab
  name: gitlab
  namespace: gitlab-ci
spec:
  ports:
  - name: 80-80
    port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30880 #添加暴漏端口,不然会随机一个
  selector: # 选择器很重要,它会找这个gitlab然后暴漏它的端口
    app: gitlab
  type: NodePort

3,建命名空间gitlab-ci,并部署deployment和service

[root@k8s-master-node1 ~]# kubectl create namespace gitlab-ci
namespace/gitlab-ci created
[root@k8s-master-node1 ~]# kubectl apply -f gitlab.yaml 
deployment.apps/gitlab created
service/gitlab created
[root@k8s-master-node1 ~]# 

验证是否正常运行,下面就是正常运行
[root@k8s-master-node1 ~]# kubectl get pod,svc -n gitlab-ci
NAME                          READY   STATUS    RESTARTS   AGE
pod/gitlab-57948cdbcb-r875v   1/1     Running   0          11s

NAME             TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/gitlab   NodePort   10.96.204.15   <none>        80:30880/TCP   11s

等待一会即可访问Gitlab图形化界面
接下来将项目包demo-2048.tar.gz 导入到GitLab 中并名为 demo-2048
通过$masterIP:30880访问Gitlab图形化界面
用户root,密码QazWsxEdc781
再次提醒:题目要求的密码是admin@123,由于最新版不能弱密码只能设置这个密码

访问后,
依次点击 
1,Create new project
2,Import project
************************************************************************************
!注意:如果遇到
		No import options available
Contact an administrator to enable options for importing your project.
按以下步骤开启导入权限:
	a,点击左侧面板左下角的 admin area
	b,点击 Settings
	c,点击 General
	d,点击 Import and export settings 后面的 Expand
	e,在 Import sources 中勾选 GitLab export
	f,勾选 Allow migrating GitLab groups and projects by direct transfer 下面的 Enabled
	g,拉到下面点击 Save changes
	h,上方出现 Application settings saved successfully 表示成功
	i,依次点击左侧面板的 Overview -> Projects -> New Project -> Import Project
************************************************************************************
3,点击 GitLab export 
4,在Project name输入项目名字,题目要求demo-2048
5,project URL 下选择root
6,点击浏览文件,找到本地的demo-2048.tar.gz上传
7,点击Import Project

至此题目完成


【题目 7】2.2.7 部署 GitLab Runner [1 分]

将 GitLab Runner 部署到 Kubernetes 集群中,为 GitLab Runner 创建持久化构建缓存目录以加速构建速度,并将其注册到 GitLab 中。

将 GitLab Runner 部署到 gitlab-ci 命名空间下,Release 名称为 gitlab-runner,为GitLab Runner 创建持久化构建缓存目录/home/gitlab-runner/ci-build-cache 以加速构建速度,并将其注册到 GitLab 中。
完成后提交 Master 节点的用户名、密码和 IP 地址到答题框。(需要用到的软件包:CICD-Runner.tar.gz)

注意:因为制作软件包的时候,把CICD错写成了CIDI,所以本题答案中的CIDI软件包实际为均为CICD
软件包已更正名字,现在名字叫CICD-Runner.tar.gz
答:
1,解压包

用的是这个包
[root@k8s-master-node1 ~]# ls CIDI-Runner/ |grep runner
gitlab-runner-0.43.0.tgz

解压并进入路径
[root@k8s-master-node1 CIDI-Runner]# tar -zxvf gitlab-runner-0.43.0.tgz 
gitlab-runner/Chart.yaml
gitlab-runner/values.yaml
gitlab-runner/templates/NOTES.txt
gitlab-runner/templates/_cache.tpl
gitlab-runner/templates/_env_vars.tpl
gitlab-runner/templates/_helpers.tpl
gitlab-runner/templates/configmap.yaml
gitlab-runner/templates/deployment.yaml
gitlab-runner/templates/hpa.yaml
gitlab-runner/templates/role-binding.yaml
gitlab-runner/templates/role.yaml
gitlab-runner/templates/secrets.yaml
gitlab-runner/templates/service-account.yaml
gitlab-runner/templates/service-session-server.yaml
gitlab-runner/templates/service.yaml
gitlab-runner/templates/servicemonitor.yaml
gitlab-runner/.gitlab/changelog.yml
gitlab-runner/.gitlab-ci.yml
gitlab-runner/.helmignore
gitlab-runner/CHANGELOG.md
gitlab-runner/CONTRIBUTING.md
gitlab-runner/LICENSE
gitlab-runner/Makefile
gitlab-runner/NOTICE
gitlab-runner/README.md


安装helm,压缩包在/roo/CICD-Runner/下
[root@k8s-master-node1 CIDI-Runner]# tar -zxvf helm-v3.10.2-linux-amd64.tar.gz 
linux-amd64/
linux-amd64/helm
linux-amd64/LICENSE
linux-amd64/README.md
[root@k8s-master-node1 ~]# cd linux-amd64/
[root@k8s-master-node1 linux-amd64]# ls
helm  LICENSE  README.md
[root@k8s-master-node1 linux-amd64]# mv helm /usr/bin/helm
[root@k8s-master-node1 linux-amd64]# cd
[root@k8s-master-node1 linux-amd64]# cd /root/CIDI-Runner/gitlab-runner/
[root@k8s-master-node1 gitlab-runner]# ls
CHANGELOG.md  Chart.yaml  CONTRIBUTING.md  LICENSE  Makefile  NOTICE  README.md  templates  values.yaml

2,查看我们的gitlab-runner 和 gitlab镜像版本,这里的版本是 alpine-v15.2.0v16.9.1

[root@k8s-master-node1 gitlab-runner]# docker images |grep gitlab
查看我们的runner版本
gitlab/gitlab-ce                                                         latest            e9cb66792d94   2 weeks ago     3.01GB
registry.gitlab.com/gitlab-org/gitlab-runner                             alpine-v15.2.0    173fe605463c   19 months ago   222MB
registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper        x86_64-7f093137   018c6111ad03   19 months ago   59.1MB
registry.gitlab.com/gitlab-org/cluster-integration/gitlab-agent/agentk   v15.1.0           f854965ce1fa   21 months ago   73.8MB
**************************************************
查看我们的gitlab版本
1,登陆进gitlab后,依次点击 Overview -> Dashboard
在Components中会显示这么个东西:
GitLab v16.9.1
GitLab Shell14.33
**************************************************
所以,我们的 runner版本是 v15.2.0 	 gitlab版本是 v16.9.1

3,开始修改values.yaml 文件过长,只贴需要修改的模块

一、常规修改方法:
第一处修改点:指定为我们现有的runner版本
     14 image:
     15   registry: registry.gitlab.com
     16   image: gitlab-org/gitlab-runner
     17   tag: alpine-v15.2.0	#### 修改这里为我们的runner版本并取消注释	

  ......

第二处修改点:指定我们的gitlab地址
******************************
http://192.168.100.20:30880/
******************************
     48 ## The GitLab Server URL (with protocol) that want to register the runner against
     49 ## ref: https://docs.gitlab.com/runner/commands/index.html#gitlab-runner-register
     50 ##
     51 # gitlabUrl: http://gitlab.your-domain.com/

第三处修改点:添加令牌
******************************************************************************************
获取令牌的方法:
登陆进gitlab后
点击左侧面板的 CICD -> Runners -> New instance runner 旁边的三个点,复制后找个地方存放起来
令牌格式如下:
R-9yUvXwNkx8reZ19BUF
******************************************************************************************
     53 ## The Registration Token for adding new Runners to the GitLab Server. This must
     54 ## be retrieved from your GitLab Instance.
     55 ## ref: https://docs.gitlab.com/ce/ci/runners/index.html
     56 ##
     57 # runnerRegistrationToken: ""

第四处修改点:修改为true
    151 ## For RBAC support:
    152 rbac:
    153   create: true		## 不创建的话,后面流水线有报错

二、推荐修改方法:(不容易错)
斜杠换行(手机版CSDN可能不会显示斜杠)
[root@k8s-master-node1 gitlab-runner]# helm install --namespace gitlab-ci gitlab-runner \
> --set gitlabUrl=http://192.168.100.20:30880/ \
> --set runnerRegistrationToken=R-9yUvXwNkx8reZ19BUF \
> --set runners.tags=k8s-runner \
> --set rbac.create=true .
NAME: gitlab-runner
LAST DEPLOYED: Thu Mar  7 03:29:59 2024
NAMESPACE: gitlab-ci
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Your GitLab Runner should now be registered against the GitLab instance reachable at: "http://192.168.100.20:30880/"

Runner namespace "gitlab-ci" was found in runners.config template.

验证:
[root@k8s-master-node1 gitlab-runner]# helm list -n gitlab-ci
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
gitlab-runner   gitlab-ci       1               2024-03-07 03:29:59.876705333 +0800 CST deployed        gitlab-runner-0.43.0    15.2.0     
[root@k8s-master-node1 gitlab-runner]# kubectl get pod -A | grep gitlab-runner
gitlab-ci      gitlab-runner-7c787c5b4-hxfzm              1/1     Running       0                41s

命令解析:
****************************************************************************
helm install:使用 Helm 安装一个新的 Chart。
--namespace gitlab-ci:指定 Helm 安装的命名空间为 gitlab-ci,即将 GitLab Runner 安装到 gitlab-ci 命名空间中。
gitlab-runner:指定要安装的 Chart 名称为 gitlab-runner。
--set gitlabUrl=http://192.168.100.20:30880/:设置 GitLab 实例的 URL 为 http://192.168.100.20:30880/,即指定 GitLab 的地址和端口号。
--set runnerRegistrationToken=R-9yUvXwNkx8reZ19BUF:设置 Runner 的注册令牌为 R-9yUvXwNkx8reZ19BUF,用于注册 Runner 到 GitLab。
--set runner.tags=k8s-runner:设置 Runner 的标签为 k8s-runner,用于为 Runner 分配特定的任务。
--set rbac.create=true:设置 Helm 在安装时创建 RBAC 规则为 true,即创建与 Helm Chart 相关的 RBAC 规则。

最后的那个. 是要找Chart.yaml ,因为和value.yaml文件在同一个目录下,所以是点,如果不在同一级目录下需要写完整路径
****************************************************************************

页面上,刷新一下如图:(下面有失败的解决方法)
在这里插入图片描述

如果验证发现没有,可能是入栈流量没有开启,常见于低版本
解决方法:依次点击 Settings -> Network -> Outbound requests 把里面的两个 Allow ..... 都勾上并保存
再重新部署
!!!这里是验证失败后要做的步骤,如果验证成功继续往下走

*************************************************
!!!这里是验证失败后要做的步骤,如果验证成功继续往下走
*************************************************
先删除我们刚刚部署的
helm uninstall -n gitlab-ci gitlab-runner

4,为GitLab Runner 创建持久化构建缓存目录/home/gitlab-runner/ci-build-cache ,并将其注册到 GitLab 中


修改这里:
runners:
  # runner configuration, where the multi line strings is evaluated as
  # template so you can specify helm values inside of it.
  #
  # tpl: https://helm.sh/docs/howto/charts_tips_and_tricks/#using-the-tpl-function
  # runner configuration: https://docs.gitlab.com/runner/configuration/advanced-configuration.html
  config: |
    [[runners]]
      [runners.kubernetes]
        namespace = "{{.Release.Namespace}}"
        image = "ubuntu:16.04"

修改后:
****************************************************************************************
定义了两个 Kubernetes Runner,分别使用了不同的配置。
第一个 Runner 指定了运行在哪个命名空间、使用的容器镜像是 Ubuntu 16.04,并且挂载了一个主机路径作为缓存目录。
第二个 Runner 的名称是 "docker",它将主机上的 Docker Socket 挂载到容器内部,并设置为只读模式。
****************************************************************************************
runners:
  # runner configuration, where the multi line strings is evaluated as
  # template so you can specify helm values inside of it.
  #
  # tpl: https://helm.sh/docs/howto/charts_tips_and_tricks/#using-the-tpl-function
  # runner configuration: https://docs.gitlab.com/runner/configuration/advanced-configuration.html
  config: |
    [[runners]]
      [runners.kubernetes]
        namespace = "{{.Release.Namespace}}"
        image = "ubuntu:16.04"
      [[runners.kubernetes.volumes.host_path]]
        name = "cache"
        mount_path = "/home/gitlab-runner/ci-build-cache"
        host_path = "/opt/cache"
      [[runners.kubernetes.volumes.host_path]]
        name = "docker"
        mount_path = "/var/run/docker.sock"
        read_only = true
        host_path = "/var/run/docker.sock"

【题目 8】2.2.8 部署 GitLab Agent [1 分]

将 Kubernetes 集群添加到 GitLab 项目中指定名称和命名空间。

将 Kubernetes 集群添加到 demo-2048 项目中,并命名为 kubernetes-agent,项目命名空间选择 gitlab-ci。
完成后提交 Master 节点的用户名、密码和 IP 地址到答题框。(需要用到的软件包:CICD-Runner.tar.gz)

注意:因为制作软件包的时候,把CICD错写成了CIDI,所以本题答案中的CIDI软件包实际为均为CICD
软件包已更正名字,现在名字叫CICD-Runner.tar.gz可放心上传

用这个包

[root@k8s-master-node1 CIDI-Runner]# ls | grep gitlab-agent
gitlab-agent-1.1.0.tgz

答:
1,解压包

[root@k8s-master-node1 CIDI-Runner]# tar -zxvf gitlab-agent-1.1.0.tgz 
gitlab-agent/Chart.yaml
gitlab-agent/values.yaml
gitlab-agent/templates/_helpers.tpl
gitlab-agent/templates/clusterrolebinding-cluster-admin.yaml
gitlab-agent/templates/configmap.yaml
gitlab-agent/templates/deployment.yaml
gitlab-agent/templates/secret.yaml
gitlab-agent/templates/serviceaccount.yaml
gitlab-agent/.gitlab-ci.yml
gitlab-agent/.helmignore
gitlab-agent/CONTRIBUTING.md
gitlab-agent/LICENSE
gitlab-agent/README.md
[root@k8s-master-node1 CIDI-Runner]# cd gitlab-agent/
[root@k8s-master-node1 gitlab-agent]# ls
Chart.yaml  CONTRIBUTING.md  LICENSE  README.md  templates  values.yaml

2,进入容器检查组件

[root@k8s-master-node1 gitlab-agent]#  kubectl get pod -A |grep gitlab-
gitlab-ci      gitlab-5d568c5b-767tk                      1/1     Running       1 (101m ago)     168m
gitlab-ci      gitlab-runner-7c787c5b4-hxfzm              1/1     Running       0                17m
[root@k8s-master-node1 gitlab-agent]#  kubectl exec -it -n gitlab-ci gitlab-5d568c5b-767tk /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@gitlab-5d568c5b-767tk:/# gitlab-ctl status
run: alertmanager: (pid 1238) 5962s; run: log: (pid 1113) 5988s
run: gitaly: (pid 1202) 5965s; run: log: (pid 560) 6089s
run: gitlab-exporter: (pid 1212) 5964s; run: log: (pid 954) 6006s
低版本默认不启用 》》run: gitlab-kas: (pid 754) 6078s; run: log: (pid 773) 6075s
run: gitlab-workhorse: (pid 1183) 5965s; run: log: (pid 904) 6017s
run: logrotate: (pid 2634) 2502s; run: log: (pid 510) 6101s
run: nginx: (pid 1195) 5965s; run: log: (pid 945) 6011s
run: postgres-exporter: (pid 1248) 5962s; run: log: (pid 1143) 5982s
run: postgresql: (pid 584) 6084s; run: log: (pid 673) 6081s
run: prometheus: (pid 1223) 5963s; run: log: (pid 1093) 5994s
run: puma: (pid 818) 6032s; run: log: (pid 831) 6029s
run: redis: (pid 518) 6096s; run: log: (pid 527) 6095s
run: redis-exporter: (pid 1214) 5964s; run: log: (pid 987) 6000s
run: sidekiq: (pid 838) 6026s; run: log: (pid 860) 6023s
run: sshd: (pid 40) 6112s; run: log: (pid 39) 6112s

如果是低版本没有启动
root@gitlab-5d568c5b-767tk:/# vi /etc/gitlab/gitlab.rb
进入后 直接 /kas 搜索至这里,修改为true

##! Settings used by the GitLab application
# gitlab_rails['gitlab_kas_enabled'] = true
# gitlab_rails['gitlab_kas_external_url'] = 'ws://gitlab.example.com/-/kubernetes-agent/'              
# gitlab_rails['gitlab_kas_internal_url'] = 'grpc://localhost:8153'
# gitlab_rails['gitlab_kas_external_k8s_proxy_url'] = 'https://gitlab.example.com/-/kubernetes-agent/k8s-proxy/'
*******************************
我们此时是启动状态,不再过多追究这个
ctrl + D 返回master节点
******************************

root@gitlab-5d568c5b-767tk:/# 
exit

3,开始加入集群

1,进入项目、点击项目旁边的加号,创建一个目录
2,在 Directory name 中直接写入 .gitlab/agents/kubernetes-agent
3,点击Create directory
4,进入创建的目录,点击加号添加一个New file ,命名为config.yaml (这个名字是固定的)拉到下面点击 Commit changes
此时config.yaml是空的
5,找到kubernetes clusters,进入【不通版本不一样,我这里是Operate -> kubernetes clusters
6,点击connecta cluster 在弹出的下拉菜单中找到我们刚刚写的文件夹,点击Register
7,会弹出一个窗口,上面记载了token和 helm语句
复制下来保存,并修改:
helm repo add gitlab https://charts.gitlab.io
helm repo update
helm upgrade --install kubernetes-agent gitlab/gitlab-agent \
    --namespace gitlab-agent-kubernetes-agent \
    --create-namespace \
    --set image.tag=v16.9.2 \
    --set config.token=glagent-qYhbYp-oE-Uhk4dNyESxJaVSbDff7_66quVfqRnxaoj17BLAEg \
    --set config.kasAddress=ws://gitlab-5d568c5b-767tk/-/kubernetes-agent/
修改后:
helm repo add gitlab https://charts.gitlab.io
helm repo update
helm install gitlab-agent --generate-name \
    --namespace gitlab-ci \
    --set config.token=glagent-qYhbYp-oE-Uhk4dNyESxJaVSbDff7_66quVfqRnxaoj17BLAEg \
    --set config.kasAddress=ws://192.168.100.20:30880/-/kubernetes-agent/
    
去master节点部署
[root@k8s-master-node1 gitlab-agent]# cd ../		《《 这一步必须做,切换至agent的上一级
[root@k8s-master-node1 CIDI-Runner]# helm install gitlab-agent --generate-name \
>     --namespace gitlab-ci \
>     --set config.token=glagent-qYhbYp-oE-Uhk4dNyESxJaVSbDff7_66quVfqRnxaoj17BLAEg \
>     --set config.kasAddress=ws://192.168.100.20:30880/-/kubernetes-agent/
NAME: gitlab-agent-1709756343
LAST DEPLOYED: Thu Mar  7 04:19:03 2024
NAMESPACE: gitlab-ci
STATUS: deployed
REVISION: 1
TEST SUITE: None


验证
[root@k8s-master-node1 CIDI-Runner]# kubectl get pod -A | grep gitlab-agent-
gitlab-ci      gitlab-agent-1709756343-ff779d7bb-lxrnk    1/1     Running       0              61s

在这里插入图片描述

本题完成

【题目 9】2.2.9 构建 CI/CD [2 分]

编写流水线脚本触发自动构建,要求基于 GitLab 项目完成代码的编译、镜像的构建与推送,并自动发布应用到 Kubernetes 集群中。

编写流水线脚本.gitlab-ci.yml 触发自动构建,具体要求如下:
(1) 基于镜像 maven:3.6-jdk-8 构建项目的 drone 分支;
(2) 构建镜像的名称:demo:latest;
(3) 将镜像推送到 Harbor 仓库 demo 项目中;
(4) 将 demo-2048 应用自动发布到Kubernetes 集群 gitlab-ci 命名空间下。
完成后提交 Master 节点的用户名、密码和 IP 地址到答题框。(需要用到的软件包:CICD-Runner.tar.gz)

确保harboar仓库正常,使用$masterIP访问,账号:admin,密码:Harbor12345
答:
进入demo-2048项目
1.切换至drone分支【默认处于master分支】
点击master就可以看到master和drone分支,点击drone切换
切换过来后,会发现一个template文件夹,里面有【demo-2048.yaml】和【service.yaml】
将其修改为如下:(其实就改了一行)

【demo-2048.yaml】
kind: Deployment
apiVersion: apps/v1
metadata:
  name: demo-2048
  namespace: gitlab-ci
  labels:
    app: demo-2048
    name: demo-2048
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo-2048
      name: demo-2048
  template:
    metadata:
      labels:
        app: demo-2048
        name: demo-2048
    spec:
      containers:
        - name: demo-2048
          image: 192.168.100.20/demo/demo:latest	《《《 把这里改成harbor仓库的地址
          ports:
            - containerPort: 8080
              protocol: TCP
          resources:
            limits:
              cpu: 128m
              memory: 256Mi
            requests:
              cpu: 128m
              memory: 128Mi
          imagePullPolicy: IfNotPresent
      restartPolicy: Always
      imagePullSecrets:
        - name: harbor

【service.yaml】
kind: Service
apiVersion: v1
metadata: 
  name: demo-2048
  namespace: gitlab-ci
spec:
  ports:
  - name: web
    port: 8080
    targetPort: 8080
  selector:
    app: demo-2048
    name: demo-2048

2,修改Dockerfile
修改为如下:

首先新建文件夹,Dockerfiles
在Dockerfiles下新建文件Dockerfile
内容如下:
FROM 192.168.100.20/library/tomcat:8.5.64-jdk8
RUN rm -rf /usr/local/tomcat/webapps/ROOT/
ADD demo-2048 /usr/local/tomcat/webapps/ROOT/

3,去harbor仓库创建项目demo
点击【新建】-> 【公开】->【确定】
4,开始编写流水线
在drone分支下创建.gitlab.ci.yml
基本内容如下:(目前会报错,等后面学多了再改吧)

variables:
# MAVEN_OPTS    指定本地缓存目录【我们之前在 gitlab-Runner 设置的】
    MAVEN_OPTS: "-Dmaven.repo.local=/home/gitlab-runner/ci-build-cache/.m2/repository"
stages:
    - project_build
    - image_build
    - deploy
# 项目构建
project_build:
# job 名称
    image: maven:3.6-jdk-8
    # 关联的阶段名称
    stage: project_build
    # Gitlab Runner 的tag 可以在流水线上指定哪个runner
    tags:
        - k8s-runner
    script:
        - pwd
        # 需要拉取依赖,因此需要能上网的条件
        - echo 'nameservice 10.10.1.2' >> /etc/resolv.conf
        - echo 'nameservice 114.114.114.114' >> /etc/resolv.conf
        # 执行构建脚本
        - mvn package install -B -DskipTests
        - ls target
        - jar -xf target/demo-2048.war
        - cp -rvf target /home/gitlab-runner/ci-build-cache/
        # 任务一 到此结束
image_build:
    stage: image_build
    # 看自己的docker版本
    image: docker:18.09.7
    tags:
        - k8s-runner
    variables:
        DOCKER_DRIVER: overlay2
    services:
        - name: docker:18.09.7-dind
          entrypoint: ["dockerd-entrypoint.sh"]
          command: ["--insecure-registry","192.168.100.20"]
    script:
        - echo 'Harbor12345' > password.txt
        - cat password.txt | docker login -u admin --password-stdin 192.168.100.20
        - mv Dockerfiles/Dockerfile
        - ls /home/gitlab-runner/ci-build-cache/
        # 最后面那个点的意思是 指定拉取到当前目录
        - cp -rvf /home/gitlab-runner/ci-build-cache/target/demo-2048 .
        - docker build -t demo:latest .
        - docker tag demo:latest 192.168.100.20/demo/demo:latest
        - docker push 192.168.100.20/demo/demo:latest
# 部署
deploy:
    image: bitnami/kubectl:1.22.1
    stage: deploy
    tags:
        - k8s-runner
    script:
        - kubectl apply -f template/demo-2048.yaml
        - kubectl apply -f template/service.yaml


5,改错过程

点 build -> Pipelines
*************************************************************
第一个错误
fatal: unable to access 'http://gitlab-5d568c5b-w4j2p/root/demo-2048.git/': Could not resolve host: gitlab-5d568c5b-w4j2p
*************************************************************
解决:因为域名解析问题,我们进入gitlab容器里,直接修改为我们的gitlab地址
[root@k8s-master-node1 ~]# kubectl get pod -n gitlab-ci
NAME                                      READY   STATUS    RESTARTS   AGE
gitlab-5d568c5b-w4j2p                     1/1     Running   0          90m
gitlab-agent-1709806296-b7d858848-z8js7   1/1     Running   0          83m
gitlab-runner-55888d6999-nxl2z            1/1     Running   0          84m
[root@k8s-master-node1 ~]# kubectl exec -it -n gitlab-ci gitlab-5d568c5b-w4j2p /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@gitlab-5d568c5b-w4j2p:/# find /opt/* -name gitlab.yml
/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

修改这里:
	......
production: &base
  #
  # 1. GitLab app settings
  # ==========================

  ## GitLab settings
  gitlab:
    ## Web server settings (note: host is the FQDN, do not include http://)
    host: 192.168.100.20
    port: 30880
    https: false
    ......
保存退出,然后重启【gitlab可能会报502,不用担心,等会就好了】
root@gitlab-5d568c5b-w4j2p:/# gitlab-ctl restart
ok: run: alertmanager: (pid 6702) 0s
ok: run: gitaly: (pid 6712) 0s
ok: run: gitlab-exporter: (pid 6731) 0s
ok: run: gitlab-kas: (pid 6745) 0s
ok: run: gitlab-workhorse: (pid 6756) 1s
ok: run: logrotate: (pid 6767) 0s
ok: run: nginx: (pid 6774) 1s
ok: run: postgres-exporter: (pid 6782) 0s
ok: run: postgresql: (pid 6792) 0s
ok: run: prometheus: (pid 6801) 1s
ok: run: puma: (pid 6818) 1s
ok: run: redis: (pid 6823) 0s
ok: run: redis-exporter: (pid 6830) 1s
ok: run: sidekiq: (pid 6842) 0s
ok: run: sshd: (pid 6848) 1s
root@gitlab-5d568c5b-w4j2p:/# 

*************************************************************
第二个报错:
[ERROR] Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-resources-plugin:jar:2.6: Could not transfer artifact org.apache.maven.plugins:maven-resources-plugin:pom:2.6 from/to central (https://repo.maven.apache.org/maven2): Transfer failed for https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom: Unknown host repo.maven.apache.org: Temporary failure in name resolution -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException
Cleaning up project directory and file based variables
00:01
主栏显示:ERROR: Job failed: command terminated with exit code 1
*************************************************************
解决:
应该是:
- echo 'nameserver 10.10.1.2' >> /etc/resolv.conf
- echo 'nameserver 114.114.114.114' >> /etc/resolv.conf
我写的是:
- echo 'nameservice 10.10.1.2' >> /etc/resolv.conf
- echo 'nameservice 114.114.114.114' >> /etc/resolv.conf

*************************************************************
第三个报错
[ERROR] Failed to execute goal on project 2048: Could not resolve dependencies for project com.mycompany.app:2048:war:1.0-SNAPSHOT: Could not transfer artifact com.google.code.gson:gson:jar:2.3.1 from/to central (https://repo.maven.apache.org/maven2): Transfer failed for https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.3.1/gson-2.3.1.jar: Connect to repo.maven.apache.org:443 [repo.maven.apache.org/146.75.112.215] failed: Connection refused (Connection refused) -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
Cleaning up project directory and file based variables
00:01
ERROR: Job failed: command terminated with exit code 1
*************************************************************

持久化存储也没有部署成功

[root@k8s-master-node1 ~]# ls /opt/cache/
ls: cannot access /opt/cache/: No such file or directory

虽然依然报错,但是到这里是对流水线的理解,应该继续往下走

【题目 10】2.2.10 服务网格:创建 VirtualService [1 分]

将 Bookinfo 应用部署到 default 命名空间下,为 Bookinfo 应用创建一个名为reviews 的 VirtualService,要求来自名为 Jason 的用户的所有流量将被路由到 reviews 服务的 v2 版本。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:ServiceMesh.tar.gz)

实验环境:运行中的 Kubernetes 集群,Istio 已经被正确安装
这个题要确定在搭建过程中istio部署成功,且启用自动注入 Envoy 代理作为 Sidecar
答:
1,上传镜像

[root@k8s-master-node1 ServiceMesh]# cd images/
[root@k8s-master-node1 images]# ls
A_readme.txt                            istio_examples-bookinfo-details-v1.tar      istio_examples-bookinfo-ratings-v1.tar  istio_examples-helloworld-v1.tar  kennethreitz_httpbin.tar
busybox.tar                             istio_examples-bookinfo-details-v2.tar      istio_examples-bookinfo-ratings-v2.tar  istio_examples-helloworld-v2.tar  load_images.sh
curlimages_curl.tar                     istio_examples-bookinfo-mongodb.tar         istio_examples-bookinfo-reviews-v1.tar  istio_health.tar                  redis.tar
fortio.tar                              istio_examples-bookinfo-mysqldb.tar         istio_examples-bookinfo-reviews-v2.tar  istio_jwt-server.tar
hiroakis_tornado-websocket-example.tar  istio_examples-bookinfo-productpage-v1.tar  istio_examples-bookinfo-reviews-v3.tar  istio_tcp-echo-server.tar
[root@k8s-master-node1 images]# cat A_readme.txt 
第一步:
chmod +x load_images.sh
第二步:
./load_images.sh

[root@k8s-master-node1 images]# chmod +x load_images.sh
[root@k8s-master-node1 images]# ./load_images.sh
Loading image: busybox.tar
  ......
All images loaded successfully.

2,部署 Bookinfo 应用

[root@k8s-master-node1 images]# cd /root/ServiceMesh/bookinfo/
[root@k8s-master-node1 bookinfo]# kubectl apply -f bookinfo.yaml
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created

3,为 Bookinfo 应用创建 VirtualService

[root@k8s-master-node1 bookinfo]# vi virtual-service.yaml
[root@k8s-master-node1 bookinfo]# cat virtual-service.yaml 
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
  namespace: default
spec:
  hosts:
  - reviews
  http:
  - match:
    - headers:
        end-user:
          exact: Jason
    route:
    - destination:
        host: reviews
        subset: v2
在这个 YAML 文件中,定义了一个 VirtualService,它指定了当请求的 header 中包含 end-user: Jason 时,流量将被路由到 reviews 服务的 v2 版本。    

应用配置
[root@k8s-master-node1 bookinfo]# kubectl apply -f virtual-service.yaml 
virtualservice.networking.istio.io/reviews created    

4,验证

[root@k8s-master-node1 bookinfo]# kubectl get virtualservices
NAME      GATEWAYS   HOSTS         AGE
reviews              ["reviews"]   29s

[root@k8s-master-node1 bookinfo]# kubectl describe virtualservices reviews 
Name:         reviews
Namespace:    default
Labels:       <none>
Annotations:  <none>
API Version:  networking.istio.io/v1beta1
Kind:         VirtualService
Metadata:
  Creation Timestamp:  2024-03-08T14:49:24Z
  Generation:          1
  Managed Fields:
    API Version:  networking.istio.io/v1alpha3
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .:
          f:kubectl.kubernetes.io/last-applied-configuration:
      f:spec:
        .:
        f:hosts:
        f:http:
    Manager:         kubectl-client-side-apply
    Operation:       Update
    Time:            2024-03-08T14:49:24Z
  Resource Version:  7210
  UID:               3ceb5a2e-6843-4893-9df7-e2b7a8a50ef6
Spec:
  Hosts:
    reviews
  Http:
    Match:
      Headers:
        End - User:
          Exact:  Jason
    Route:
      Destination:
        Host:    reviews
        Subset:  v2
Events:          <none>

【题目 11】2.2.11 KubeVirt 运维:创建 VMI [1 分]

使用提供的镜像在default 命名空间下创建一台VMI,名称为exam,指定VMI 的内存、CPU、网卡和磁盘等配置,并开启 Sidecar 注入。

将提供的镜像 cirros-0.5.2-x86_64-disk.img 转换为 docker 镜像 cirros:v1.0,然后使用镜像 cirros:v1.0 镜像在 default 命名空间下创建一台 vmi,名称为 vmi-cirros,内存为 1024M。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。

1,转换镜像

1.1,编写dockerfile
[root@k8s-master-node1 ~]# ls
anaconda-ks.cfg  chinaskills_cloud_paas_v2.0.2.iso  cirros-0.5.2-x86_64-disk.img
[root@k8s-master-node1 ~]# vi Dockerfile
[root@k8s-master-node1 ~]# cat Dockerfile 
FROM scratch
ADD cirros-0.5.2-x86_64-disk.img /
CMD ["/bin/sh"]

1.2,构建
[root@k8s-master-node1 ~]# docker build -t cirros:v1.0 .
Sending build context to Docker daemon  2.932GB
Step 1/3 : FROM scratch
 ---> 
Step 2/3 : ADD cirros-0.5.2-x86_64-disk.img /
 ---> e796b38a877f
Step 3/3 : CMD ["/bin/sh"]
 ---> Running in ac1b3925fc11
Removing intermediate container ac1b3925fc11
 ---> 3d7c8dac94a2
Successfully built 3d7c8dac94a2
Successfully tagged cirros:v1.0

2,在 default 命名空间下创建 VMI

先检查有无正确安装和配置 KubeVirt
[root@k8s-master-node1 ~]# kubectl get crd | grep kubevirt.io
kubevirts.kubevirt.io                                 2024-03-08T12:31:57Z
virtualmachineclusterflavors.flavor.kubevirt.io       2024-03-08T12:32:22Z
virtualmachineflavors.flavor.kubevirt.io              2024-03-08T12:32:22Z
virtualmachineinstancemigrations.kubevirt.io          2024-03-08T12:32:22Z
virtualmachineinstancepresets.kubevirt.io             2024-03-08T12:32:22Z
virtualmachineinstancereplicasets.kubevirt.io         2024-03-08T12:32:22Z
virtualmachineinstances.kubevirt.io                   2024-03-08T12:32:22Z
virtualmachinerestores.snapshot.kubevirt.io           2024-03-08T12:32:22Z
virtualmachines.kubevirt.io                           2024-03-08T12:32:22Z
virtualmachinesnapshotcontents.snapshot.kubevirt.io   2024-03-08T12:32:22Z
virtualmachinesnapshots.snapshot.kubevirt.io          2024-03-08T12:32:22Z

编写yaml
[root@k8s-master-node1 ~]# vi exam.yaml                             
[root@k8s-master-node1 ~]# cat exam.yaml 
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachineInstance
metadata:
  name: vmi-cirros
spec:
  domain:
    devices:
      disks:
        - name: containerdisk  # 确保这里的 name 与下面 volumes 部分中的 name 相匹配
          disk:
            bus: virtio
    resources:
      requests:
        memory: 1024M
        cpu: 1
  volumes:
    - name: containerdisk  # 这个 name 与上面 disks 部分中的 name 相匹配
      containerDisk:
        image: cirros:v1.0

创建
[root@k8s-master-node1 ~]# kubectl create -f exam.yaml 
virtualmachineinstance.kubevirt.io/vmi-cirros created

验证(因为他是在调度阶段(Scheduling),所以显示False)
[root@k8s-master-node1 ~]# kubectl get vmi
NAME         AGE   PHASE        IP    NODENAME   READY
vmi-cirros   7s    Scheduling                    False

如果一直调度
1,查看 VMI 相关的事件
kubectl describe vmi vim-cirros

2,检查资源是否足够

【题目 12】2.2.12 容器云平台优化:使用审计日志[2 分]

启用审计日志可以帮助集群管理员快速的定位问题。

请启用Kubernetes 集群的审计日志,要求以JSON 格式保存审计日志并输出到/etc/kubernetes/audit- logs/audit.log 文件中,日志最多保留 10 天,单个日志文件不超过 500M。然后编写审计策略文件/etc/kubernetes/audit-policy/policy.yaml,要求在日志中用RequestResponse 级别记录 Pod 变化,并记录 kube-system 中 ConfigMap 变更的请求消息体。
完成后提交 master 节点的用户名、密码和 IP 地址到答题框。

答:
1,编辑kube-apiserver的配置,添加审计日志相关的启动参数

spec:
  containers:
  - command:
    - kube-apiserver
************************添加下面五个********************************************
    - --audit-log-path=/etc/kubernetes/audit-logs/audit.log
    - --audit-log-maxage=10
    - --audit-log-maxbackup=10
    - --audit-log-maxsize=500
    - --audit-policy-file=/etc/kubernetes/audit-policy/policy.yaml
******************************************************************************
    - --advertise-address=192.168.100.20
    - --allow-privileged=true
    - --authorization-mode=Node,RBAC
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
    - --enable-admission-plugins=NodeRestriction

参数解释:
--audit-log-path指定审计日志的输出路径。
--audit-log-maxage定义保留旧审计日志文件的最长天数。
--audit-log-maxbackup定义审计日志文件的最大备份数量。
--audit-log-maxsize定义每个审计日志文件的最大大小(以MB为单位)。
--audit-policy-file指定审计策略文件的路径。

2,创建并编辑审计策略文件

虽然没有Policy的资源,但是role的模板比较接近
创建一个文件夹
[root@k8s-master-node1 ~]# mkdir /etc/kubernetes/audit-policy
***************
原始模板:
***************
[root@k8s-master-node1 ~]# kubectl create role dddd --verb=get,list,watch --resource=pods --dry-run=client -o yaml > /etc/kubernetes/audit-policy/policy.yaml   
[root@k8s-master-node1 ~]# cat /etc/kubernetes/audit-policy/policy.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  creationTimestamp: null
  name: dddd
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - watch

***************
修改后:
***************
[root@k8s-master-node1 ~]# vi /etc/kubernetes/audit-policy/policy.yaml                                                                                       
[root@k8s-master-node1 ~]# cat /etc/kubernetes/audit-policy/policy.yaml                                                                                      
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: RequestResponse
  resources:
  - group: ""
    resources: ["pods"]
- level: Request
  resources:
  - group: ""
    resources: ["configmaps"]
    namespaces: ["kube-system"]

3,验证
3.1,等待kube-apiserver重新启动
修改kube-apiserver配置后,Kubernetes会自动检测到变化并重启apiserver以应用新的配置。
3.2,验证审计日志文件:检查/etc/kubernetes/audit-logs/audit.log文件是否存在,以及是否正在记录审计事件。

ls /etc/kubernetes/audit-logs/
cat /etc/kubernetes/audit-logs/audit.log

3.3,检查Pod和ConfigMap相关的审计记录:可以通过搜索日志文件来验证是否正确记录了Pod变化和kube-system中ConfigMap变更的请求。

grep "pods" /etc/kubernetes/audit-logs/audit.log
grep "configmaps" /etc/kubernetes/audit-logs/audit.log

【题目 13】2.2.13 容器云平台排错:容器引擎报错[1.5 分]

使用赛项提供的 chinaskill-k8s-error01 镜像创建一台云主机(云主机的登录用户名为 root,密码为 Abc@1234),该云主机中存在错误的容器服务,错误现象为无法正常使用 crictl ps -l 命令,请修复容器服务。修复完成后提交该云主机的用户名、密码和 IP 地址到答题框。

无环境

【题目 14】2.2.14 容器云平台排错:DNS 服务报错[1.5 分]

使用赛项提供的 chinaskill-k8s-error01 镜像创建一台云主机(云主机的登录用户名为 root,密码为 Abc@1234),该云主机中存在错误的 DNS 服务,错误现象为coredns 一直处于 CrashLoopBackOff 状态,请修复 CoreDNS 服务,并将并发上限更改为 5000。修复完成后提交该云主机的用户名、密码和 IP 地址到答题框。

无环境

最后

访问 controller的ip/dashboard即可访问到openstack界面
而且配置了免域名,使用admin/000000即可登陆

欢迎大家来一起交流和交换资源

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值